diff --git a/.babelrc b/.babelrc index e972806f6..cd62dbd97 100644 --- a/.babelrc +++ b/.babelrc @@ -1,28 +1,31 @@ { - "presets": [ - [ - "@babel/preset-env", - { - "debug": false, - "targets": { - "node": "current", - "electron": "3.0" - } - } + "presets": [ + [ + "@babel/preset-env", + { + "useBuiltIns": "usage", + "corejs": 3 + } + ], + [ + "@babel/preset-react", + { + "debug": false, + "targets": { + "node": "current", + "electron": "current" + } + } + ], + [ + "@babel/preset-typescript" + ] ], - [ - "@babel/preset-react", - { - "debug": false, - "targets": { - "node": "current", - "electron": "3.0" - } - } + "plugins": [ + "@babel/plugin-transform-runtime", + "@babel/plugin-transform-async-to-generator", + "@babel/plugin-transform-arrow-functions", + "@babel/plugin-proposal-object-rest-spread", + "@babel/plugin-proposal-class-properties" ] - ], - "plugins": [ - "@babel/plugin-proposal-class-properties", - "@babel/plugin-syntax-dynamic-import" - ] -} +} \ No newline at end of file diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 000000000..cccf81307 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,11 @@ +# https://editorconfig.org +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_size = 2 +indent_style = space +insert_final_newline = true +max_line_length = 130 +trim_trailing_whitespace = true diff --git a/.eslintrc.js b/.eslintrc.js index 37f9a8d1d..b3164ad1d 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,62 +1,57 @@ module.exports = { + env: { + browser: true, + es6: true, + node: true, + }, + plugins: ["import", "react", "prettier"], extends: [ - "prettier", "eslint:recommended", + "plugin:@typescript-eslint/eslint-recommended", + "plugin:@typescript-eslint/recommended", + "plugin:import/recommended", + "plugin:import/electron", + "plugin:import/typescript", "plugin:react/recommended", - "plugin:prettier/recommended", - "plugin:react-hooks/recommended" + "plugin:react-hooks/recommended", + "airbnb", + "airbnb/hooks", + "airbnb-typescript", + "prettier", ], - plugins: ["prettier"], - parser: "@babel/eslint-parser", parserOptions: { - ecmaVersion: 2017, - sourceType: "module" - }, - env: { - es6: true, - browser: true, - node: true - }, - globals: { - __static: true - }, - rules: { - "no-console": 0, - "react/prop-types": 0, - "no-unused-vars": 0, // disabled due to false positives - "no-async-promise-executor": 0, // grandfathered in during eslint update; would be nice to remove - "no-prototype-builtins": 0, // grandfathered in during eslint update; would be nice to remove - // React hook settings for future use if required (helpful during some debug sessions) - // "react-hooks/rules-of-hooks": "error", - // "react-hooks/exhaustive-deps": "warn", - // Added to allow an update to prettier 2.x.x without actually making anything pretty - "prettier/prettier": [ - "error", - { - trailingComma: "none", - arrowParens: "avoid", - tabWidth: 2, - endOfLine: "auto", - printWidth: 130 - } - ] + parser: "@typescript-eslint/parser", + project: "./tsconfig.json", + tsconfigRootDir: __dirname, }, settings: { + "import/parsers": { + "@typescript-eslint/parser": [".ts", ".tsx"], + }, react: { - pragma: "React", // Pragma to use, default to "React" - version: "detect" // React version. "detect" automatically picks the version you have installed. - // You can also use `16.0`, `16.3`, etc, if you want to override the detected value. + version: "detect", }, - propWrapperFunctions: [ - // The names of any function used to wrap propTypes, e.g. `forbidExtraProps`. If this isn't set, any propTypes wrapped in a function will be skipped. - "forbidExtraProps", - { property: "freeze", object: "Object" }, - { property: "myFavoriteWrapper" } - ], - linkComponents: [ - // Components used as alternatives to for linking, eg. - "Hyperlink", - { name: "Link", linkAttribute: "to" } - ] - } + "import/resolver": { + typescript: { + project: ".", + }, + alias: { + map: [ + ["@Assets", "./src/static"], + ["@Renderer", "./src/renderer"], + ["@Types", "./src/renderer/types"], + ], + extensions: [".ts", ".js", ".jsx", ".tsx", ".json"], + }, + }, + }, + rules: { + "prettier/prettier": ["error"], + "import/no-extraneous-dependencies": ["error", { devDependencies: true }], + "no-underscore-dangle": "off", // we should not use _ in variables in any case + "react/require-default-props": "off", + "react/function-component-definition": "off", + "import/prefer-default-export": "off", + }, + ignorePatterns: ["/*", "!/src"], // we only care about linting src folder }; diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml deleted file mode 100644 index 06bb70f7d..000000000 --- a/.github/workflows/build.yaml +++ /dev/null @@ -1,69 +0,0 @@ -name: Build/release - -on: - push: - branches: - - development - pull_request: - branches: - - development - -jobs: - release: - runs-on: ${{ matrix.os }} - - strategy: - fail-fast: false - matrix: - include: - - os: macos-latest - gyp: "" - - os: windows-2019 - gyp: "" - - os: ubuntu-20.04 - gyp: use_udev=0 use_system_libusb=true - - steps: - - name: Check out Git repository - uses: actions/checkout@v3 - - - name: Install USB compilation dependencies - uses: lyricwulf/abc@v1 - with: - linux: build-essential libusb-1.0-0 libudev-dev libxtst-dev libxrandr-dev - - - name: Install Node.js, NPM and Yarn - uses: actions/setup-node@v3 - env: - GYP_DEFINES: ${{ matrix.gyp }} - NODE_OPTIONS: --max-old-space-size=1024 - with: - node-version: 16 - architecture: ${{ matrix.node }} - - - name: Build/release Electron app - env: - CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }} - CSC_LINK: ${{ secrets.CSC_LINK }} - WIN_CSC_LINK: ${{ secrets.WIN_CSC_LINK }} - WIN_CSC_KEY_PASSWORD: ${{ secrets.WIN_CSC_KEY_PASSWORD }} - APPLEID: ${{ secrets.APPLEID }} - APPLEIDPASS: ${{ secrets.APPLEIDPASS }} - USE_HARD_LINKS: false - uses: coparse-inc/action-electron-builder@v1.0.0 - with: - # GitHub token, automatically provided to the action - # (No need to define this secret in the repo settings) - github_token: ${{ secrets.github_token }} - - # If the commit is tagged with a version (e.g. "v1.0.0"), - # release the app after building - release: ${{ startsWith(github.ref, 'refs/tags/v') }} - - name: Save Artifact - uses: "actions/upload-artifact@v3" - with: - name: Bazecor ${{ matrix.node-version }} - path: | - ${{ github.workspace }}/dist/*.exe - ${{ github.workspace }}/dist/*.AppImage - ${{ github.workspace }}/dist/*.dmg diff --git a/.github/workflows/e2e_testing.yml b/.github/workflows/e2e_testing.yml new file mode 100644 index 000000000..8cc8ace0c --- /dev/null +++ b/.github/workflows/e2e_testing.yml @@ -0,0 +1,50 @@ +name: E2E Tests +on: + push: + branches: + - "*" + - "!main" + - "!development" + pull_request: + branches: + - "*" + - "!main" + - "!development" +jobs: + e2e_test: + timeout-minutes: 60 + runs-on: ${{ matrix.os }} + + strategy: + fail-fast: false + matrix: + include: + - os: macos-12 + - os: windows-2019 + - os: ubuntu-20.04 + + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 18 + - run: npm install -g yarn + - if: runner.os == 'Linux' + run: sudo apt update && sudo apt install libudev-dev + - name: Cache node_modules + id: cache-node-modules + uses: actions/cache@v3 + with: + path: node_modules + key: ${{ runner.os }}-${{ hashFiles('package.json', 'yarn.lock') }} + - name: Install node_modules + if: steps.cache-node-modules.outputs.cache-hit != 'true' + run: yarn install --frozen-lockfile --network-timeout 300000 # sometimes yarn takes time, therefore, we increase the timeout + - name: Run Playwright tests + run: yarn playwright test + - uses: actions/upload-artifact@v3 + if: always() + with: + name: playwright-report + path: playwright-report/ + retention-days: 30 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 000000000..bb99c7f08 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,242 @@ +name: Release + +on: + push: + branches: + - "main" + pull_request: + branches: + - "main" + +permissions: + contents: read + +jobs: + testing: + runs-on: ${{ matrix.os }} + permissions: + contents: write # to be able to publish a GitHub release + issues: write # to be able to comment on released issues + pull-requests: write # to be able to comment on released pull requests + + strategy: + fail-fast: false + matrix: + include: + - os: macos-12 + - os: windows-2019 + - os: ubuntu-20.04 + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 18 + - run: npm install -g yarn + - if: runner.os == 'Linux' + run: sudo apt update && sudo apt install libudev-dev + - name: Cache node_modules + id: cache-node-modules + uses: actions/cache@v3 + with: + path: node_modules + key: ${{ runner.os }}-${{ hashFiles('package.json', 'yarn.lock') }} + - name: Install node_modules + if: steps.cache-node-modules.outputs.cache-hit != 'true' + run: yarn install --frozen-lockfile --network-timeout 300000 # sometimes yarn takes time, therefore, we increase the timeout + - run: yarn run test + + build: + runs-on: ${{ matrix.os }} + needs: [testing] + permissions: + contents: write # to be able to publish a GitHub release + issues: write # to be able to comment on released issues + pull-requests: write # to be able to comment on released pull requests + + strategy: + fail-fast: false + matrix: + include: + - os: macos-12 + - os: windows-2019 + - os: ubuntu-20.04 + + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 18 + - run: npm install -g yarn + - if: runner.os == 'Linux' + run: sudo apt update && sudo apt install libudev-dev + - if: runner.os == 'Windows' + name: Set up Java + uses: actions/setup-java@v3 + with: + distribution: "temurin" + java-version: "17" + - if: runner.os == 'Windows' + name: Get JSign + shell: bash + run: | + JAR_URL="https://github.com/ebourg/jsign/releases/download/5.0/jsign-5.0.jar" + curl -L -o jsign.jar $JAR_URL + mkdir windows_signing + cp jsign.jar windows_signing/jsign.jar + - if: runner.os == 'Windows' + name: Setup GCloud Auth + uses: "google-github-actions/auth@v1" + with: + credentials_json: "${{ secrets.GCP_SIGNER_SERVICE_ACCOUNT }}" + - if: runner.os == 'Windows' + name: "Set up GCloud SDK" + uses: "google-github-actions/setup-gcloud@v1" + with: + version: ">= 416.0.0" + - name: Cache node_modules + id: cache-node-modules + uses: actions/cache@v3 + with: + path: node_modules + key: ${{ runner.os }}-${{ hashFiles('package.json', 'yarn.lock') }} + - name: Install node_modules + if: steps.cache-node-modules.outputs.cache-hit != 'true' + run: yarn install --frozen-lockfile --network-timeout 300000 # sometimes yarn takes time, therefore, we increase the timeout + - if: runner.os == 'macOS' + name: Setup Apple certificates + env: + APPLE_INSTALLER_CERT_BASE64: ${{ secrets.APPLE_INSTALLER_CERT_BASE64 }} + APPLE_APPLICATION_CERT_BASE64: ${{ secrets.APPLE_APPLICATION_CERT_BASE64 }} + APPLE_CERT_PASSWORD: ${{ secrets.APPLE_CERT_PASSWORD }} + APPLE_KEYCHAIN_PASSWORD: ${{ secrets.APPLE_KEYCHAIN_PASSWORD }} + run: | + APPLE_INSTALLER_CERT_PATH=$RUNNER_TEMP/apple_installer.p12 + APPLE_APPLICATION_CERT_PATH=$RUNNER_TEMP/apple_application.p12 + KEYCHAIN_PATH=$RUNNER_TEMP/apple-signing.keychain-db + # create certificates from base64 + echo -n "$APPLE_INSTALLER_CERT_BASE64" | base64 --decode -o $APPLE_INSTALLER_CERT_PATH + echo -n "$APPLE_APPLICATION_CERT_BASE64" | base64 --decode -o $APPLE_APPLICATION_CERT_PATH + # create keychain stuff + security create-keychain -p "$APPLE_KEYCHAIN_PASSWORD" $KEYCHAIN_PATH + security set-keychain-settings -lut 21600 $KEYCHAIN_PATH + security unlock-keychain -p "$APPLE_KEYCHAIN_PASSWORD" $KEYCHAIN_PATH + #import certificates + echo "Importing installer cert" + security import $APPLE_INSTALLER_CERT_PATH -P "$APPLE_CERT_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH + echo "Importing application cert" + security import $APPLE_APPLICATION_CERT_PATH -P "$APPLE_CERT_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH + security list-keychain -d user -s $KEYCHAIN_PATH + # - run: yarn run lint + - if: runner.os == 'macOS' + name: Build for MacOS Intel + env: + APPLE_ID: ${{ secrets.APPLEID }} + APPLE_ID_PASSWORD: ${{ secrets.APPLEIDPASS }} + APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} + run: yarn run make-mac-intel + - if: runner.os == 'macOS' + name: Build for MacOS Arm + env: + APPLE_ID: ${{ secrets.APPLEID }} + APPLE_ID_PASSWORD: ${{ secrets.APPLEIDPASS }} + APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} + run: yarn run make-mac-arm + - if: runner.os != 'macOS' + name: Build for Linux/Windows + run: yarn run make + - if: runner.os == 'Windows' + shell: bash + name: Get executable into signing folder + # we replace empty spaces in the filename with - + run: | + find out/make -type f -name '*.exe' -exec bash -c 'mv "$1" "${1// /-}"' _ {} \; + find out/make -type f -name '*.exe' -exec cp -v {} windows_signing \; + - if: runner.os == 'Windows' + name: Sign executable + shell: bash + run: | + cd windows_signing + echo "${{ secrets.DIGICERT_CERT_BASE64}}" | base64 --decode > dygma_cert.pem + ls -R . + EXE_FILE=$(find . -type f -name '*.exe' -exec basename {} \; 2>/dev/null | head -n 1) + echo "Found .exe file:" + echo $EXE_FILE + java -jar jsign.jar --storetype GOOGLECLOUD --storepass "$(gcloud auth print-access-token)" \ + --keystore "${{ secrets.GCP_KEYSTORE }}" --alias "${{ secrets.GCP_WINDOWS_SIGNING_KEY }}" \ + --certfile "dygma_cert.pem" --tsmode RFC3161 --tsaurl http://timestamp.digicert.com $EXE_FILE + cd .. + - name: Upload build + uses: actions/upload-artifact@v3 + with: + name: artifacts + path: | + out/make/**/*.dmg + out/make/**/*.AppImage + windows_signing/**/*.exe + + - name: Show build items + if: runner.os != 'Windows' + run: | + ls -R out/make + + - name: Show build items + if: runner.os == 'Windows' + run: | + ls -R windows_signing + release: + # here we only download the previous artifacts and upload them with release name, just for clarification + needs: [build] + runs-on: ubuntu-20.04 + permissions: + contents: write # to be able to publish a GitHub release + issues: write # to be able to comment on released issues + pull-requests: write # to be able to comment on released pull requests + + strategy: + fail-fast: false + + steps: + - name: Setup Nodejs + uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 18 + - name: Cache node_modules + id: cache-node-modules + uses: actions/cache@v3 + with: + path: node_modules + key: release-${{ hashFiles('package.json', 'yarn.lock') }} + - name: Install node_modules # we do this so we can use semantic-release + if: steps.cache-node-modules.outputs.cache-hit != 'true' + run: yarn install --frozen-lockfile --network-timeout 300000 # sometimes yarn takes time, therefore, we increase the timeout + - uses: actions/download-artifact@v3 + with: + name: artifacts + path: ${{ github.workspace }}/artifacts + - name: Log downloaded artifacts + run: | + ls -R ${{ github.workspace }} + - name: Extract artifacts into dist folder + run: | + mkdir dist + find ${{ github.workspace }}/artifacts -name '*.exe' -exec cp -v {} ${{ github.workspace }}/dist \; + find ${{ github.workspace }}/artifacts -name '*.AppImage' -exec cp -v {} ${{ github.workspace }}/dist \; + find ${{ github.workspace }}/artifacts -name '*.dmg' -exec cp -v {} ${{ github.workspace }}/dist \; + + - name: Log dist folder + run: | + ls -R ${{ github.workspace}}/dist + - name: Upload release + uses: actions/upload-artifact@v3 + with: + name: release + path: ${{ github.workspace }}/dist + - name: Log workspace + run: | + ls -R ${{ github.workspace}} + + - name: Run semantic-release + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: npx semantic-release diff --git a/.github/workflows/staging.yml b/.github/workflows/staging.yml new file mode 100644 index 000000000..2f7017764 --- /dev/null +++ b/.github/workflows/staging.yml @@ -0,0 +1,182 @@ +name: Staging + +on: + push: + branches: + - "development" + pull_request: + branches: + - "development" + +permissions: + contents: read + +jobs: + testing: + runs-on: ${{ matrix.os }} + permissions: + contents: write # to be able to publish a GitHub release + issues: write # to be able to comment on released issues + pull-requests: write # to be able to comment on released pull requests + + strategy: + fail-fast: false + matrix: + include: + - os: macos-12 + - os: windows-2019 + - os: ubuntu-20.04 + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 18 + - run: npm install -g yarn + - if: runner.os == 'Linux' + run: sudo apt update && sudo apt install libudev-dev + - name: Cache node_modules + id: cache-node-modules + uses: actions/cache@v3 + with: + path: node_modules + key: ${{ runner.os }}-${{ hashFiles('package.json', 'yarn.lock') }} + - name: Install node_modules + if: steps.cache-node-modules.outputs.cache-hit != 'true' + run: yarn install --frozen-lockfile --network-timeout 300000 # sometimes yarn takes time, therefore, we increase the timeout + - run: yarn run test + + build: + runs-on: ${{ matrix.os }} + needs: [testing] + permissions: + contents: write # to be able to publish a GitHub release + issues: write # to be able to comment on released issues + pull-requests: write # to be able to comment on released pull requests + + strategy: + fail-fast: false + matrix: + include: + - os: macos-12 + - os: windows-2019 + - os: ubuntu-20.04 + + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 18 + - run: npm install -g yarn + - if: runner.os == 'Linux' + run: sudo apt update && sudo apt install libudev-dev + - if: runner.os == 'Windows' + name: Set up Java + uses: actions/setup-java@v3 + with: + distribution: "temurin" + java-version: "17" + - if: runner.os == 'Windows' + name: Get JSign + shell: bash + run: | + JAR_URL="https://github.com/ebourg/jsign/releases/download/5.0/jsign-5.0.jar" + curl -L -o jsign.jar $JAR_URL + mkdir windows_signing + cp jsign.jar windows_signing/jsign.jar + - if: runner.os == 'Windows' + name: Setup GCloud Auth + uses: "google-github-actions/auth@v1" + with: + credentials_json: "${{ secrets.GCP_SIGNER_SERVICE_ACCOUNT }}" + - if: runner.os == 'Windows' + name: "Set up GCloud SDK" + uses: "google-github-actions/setup-gcloud@v1" + with: + version: ">= 416.0.0" + - name: Cache node_modules + id: cache-node-modules + uses: actions/cache@v3 + with: + path: node_modules + key: ${{ runner.os }}-${{ hashFiles('package.json', 'yarn.lock') }} + - name: Install node_modules + if: steps.cache-node-modules.outputs.cache-hit != 'true' + run: yarn install --frozen-lockfile --network-timeout 300000 # sometimes yarn takes time, therefore, we increase the timeout + - if: runner.os == 'macOS' + name: Setup Apple certificates + env: + APPLE_INSTALLER_CERT_BASE64: ${{ secrets.APPLE_INSTALLER_CERT_BASE64 }} + APPLE_APPLICATION_CERT_BASE64: ${{ secrets.APPLE_APPLICATION_CERT_BASE64 }} + APPLE_CERT_PASSWORD: ${{ secrets.APPLE_CERT_PASSWORD }} + APPLE_KEYCHAIN_PASSWORD: ${{ secrets.APPLE_KEYCHAIN_PASSWORD }} + run: | + APPLE_INSTALLER_CERT_PATH=$RUNNER_TEMP/apple_installer.p12 + APPLE_APPLICATION_CERT_PATH=$RUNNER_TEMP/apple_application.p12 + KEYCHAIN_PATH=$RUNNER_TEMP/apple-signing.keychain-db + # create certificates from base64 + echo -n "$APPLE_INSTALLER_CERT_BASE64" | base64 --decode -o $APPLE_INSTALLER_CERT_PATH + echo -n "$APPLE_APPLICATION_CERT_BASE64" | base64 --decode -o $APPLE_APPLICATION_CERT_PATH + # create keychain stuff + security create-keychain -p "$APPLE_KEYCHAIN_PASSWORD" $KEYCHAIN_PATH + security set-keychain-settings -lut 21600 $KEYCHAIN_PATH + security unlock-keychain -p "$APPLE_KEYCHAIN_PASSWORD" $KEYCHAIN_PATH + #import certificates + echo "Importing installer cert" + security import $APPLE_INSTALLER_CERT_PATH -P "$APPLE_CERT_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH + echo "Importing application cert" + security import $APPLE_APPLICATION_CERT_PATH -P "$APPLE_CERT_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH + security list-keychain -d user -s $KEYCHAIN_PATH + # - run: yarn run lint + - if: runner.os == 'macOS' + name: Build for MacOS Intel + env: + APPLE_ID: ${{ secrets.APPLEID }} + APPLE_ID_PASSWORD: ${{ secrets.APPLEIDPASS }} + APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} + run: yarn run make-mac-intel + - if: runner.os == 'macOS' + name: Build for MacOS Arm + env: + APPLE_ID: ${{ secrets.APPLEID }} + APPLE_ID_PASSWORD: ${{ secrets.APPLEIDPASS }} + APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} + run: yarn run make-mac-arm + - if: runner.os != 'macOS' + name: Build for Linux/Windows + run: yarn run make + - if: runner.os != 'macOS' + name: Build for Linux/Windows + run: yarn run make + - if: runner.os == 'Windows' + shell: bash + name: Get executable into signing folder + # we replace empty spaces in the filename with - + run: | + find out/make -type f -name '*.exe' -exec bash -c 'mv "$1" "${1// /-}"' _ {} \; + find out/make -type f -name '*.exe' -exec cp -v {} windows_signing \; + - if: runner.os == 'Windows' + name: Sign executable + shell: bash + run: | + cd windows_signing + echo "${{ secrets.DIGICERT_CERT_BASE64}}" | base64 --decode > dygma_cert.pem + ls -R . + EXE_FILE=$(find . -type f -name '*.exe' -exec basename {} \; 2>/dev/null | head -n 1) + echo "Found .exe file:" + echo $EXE_FILE + java -jar jsign.jar --storetype GOOGLECLOUD --storepass "$(gcloud auth print-access-token)" \ + --keystore "${{ secrets.GCP_KEYSTORE }}" --alias "${{ secrets.GCP_WINDOWS_SIGNING_KEY }}" \ + --certfile "dygma_cert.pem" --tsmode RFC3161 --tsaurl http://timestamp.digicert.com $EXE_FILE + cd .. + - name: Upload build + uses: actions/upload-artifact@v3 + with: + name: artifacts + path: | + out/make/**/*.dmg + out/make/**/*.AppImage + windows_signing/**/*.exe + + - name: Show build items + run: | + ls -R out/make diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml new file mode 100644 index 000000000..fb13117fd --- /dev/null +++ b/.github/workflows/testing.yml @@ -0,0 +1,45 @@ +name: Testing + +on: + push: + branches: + - "*" + - "!main" + - "!development" + pull_request: + branches: + - "*" + - "!main" + - "!development" + +jobs: + testing: + runs-on: ${{ matrix.os }} + + strategy: + fail-fast: false + matrix: + include: + - os: macos-12 + - os: windows-2019 + - os: ubuntu-20.04 + + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 18 + - run: npm install -g yarn + - if: runner.os == 'Linux' + run: sudo apt update && sudo apt install libudev-dev + - name: Cache node_modules + id: cache-node-modules + uses: actions/cache@v3 + with: + path: node_modules + key: ${{ runner.os }}-${{ hashFiles('package.json', 'yarn.lock') }} + - name: Install node_modules + if: steps.cache-node-modules.outputs.cache-hit != 'true' + run: yarn install --frozen-lockfile --network-timeout 300000 # sometimes yarn takes time, therefore, we increase the timeout + - run: yarn run test + # - run: yarn run lint diff --git a/.gitignore b/.gitignore index f12a797f9..0d84e1971 100644 --- a/.gitignore +++ b/.gitignore @@ -1,20 +1,31 @@ # Logs logs *.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json # Runtime data pids *.pid *.seed +*.pid.lock +.DS_Store +.swp # Directory for instrumented libs generated by jscoverage/JSCover lib-cov # Coverage directory used by tools like istanbul coverage +*.lcov -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt +# nyc test coverage +.nyc_output # Ignore WEBPACK configuration .webpack @@ -22,36 +33,74 @@ coverage # node-waf configuration .lock-wscript -# Compiled binary addons (http://nodejs.org/api/addons.html) +# Compiled binary addons (https://nodejs.org/api/addons.html) build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache .eslintcache -# Dependency directory -# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git -node_modules +# Optional REPL history +.node_repl_history -# OSX -.DS_Store +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test + +# parcel-bundler cache (https://parceljs.org/) +.cache + +# next.js build output +.next + +# nuxt.js build output +.nuxt + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# Webpack +.webpack/ + +# Vite +.vite/ + +# Electron-Forge +out/ -# App packaged -release -src/main.prod.js -src/main.prod.js.map -src/renderer.prod.js -src/renderer.prod.js.map -src/style.css -src/style.css.map +# old webpack output folder dist -dll -main.js -main.js.map +#editor's configuration +.vscode .idea -npm-debug.log.* -*.css.d.ts -*.sass.d.ts -*.scss.d.ts - -/yarn-error.log -/*.png -.DS_Store \ No newline at end of file +/test-results/ +/playwright-report/ +/playwright/.cache/ diff --git a/.husky/prepare-commit-msg b/.husky/prepare-commit-msg new file mode 100755 index 000000000..a9816d553 --- /dev/null +++ b/.husky/prepare-commit-msg @@ -0,0 +1,4 @@ +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + +test -t 1 && exec < /dev/tty && npx cz -s --hook || true \ No newline at end of file diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 0e40fe8f5..000000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ - -# Default ignored files -/workspace.xml \ No newline at end of file diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 000000000..2e1fa2d52 --- /dev/null +++ b/.prettierignore @@ -0,0 +1 @@ +*.md \ No newline at end of file diff --git a/.prettierrc.js b/.prettierrc.js index c9e61859c..6886997b5 100644 --- a/.prettierrc.js +++ b/.prettierrc.js @@ -1,8 +1,12 @@ -// .prettierrc.js module.exports = { - trailingComma: "none", + trailingComma: "all", arrowParens: "avoid", tabWidth: 2, + tabs: false, endOfLine: "auto", - printWidth: 130 + printWidth: 130, + bracketSpacing: true, + bracketSameLine: false, + semi: true, + singleQuote: false, }; diff --git a/.stylelintrc.json b/.stylelintrc.json deleted file mode 100644 index 1f309a32c..000000000 --- a/.stylelintrc.json +++ /dev/null @@ -1,46 +0,0 @@ -module.exports = { - extends: [ - "eslint:recommended", - "plugin:react/recommended", - "plugin:jsx-a11y/recommended", - "plugin:prettier/recommended" - ], - parser: "babel-eslint", - parserOptions: { - ecmaVersion: 2017, - sourceType: "module" - }, - env: { - es6: true, - browser: true, - node: true - }, - globals: { - __static: true - }, - rules: { - "no-console": 0, - "react/prop-types": 0, - "no-unused-vars": 0, // disabled due to false positives - "no-async-promise-executor": 0, // grandfathered in during eslint update; would be nice to remove - "no-prototype-builtins": 0 // grandfathered in during eslint update; would be nice to remove - }, - settings: { - react: { - pragma: "React", // Pragma to use, default to "React" - version: "detect" // React version. "detect" automatically picks the version you have installed. - // You can also use `16.0`, `16.3`, etc, if you want to override the detected value. - }, - propWrapperFunctions: [ - // The names of any function used to wrap propTypes, e.g. `forbidExtraProps`. If this isn't set, any propTypes wrapped in a function will be skipped. - "forbidExtraProps", - { property: "freeze", object: "Object" }, - { property: "myFavoriteWrapper" } - ], - linkComponents: [ - // Components used as alternatives to for linking, eg. - "Hyperlink", - { name: "Link", linkAttribute: "to" } - ] - } -}; \ No newline at end of file diff --git a/FOCUS_API.md b/FOCUS_API.md index b4cf0d7cc..35495b612 100644 --- a/FOCUS_API.md +++ b/FOCUS_API.md @@ -64,12 +64,18 @@ Commands to help you with the testing and settings of the raise's leds [led.at](#ledat) +[led.getMultiple](#ledgetmultiple) + +[led.setMultiple](#ledsetmultiple) + [led.setAll](#ledsetall) [led.mode](#ledmode) [led.brightness](#ledbrightness) +[led.brightnessUG](#ledbrightnessUG) + [led.theme](#ledtheme) **Colors Section** @@ -170,19 +176,31 @@ Returns the version of the Raise firmware stored in the keyboard's EEPROM #### Commands -JavaScript: `focus.command("version")` -Serial Command (Unix): `echo 'version' > /dev/ttyACM0` +- JavaScript: + ```js + focus.command("version") + ``` +- Serial Command (Unix): + ```shell + echo 'version' > /dev/ttyACM0 + ``` #### Expected output it should give back 3 strings, - Bazecor Version: -- `v0.2.5` + ```shell + '0.2.5' + ``` - Kaleidoscope's newest Git commit incorporated -- `6bd1f81e` + ```shell + '6bd1f81e' + ``` - Raise's Firmware newest Git commit -- `fe423ce-dirty` + ```shell + 'fe423ce-dirty' + ``` - Dirty here means it was custom-built with the makefile, not built automatically by Travis. ### keymap.custom @@ -195,15 +213,31 @@ To know the actual correlation between the position of the map sent and the actu To retrieve: -- JavaScript: `focus.command("keymap.custom")` -- Serial Command (Unix): `echo 'keymap.custom' > /dev/ttyACM0` +- JavaScript: + ```js + focus.command("keymap.custom") + ``` +- Serial Command (Unix): + ```shell + echo 'keymap.custom' > /dev/ttyACM0 + ``` To set: -- JavaScript: `focus.command("keymap.custom N N N N N N N N N N N N N N N")` -- Serial Command (Unix): `echo 'keymap.custom N N N N N N N N N N N N N N N' > /dev/ttyACM0` - -Being `N N N...` the 16bit numbers that represent each key assigned to that position of the keymap the numbers amount 80(keys per layer)x10(custom layers) +- JavaScript: + ```js + focus.command("keymap.custom N N N N N N N N N N N N N N N") + ``` +- Serial Command (Unix): + ```shell + echo 'keymap.custom N N N N N N N N N N N N N N N' > /dev/ttyACM0 + ``` + +Being +```shell + 'N N N...' +``` +the 16bit numbers that represent each key assigned to that position of the keymap the numbers amount 80(keys per layer)x10(custom layers) #### Expected output @@ -219,15 +253,31 @@ To know the actual correlation between the position of the map sent and the actu To retrieve: -- JavaScript: `focus.command("keymap.default")` -- Serial Command (Unix): `echo 'keymap.default' > /dev/ttyACM0` +- JavaScript: + ```js + focus.command("keymap.default") + ``` +- Serial Command (Unix): + ```shell + echo 'keymap.default' > /dev/ttyACM0 + ``` To set: -- JavaScript: `focus.command("keymap.default N N N N N N N N N N N N N N N")` -- Serial Command (Unix): `echo 'keymap.default N N N N N N N N N N N N N N N' > /dev/ttyACM0` - -Being `N N N...` the 16bit numbers that represent each key assigned to that position of the keymap the numbers amount 80(keys per layer)x2(default layers) +- JavaScript: + ```js + focus.command("keymap.default N N N N N N N N N N N N N N N") + ``` +- Serial Command (Unix): + ```shell + echo 'keymap.default N N N N N N N N N N N N N N N' > /dev/ttyACM0 + ``` + +Being +```shell + 'N N N...' +``` +the 16bit numbers that represent each key assigned to that position of the keymap the numbers amount 80(keys per layer)x2(default layers) #### Expected output @@ -241,13 +291,25 @@ This command returns true or false depending on the user setting of hiding the d To retrieve: -- JavaScript: `focus.command("keymap.onlyCustom")` -- Serial Command (Unix): `echo 'keymap.onlyCustom' > /dev/ttyACM0` +- JavaScript: + ```js + focus.command("keymap.onlyCustom") + ``` +- Serial Command (Unix): + ```shell + echo 'keymap.onlyCustom' > /dev/ttyACM0 + ``` To set: -- JavaScript: `focus.command("keymap.onlyCustom true")` -- Serial Command (Unix): `echo 'keymap.onlyCustom trure' > /dev/ttyACM0` +- JavaScript: + ```js + focus.command("keymap.onlyCustom true") + ``` +- Serial Command (Unix): + ```shell + echo 'keymap.onlyCustom trure' > /dev/ttyACM0 + ``` #### Expected output @@ -261,13 +323,25 @@ This command returns the default layer the keyboard will boot in, with this you To retrieve: -- JavaScript: `focus.command("keymap.defaultLayer")` -- Serial Command (Unix): `echo 'keymap.defaultLayer' > /dev/ttyACM0` +- JavaScript: + ```js + focus.command("keymap.defaultLayer") + ``` +- Serial Command (Unix): + ```shell + echo 'keymap.defaultLayer' > /dev/ttyACM0 + ``` To set: -- JavaScript: `focus.command("keymap.defaultLayer 1")` -- Serial Command (Unix): `echo 'keymap.defaultLayer 1' > /dev/ttyACM0` +- JavaScript: + ```js + focus.command("keymap.defaultLayer 1") + ``` +- Serial Command (Unix): + ```shell + echo 'keymap.defaultLayer 1' > /dev/ttyACM0 + ``` #### Expected output @@ -281,8 +355,14 @@ This command returns a boolean value that states true if all checks have been pe To retrieve: -- JavaScript: `focus.command("settings.valid")` -- Serial Command (Unix): `echo 'settings.valid' > /dev/ttyACM0` +- JavaScript: + ```js + focus.command("settings.valid") + ``` +- Serial Command (Unix): + ```shell + echo 'settings.valid' > /dev/ttyACM0 + ``` #### Expected output @@ -296,13 +376,25 @@ This command returns the current settings version, it allows Bazecor to identify To retrieve: -- JavaScript: `focus.command("settings.version")` -- Serial Command (Unix): `echo 'settings.version' > /dev/ttyACM0` +- JavaScript: + ```js + focus.command("settings.version") + ``` +- Serial Command (Unix): + ```shell + echo 'settings.version' > /dev/ttyACM0 + ``` To set: -- JavaScript: `focus.command("settings.version 1")` -- Serial Command (Unix): `echo 'settings.version 1' > /dev/ttyACM0` +- JavaScript: + ```js + focus.command("settings.version 1") + ``` +- Serial Command (Unix): + ```shell + echo 'settings.version 1' > /dev/ttyACM0 + ``` #### Expected output @@ -316,8 +408,14 @@ Returns the CRC checksum of the layout. To retrieve: -- JavaScript: `focus.command("settings.crc")` -- Serial Command (Unix): `echo 'settings.crc' > /dev/ttyACM0` +- JavaScript: + ```js + focus.command("settings.crc") + ``` +- Serial Command (Unix): + ```shell + echo 'settings.crc' > /dev/ttyACM0 + ``` #### Expected output @@ -331,13 +429,25 @@ This command returns the whole EEPROM contents. and allows you to send them in o To retrieve: -- JavaScript: `focus.command("eeprom.contents")` -- Serial Command (Unix): `echo 'eeprom.contents' > /dev/ttyACM0` +- JavaScript: + ```js + focus.command("eeprom.contents") + ``` +- Serial Command (Unix): + ```shell + echo 'eeprom.contents' > /dev/ttyACM0 + ``` To set: -- JavaScript: `focus.command("eeprom.contents NNNNNNNNNNNNN")` -- Serial Command (Unix): `echo 'eeprom.contents NNNNNNNNNNNN' > /dev/ttyACM0` +- JavaScript: + ```js + focus.command("eeprom.contents NNNNNNNNNNNNN") + ``` +- Serial Command (Unix): + ```shell + echo 'eeprom.contents NNNNNNNNNNNN' > /dev/ttyACM0 + ``` #### Expected output @@ -351,8 +461,14 @@ This command returns the remaining EEPROM bytes left. To retrieve: -- JavaScript: `focus.command("eeprom.free")` -- Serial Command (Unix): `echo 'eeprom.free' > /dev/ttyACM0` +- JavaScript: + ```js + focus.command("eeprom.free") + ``` +- Serial Command (Unix): + ```shell + echo 'eeprom.free' > /dev/ttyACM0 + ``` #### Expected output @@ -366,18 +482,86 @@ This command returns the color that an individual led has right now in RGB code, To retrieve: -- JavaScript: `focus.command("led.at 21")` -- Serial Command (Unix): `echo 'led.at 21' > /dev/ttyACM0` +- JavaScript: + ```js + focus.command("led.at 21") + ``` +- Serial Command (Unix): + ```shell + echo 'led.at 21' > /dev/ttyACM0 + ``` To set: -- JavaScript: `focus.command("led.at 21 3")` -- Serial Command (Unix): `echo 'led.at 21 3' > /dev/ttyACM0` - +- JavaScript: + ```js + focus.command("led.at 21 255 255 0") + ``` +- Serial Command (Unix): + ```shell + echo 'led.at 21 255 255 0' > /dev/ttyACM0 + ``` #### Expected output With this function you can change, based on external events, a led color depending on code outside raise's firmware. +if sent only with the LED number, it will return its color +```js +80 227 194 +``` + +if sent with the color coded (ex: 255 255 0 or yellow) it will change that numbered LEDs color to yellow. + +### led.getMultiple + +This command returns the colors of each of the numbered LED's that are listed in RGB code. + +#### Commands + +To retrieve: + +- JavaScript: + ```js + focus.command("led.getMultiple 1 2 3 4 5") + ``` +- Serial Command (Unix): + ```shell + echo 'led.getMultiple 1 2 3 4 5' > /dev/ttyACM0 + ``` + +#### Expected output + +With this function you can read the color of a given set of LED's and will return the following: + + ``` js + 1 # 80 227 194 + 2 # 80 227 194 + 3 # 80 227 194 + 4 # 80 227 194 + 5 # 80 227 194 + ``` + +### led.setMultiple + +This command applies the defined color to all of the numbered LEDs listed afterwards + +#### Commands + +To set: + +- JavaScript: + ```js + focus.command("led.setMultiple 255 0 0 1 2 3 4 5") + ``` +- Serial Command (Unix): + ```shell + echo 'led.setMultiple 255 0 0 1 2 3 4 5' > /dev/ttyACM0 + ``` + +#### Expected output + +After execution, listed LEDs should physically change their color to the selected one (255 0 0 or RED) on the keyboard, will return newline, period. + ### led.setAll This command sets all leds to a certain color transmitted by RGB. @@ -386,8 +570,14 @@ This command sets all leds to a certain color transmitted by RGB. To set: -- JavaScript: `focus.command("led.setAll 255 255 255")` -- Serial Command (Unix): `echo 'led.setAll 255 255 255' > /dev/ttyACM0` +- JavaScript: + ```js + focus.command("led.setAll 255 255 255") + ``` +- Serial Command (Unix): + ```shell + echo 'led.setAll 255 255 255' > /dev/ttyACM0 + ``` #### Expected output @@ -401,58 +591,151 @@ This command reads/writes the current led mode, which changes the type of led la To retrieve: -- JavaScript: `focus.command("led.mode")` -- Serial Command (Unix): `echo 'led.mode' > /dev/ttyACM0` +- JavaScript: + ```js + focus.command("led.mode") + ``` +- Serial Command (Unix): + ```shell + echo 'led.mode' > /dev/ttyACM0 + ``` To set: -- JavaScript: `focus.command("led.mode 2")` -- Serial Command (Unix): `echo 'led.mode 2' > /dev/ttyACM0` - +- JavaScript: + ```js + focus.command("led.mode 2") + ``` +- Serial Command (Unix): + ```shell + echo 'led.mode 2' > /dev/ttyACM0 + ``` #### Expected output -The keyboard will change it's effect or send the code of the current effect being shown. +The keyboard will either return the current effect being displayed following it's coding, or it will change the current efect following that coding also. + +| Effect encoding | Effect description | +| :---: | :--- | +| 0 | Per Layer colors, they change when you switch between layers | +| 1 | Rainbow Wave effect | +| 2 | Rainbow effect (single color) | +| 3 | Stalker effect (keys lit when pressed and then fade out) | +| 4 | Heatmap effect (keys lit when pressed following a gardient between red and faint blue based on the most pressed key order [explanation](https://kaleidoscope.readthedocs.io/en/latest/plugins/Kaleidoscope-Heatmap.html) [code](https://github.com/Dygmalab/KaleidoscopeTest/blob/main/libraries/Kaleidoscope-Heatmap/src/kaleidoscope/plugin/Heatmap.cpp) ) | +| 5 | Digital Rain effect | +| 6 | Sprinkling water effect when pressed | + +\* The only FW that supports effects 4, 5 and 6 is the Raise stable FW, but it will be implemented on the rest of the FW's in the near future ### led.brightness -This command reads/writes the brightness setting stored in the EEPROM +This command reads/writes the brightness setting for the Backlight LEDs stored in the EEPROM + +When applied to the Defy keyboard, additional commands are available to modify the behavior when in wireless mode, this one remains and only affects wired mode. + +#### Commands + +To retrieve: + +- JavaScript: + ```js + focus.command("led.brightness") + ``` +- Serial Command (Unix): + ```shell + echo 'led.brightness' > /dev/ttyACM0 + ``` + +To set: + +- JavaScript: + ```js + focus.command("led.brightness 210") + ``` +- Serial Command (Unix): + ```shell + echo 'led.brightness 210' > /dev/ttyACM0 + ``` + +#### Expected output + +This function allows you to get/set the current brightness of the backlight LEDs of your keyboard. + +the return value will be the same as the sent one, a 8 bit integer (number between 0 and 255) +### led.brightnessUG + +This command reads/writes the brightness setting for the Underglow stored in the EEPROM + +When applied to the Defy keyboard, additional commands are available to modify the behavior when in wireless mode, these one remain and only affect wired mode. #### Commands To retrieve: -- JavaScript: `focus.command("led.brightness")` -- Serial Command (Unix): `echo 'led.brightness' > /dev/ttyACM0` +- JavaScript: + ```js + focus.command("led.brightnessUG") + ``` +- Serial Command (Unix): + ```shell + echo 'led.brightnessUG' > /dev/ttyACM0 + ``` To set: -- JavaScript: `focus.command("led.brightness 210")` -- Serial Command (Unix): `echo 'led.brightness 210' > /dev/ttyACM0` +- JavaScript: + ```js + focus.command("led.brightnessUG 210") + ``` +- Serial Command (Unix): + ```shell + echo 'led.brightnessUG 210' > /dev/ttyACM0 + ``` #### Expected output -With this function you can change, based on external events, the overall led brightness using code outside raise\'s firmware. +This function allows you to get/set the current brightness of the Underglow LEDs of your keyboard. + +the return value will be the same as the sent one, a 8 bit integer (number between 0 and 255) ### led.theme -This command reads/writes the whole LED color assignment currently in use by using RGB codes. +This command reads/writes the whole LED color assignment currently in use on the keyboard, its encoded using RGB values. #### Commands To retrieve: -- JavaScript: `focus.command("led.theme")` -- Serial Command (Unix): `echo 'led.theme' > /dev/ttyACM0` +- JavaScript: + ```js + focus.command("led.theme") + ``` +- Serial Command (Unix): + ```shell + echo 'led.theme' > /dev/ttyACM0 + ``` To set: -- JavaScript: `focus.command("led.theme NNN NNN NNN NNN NNN NNN")` -- Serial Command (Unix): `echo 'led.theme NNN NNN NNN NNN NNN NNN' > /dev/ttyACM0` +- JavaScript: + ```js + focus.command("led.theme NNN NNN NNN NNN NNN NNN") + ``` +- Serial Command (Unix): + ```shell + echo 'led.theme NNN NNN NNN NNN NNN NNN' > /dev/ttyACM0 + ``` #### Expected output -With this function you can change, based on external events, the overall led colors using code outside raise\'s firmware independently of the current palette stored in the keyboard. +With this function you can get/set, whole LED lighting theme using a single command independently of the palette data stored in the keyboard's EEPROM. + +when you ask for the values using `led.theme` you are expected to receive: +```js +248 231 28 80 227 194 80 227 194 80 227 194 80 227 194 80 227 194 80 227 194 248 231 28 80 227 194 80 227 194 80 227 194 80 227 194 80 227 194 80 227 194 80 227 194 80 227 194 80 227 194 80 227 194 80 227 194 248 231 28 80 227 194 80 227 194 80 227 194 80 227 194 80 227 194 80 227 194 248 231 28 248 231 28 248 231 28 248 231 28 80 227 194 248 231 28 255 107 0 248 231 28 80 227 194 80 227 194 80 227 194 80 227 194 80 227 194 80 227 194 248 231 28 80 227 194 80 227 194 80 227 194 80 227 194 80 227 194 80 227 194 80 227 194 80 227 194 80 227 194 80 227 194 80 227 194 80 227 194 80 227 194 80 227 194 248 231 28 80 227 194 80 227 194 80 227 194 80 227 194 80 227 194 248 231 28 248 231 28 248 231 28 248 231 28 248 231 28 80 227 194 248 231 28 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 255 107 0 0 0 0 +``` +Which is the full RGB map of the values currently being represented by each LED, its encoding is RGB so each 3 values represent a single LED. +The command will expect you to send back the same quantity of LEDs, if any is lacking, they will not get reassigned. ### palette This command reads/writes the color palette that is used by the color map to establish each color that can be assigned to the keyboard. @@ -461,13 +744,25 @@ This command reads/writes the color palette that is used by the color map to est To retrieve: -- JavaScript: `focus.command("palette")` -- Serial Command (Unix): `echo 'palette' > /dev/ttyACM0` +- JavaScript: + ```js + focus.command("palette") + ``` +- Serial Command (Unix): + ```shell + echo 'palette' > /dev/ttyACM0 + ``` To set: -- JavaScript: `focus.command("led.palete NNN NNN NNN NNN NNN NNN")` -- Serial Command (Unix): `echo 'palette NNN NNN NNN NNN NNN NNN' > /dev/ttyACM0` +- JavaScript: + ```js + focus.command("led.palete NNN NNN NNN NNN NNN NNN") + ``` +- Serial Command (Unix): + ```shell + echo 'palette NNN NNN NNN NNN NNN NNN' > /dev/ttyACM0 + ``` #### Expected output @@ -483,13 +778,25 @@ To know the actual correlation between the position of the map sent and the actu To retrieve: -- JavaScript: `focus.command("colormap.map")` -- Serial Command (Unix): `echo 'colormap.map' > /dev/ttyACM0` +- JavaScript: + ```js + focus.command("colormap.map") + ``` +- Serial Command (Unix): + ```shell + echo 'colormap.map' > /dev/ttyACM0 + ``` To set: -- JavaScript: `focus.command("colormap.map N N N N N N N N N N N N N N N N N N")` -- Serial Command (Unix): `echo 'colormap.map N N N N N N N N N N N N N N N N N N' > /dev/ttyACM0` +- JavaScript: + ```js + focus.command("colormap.map N N N N N N N N N N N N N N N N N N") + ``` +- Serial Command (Unix): + ```shell + echo 'colormap.map N N N N N N N N N N N N N N N N N N' > /dev/ttyACM0 + ``` #### Expected output @@ -503,13 +810,25 @@ This command reads/writes the idle led time to be turned off in seconds. To retrieve: -- JavaScript: `focus.command("idleleds.time_limit")` -- Serial Command (Unix): `echo 'idleleds.time_limit' > /dev/ttyACM0` +- JavaScript: + ```js + focus.command("idleleds.time_limit") + ``` +- Serial Command (Unix): + ```shell + echo 'idleleds.time_limit' > /dev/ttyACM0 + ``` To set: -- JavaScript: `focus.command("idleleds.time_limit 600")` -- Serial Command (Unix): `echo 'idleleds.time_limit 600' > /dev/ttyACM0` +- JavaScript: + ```js + focus.command("idleleds.time_limit 600") + ``` +- Serial Command (Unix): + ```shell + echo 'idleleds.time_limit 600' > /dev/ttyACM0 + ``` #### Expected output @@ -563,61 +882,23 @@ This empty command has no support as of today, or is disabled / not working prop This command reads/writes the macros map (2048 bytes of max lenght), each action in a macro is composed of an action type and a key attached to it. -- MACRO_ACTION_END = 0 - - Ends the current macro play sequence, it's used at the end of a macro to separate it from the second - - Example: " 0 " - - Total cost = 1 -- MACRO_ACTION_STEP_INTERVAL = 1 - - Changes the reproduction interval between each key of the sequence when a tap sequence or a tap code sequence (12 or 13) are used - - The step uses a 16bit integer splitted into two 8bit numbers to send it to the keyboard, first comes the higher weight - - Example: " 1 1 44 " for a 300ms delay - - Total cost = 3 -- MACRO_ACTION_STEP_WAIT = 2 - - Custom delay that lets the macro wait for any event before continuing the sequence. - - The step uses a 16bit integer splitted into two 8bit numbers to send it to the keyboard, first comes the higher weight - - Example: " 2 1 44 " for a 300ms delay - - Total cost = 3 -- MACRO_ACTION_STEP_KEYDOWN = 3 - - Activates the keydown event for a KeyCode defined by two 8bit numbers, the higher weight carries the flags, the lower weight carries the code. - - The step uses a 16bit integer that identifies any key, splitted into two 8bit numbers to send it to the keyboard. First comes the higher weight. - - Example: " 3 76 226 " for the keyCode 19682, which activates the keydown action for the Media.Mute button. - - Total cost = 3 -- MACRO_ACTION_STEP_KEYUP = 4 - - Activates the keyup event for a KeyCode defined by two 8bit numbers, the higher weight carries the flags, the lower weight carries the code. - - The step uses a 16bit integer that identifies any key, splitted into two 8bit numbers to send it to the keyboard. First comes the higher weight. - - Example: " 4 76 226 " for the keyCode 19682, which activates the keyup action for the Media.Mute button. - - Total cost = 3 -- MACRO_ACTION_STEP_TAP = 5 - - Activates the tap event for a KeyCode defined by two 8bit numbers, the higher weight carries the flags, the lower weight carries the code. - - The step uses a 16bit integer that identifies any key, splitted into two 8bit numbers to send it to the keyboard. First comes the higher weight. - - Example: " 5 76 226 " for the keyCode 19682, which activates the tap action for the Media.Mute button. - - Total cost = 3 -- MACRO_ACTION_STEP_KEYCODEDOWN = 6 - - Activates the keydown event for a KeyCode defined by one 8bit number, it only carries the code up to 255, which means only normal keys can be sent this way. - - The step uses a lone 8bit number to identify any key < 256, as no flags are sent, 0 is used for the flag identifier instead. - - Example: " 6 225 " for the keyCode 225, which activates the keydown action for the Right Shift button. - - Total cost = 2 -- MACRO_ACTION_STEP_KEYCODEUP = 7 - - Activates the keyup event for a KeyCode defined by one 8bit number, it only carries the code up to 255, which means only normal keys can be sent this way. - - The step uses a lone 8bit number to identify any key < 256, as no flags are sent, 0 is used for the flag identifier instead. - - Example: " 7 225 " for the keyCode 225, which activates the keyup action for the Right Shift button. - - Total cost = 2 -- MACRO_ACTION_STEP_TAPCODE = 8 - - Activates the tap event for a KeyCode defined by one 8bit number, it only carries the code up to 255, which means only normal keys can be sent this way. - - The step uses a lone 8bit number to identify any key < 256, as no flags are sent, 0 is used for the flag identifier instead. - - Example: " 8 225 " for the keyCode 225, which activates the tap action for the Right Shift button. - - Total cost = 2 -- MACRO_ACTION_STEP_EXPLICIT_REPORT = 9 -- MACRO_ACTION_STEP_IMPLICIT_REPORT = 10 -- MACRO_ACTION_STEP_SEND_REPORT = 11 - - The functions 9,10,11 are not implemented in the newer versions of the keyboard, they are no longer needed as there is no reason to change the way the report is sent to the host PC. -- MACRO_ACTION_STEP_TAP_SEQUENCE = 12 -- MACRO_ACTION_STEP_TAP_CODE_SEQUENCE = 13 - - The functions 12 & 13 behave in the same way, 13 should allow the flag sending for the block, but this introduces a double zero which will make the whole macro sequence unreadable, so this has to change to be able to work. - - Activates the tap event for a sequence of KeyCodes (which will be reproduced as a number of taps) defined by one 8bit number each, it only carries the code up to 255, which means only normal keys can be sent this way. - - The step uses a sequence of 8bit numbers to identify any key < 256, as no flags are sent, 0 is used for the flag identifier instead. - - Example: " 12 14 7 18 18 26 0" for the keyCode 225, which activates the tap action for the Right Shift button. - - Total cost = N + 1, being N the number of actions to be performed in a closed while loop +| Macro Action | Description | Example | Total Cost | | +|-----------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------|---| +| MACRO_ACTION_END | Ends the current macro play sequence, it's used at the end of a macro to separate it from the second | " 0 " | 1 | | +| MACRO_ACTION_STEP_INTERVAL | Changes the reproduction interval between each key of the sequence when a tap sequence or a tap code sequence (12 or 13) are used | " 1 1 44 " for a 300ms delay | 3 | | +| MACRO_ACTION_STEP_WAIT | Custom delay that lets the macro wait for any event before continuing the sequence. | " 2 1 44 " for a 300ms delay | 3 | | +| MACRO_ACTION_STEP_KEYDOWN | Activates the keydown event for a KeyCode defined by two 8bit numbers, the higher weight carries the flags, the lower weight carries the code. | " 3 76 226 " for the keyCode 19682, which activates the keydown action for the Media.Mute button. | 3 | | +| MACRO_ACTION_STEP_KEYUP | Activates the keyup event for a KeyCode defined by two 8bit numbers, the higher weight carries the flags, the lower weight carries the code. | " 4 76 226 " for the keyCode 19682, which activates the keyup action for the Media.Mute button. | 3 | | +| MACRO_ACTION_STEP_TAP | Activates the tap event for a KeyCode defined by two 8bit numbers, the higher weight carries the flags, the lower weight carries the code. | " 5 76 226 " for the keyCode 19682, which activates the tap action for the Media.Mute button. | 3 | | +| MACRO_ACTION_STEP_KEYCODEDOWN | Activates the keydown event for a KeyCode defined by one 8bit number, it only carries the code up to 255, which means only normal keys can be sent this way. | " 6 225 " for the keyCode 225, which activates the keydown action for the Right Shift button. | 2 | | +| MACRO_ACTION_STEP_KEYCODEUP | Activates the keyup event for a KeyCode defined by one 8bit number, it only carries the code up to 255, which means only normal keys can be sent this way. | " 7 225 " for the keyCode 225, which activates the keyup action for the Right Shift button. | 2 | | +| MACRO_ACTION_STEP_TAPCODE | Activates the tap event for a KeyCode defined by one 8bit number, it only carries the code up to 255, which means only normal keys can be sent this way. | " 8 225 " for the keyCode 225, which activates the tap action for the Right Shift button. | 2 | | +| MACRO_ACTION_STEP_EXPLICIT_REPORT | Not implemented in newer versions of the keyboard. | - | - | | +| MACRO_ACTION_STEP_IMPLICIT_REPORT | Not implemented in newer versions of the keyboard. | - | - | | +| MACRO_ACTION_STEP_SEND_REPORT | Not implemented in newer versions of the keyboard. | - | - | | +| MACRO_ACTION_STEP_TAP_SEQUENCE | Activates the tap event for a sequence of KeyCodes (which will be reproduced as a number of taps) defined by one 8bit number each, it only carries the code up to 255, which means only normal keys can be sent this way. | " 12 14 7 18 18 26 0" for the keyCode 225, which activates the tap action for the Right Shift button. | N + 1, where N is the number of actions to be performed in a closed while loop | | + +Please note that the last three macro actions (MACRO_ACTION_STEP_EXPLICIT_REPORT, MACRO_ACTION_STEP_IMPLICIT_REPORT, and MACRO_ACTION_STEP_SEND_REPORT) are not implemented in newer versions of the keyboard, so the corresponding cells in the table are left empty. then we send the actual keyCode that we can find in the [keymap database](https://github.com/Dygmalab/Bazecor/tree/development/src/api/keymap/db) @@ -774,13 +1055,25 @@ the holdstart value specifies the minimum time that has to pass between the firs To retrieve: -- JavaScript: `focus.command("superkeys.holdstart")` -- Serial Command (Unix): `echo 'superkeys.holdstart' > /dev/ttyACM0` +- JavaScript: + ```js + focus.command("superkeys.holdstart") + ``` +- Serial Command (Unix): + ```shell + echo 'superkeys.holdstart' > /dev/ttyACM0 + ``` To set: -- JavaScript: `focus.command("superkeys.holdstart 200")` -- Serial Command (Unix): `echo 'superkeys.holdstart 200' > /dev/ttyACM0` +- JavaScript: + ```js + focus.command("superkeys.holdstart 200") + ``` +- Serial Command (Unix): + ```shell + echo 'superkeys.holdstart 200' > /dev/ttyACM0 + ``` #### Expected output @@ -796,13 +1089,25 @@ the overlap value specifies the percentage of overlap when fast typing that is a To retrieve: -- JavaScript: `focus.command("superkeys.overlap")` -- Serial Command (Unix): `echo 'superkeys.overlap' > /dev/ttyACM0` +- JavaScript: + ```js + focus.command("superkeys.overlap") + ``` +- Serial Command (Unix): + ```shell + echo 'superkeys.overlap' > /dev/ttyACM0 + ``` To set: -- JavaScript: `focus.command("superkeys.overlap 80")` -- Serial Command (Unix): `echo 'superkeys.overlap 80' > /dev/ttyACM0` +- JavaScript: + ```js + focus.command("superkeys.overlap 80") + ``` +- Serial Command (Unix): + ```shell + echo 'superkeys.overlap 80' > /dev/ttyACM0 + ``` #### Expected output @@ -822,8 +1127,14 @@ The help command returns all the available commands in the current version of th #### Commands -JavaScript: `focus.command("help")` -Serial Command (Unix): `echo 'help' > /dev/ttyACM0` +- JavaScript: + ```js + focus.command("help") + ``` +- Serial Command (Unix): + ```shell + echo 'help' > /dev/ttyACM0 + ``` #### Expected output @@ -837,8 +1148,14 @@ This command allows the host PC to activate a certain layer remotely just by sen To use: -- JavaScript: `focus.command("layer.activate 1")` -- Serial Command (Unix): `echo 'layer.activate 1' > /dev/ttyACM0` +- JavaScript: + ```js + focus.command("layer.activate 1") + ``` +- Serial Command (Unix): + ```shell + echo 'layer.activate 1' > /dev/ttyACM0 + ``` #### Expected output @@ -852,8 +1169,14 @@ This command allows the host PC to deactivate the last layer that the keyboard s To use: -- JavaScript: `focus.command("layer.deactivate")` -- Serial Command (Unix): `echo 'layer.deactivate' > /dev/ttyACM0` +- JavaScript: + ```js + focus.command("layer.deactivate") + ``` +- Serial Command (Unix): + ```shell + echo 'layer.deactivate' > /dev/ttyACM0 + ``` #### Expected output @@ -867,8 +1190,14 @@ This command allows the host PC to ask the keyboard which layer is in use right To use: -- JavaScript: `focus.command("layer.isActive")` -- Serial Command (Unix): `echo 'layer.isActive' > /dev/ttyACM0` +- JavaScript: + ```js + focus.command("layer.isActive") + ``` +- Serial Command (Unix): + ```shell + echo 'layer.isActive' > /dev/ttyACM0 + ``` #### Expected output @@ -886,8 +1215,14 @@ This command does not affect the memory usage as the value is stored in RAM. To use: -- JavaScript: `focus.command("layer.moveTo 1")` -- Serial Command (Unix): `echo 'layer.moveTo 1' > /dev/ttyACM0` +- JavaScript: + ```js + focus.command("layer.moveTo 1") + ``` +- Serial Command (Unix): + ```shell + echo 'layer.moveTo 1' > /dev/ttyACM0 + ``` #### Expected output @@ -901,9 +1236,18 @@ This command returns the isActive status for up to 32 layers. It will return a 3 To use: -- JavaScript: `focus.command("layer.state")` -- Serial Command (Unix): `echo 'layer.state' > /dev/ttyACM0` +- JavaScript: + ```js + focus.command("layer.state") + ``` +- Serial Command (Unix): + ```shell + echo 'layer.state' > /dev/ttyACM0 + ``` #### Expected output -This is the typical answer when the first layer is active: "1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 " +This is the typical answer when the first layer is active: +```shell +'1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ' +`````` diff --git a/build/afterPackHook.js b/build/afterPackHook.js deleted file mode 100644 index 4ff136ba6..000000000 --- a/build/afterPackHook.js +++ /dev/null @@ -1,34 +0,0 @@ -const path = require('path'); -const fs = require('fs'); -const util = require('util'); - -const renameAsync = util.promisify(fs.rename); -const unlinkAsync = util.promisify(fs.unlink); - -module.exports = async function(context) { - // Replace the app launcher on linux only. - if (process.platform !== 'linux') { - return; - } - - const executableName = context.packager.executableName; - const sourceExecutable = path.join(context.appOutDir, executableName); - const targetExecutable = path.join(context.appOutDir, `${executableName}-bin`); - const launcherScript = path.join( - context.appOutDir, - 'resources', - 'launcher.sh' - ); - const chromeSandbox = path.join(context.appOutDir, 'chrome-sandbox'); - - return Promise.all([ - // rename bazecor to bazecor-bin - renameAsync(sourceExecutable, targetExecutable), - - // rename launcher script to bazecor - renameAsync(launcherScript, sourceExecutable), - - // remove the chrome-sandbox file since we explicitly disable it - unlinkAsync(chromeSandbox) - ]); -}; diff --git a/build/afterSignHook.js b/build/afterSignHook.js deleted file mode 100644 index 31627d05e..000000000 --- a/build/afterSignHook.js +++ /dev/null @@ -1,36 +0,0 @@ -// See: https://medium.com/@TwitterArchiveEraser/notarize-electron-apps-7a5f988406db - -const fs = require("fs"); -const path = require("path"); -var electron_notarize = require("electron-notarize"); - -module.exports = async function (params) { - // Only notarize the app on Mac OS only. - if (process.platform !== "darwin") { - return; - } - console.log("afterSign hook triggered", params); - - // Same appId in electron-builder. - let appId = "com.dygmalab.bazecor"; - - let appPath = path.join(params.appOutDir, `${params.packager.appInfo.productFilename}.app`); - if (!fs.existsSync(appPath)) { - throw new Error(`Cannot find application at: ${appPath}`); - } - - console.log(`Notarizing ${appId} found at ${appPath}`); - - try { - await electron_notarize.notarize({ - appBundleId: appId, - appPath: appPath, - appleId: process.env.APPLEID, - appleIdPassword: process.env.APPLEIDPASS - }); - } catch (error) { - console.error(error); - } - - console.log(`Done notarizing ${appId}`); -}; diff --git a/build/entitlements.mac.inherit.plist b/build/entitlements.plist similarity index 80% rename from build/entitlements.mac.inherit.plist rename to build/entitlements.plist index ad77a2a1e..42e87aa33 100644 --- a/build/entitlements.mac.inherit.plist +++ b/build/entitlements.plist @@ -3,9 +3,7 @@ com.apple.security.cs.allow-jit - - com.apple.security.cs.allow-unsigned-executable-memory - + com.apple.security.cs.allow-dyld-environment-variables com.apple.security.cs.disable-library-validation diff --git a/build/launcher.sh b/build/launcher.sh deleted file mode 100755 index 8ddc05fce..000000000 --- a/build/launcher.sh +++ /dev/null @@ -1,6 +0,0 @@ -#! /usr/bin/env bash -set -e - -UNPRIVILEGED_USERNS_ENABLED=$(cat /proc/sys/kernel/unprivileged_userns_clone 2>/dev/null || echo "0") -SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -exec "$SCRIPT_DIR/bazecor-bin" "$([[ "$UNPRIVILEGED_USERNS_ENABLED" == 0 ]] && echo '--no-sandbox')" "$@" diff --git a/build/icon.icns b/build/logo.icns similarity index 100% rename from build/icon.icns rename to build/logo.icns diff --git a/build/icon.ico b/build/logo.ico similarity index 100% rename from build/icon.ico rename to build/logo.ico diff --git a/build/icon.png b/build/logo.png similarity index 100% rename from build/icon.png rename to build/logo.png diff --git a/e2e_tests/flashing.spec.ts b/e2e_tests/flashing.spec.ts new file mode 100644 index 000000000..a0e0260c9 --- /dev/null +++ b/e2e_tests/flashing.spec.ts @@ -0,0 +1,79 @@ +import { _electron as electron, ElectronApplication, test, Page, expect } from "@playwright/test"; +import { findLatestBuild, parseElectronApp } from "electron-playwright-helpers"; + +// this test does not work yet because we need to do something in firmware to avoid having to hold ESC key +test.describe("Testing Bazecor E2E", async () => { + let electronApp: ElectronApplication; + let page: Page; + const outputFolder = "test-results"; + + test.beforeAll(async () => { + const latestBuild = findLatestBuild(); + const appInfo = parseElectronApp(latestBuild); + + electronApp = await electron.launch({ + args: [appInfo.main], + executablePath: appInfo.executable, + }); + + electronApp.on("window", async initialPage => { + const filename = initialPage.url()?.split("/").pop(); + console.log(`Window opened: ${filename}`); + + initialPage.on("pageerror", error => { + console.error(error); + }); + + initialPage.on("console", msg => { + console.log(msg.text()); + }); + }); + }); + + test("renders landing page", async () => { + page = await electronApp.firstWindow(); + await page.screenshot({ path: `${outputFolder}/landing.png` }); + }); + + test("flashing keyboard", async () => { + page = await electronApp.firstWindow(); + const connectButton = page.getByRole("button", { name: "Connect" }); + + expect(connectButton).not.toBe(undefined); + if (connectButton) { + console.log(connectButton); + await connectButton.click(); + await page.screenshot({ path: `${outputFolder}/connected.png` }); + } + + const firmwareMenuButton = page.getByRole("link", { name: "Firmware Update" }); + expect(firmwareMenuButton).not.toBe(undefined); + if (firmwareMenuButton) { + console.log(firmwareMenuButton); + await firmwareMenuButton.click(); + await page.screenshot({ path: `${outputFolder}/firmwareUpdateSection.png` }); + } + + const updateButton = page.getByRole("button", { name: "Update now" }); + expect(updateButton).not.toBe(undefined); + if (updateButton) { + console.log(updateButton); + await updateButton.click(); + await page.waitForTimeout(1000); + await page.screenshot({ path: `${outputFolder}/updateStart.png` }); + } + + // we start flashing procedure + await page.waitForSelector("text=/Press and hold/"); + await page.keyboard.down("Escape"); + await page.waitForSelector("text=/Updating/"); + await page.keyboard.up("Escape"); + await page.screenshot({ path: `${outputFolder}/flashing.png` }); + await page.waitForSelector("text=/Firmware update!/"); + await page.screenshot({ path: `${outputFolder}/flashCompleted.png` }); + }); + + test.afterAll(async () => { + await electronApp.close(); + }); +}); diff --git a/electron-webpack.json b/electron-webpack.json deleted file mode 100644 index f90c39dbc..000000000 --- a/electron-webpack.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "title": "BAZECOR", - // "whiteListedModules" means "modules which are bundled by webpack during - // the build rather than treated as external". Notably, "react" requires - // being bundled to work well in the renderer process, so electron-webpack - // bundles it *implicitly*. That means we want all dependencies which talk to - // react to also be bundled, since we want them to see the same instance of - // react when they require("react") as our own (bundled) code does. Otherwise, - // you are liable to see runtime errors like "Hooks can only be called inside - // the body of a function component." - // - // Specifically, the rules of the road are: - // - dependencies used by the main process MUST NOT be listed/bundled - // - dependencies which invoke require("react") in the renderer process MUST - // be listed/bundled - // - dependencies used *only* by the renderer process which do not directly - // require("react") MAY be bundled - // - // See: - // - https://github.com/electron-userland/electron-webpack/issues/361 - // - https://reactjs.org/warnings/invalid-hook-call-warning.html#duplicate-react - // - https://github.com/expo/expo-cli/issues/2835#issuecomment-722952296 - // - https://github.com/facebook/react/issues/13991#issuecomment-683109390 - // - https://github.com/electron-userland/electron-webpack/issues/283#issuecomment-487470932 - "whiteListedModules": [ - "prop-types", - "react", - "react-color", - "react-dom", - "react-i18next", - "react-localization", - "react-toastify", - "react-beautiful-dnd", - "styled-components", - "source-map-support", - "react-bootstrap-range-slider", - "react-markdown", - "xstate", - "@xstate/react" - ] -} diff --git a/forge.config.ts b/forge.config.ts new file mode 100644 index 000000000..82f74b08f --- /dev/null +++ b/forge.config.ts @@ -0,0 +1,116 @@ +import type { ForgeConfig, ForgePackagerOptions } from "@electron-forge/shared-types"; +import { MakerSquirrel } from "@electron-forge/maker-squirrel"; +import { WebpackPlugin } from "@electron-forge/plugin-webpack"; +import fs from "fs"; +import path from "path"; +import { globSync } from "glob"; +import { spawnSync } from "child_process"; +import rendererConfig from "./webpack.renderer.config"; +import mainConfig from "./webpack.main.config"; + +const packagerConfig: ForgePackagerOptions = { + appBundleId: "com.dygmalab.bazecor", + darwinDarkModeSupport: true, + icon: "./build/logo", + name: "Bazecor", + osxUniversal: { + x64ArchFiles: "*", + }, + extraResource: ["NEWS.md"], + appCopyright: "Copyright © 2018, 2023 DygmaLab SL; distributed under the GPLv3", +}; + +if (process.env.NODE_ENV !== "development") { + packagerConfig.osxNotarize = { + tool: "notarytool", + appleId: process.env.APPLE_ID || "", + appleIdPassword: process.env.APPLE_ID_PASSWORD || "", + teamId: process.env.APPLE_TEAM_ID || "", + }; + packagerConfig.osxSign = { + optionsForFile: () => ({ + entitlements: "./build/entitlements.plist", + hardenedRuntime: true, + }), + }; +} + +const config: ForgeConfig = { + packagerConfig, + rebuildConfig: {}, + makers: [ + new MakerSquirrel({ + setupIcon: "./build/logo.ico", + }), + { + name: "@electron-forge/maker-dmg", + config: { + icon: "./build/logo.icns", + }, + }, + { + name: "@reforged/maker-appimage", + config: { + options: { + bin: "Bazecor", + categories: ["Utility"], + icon: "./build/logo.png", + }, + }, + }, + ], + plugins: [ + new WebpackPlugin({ + mainConfig, + devContentSecurityPolicy: "connect-src 'self' *.github.com github.com objects.githubusercontent.com 'unsafe-eval';", + renderer: { + config: rendererConfig, + entryPoints: [ + { + html: "./src/renderer/index.html", + js: "./src/renderer/index.tsx", + name: "main_window", + preload: { + js: "./src/preload/preload.ts", + }, + }, + ], + }, + }), + ], + hooks: { + packageAfterPrune: async (forgeConfig, buildPath, electronVersion, platform, arch) => { + /** + * Serialport, usb and uiohook-napi are problematic libraries to run in Electron. + * When Electron app is been built, these libraries are not included properly in the final executable. + * What we do here is to install them explicitly and then remove the files that are not for the platform + * we are building for + */ + const packageJson = JSON.parse(fs.readFileSync(path.resolve(buildPath, "package.json")).toString()); + + packageJson.dependencies = { + serialport: "^10.5.0", + usb: "^2.9.0", + "uiohook-napi": "^1.5.0", + }; + + fs.writeFileSync(path.resolve(buildPath, "package.json"), JSON.stringify(packageJson)); + const npmInstall = spawnSync("npm", ["install", "--omit=dev"], { + cwd: buildPath, + stdio: "inherit", + shell: true, + }); + + const prebuilds = globSync(`${buildPath}/**/prebuilds/*`); + const matchString = new RegExp(`prebuilds/${platform}`); + prebuilds.forEach(function (path) { + if (!path.match(matchString)) { + fs.rmSync(path, { recursive: true }); + } + }); + }, + }, + publishers: [], +}; + +export default config; diff --git a/package.json b/package.json index 7bae783bb..69f3a86a3 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,38 @@ { - "name": "BAZECOR", - "version": "1.1.2", - "fwVersion": "1.0.9beta", + "name": "Bazecor", + "productName": "Bazecor", + "version": "1.3.2", + "description": "Bazecor desktop app", + "private": true, + "repository": { + "type": "git", + "url": "https://github.com/Dygmalab/Bazecor" + }, + "main": ".webpack/main", + "scripts": { + "clean": "rm -rf dist && rm -rf out && rm -rf node_modules", + "start": "cross-env NODE_ENV=development electron-forge start", + "make-dev": "cross-env NODE_ENV=development electron-forge make", + "package": "electron-forge package", + "make": "electron-forge make", + "make-win": "electron-forge make --platform=win32", + "make-mac": "electron-forge make --platform=darwin", + "make-mac-intel": "electron-forge make --platform=darwin --arch=x64", + "make-mac-arm": "electron-forge make --platform=darwin --arch=arm64", + "make-lin": "electron-forge make --platform=linux", + "lint": "eslint --ext .ts,.tsx,.js,.jsx .", + "prettier": "prettier --write \"./**/*.{js,json,css,scss,md}\"", + "test": "vitest run src/renderer/tests src/main/tests", + "e2e": "yarn playwright test", + "commit": "cz -s", + "prepare": "husky install" + }, + "keywords": [ + "dygma", + "raise", + "defy", + "bazecor" + ], "license": "GPL-3.0-only", "author": { "name": "Dygma Lab S.L.", @@ -9,144 +40,132 @@ }, "homepage": "https://github.com/Dygmalab/Bazecor", "engines": { - "node": "^16.0.0", + "node": "^18.16.0", "npm": ">=8.11.0" }, - "scripts": { - "clean": "rm -rf dist && rm -rf node_modules", - "postinstall": "electron-builder install-app-deps", - "start": "electron-webpack dev", - "compile": "electron-webpack", - "build": "electron-webpack", - "build:all": "npm-run-all compile --parallel 'electron-builder -m' 'electron-builder -w' 'electron-builder -l'", - "build:osx": "yarn compile && electron-builder -m", - "build:mac": "yarn run build:osx", - "build:windows": "yarn compile && electron-builder -w", - "build:win": "yarn run build:windows", - "build:linux": "yarn compile && electron-builder -l", - "prettier": "prettier --write \"src/**/*.{js,json,css,scss,md}\"", - "lint:all": "npm-run-all lint:js lint:css", - "lint:js": "eslint src/**/*.js", - "lint:css": "stylelint \"src/**/*.js src/**/*.css\"", - "clean:code": "npm-run-all prettier lint:all" - }, - "husky": { - "hooks": { - "pre-commit": "npm-run-all -p lint:all" - } - }, - "build": { - "appId": "com.dygmalab.bazecor", - "productName": "Bazecor", - "artifactName": "${productName}-${version}.${ext}", - "copyright": "Copyright © 2018, 2019 Keyboardio Inc.; Copyright © 2018, 2019 DygmaLab SE; distributed under the GPLv3", - "afterSign": "./build/afterSignHook.js", - "asar": true, - "files": [ - "!src" - ], - "buildDependenciesFromSource": true, - "npmRebuild": false, - "mac": { - "category": "productivity", - "target": { - "target": "default", - "arch": [ - "arm64", - "x64" - ] - }, - "type": "distribution", - "darkModeSupport": true, - "hardenedRuntime": true, - "entitlements": "./build/entitlements.mac.inherit.plist" - }, - "linux": { - "target": [ - "AppImage" - ] - }, - "afterPack": "./build/afterPackHook.js", - "extraResources": [ - { - "from": "./build/launcher.sh", - "to": "launcher.sh" - }, - "static" - ] - }, - "resolutions": { - "acorn": "npm:acorn-with-stage3" + "devDependencies": { + "@babel/core": "^7.22.1", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.20.7", + "@babel/plugin-transform-arrow-functions": "^7.21.5", + "@babel/plugin-transform-async-to-generator": "^7.20.7", + "@babel/plugin-transform-runtime": "^7.22.4", + "@babel/preset-env": "^7.22.4", + "@babel/preset-react": "^7.22.3", + "@babel/preset-typescript": "^7.21.5", + "@electron-forge/cli": "^6.1.1", + "@electron-forge/maker-dmg": "^6.2.1", + "@electron-forge/maker-rpm": "^6.1.1", + "@electron-forge/maker-squirrel": "^6.1.1", + "@electron-forge/plugin-webpack": "^6.1.1", + "@electron/universal": "^1.4.1", + "@playwright/test": "^1.36.0", + "@reforged/maker-appimage": "^3.3.0", + "@semantic-release/changelog": "^6.0.3", + "@semantic-release/commit-analyzer": "^10.0.1", + "@semantic-release/git": "^10.0.1", + "@semantic-release/github": "^9.0.3", + "@semantic-release/npm": "^10.0.4", + "@semantic-release/release-notes-generator": "^11.0.3", + "@types/react": "^18.2.8", + "@types/react-dom": "^18.2.4", + "@types/styled-components": "^5.1.26", + "@typescript-eslint/eslint-plugin": "^5.0.0", + "@typescript-eslint/parser": "^5.0.0", + "@vercel/webpack-asset-relocator-loader": "1.7.3", + "babel-loader": "^9.1.2", + "copy-webpack-plugin": "^11.0.0", + "cross-env": "^7.0.3", + "css-loader": "^6.0.0", + "cz-conventional-changelog": "^3.3.0", + "electron": "^25.2.0", + "electron-devtools-installer": "^3.2.0", + "electron-forge-maker-appimage": "^24.5.2", + "electron-playwright-helpers": "^1.6.0", + "eslint": "^8.0.1", + "eslint-config-airbnb": "^19.0.4", + "eslint-config-airbnb-typescript": "^17.0.0", + "eslint-config-prettier": "^8.8.0", + "eslint-import-resolver-alias": "^1.1.2", + "eslint-import-resolver-typescript": "^3.5.5", + "eslint-plugin-import": "^2.27.5", + "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-prettier": "^4.2.1", + "eslint-plugin-react": "^7.32.2", + "eslint-plugin-react-hooks": "^4.6.0", + "fork-ts-checker-webpack-plugin": "^7.2.13", + "glob": "^10.2.7", + "html-webpack-plugin": "^5.5.1", + "husky": "^8.0.3", + "node-loader": "^2.0.0", + "prettier": "^2.8.8", + "semantic-release": "^21.0.5", + "style-loader": "^3.0.0", + "ts-loader": "^9.2.2", + "ts-node": "^10.0.0", + "typescript": "~4.5.4", + "vite": "^4.3.9", + "vitest": "^0.32.2", + "webpack-cli": "^5.1.3" }, "dependencies": { "@appigram/react-rangeslider": "2.2.10", - "@serialport/parser-delimiter": "^11.0.0", + "@octokit/core": "^4.2.1", + "@serialport/parser-delimiter": "^10.0.0", + "@types/react-rangeslider": "^2.2.4", "@xstate/react": "^3.2.2", + "async": "^3.2.4", "axios": "^1.4.0", "bootstrap-css-only": "^4.4.1", + "core-js": "^3.30.2", "drivelist": "^11.1.0", "easy-crc": "^1.1.0", - "electron-devtools-installer": "^3.1.1", + "electron-squirrel-startup": "^1.0.0", "electron-store": "^8.1.0", - "electron-updater": "^4.3.8", "electron-window-state": "^5.0.3", - "i18next": "^19.9.2", - "i18next-electron-language-detector": "^0.0.10", - "octokit": "^2.0.14", - "react": "^17.0.0", - "react-beautiful-dnd": "^13.1.0", - "react-bootstrap": "^1.5.2", + "prop-types": "^15.8.1", + "react": "^18.2.0", + "react-beautiful-dnd": "^13.1.1", + "react-bootstrap": "1.5.2", "react-color": "^2.19.3", - "react-dom": "^17.0.0", - "react-i18next": "^11.8.12", - "react-icons": "^4.2.0", - "react-is": "^17.0.0", - "react-localization": "^1.0.17", + "react-dom": "^18.2.0", + "react-i18next": "^12.3.1", + "react-icons": "^4.9.0", + "react-localization": "^1.0.19", "react-markdown": "^8.0.7", - "react-range": "^1.8.12", - "react-router-dom": "^5.2.0", - "react-toastify": "^8.2.0", - "semver": "^7.5.1", - "serialport": "^10.4.0", - "source-map-support": "^0.5.16", - "styled-components": "^5.3.11", + "react-router-dom": "^6.11.2", + "react-toastify": "^9.1.3", + "semver": "^7.5.2", + "serialport": "^10.0.0", + "styled-components": "5.3.11", "sudo-prompt": "^9.2.1", - "uiohook-napi": "^1.2.0", - "usb": "^2.3.1", + "uiohook-napi": "^1.5.2", + "update-electron-app": "^2.0.1", + "usb": "^2.9.0", "xstate": "^4.37.2" }, - "devDependencies": { - "@babel/cli": "^7.13.10", - "@babel/core": "^7.13.13", - "@babel/eslint-parser": "^7.13.10", - "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/preset-env": "^7.13.12", - "@babel/preset-react": "^7.13.13", - "@svgr/webpack": "^6.2.1", - "acorn": "^8.8.2", - "babel-loader": "^8.2.2", - "electron": "^18.3.7", - "electron-builder": "^23.6.0", - "electron-notarize": "^1.0.0", - "electron-webpack": "^2.8.2", - "electron-webpack-eslint": "^6.0.0", - "eslint": "^7.23.0", - "eslint-config-prettier": "^8.1.0", - "eslint-loader": "^4.0.2", - "eslint-plugin-jsx-a11y": "^6.4.1", - "eslint-plugin-prettier": "^3.3.1", - "eslint-plugin-react": "^7.23.1", - "eslint-plugin-react-hooks": "^4.2.0", - "husky": "^5.2.0", - "lint-staged": "^10.5.4", - "npm-run-all": "^4.1.5", - "prettier": "^2.2.1", - "stylelint": "^13.12.0", - "stylelint-config-standard": "^21.0.0", - "terser": "^5.14.2", - "typescript": "^4.4.3", - "webpack": "^4.44.2", - "yarn": "^1.22.0" + "build": { + "appId": "com.dygmalab.bazecor", + "artifactName": "${productName}-${version}.${ext}", + "linux": { + "target": [ + "AppImage" + ], + "category": "Utility" + }, + "mac": { + "entitlements": "./build/entitlements.plist", + "category": "public.app-category.utilities", + "target": [ + { + "target": "dmg" + } + ] + } + }, + "config": { + "commitizen": { + "path": "./node_modules/cz-conventional-changelog" + } } -} \ No newline at end of file +} diff --git a/playwright.config.ts b/playwright.config.ts new file mode 100644 index 000000000..6eb681777 --- /dev/null +++ b/playwright.config.ts @@ -0,0 +1,67 @@ +import { defineConfig, devices } from "@playwright/test"; + +/** + * Read environment variables from file. + * https://github.com/motdotla/dotenv + */ +// require('dotenv').config(); + +/** + * See https://playwright.dev/docs/test-configuration. + */ +export default defineConfig({ + testDir: "./e2e_tests", + /* Run tests in files in parallel */ + fullyParallel: true, + /* Fail the build on CI if you accidentally left test.only in the source code. */ + forbidOnly: !!process.env.CI, + /* Retry on CI only */ + retries: process.env.CI ? 2 : 0, + /* Opt out of parallel tests on CI. */ + workers: process.env.CI ? 1 : undefined, + /* Reporter to use. See https://playwright.dev/docs/test-reporters */ + reporter: "html", + /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ + use: { + /* Base URL to use in actions like `await page.goto('/')`. */ + // baseURL: 'http://127.0.0.1:3000', + + /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ + trace: "on-first-retry", + }, + + /* Configure projects for major browsers */ + projects: [ + { + name: "chromium", + use: { ...devices["Desktop Chrome"] }, + }, + + /* Test against mobile viewports. */ + // { + // name: 'Mobile Chrome', + // use: { ...devices['Pixel 5'] }, + // }, + // { + // name: 'Mobile Safari', + // use: { ...devices['iPhone 12'] }, + // }, + + /* Test against branded browsers. */ + // { + // name: 'Microsoft Edge', + // use: { ...devices['Desktop Edge'], channel: 'msedge' }, + // }, + // { + // name: 'Google Chrome', + // use: { ...devices['Desktop Chrome'], channel: 'chrome' }, + // }, + ], + + /* Run your local dev server before starting the tests */ + // webServer: { + // command: 'npm run start', + // url: 'http://127.0.0.1:3000', + // reuseExistingServer: !process.env.CI, + // }, +}); diff --git a/release.config.js b/release.config.js new file mode 100644 index 000000000..425761b52 --- /dev/null +++ b/release.config.js @@ -0,0 +1,16 @@ +module.exports = { + branches: ["main"], + plugins: [ + "@semantic-release/commit-analyzer", + "@semantic-release/release-notes-generator", + "@semantic-release/changelog", + "@semantic-release/npm", + "@semantic-release/git", + [ + "@semantic-release/github", + { + assets: [{ path: "dist/*.exe" }, { path: "dist/*.dmg" }, { path: "dist/*.AppImage" }], + }, + ], + ], +}; diff --git a/src/api/backup/Backup.js b/src/api/backup/Backup.js index cac16fe05..7519940e3 100644 --- a/src/api/backup/Backup.js +++ b/src/api/backup/Backup.js @@ -1,8 +1,9 @@ import React from "react"; -import Focus from "../focus"; import path from "path"; +import fs from "fs"; +import Store from "electron-store"; +import Focus from "../focus"; -const Store = require("electron-store"); const store = new Store(); export default class Backup { @@ -44,9 +45,9 @@ export default class Backup { "settings.cpuSpeed", "settings.ledDriverPullUp", "settings.underGlow", - "settings.ledDriver" + "settings.ledDriver", ]; - let commands = await this.focus.command("help"); + const commands = await this.focus.command("help"); return commands.filter(c => !notRequired.some(v => c.includes(v))); } @@ -71,21 +72,21 @@ export default class Backup { */ async DoBackup(commands, neuronID) { if (this.focus.file !== false) return; - let backup = {}; - let commandList = []; + const backup = {}; + const commandList = []; let versions; for (let i = 0; i < commands.length; i++) { - let command = commands[i]; + const command = commands[i]; console.log(command); - let data = await this.focus.command(command); + const data = await this.focus.command(command); commandList.push({ command, data }); } - let vData = await this.focus.command("version"); - let parts = vData.split(" "); + const vData = await this.focus.command("version"); + const parts = vData.split(" "); versions = { bazecor: parts[0], kaleidoscope: parts[1], - firmware: parts[2] + firmware: parts[2], }; backup.neuronID = neuronID; backup.neuron = this.neurons.filter(n => n.id == neuronID)[0]; @@ -104,12 +105,12 @@ export default class Backup { * @returns True when the function has successfully stored the backup locally, and false if something fails, an error log will be also pushed to the console */ SaveBackup(backup) { - let focus = new Focus(); + const focus = new Focus(); if (focus.file !== false) { - let file = JSON.parse(require("fs").readFileSync(focus.fileData.device.filePath)); + const file = JSON.parse(fs.readFileSync(focus.fileData.device.filePath)); file.virtual = focus.fileData.virtual; const json = JSON.stringify(file, null, 2); - require("fs").writeFileSync(focus.fileData.device.filePath, json, err => { + fs.writeFileSync(focus.fileData.device.filePath, json, err => { if (err) { console.error(err); throw err; @@ -117,7 +118,7 @@ export default class Backup { }); return; } - let product = focus.device.info.product; + const { product } = focus.device.info; const d = new Date(); const folder = store.get("settings.backupFolder"); try { @@ -129,24 +130,24 @@ export default class Backup { backup.neuronID, `${ d.getFullYear() + - ("0" + (d.getMonth() + 1)).slice(-2) + - ("0" + d.getDate()).slice(-2) + - ("0" + d.getHours()).slice(-2) + - ("0" + d.getMinutes()).slice(-2) + - ("0" + d.getSeconds()).slice(-2) - }-${backup.neuron.name.replace(/[^\w\s]/gi, "")}.json` + `0${d.getMonth() + 1}`.slice(-2) + + `0${d.getDate()}`.slice(-2) + + `0${d.getHours()}`.slice(-2) + + `0${d.getMinutes()}`.slice(-2) + + `0${d.getSeconds()}`.slice(-2) + }-${backup.neuron.name.replace(/[^\w\s]/gi, "")}.json`, ); const json = JSON.stringify(backup, null, 2); console.log(fullPath, folderPath, backup); console.log("Creating folders"); - require("fs").mkdir(folderPath, { recursive: true }, err => { + fs.mkdir(folderPath, { recursive: true }, err => { if (err) { console.error(err); throw err; } }); console.log(`Saving Backup to -> ${fullPath}`); - require("fs").writeFileSync(fullPath, json, err => { + fs.writeFileSync(fullPath, json, err => { if (err) { console.error(err); throw err; diff --git a/src/api/color/RGBWtoRGB.js b/src/api/color/RGBWtoRGB.js index 5ab74b49e..07740a6e8 100644 --- a/src/api/color/RGBWtoRGB.js +++ b/src/api/color/RGBWtoRGB.js @@ -1,9 +1,9 @@ export default function rgbw2b(rgbw) { - let r = rgbw.w + rgbw.r > 255 ? 255 : rgbw.w + rgbw.r; - let g = rgbw.w + rgbw.g > 255 ? 255 : rgbw.w + rgbw.g; - let b = rgbw.w + rgbw.b > 255 ? 255 : rgbw.w + rgbw.b; + const r = rgbw.w + rgbw.r > 255 ? 255 : rgbw.w + rgbw.r; + const g = rgbw.w + rgbw.g > 255 ? 255 : rgbw.w + rgbw.g; + const b = rgbw.w + rgbw.b > 255 ? 255 : rgbw.w + rgbw.b; - let result = `rgb(${r}, ${g}, ${b})`; + const result = `rgb(${r}, ${g}, ${b})`; return { r, g, b, rgb: result }; } diff --git a/src/api/color/RGBtoRGBW.js b/src/api/color/RGBtoRGBW.js index a01ab1eab..00fcf06c4 100644 --- a/src/api/color/RGBtoRGBW.js +++ b/src/api/color/RGBtoRGBW.js @@ -1,15 +1,15 @@ export default function rgb2w(rgb) { - let Ri = rgb.r; - let Gi = rgb.g; - let Bi = rgb.b; - let minVal = Math.min(Ri, Math.min(Gi, Bi)); + const Ri = rgb.r; + const Gi = rgb.g; + const Bi = rgb.b; + const minVal = Math.min(Ri, Math.min(Gi, Bi)); - let w = minVal; - let b = Bi - minVal; - let r = Ri - minVal; - let g = Gi - minVal; + const w = minVal; + const b = Bi - minVal; + const r = Ri - minVal; + const g = Gi - minVal; - let result = { r, g, b, w }; + const result = { r, g, b, w }; return result; } diff --git a/src/api/colormap/index.js b/src/api/colormap/index.js index 0fe00cea6..8beab6163 100644 --- a/src/api/colormap/index.js +++ b/src/api/colormap/index.js @@ -34,9 +34,9 @@ export default class Colormap { setLayerSize(opts) { if (!opts || opts == undefined) return; - if (typeof opts == "number") { + if (typeof opts === "number") { this._layerSize = opts; - } else if (typeof opts == "object") { + } else if (typeof opts === "object") { this._layerSize = opts.keyboardUnderglow ? opts.keyboardUnderglow.rows * opts.keyboardUnderglow.columns : opts.keyboard.rows * opts.keyboard.columns; @@ -48,9 +48,9 @@ export default class Colormap { setLEDMode(opts) { if (!opts || opts == undefined) return; - if (typeof opts == "number") { + if (typeof opts === "number") { this._LEDMode = "RGB"; - } else if (typeof opts == "object") { + } else if (typeof opts === "object") { this._LEDMode = opts.RGBWMode ? "RGBW" : "RGB"; } @@ -58,58 +58,56 @@ export default class Colormap { } _chunk(a, chunkSize) { - var R = []; - for (var i = 0; i < a.length; i += chunkSize) R.push(a.slice(i, i + chunkSize)); + const R = []; + for (let i = 0; i < a.length; i += chunkSize) R.push(a.slice(i, i + chunkSize)); return R; } async _pull(s) { - let paletteData = await s.request("palette"); - let colorMapData = await s.request("colormap.map"); + const paletteData = await s.request("palette"); + const colorMapData = await s.request("colormap.map"); - let palette = + const palette = this._LEDMode != "RGBW" ? this._chunk( paletteData .split(" ") .filter(v => v.length > 0) .map(k => parseInt(k)), - 3 - ).map(color => { - return { - r: color[0], - g: color[1], - b: color[2], - rgb: `rgb(${color[0]}, ${color[1]}, ${color[2]})` - }; - }) + 3, + ).map(color => ({ + r: color[0], + g: color[1], + b: color[2], + rgb: `rgb(${color[0]}, ${color[1]}, ${color[2]})`, + })) : this._chunk( paletteData .split(" ") .filter(v => v.length > 0) .map(k => parseInt(k)), - 4 + 4, ).map(color => { const coloraux = rgbw2b({ r: color[0], g: color[1], b: color[2], w: color[3] }); return { r: coloraux.r, g: coloraux.g, b: coloraux.b, - rgb: coloraux.rgb + rgb: coloraux.rgb, }; }); - let colorMap = this._chunk( + const colorMap = this._chunk( colorMapData .split(" ") .filter(v => v.length > 0) .map(k => parseInt(k)), - this._layerSize + this._layerSize, ); return { - palette: palette, - colorMap: colorMap + palette, + colorMap, }; } @@ -122,8 +120,8 @@ export default class Colormap { if (this._LEDMode != "RGBW") { args = this._flatten(palette.map(color => [color.r, color.g, color.b])).map(v => v.toString()); } else { - let paletteAux = palette.map(color => { - let aux = rgb2w({ r: color.r, g: color.g, b: color.b }); + const paletteAux = palette.map(color => { + const aux = rgb2w({ r: color.r, g: color.g, b: color.b }); return aux; }); args = this._flatten(paletteAux.map(color => [color.r, color.g, color.b, color.w])).map(v => v.toString()); @@ -134,7 +132,7 @@ export default class Colormap { } async _updateColormap(s, colormap) { - let args = this._flatten(colormap).map(v => v.toString()); + const args = this._flatten(colormap).map(v => v.toString()); return await s.request("colormap.map", ...args); } @@ -148,7 +146,7 @@ export default class Colormap { } } -let focus = new Focus(); +const focus = new Focus(); focus.addCommands({ colormap: new Colormap() }); focus.addMethod("setLayerSize", "colormap"); focus.addMethod("setLEDMode", "colormap"); diff --git a/src/api/flash/defyFlasher/NRf52833-flasher.js b/src/api/flash/defyFlasher/NRf52833-flasher.js index f57f4c074..21e90ee1f 100644 --- a/src/api/flash/defyFlasher/NRf52833-flasher.js +++ b/src/api/flash/defyFlasher/NRf52833-flasher.js @@ -17,7 +17,7 @@ import async from "async"; import Focus from "../../focus"; -var MAX_MS = 2000; +const MAX_MS = 2000; const PACKET_SIZE = 4096; @@ -25,7 +25,7 @@ const TYPE_DAT = 0x00; const TYPE_ESA = 0x02; const TYPE_ELA = 0x04; -var focus = new Focus(); +const focus = new Focus(); /** * Writes data to the given bootloader serial port. @@ -38,22 +38,22 @@ var focus = new Focus(); * @param {function} cb - An optional callback to run once all the functions have completed. */ function write_cb(buffer, cb) { - var buf = new Uint8Array(buffer); + const buf = new Uint8Array(buffer); - //the MAX transmission of a serial write is 200 bytes, we therefore - //marshall the given buffer into 200 byte chunks, and serialise their execution. - var send = []; + // the MAX transmission of a serial write is 200 bytes, we therefore + // marshall the given buffer into 200 byte chunks, and serialise their execution. + const send = []; - var total = buf.length; + let total = buf.length; - var bufferTotal = 0; + let bufferTotal = 0; while (bufferTotal < buf.length) { - var bufferSize = total < 200 ? total : 200; + const bufferSize = total < 200 ? total : 200; - //closure to ensure our buffer is local. + // closure to ensure our buffer is local. (buf2send => { - send.push(function (callback) { + send.push(callback => { if (focus._port.write(Buffer.from(buf2send))) { callback(null); } else { @@ -66,7 +66,7 @@ function write_cb(buffer, cb) { total -= bufferSize; } - //execute! + // execute! async.series(send, (err, result) => { cb(err); console.log(result); @@ -78,10 +78,10 @@ function write_cb(buffer, cb) { * @param {function} callback - An optional callback to run once all the functions have completed. */ async function read_cb(callback) { - var time = 0; + let time = 0; - var timeout = function () { - setTimeout(function () { + const timeout = function () { + setTimeout(() => { time += 50; focus._port.drain(err => { if (err) { @@ -102,15 +102,15 @@ async function read_cb(callback) { * Closes the connection to the bootloader. * @param {function} cb - An optional callback to run once all the functions have completed. */ -function disconnect_cb(cb) { - focus.close(); +async function disconnect_cb(cb) { + await focus.close(); cb(null, ""); } function padToN(number, numberToPad) { - var str = ""; + let str = ""; - for (var i = 0; i < numberToPad; i++) str = str + "0"; + for (let i = 0; i < numberToPad; i++) str += "0"; return (str + number).slice(-numberToPad); } @@ -120,17 +120,17 @@ function num2hexstr(number, paddedTo) { } function hex2byte(hex) { - var bytes = []; + const bytes = []; - for (var i = 0; i < hex.length; i += 2) bytes.push(parseInt(hex.substr(i, 2), 16)); + for (let i = 0; i < hex.length; i += 2) bytes.push(parseInt(hex.substr(i, 2), 16)); return bytes; } function str2ab(str) { - var buf = new ArrayBuffer(str.length); // 2 bytes for each char - var bufView = new Uint8Array(buf); - for (var i = 0, strLen = str.length; i < strLen; i++) { + const buf = new ArrayBuffer(str.length); // 2 bytes for each char + const bufView = new Uint8Array(buf); + for (let i = 0, strLen = str.length; i < strLen; i++) { bufView[i] = str.charCodeAt(i) & 0xff; } return buf; @@ -142,28 +142,28 @@ function str2ab(str) { * @returns {object} Щbject for use in firmware. */ function ihex_decode(line) { - var offset = 0; + let offset = 0; - var byteCount = parseInt(line.substr(offset, 2), 16); + const byteCount = parseInt(line.substr(offset, 2), 16); offset += 2; - var address = parseInt(line.substr(offset, 4), 16); + const address = parseInt(line.substr(offset, 4), 16); offset += 4; - var recordtype = parseInt(line.substr(offset, 2), 16); + const recordtype = parseInt(line.substr(offset, 2), 16); offset += 2; - var byteData = hex2byte(line.substr(offset, byteCount * 2)); + const byteData = hex2byte(line.substr(offset, byteCount * 2)); - var bytes = new ArrayBuffer(byteData.length); - var bytesView = new Uint8Array(bytes, 0, byteData.length); + const bytes = new ArrayBuffer(byteData.length); + const bytesView = new Uint8Array(bytes, 0, byteData.length); - for (var i = 0; i < byteData.length; i++) bytesView[i] = byteData[i]; + for (let i = 0; i < byteData.length; i++) bytesView[i] = byteData[i]; return { str: line, len: byteCount, - address: address, + address, type: recordtype, - data: bytesView + data: bytesView, }; } @@ -182,9 +182,9 @@ function ihex_decode(line) { * Start app: S# - Start the application * */ -var NRf52833 = { +const NRf52833 = { flash: (lines, stateUpdate, finished) => { - var func_array = []; + const func_array = []; // let fileData = fs.readFileSync(firmware, { encoding: "utf8" }); // fileData = fileData.replace(/(?:\r\n|\r|\n)/g, ""); @@ -192,14 +192,14 @@ var NRf52833 = { // var lines = fileData.split(":"); // lines.splice(0, 1); - var dataObjects = []; - var total = 0; - var segment = 0; - var linear = 0; - var auxData = []; + const dataObjects = []; + let total = 0; + let segment = 0; + let linear = 0; + const auxData = []; for (var i = 0; i < lines.length; i++) { - var hex = ihex_decode(lines[i]); + const hex = ihex_decode(lines[i]); if (hex.type == TYPE_ESA) { segment = parseInt(hex.str.substr(8, hex.len * 2), 16) * 16; @@ -217,41 +217,41 @@ var NRf52833 = { if (hex.type == TYPE_DAT) { total += hex.len; - if (segment > 0) hex.address = hex.address + segment; - if (linear > 0) hex.address = hex.address + linear; + if (segment > 0) hex.address += segment; + if (linear > 0) hex.address += linear; auxData.push(hex.data); dataObjects.push(hex); } // console.log(num2hexstr(segment, 8), linear, num2hexstr(aux), num2hexstr(hex.address)); } const totalSaved = total; - var hexCount = 0; - var address = dataObjects[0].address; + let hexCount = 0; + let { address } = dataObjects[0]; //ERASE device func_array.push(function (callback) { write_cb(str2ab("E" + num2hexstr(dataObjects[0].address, 8) + "#"), callback); }); - func_array.push(function (callback) { + func_array.push(callback => { read_cb(callback); }); var state = 1, stateT = 50; while (total > 0) { - var bufferSize = total < PACKET_SIZE ? total : PACKET_SIZE; + let bufferSize = total < PACKET_SIZE ? total : PACKET_SIZE; - var buffer = new ArrayBuffer(bufferSize); + let buffer = new ArrayBuffer(bufferSize); - var bufferTotal = 0; + let bufferTotal = 0; while (bufferTotal < bufferSize) { - var currentHex = dataObjects[hexCount]; + const currentHex = dataObjects[hexCount]; if (bufferSize - currentHex.len < bufferTotal) { - //break early, we cannot completely fill the buffer. + // break early, we cannot completely fill the buffer. bufferSize = bufferTotal; - var t = buffer.slice(0, bufferTotal); + const t = buffer.slice(0, bufferTotal); buffer = t; break; } @@ -262,7 +262,7 @@ var NRf52833 = { bufferTotal += currentHex.len; } - //Closure to make sure we localise variables + // Closure to make sure we localise variables (function (localAddress, localBufferSize, localBuffer) { //tell the NRf52833 the size of data being sent. func_array.push(function (callback) { @@ -301,26 +301,26 @@ var NRf52833 = { // }); // START APPLICATION - func_array.push(function (callback) { + func_array.push(callback => { write_cb(str2ab("S#"), callback); }); - //wait for ACK - func_array.push(function (callback) { + // wait for ACK + func_array.push(callback => { read_cb(callback); }); - //DISCONNECT - func_array.push(function (callback) { + // DISCONNECT + func_array.push(callback => { disconnect_cb(callback); }); - //execute our functions in series! - async.series(func_array, function (err, results) { + // execute our functions in series! + async.series(func_array, (err, results) => { if (err) finished(true, results); else finished(false, ""); }); - } + }, }; export default NRf52833; diff --git a/src/api/flash/defyFlasher/flash.js b/src/api/flash/defyFlasher/flash.js index 8af3521a7..542598b8c 100644 --- a/src/api/flash/defyFlasher/flash.js +++ b/src/api/flash/defyFlasher/flash.js @@ -16,10 +16,10 @@ import fs from "fs"; import path from "path"; +import { ipcRenderer } from "electron"; import Focus from "../../focus"; import Hardware from "../../hardware"; import NRf52833 from "./NRf52833-flasher"; -const { ipcRenderer } = require("electron"); /** * Create a new flash raise object. @@ -31,7 +31,7 @@ const { ipcRenderer } = require("electron"); * @emits resetKeyboard * @emits updateFirmware */ -export class FlashDefyWireless { +class FlashDefyWireless { constructor(device) { this.device = device; this.currentPort = null; @@ -41,7 +41,7 @@ export class FlashDefyWireless { backup: {}, log: ["Neuron detected"], serialNumber: device.serialNumber, - firmwareFile: "File has not being selected" + firmwareFile: "File has not being selected", }; this.backup = []; this.delay = ms => new Promise(res => setTimeout(res, ms)); @@ -66,7 +66,7 @@ export class FlashDefyWireless { * @returns {boolean} if device found - true, if no - false */ async foundDevices(hardware, message, bootloader) { - let focus = new Focus(); + const focus = new Focus(); let isFindDevice = false; await focus.find(...hardware).then(devices => { for (const device of devices) { @@ -77,14 +77,14 @@ export class FlashDefyWireless { device.device.bootloader, bootloader, this.device.info.keyboardType, - device.device.info.keyboardType + device.device.info.keyboardType, ); if ( bootloader - ? device.device.bootloader != undefined && - device.device.bootloader == bootloader && - this.device.info.keyboardType == device.device.info.keyboardType - : this.device.info.keyboardType == device.device.info.keyboardType + ? device.device.bootloader !== undefined && + device.device.bootloader === bootloader && + this.device.info.keyboardType === device.device.info.keyboardType + : this.device.info.keyboardType === device.device.info.keyboardType ) { console.log(message); this.currentPort = { ...device }; @@ -100,7 +100,7 @@ export class FlashDefyWireless { * Takes backup settings from keyboard and writes its in backupfile. */ async backupSettings() { - let focus = new Focus(); + const focus = new Focus(); const commands = [ "hardware.keyscan", @@ -130,20 +130,20 @@ export class FlashDefyWireless { "superkeys.waitfor", "superkeys.timeout", "superkeys.repeat", - "superkeys.overlap" + "superkeys.overlap", ]; this.backupFileName = `defy-backup-${this.formatedDate()}.json`; try { let errorFlag = false; const errorMessage = "Firmware update failed, because the settings could not be saved"; - for (let command of commands) { + for (const command of commands) { // Ignore the command if it's not supported if (!focus.isCommandSupported(command)) { continue; } - let res = await focus.command(command); + const res = await focus.command(command); this.backupFileData.backup[command] = typeof res === "string" ? res.trim() : res; if (res === undefined || res === "") { errorFlag = true; @@ -163,8 +163,8 @@ export class FlashDefyWireless { */ async saveBackupFile() { const userDataPath = await ipcRenderer.invoke("get-userPath", "userData"); - const route = path.join(userDataPath, this.backupFileName + ".json"); - console.log("saving file to: " + route); + const route = path.join(userDataPath, `${this.backupFileName}.json`); + console.log(`saving file to: ${route}`); fs.writeFile(route, JSON.stringify(this.backupFileData), err => { if (err) throw err; }); @@ -176,14 +176,13 @@ export class FlashDefyWireless { * @param {*} state State of the DTR flag to be set on the port * @returns {promise} that will resolve when the function has successfully setted the DTR flag */ - setDTR = (port, state) => { - return new Promise(function (resolve, reject) { - port.set({ dtr: state }, function () { + setDTR = (port, state) => + new Promise((resolve, reject) => { + port.set({ dtr: state }, () => { console.log(`DTR set to ${state} at ${new Date(Date.now()).toISOString()}`); resolve(); }); }); - }; /** * Update the baud rate of the port with a Promise @@ -191,14 +190,13 @@ export class FlashDefyWireless { * @param {*} baud BaudRate to be set * @returns {promise} Promise to be returned, that will resolve when the operation is done */ - updatePort = (port, baud) => { - return new Promise(function (resolve, reject) { - port.update({ baudRate: baud }, function () { + updatePort = (port, baud) => + new Promise((resolve, reject) => { + port.update({ baudRate: baud }, () => { console.log(`Port update started at: ${new Date(Date.now()).toISOString()}`); resolve(); }); }); - }; /** * Resets keyboard at the baud rate of 1200bps. Keyboard is restarted with the bootloader @@ -206,7 +204,7 @@ export class FlashDefyWireless { * @returns {promise} */ async resetKeyboard(backup, stateUpdate) { - let focus = new Focus(); + const focus = new Focus(); console.log("reset start"); const errorMessage = "The firmware update couldn't start because the Defy Bootloader wasn't found. Please check our Help Center for more details or schedule a video call with us."; @@ -214,7 +212,9 @@ export class FlashDefyWireless { this.backup = backup; return new Promise(async (resolve, reject) => { stateUpdate("reset", 10); - focus.command("upgrade.neuron"); + focus.command("upgrade.neuron").catch(err => { + if (err) console.log("answer after shutdown not received"); + }); console.log("waiting for bootloader"); await this.delay(1000); stateUpdate("reset", 30); @@ -248,14 +248,14 @@ export class FlashDefyWireless { */ async updateFirmware(firmware, bootloader, stateUpdate) { if (!bootloader) { - let focus = new Focus(); + const focus = new Focus(); await focus.close(); } console.log("Begin update firmware with NRf52833", bootloader); return new Promise(async (resolve, reject) => { try { if (!bootloader) { - let focus = new Focus(); + const focus = new Focus(); if (focus.closed) { await focus.open(this.currentPath, this.currentPort.device, null); } @@ -282,14 +282,14 @@ export class FlashDefyWireless { * Detects keyboard after firmware of bootloader */ async detectKeyboard() { - const timeouts = 2500; //time to wait for keyboard + const timeouts = 2500; // time to wait for keyboard const findTimes = 5; const errorMessage = "The firmware update has failed during the flashing process. Please unplug and replug the keyboard and try again"; console.log("Waiting for keyboard"); - //wait until the bootloader serial port disconnects and the keyboard serial port reconnects - const findKeyboard = async () => { - return new Promise(async resolve => { + // wait until the bootloader serial port disconnects and the keyboard serial port reconnects + const findKeyboard = async () => + new Promise(async resolve => { await this.delay(timeouts); if (await this.foundDevices(Hardware.serial, "Keyboard detected", false)) { resolve(true); @@ -297,7 +297,6 @@ export class FlashDefyWireless { resolve(false); } }); - }; try { await this.runnerFindKeyboard(findKeyboard, findTimes, errorMessage); } catch (e) { @@ -320,10 +319,9 @@ export class FlashDefyWireless { if (await findKeyboard()) { console.log("Ready to restore"); return true; - } else { - console.log(`Keyboard not detected, trying again for ${times} times`); - await this.runnerFindKeyboard(findKeyboard, times - 1, errorMessage); } + console.log(`Keyboard not detected, trying again for ${times} times`); + await this.runnerFindKeyboard(findKeyboard, times - 1, errorMessage); } /** @@ -331,7 +329,7 @@ export class FlashDefyWireless { */ async restoreSettings(backup, stateUpdate) { stateUpdate("restore", 0); - let focus = new Focus(); + const focus = new Focus(); const errorMessage = "Firmware update failed, because the settings could not be restored"; console.log(backup); if (backup === undefined || backup.length === 0) { @@ -357,3 +355,5 @@ export class FlashDefyWireless { } } } + +export default FlashDefyWireless; diff --git a/src/api/flash/defyFlasher/rp2040-flasher.js b/src/api/flash/defyFlasher/rp2040-flasher.js index e54c4104f..892790d57 100644 --- a/src/api/flash/defyFlasher/rp2040-flasher.js +++ b/src/api/flash/defyFlasher/rp2040-flasher.js @@ -31,8 +31,8 @@ export default class rp2040 { delay = ms => new Promise(res => setTimeout(res, ms)); async flash(firmware, stateUpdate, finished) { - ipcRenderer.invoke("list-drives", true).then(result => { - let finalPath = path.join(result, "default.uf2"); + ipcRenderer.invoke("list-drives").then(result => { + const finalPath = path.join(result, "default.uf2"); // console.log("RESULTS!!!", result, file, " to ", finalPath); fs.writeFileSync(finalPath, Buffer.from(new Uint8Array(firmware))); stateUpdate(3, 80); @@ -53,10 +53,9 @@ export default class rp2040 { result = await this.sideFlash.flashSide("left", stateUpdate, wiredOrWireless); if (result.error) finished(result.error, result.message); console.log("Left side flash has error? ", result.error); - step = step + 25; + step += 25; await this.delay(20); finished(false, ""); - return; } async prepareNeuron() { diff --git a/src/api/flash/defyFlasher/sideFlasher.js b/src/api/flash/defyFlasher/sideFlasher.js index d277a8376..b539fc31d 100644 --- a/src/api/flash/defyFlasher/sideFlasher.js +++ b/src/api/flash/defyFlasher/sideFlasher.js @@ -28,10 +28,10 @@ * this program. If not, see . */ -import fs from "fs"; import { crc32 } from "easy-crc"; -import { SerialPort } from "serialport"; -import { DelimiterParser } from "@serialport/parser-delimiter"; + +const { SerialPort } = eval('require("serialport")'); +const { DelimiterParser } = eval('require("@serialport/parser-delimiter")'); export default class sideFlaser { constructor(path, firmwareSides) { @@ -42,17 +42,16 @@ export default class sideFlaser { async prepareNeuron() { // Auxiliary Functions - const sleep = ms => { - return new Promise(resolve => { + const sleep = ms => + new Promise(resolve => { setTimeout(resolve, ms); }); - }; // Serial port instancing const serialport = new SerialPort({ path: this.path, baudRate: 115200 }); const parser = serialport.pipe(new DelimiterParser({ delimiter: "\r\n" })); - let receivedData = []; - parser.on("data", function (data) { + const receivedData = []; + parser.on("data", data => { receivedData.push(data.toString("utf-8")); }); console.log("Upgrading the neuron..."); @@ -66,11 +65,10 @@ export default class sideFlaser { async flashSide(side, stateUpd, wiredOrWireless) { // Auxiliary Functions - const sleep = ms => { - return new Promise(resolve => { + const sleep = ms => + new Promise(resolve => { setTimeout(resolve, ms); }); - }; const recoverSeal = bin => { const uint = new Uint32Array(new Uint8Array(bin).buffer); @@ -81,7 +79,7 @@ export default class sideFlaser { programStart: uint[3], programSize: uint[4], programCrc: uint[5], - programVersion: uint[6] + programVersion: uint[6], }; }; @@ -91,32 +89,32 @@ export default class sideFlaser { } // Update process - console.log(this.firmwareSides); + // console.log(this.firmwareSides); const seal = recoverSeal(this.firmwareSides.slice(0, 28)); console.log("This is the seal", seal); // console.dir(seal); // Serial port instancing - + if (side.includes("left")) await sleep(2000); await SerialPort.list(); const serialport = new SerialPort({ path: this.path, baudRate: 115200 }); const parser = serialport.pipe(new DelimiterParser({ delimiter: "\r\n" })); let receivedData = []; - parser.on("data", function (data) { + parser.on("data", data => { receivedData.push(data.toString("utf-8")); }); // Begin upgrade process for selected side let ans; const sideId = side === "right" ? 0 : 1; - console.log(`flashing ${side} side keyboard`); serialport.write(`upgrade.keyscanner.isConnected ${sideId}\n`); await readLine(); let isConnected = await readLine(); + isConnected = isConnected.includes("true"); serialport.write(`upgrade.keyscanner.isBootloader ${sideId}\n`); await readLine(); let isItBootloader = await readLine(); - if (!isConnected || !isItBootloader) return; + isItBootloader = isItBootloader.includes("true"); serialport.write(`upgrade.keyscanner.begin ${sideId}\n`); await readLine(); ans = await readLine(); @@ -125,56 +123,68 @@ export default class sideFlaser { serialport.write("upgrade.keyscanner.getInfo\n"); await readLine(); ans = await readLine(); - console.log("Received data from Side: ", ans); + console.log("Received Info from Side: ", ans); ans = ans.split(" "); - let info = { + const info = { hardwareVersion: parseInt(ans[0]), flashStart: parseInt(ans[1]), programVersion: parseInt(ans[2]), programCrc: parseInt(ans[3]), - validation: parseInt(ans[4]) + validation: parseInt(ans[4]), }; // Write Firmware FOR Loop let step = 0; - let totalsteps = this.firmwareSides.length / 256; + const totalsteps = this.firmwareSides.length / 256; console.log("CRC check is ", info.programCrc !== seal.programCrc, ", info:", info.programCrc, "seal:", seal.programCrc); - // if (info.programCrc != seal.programCrc) { - let validate = "false", - retry = 0; - // while (validate !== "true" && retry < 3) { - // console.log("retry count: ", retry); - for (let i = 0; i < this.firmwareSides.length; i = i + 256) { - // console.log(`Addres ${i} of ${this.firmwareSides.length}`); - serialport.write("upgrade.keyscanner.sendWrite "); - if (wiredOrWireless == "wireless") await sleep(2); - const writeAction = new Uint8Array(new Uint32Array([info.flashStart + i, 256]).buffer); - const data = this.firmwareSides.slice(i, i + 256); - const crc = new Uint8Array(new Uint32Array([crc32("CRC-32", data)]).buffer); - const blob = new Uint8Array(writeAction.length + data.length + crc.length); - blob.set(writeAction); - blob.set(data, writeAction.length); - blob.set(crc, data.length + writeAction.length); - const buffer = new Buffer.from(blob); - // console.log("write sent: ", buffer); - // console.log("write sent, %", (step / totalsteps) * 100); - serialport.write(buffer); - if (wiredOrWireless == "wireless") await sleep(2); - await readLine(); - let ack = await readLine(); - // console.log("ack received: ", ack); - if (ack.trim() === "false") { - break; + if (info.programCrc !== seal.programCrc || isItBootloader === true) { + let validate = "false", + retry = 0; + // while (validate !== "true" && retry < 3) { + // console.log("retry count: ", retry); + for (let i = 0; i < this.firmwareSides.length; i = i + 256) { + // console.log(`Addres ${i} of ${this.firmwareSides.length}`); + serialport.write("upgrade.keyscanner.sendWrite "); + if (wiredOrWireless == "wireless") await sleep(4); + const writeAction = new Uint8Array(new Uint32Array([info.flashStart + i, 256]).buffer); + const data = this.firmwareSides.slice(i, i + 256); + const crc = new Uint8Array(new Uint32Array([crc32("CRC-32", data)]).buffer); + const blob = new Uint8Array(writeAction.length + data.length + crc.length); + blob.set(writeAction); + blob.set(data, writeAction.length); + blob.set(crc, data.length + writeAction.length); + const buffer = new Buffer.from(blob); + // console.log("write sent: ", buffer); + // console.log("write sent, %", (step / totalsteps) * 100); + serialport.write(buffer); + if (wiredOrWireless == "wireless") await sleep(4); + let ack = await readLine(); + ack = ack + (await readLine()); + // console.log("ack received: ", ack); + if (!ack.includes("true") || ack.includes("false")) { + let retries = 3; + if (wiredOrWireless == "wireless") await sleep(100); + while (retries > 0 && (!ack.includes("true") || ack.includes("false"))) { + serialport.write("upgrade.keyscanner.sendWrite "); + if (wiredOrWireless == "wireless") await sleep(10); + serialport.write(buffer); + if (wiredOrWireless == "wireless") await sleep(10); + ack = await readLine(); + ack = ack + (await readLine()); + console.log(`received ${ack} after ${3 - retries} retires`); + retries--; + } + } + stateUpd(side, (step / totalsteps) * 100); + step++; + // } } - stateUpd(side, (step / totalsteps) * 100); - step++; - // } + serialport.write("upgrade.keyscanner.validate\n"); + validate = await readLine(); + validate = validate + (await readLine()); + console.log("result of validation", validate); + // retry++; } - serialport.write("upgrade.keyscanner.validate\n"); - await readLine(); - validate = await readLine(); - // retry++; - // } serialport.write("upgrade.keyscanner.finish\n"); await readLine(); @@ -185,6 +195,7 @@ export default class sideFlaser { } await serialport.close(); + if (side.includes("left")) await sleep(2000); console.log("after serialport close"); return { error: false, message: "" }; diff --git a/src/api/flash/index.js b/src/api/flash/index.js index 3cc0d1bfb..80899ae3a 100644 --- a/src/api/flash/index.js +++ b/src/api/flash/index.js @@ -1,4 +1,4 @@ import { FlashRaise } from "./raiseFlasher/flash"; -import { FlashDefyWired, FlashDefyWireless } from "./defyFlasher/flash"; +import FlashDefyWireless from "./defyFlasher/flash"; -export { FlashRaise, FlashDefyWired, FlashDefyWireless }; +export { FlashRaise, FlashDefyWireless }; diff --git a/src/api/flash/raiseFlasher/arduino-flasher.js b/src/api/flash/raiseFlasher/arduino-flasher.js index 50e419c33..e184c46f4 100644 --- a/src/api/flash/raiseFlasher/arduino-flasher.js +++ b/src/api/flash/raiseFlasher/arduino-flasher.js @@ -18,14 +18,14 @@ import async from "async"; import fs from "fs"; import Focus from "../../focus"; -var MAX_MS = 2000; +const MAX_MS = 2000; const PACKET_SIZE = 4096; const TYPE_DAT = 0x00; const TYPE_ELA = 0x04; -var focus = new Focus(); +const focus = new Focus(); /** * Writes data to the given bootloader serial port. @@ -38,22 +38,22 @@ var focus = new Focus(); * @param {function} cb - An optional callback to run once all the functions have completed. */ function write_cb(buffer, cb) { - var buf = new Uint8Array(buffer); + const buf = new Uint8Array(buffer); - //the MAX transmission of a serial write is 200 bytes, we therefore - //marshall the given buffer into 200 byte chunks, and serialise their execution. - var send = []; + // the MAX transmission of a serial write is 200 bytes, we therefore + // marshall the given buffer into 200 byte chunks, and serialise their execution. + const send = []; - var total = buf.length; + let total = buf.length; - var bufferTotal = 0; + let bufferTotal = 0; while (bufferTotal < buf.length) { - var bufferSize = total < 200 ? total : 200; + const bufferSize = total < 200 ? total : 200; - //closure to ensure our buffer is local. + // closure to ensure our buffer is local. (buf2send => { - send.push(function (callback) { + send.push(callback => { if (focus._port.write(Buffer.from(buf2send))) { callback(null); } else { @@ -66,7 +66,7 @@ function write_cb(buffer, cb) { total -= bufferSize; } - //execute! + // execute! async.series(send, (err, result) => { cb(err); }); @@ -77,10 +77,10 @@ function write_cb(buffer, cb) { * @param {function} callback - An optional callback to run once all the functions have completed. */ async function read_cb(callback) { - var time = 0; + let time = 0; - var timeout = function () { - setTimeout(function () { + const timeout = function () { + setTimeout(() => { time += 50; focus._port.drain(err => { if (err) { @@ -101,15 +101,15 @@ async function read_cb(callback) { * Closes the connection to the bootloader. * @param {function} cb - An optional callback to run once all the functions have completed. */ -function disconnect_cb(cb) { - focus.close(); +async function disconnect_cb(cb) { + await focus.close(); cb(null, ""); } function padToN(number, numberToPad) { - var str = ""; + let str = ""; - for (var i = 0; i < numberToPad; i++) str = str + "0"; + for (let i = 0; i < numberToPad; i++) str += "0"; return (str + number).slice(-numberToPad); } @@ -119,17 +119,17 @@ function num2hexstr(number, paddedTo) { } function hex2byte(hex) { - var bytes = []; + const bytes = []; - for (var i = 0; i < hex.length; i += 2) bytes.push(parseInt(hex.substr(i, 2), 16)); + for (let i = 0; i < hex.length; i += 2) bytes.push(parseInt(hex.substr(i, 2), 16)); return bytes; } function str2ab(str) { - var buf = new ArrayBuffer(str.length); // 2 bytes for each char - var bufView = new Uint8Array(buf); - for (var i = 0, strLen = str.length; i < strLen; i++) { + const buf = new ArrayBuffer(str.length); // 2 bytes for each char + const bufView = new Uint8Array(buf); + for (let i = 0, strLen = str.length; i < strLen; i++) { bufView[i] = str.charCodeAt(i) & 0xff; } return buf; @@ -141,28 +141,28 @@ function str2ab(str) { * @returns {object} Щbject for use in firmware. */ function ihex_decode(line) { - var offset = 0; + let offset = 0; - var byteCount = parseInt(line.substr(offset, 2), 16); + const byteCount = parseInt(line.substr(offset, 2), 16); offset += 2; - var address = parseInt(line.substr(offset, 4), 16); + const address = parseInt(line.substr(offset, 4), 16); offset += 4; - var recordtype = parseInt(line.substr(offset, 2), 16); + const recordtype = parseInt(line.substr(offset, 2), 16); offset += 2; - var byteData = hex2byte(line.substr(offset, byteCount * 2)); + const byteData = hex2byte(line.substr(offset, byteCount * 2)); - var bytes = new ArrayBuffer(byteData.length); - var bytesView = new Uint8Array(bytes, 0, byteData.length); + const bytes = new ArrayBuffer(byteData.length); + const bytesView = new Uint8Array(bytes, 0, byteData.length); - for (var i = 0; i < byteData.length; i++) bytesView[i] = byteData[i]; + for (let i = 0; i < byteData.length; i++) bytesView[i] = byteData[i]; return { str: line, len: byteCount, - address: address, + address, type: recordtype, - data: bytesView + data: bytesView, }; } @@ -171,35 +171,29 @@ function ihex_decode(line) { */ export var arduino = { flash: (lines, stateUpdate, finished) => { - var func_array = []; + const func_array = []; - //CLEAR line - func_array.push(function (callback) { + // CLEAR line + func_array.push(callback => { write_cb(str2ab("N#"), callback); }); - func_array.push(function (callback) { + func_array.push(callback => { read_cb(callback); }); - //ERASE device - func_array.push(function (callback) { + // ERASE device + func_array.push(callback => { write_cb(str2ab("X00002000#"), callback); }); - func_array.push(function (callback) { + func_array.push(callback => { read_cb(callback); }); - // let fileData = fs.readFileSync(file, { encoding: "utf8" }); - // fileData = fileData.replace(/(?:\r\n|\r|\n)/g, ""); - - // var lines = fileData.split(":"); - // lines.splice(0, 1); - - var dataObjects = []; - var total = 0; + const dataObjects = []; + let total = 0; for (var i = 0; i < lines.length; i++) { - var hex = ihex_decode(lines[i]); + const hex = ihex_decode(lines[i]); if (hex.type == TYPE_DAT || hex.type == TYPE_ELA) { total += hex.len; @@ -207,48 +201,45 @@ export var arduino = { } } - var hexCount = 0; - var address = dataObjects[0].address; + let hexCount = 0; + let { address } = dataObjects[0]; if (address < 2000) { - finished( - true, - "You're attempting to overwrite the bootloader... (0x" + padToN(num2hexstr(dataObjects[0].address), 8) + ")" - ); + finished(true, `You're attempting to overwrite the bootloader... (0x${padToN(num2hexstr(dataObjects[0].address), 8)})`); return; } var state = 1, stateT = 20; while (total > 0) { - var bufferSize = total < PACKET_SIZE ? total : PACKET_SIZE; + let bufferSize = total < PACKET_SIZE ? total : PACKET_SIZE; - var buffer = new ArrayBuffer(bufferSize); + let buffer = new ArrayBuffer(bufferSize); - var bufferTotal = 0; + let bufferTotal = 0; while (bufferTotal < bufferSize) { - var currentHex = dataObjects[hexCount]; + const currentHex = dataObjects[hexCount]; if (bufferSize - currentHex.len < bufferTotal) { - //break early, we cannot completely fill the buffer. + // break early, we cannot completely fill the buffer. bufferSize = bufferTotal; var t = buffer.slice(0, bufferTotal); buffer = t; break; } - //check for Extended linear addressing... + // check for Extended linear addressing... if (currentHex.type == TYPE_ELA) { if (bufferTotal > 0) { - //break early, we're going to move to a different memory vector. + // break early, we're going to move to a different memory vector. bufferSize = bufferTotal; t = buffer.slice(0, bufferTotal); buffer = t; break; } - //set the address if applicable... + // set the address if applicable... address = currentHex.address << 16; } @@ -258,7 +249,7 @@ export var arduino = { bufferTotal += currentHex.len; } - //Closure to make sure we localise variables + // Closure to make sure we localise variables (function (localAddress, localBufferSize, localBuffer) { //tell the arduino we are writing at memory 20005000, for N bytes. func_array.push(function (callback) { @@ -275,8 +266,8 @@ export var arduino = { write_cb(str2ab("Y20005000,0#"), callback); }); - //wait for ACK - func_array.push(function (callback) { + // wait for ACK + func_array.push(callback => { read_cb(callback); }); @@ -295,20 +286,20 @@ export var arduino = { total -= bufferSize; address += bufferSize; } - //CLEANUP - func_array.push(function (callback) { + // CLEANUP + func_array.push(callback => { write_cb(str2ab("WE000ED0C,05FA0004#"), callback); }); - //DISCONNECT - func_array.push(function (callback) { + // DISCONNECT + func_array.push(callback => { disconnect_cb(callback); }); - //execute our functions in series! - async.series(func_array, function (err, results) { + // execute our functions in series! + async.series(func_array, (err, results) => { if (err) finished(true, results); else finished(false, ""); }); - } + }, }; diff --git a/src/api/flash/raiseFlasher/flash.js b/src/api/flash/raiseFlasher/flash.js index 036b3a4d9..17bb8408d 100644 --- a/src/api/flash/raiseFlasher/flash.js +++ b/src/api/flash/raiseFlasher/flash.js @@ -16,10 +16,10 @@ import fs from "fs"; import path from "path"; +import { ipcRenderer } from "electron"; import Focus from "../../focus"; import Hardware from "../../hardware"; import { arduino } from "./arduino-flasher"; -const { ipcRenderer } = require("electron"); /** * Create a new flash raise object. @@ -40,7 +40,7 @@ export class FlashRaise { backup: {}, log: ["Neuron detected"], serialNumber: device.serialNumber, - firmwareFile: "File has not being selected" + firmwareFile: "File has not being selected", }; this.backup = []; this.delay = ms => new Promise(res => setTimeout(res, ms)); @@ -65,7 +65,7 @@ export class FlashRaise { * @returns {boolean} if device found - true, if no - false */ async foundDevices(hardware, message, bootloader) { - let focus = new Focus(); + const focus = new Focus(); let isFindDevice = false; console.log("looking at device", this.device); await focus.find(...hardware).then(devices => { @@ -77,7 +77,7 @@ export class FlashRaise { device.device.bootloader, bootloader, this.device.info.keyboardType, - device.device.info.keyboardType + device.device.info.keyboardType, ); if ( bootloader @@ -99,7 +99,7 @@ export class FlashRaise { * Takes backup settings from keyboard and writes its in backupfile. */ async backupSettings() { - let focus = new Focus(); + const focus = new Focus(); const commands = [ "hardware.keyscan", @@ -129,20 +129,20 @@ export class FlashRaise { "superkeys.waitfor", "superkeys.timeout", "superkeys.repeat", - "superkeys.overlap" + "superkeys.overlap", ]; this.backupFileName = `Raise-backup-${this.formatedDate()}.json`; try { let errorFlag = false; const errorMessage = "Firmware update failed, because the settings could not be saved"; - for (let command of commands) { + for (const command of commands) { // Ignore the command if it's not supported if (!focus.isCommandSupported(command)) { continue; } - let res = await focus.command(command); + const res = await focus.command(command); this.backupFileData.backup[command] = typeof res === "string" ? res.trim() : res; if (res === undefined || res === "") { errorFlag = true; @@ -175,14 +175,13 @@ export class FlashRaise { * @param {*} state State of the DTR flag to be set on the port * @returns {promise} that will resolve when the function has successfully setted the DTR flag */ - setDTR = (port, state) => { - return new Promise(function (resolve, reject) { - port.set({ dtr: state }, function () { + setDTR = (port, state) => + new Promise((resolve, reject) => { + port.set({ dtr: state }, () => { console.log(`DTR set to ${state} at ${new Date(Date.now()).toISOString()}`); resolve(); }); }); - }; /** * Update the baud rate of the port with a Promise @@ -190,14 +189,13 @@ export class FlashRaise { * @param {*} baud BaudRate to be set * @returns {promise} Promise to be returned, that will resolve when the operation is done */ - updatePort = (port, baud) => { - return new Promise(function (resolve, reject) { - port.update({ baudRate: baud }, function () { + updatePort = (port, baud) => + new Promise((resolve, reject) => { + port.update({ baudRate: baud }, () => { console.log(`Port update started at: ${new Date(Date.now()).toISOString()}`); resolve(); }); }); - }; /** * Resets keyboard at the baud rate of 1200bps. Keyboard is restarted with the bootloader @@ -209,10 +207,10 @@ export class FlashRaise { console.log("reset start", port); const errorMessage = "The firmware update couldn't start because the Raise Bootloader wasn't found. Please check our Help Center for more details or schedule a video call with us."; - let timeouts = { + const timeouts = { dtrToggle: 1000, // Time to wait (ms) between toggling DTR waitingClose: 2000, // Time to wait for boot loader - bootLoaderUp: 1000 // Time to wait for the boot loader to come up + bootLoaderUp: 1000, // Time to wait for the boot loader to come up }; return new Promise(async (resolve, reject) => { stateUpdate("reset", 10); @@ -254,7 +252,7 @@ export class FlashRaise { * @returns {promise} */ async updateFirmware(filename, stateUpdate) { - let focus = new Focus(); + const focus = new Focus(); console.log("Begin update firmware with arduino-flasher"); // console.log(JSON.stringify(focus)); return new Promise(async (resolve, reject) => { @@ -281,14 +279,14 @@ export class FlashRaise { * Detects keyboard after firmware of bootloader */ async detectKeyboard() { - const timeouts = 2500; //time to wait for keyboard + const timeouts = 2500; // time to wait for keyboard const findTimes = 5; const errorMessage = "The firmware update has failed during the flashing process. Please unplug and replug the keyboard and try again"; console.log("Waiting for keyboard"); - //wait until the bootloader serial port disconnects and the keyboard serial port reconnects - const findKeyboard = async () => { - return new Promise(async resolve => { + // wait until the bootloader serial port disconnects and the keyboard serial port reconnects + const findKeyboard = async () => + new Promise(async resolve => { await this.delay(timeouts); if (await this.foundDevices(Hardware.serial, "Keyboard detected", false)) { resolve(true); @@ -296,7 +294,6 @@ export class FlashRaise { resolve(false); } }); - }; try { await this.runnerFindKeyboard(findKeyboard, findTimes, errorMessage); } catch (e) { @@ -319,10 +316,9 @@ export class FlashRaise { if (await findKeyboard()) { console.log("Ready to restore"); return true; - } else { - console.log(`Keyboard not detected, trying again for ${times} times`); - await this.runnerFindKeyboard(findKeyboard, times - 1, errorMessage); } + console.log(`Keyboard not detected, trying again for ${times} times`); + await this.runnerFindKeyboard(findKeyboard, times - 1, errorMessage); } /** diff --git a/src/api/focus/index.js b/src/api/focus/index.js index 8b054576e..ae5cc5116 100644 --- a/src/api/focus/index.js +++ b/src/api/focus/index.js @@ -15,21 +15,20 @@ * along with this program. If not, see . */ -import { SerialPort } from "serialport"; -import { DelimiterParser } from "@serialport/parser-delimiter"; import fs from "fs"; import { spawn } from "child_process"; -import { inspect } from "util"; + +const { SerialPort } = eval('require("serialport")'); +const { DelimiterParser } = eval('require("@serialport/parser-delimiter")'); global.focus_instance = null; class Focus { constructor() { - this.delay = ms => new Promise(res => setTimeout(res, ms)); if (!global.focus_instance) { global.focus_instance = this; this.commands = { - help: this._help + help: this._help, }; this.timeout = 5000; this.debug = false; @@ -39,31 +38,34 @@ class Focus { return global.focus_instance; } + delay = ms => new Promise(res => setTimeout(res, ms)); + debugLog(...args) { if (!this.debug) return; console.log(...args); } async find(...devices) { - let portList = await SerialPort.list(); + const portList = await SerialPort.list(); - let found_devices = []; + const foundDevices = []; this.debugLog("focus.find: portList:", portList, "devices:", devices); - - for (let port of portList) { - for (let device of devices) { - if (parseInt("0x" + port.productId) == device.usb.productId && parseInt("0x" + port.vendorId) == device.usb.vendorId) { - let newPort = Object.assign({}, port); + console.log("Passed devices", devices); + console.log("Port list from where"); + for (const port of portList) { + for (const device of devices) { + if (parseInt(`0x${port.productId}`) == device.usb.productId && parseInt(`0x${port.vendorId}`) == device.usb.vendorId) { + const newPort = { ...port }; newPort.device = device; - found_devices.push(newPort); + foundDevices.push(newPort); } } } - this.debugLog("focus.find: found_devices:", found_devices); + this.debugLog("focus.find: foundDevices:", foundDevices); - return found_devices; + return foundDevices; } async fileOpen(info, file) { @@ -83,152 +85,119 @@ class Focus { return true; } - console.warn("Warning! device being opened", device.isOpen, device, info); - let count = 0; - while (device._eventsCount < 5 && count < 8) { - console.log("waiting for device"); - await this.delay(250); - count++; + if (this._port !== undefined && this._port.isOpen === false) { + this.close(); } - if (count == 8) return; - if (this._port) this._port.close(); - if (typeof device == "string") { - if (!info) throw new Error("Device descriptor argument is mandatory"); - this._port = new SerialPort( - { - path: device, - baudRate: 115200 - }, - err => { - if (err !== null) { - console.error(err); - } - } - ); - } else if (typeof device == "object") { - if (device.hasOwnProperty("binding")) { - if (!info) throw new Error("Device descriptor argument is mandatory"); - const path = device.path; - await device.close(); - this._port = new SerialPort( - { - path: path, - baudRate: 115200 - }, - err => { - if (err !== null) { - console.error(err); - } - } - ); + + // console.log("Warning! device being opened"); + // console.log("port status opened?", this._port ? this._port.isOpen : "unknown"); + // console.log("received device", device); + // console.log("received info: ", info); + try { + let path; + if (typeof device === "string") path = device; + if (typeof device === "object") path = device.settings.path; + if (path !== undefined) { + const testingDevices = await SerialPort.list(); + console.log(testingDevices); + this._port = new SerialPort({ path, baudRate: 115200, autoOpen: false, endOnClose: true }); + await this._port.open(err => { + if (err) console.error("error when opening port: ", err); + else console.log("connected"); + }); } else { - let devices = await this.find(device); - if (devices && devices.length >= 1) { - this._port = new SerialPort( - { - path: devices[0].path, - baudRate: 115200 - }, - err => { - if (err !== null) { - console.error(err); - } - } - ); - } - info = device; + throw Error("device not a string or object!"); } - } else { - throw new Error("Invalid argument"); - } - this.device = info; - this.parser = this._port.pipe(new DelimiterParser({ delimiter: "\r\n" })); - this.result = ""; - this.callbacks = []; - this.supportedCommands = []; - this.parser.on("data", data => { - data = data.toString("utf-8"); - this.debugLog("focus: incoming data:", data); - - if (data == "." || data.endsWith(".")) { - let result = this.result, - resolve = this.callbacks.shift(); - - this.result = ""; - if (resolve) { - resolve(result); - } - } else { - if (this.result.length == 0) { + this.device = info; + this.parser = this._port.pipe(new DelimiterParser({ delimiter: "\r\n" })); + this.result = ""; + this.callbacks = []; + this.supportedCommands = []; + this.parser.on("data", data => { + data = data.toString("utf-8"); + this.debugLog("focus: incoming data:", data); + + if (data === "." || data.endsWith(".")) { + const { result } = this; + const resolve = this.callbacks.shift(); + + this.result = ""; + if (resolve) { + resolve(result.trim()); + } + } else if (this.result.length === 0) { this.result = data; } else { - this.result += "\r\n" + data; + this.result += `\r\n${data}`; } - } - }); + }); - if (process.platform == "darwin") { - await spawn("stty", ["-f", this._port.path, "clocal"]); - } + if (process.platform === "darwin") { + spawn("stty", ["-f", this._port.path, "clocal"]); + } - // It's not necessary to retreive the supported commands in bootloader mode - if (!this.device.bootloader) { - try { - this.supportedCommands = await this.command("help"); - } catch (e) { - console.warn(e); - // Ignore + // It's not necessary to retreive the supported commands in bootloader mode + if (!this.device.bootloader) { + try { + this.supportedCommands = await this.command("help"); + } catch (e) { + console.warn(e); + // Ignore + } } + } catch (error) { + console.error("found this error while opening!", error); + // throw new Error("Unable to connect"); } - // Setup close port alert - this._port.on("close", function (error) { - if (error !== null && error.disconnected === true) { - console.error("Error: device disconnected without control"); - this.closed = true; - } else { - console.warn("Warning: device disconnected by user interaction"); - this.closed = true; - } - }); // Setup error port alert - this._port.on("error", function (err) { - console.error("Error on SerialPort: " + err); + this._port.on("error", async function (err) { + console.error(`Error on SerialPort: ${err}`); + await this._port.close(); }); this.closed = false; return this._port; } - async close() { - // if (this._port) { - // console.log("closing port data >>"); - // console.log(inspect(this._port)); - // console.log(this._port._eventsCount); - // console.log( - // "Port State: ", - // this._port ? this._port.isOpen : "unable to open" - // ); - // } - try { - console.log("CLOSING!!", this._port); - if (this._port && this._port.isOpen) { - await this._port.close(); - } - } catch (error) { - console.log(error); - } - + clearContext() { this.result = ""; this.callbacks = []; - this._port = null; this.device = null; this.supportedCommands = []; - this.closed = true; this.file = false; this.fileData = null; } + async close() { + if (this.file !== false) { + this.clearContext(); + this.closed = true; + return true; + } + let result; + try { + if (this._port) { + while (this._port.isOpen === true) { + console.log("Closing device port!!", this._port); + result = await this._port.close(); + // console.log("is it still open? ", this._port.isOpen, result); + await this._port.removeAllListeners(); + await this._port.destroy(); + // console.log("is it destroyed?", this._port.destroyed); + } + delete this._port; + this.closed = true; + await this.delay(200); + } + } catch (error) { + console.error("error when closing", error); + } + + this.clearContext(); + return result; + } + async isDeviceAccessible(port) { if (process.platform !== "linux") return true; @@ -240,21 +209,21 @@ class Focus { return true; } - async isDeviceSupported(port) { - if (!port.device.isDeviceSupported) { + async isDeviceSupported(device) { + if (!device.device.isDeviceSupported) { return true; } - const supported = await port.device.isDeviceSupported(port); - this.debugLog("focus.isDeviceSupported: port=", port, "supported=", supported); + const supported = await device.device.isDeviceSupported(device); + this.debugLog("focus.isDeviceSupported: port=", device, "supported=", supported); return supported; } isCommandSupported(cmd) { - return this.supportedCommands.indexOf(cmd) != -1; + return this.supportedCommands.indexOf(cmd) !== -1; } async _write_parts(parts, cb) { - if (!parts || parts.length == 0) { + if (!parts || parts.length === 0) { cb(); return; } @@ -270,13 +239,18 @@ class Focus { request(cmd, ...args) { this.debugLog("focus.request:", cmd, ...args); return new Promise((resolve, reject) => { - let timer = setTimeout(() => { + const timer = setTimeout(() => { reject("Communication timeout"); }, this.timeout); - this._request(cmd, ...args).then(data => { - clearTimeout(timer); - resolve(data); - }); + this._request(cmd, ...args) + .then(data => { + clearTimeout(timer); + resolve(data); + }) + .catch(err => { + console.log("Error sending request from focus", err); + reject("Error sending request from focus"); + }); }); } @@ -286,8 +260,11 @@ class Focus { if (args.length > 0 && this.fileData.virtual[cmd].eraseable) { this.fileData.virtual[cmd].data = args.join(" "); } - console.log("reading virtual data"); - const result = this.fileData.virtual[cmd].data; + console.log(`reading virtual data from ${cmd}: `, this.fileData.virtual[cmd]); + let result = ""; + if (this.fileData.virtual[cmd] !== undefined) { + result = this.fileData.virtual[cmd].data; + } console.log(result); return new Promise(resolve => { resolve(result); @@ -298,7 +275,7 @@ class Focus { let request = cmd; if (args && args.length > 0) { - request = request + " " + args.join(" "); + request = `${request} ${args.join(" ")}`; } request += "\n"; @@ -309,13 +286,13 @@ class Focus { } async command(cmd, ...args) { - if (typeof this.commands[cmd] == "function") { + if (typeof this.commands[cmd] === "function") { return this.commands[cmd](this, ...args); - } else if (typeof this.commands[cmd] == "object") { + } + if (typeof this.commands[cmd] === "object") { return this.commands[cmd].focus(this, ...args); - } else { - return this.request(cmd, ...args); } + return this.request(cmd, ...args); } addCommands(cmds) { @@ -324,7 +301,7 @@ class Focus { addMethod(methodName, command) { if (this[methodName]) { - let tmp = this[methodName]; + const tmp = this[methodName]; this[methodName] = (...args) => { tmp(...args); this.commands[command][methodName](...args); @@ -337,7 +314,7 @@ class Focus { } async _help(s) { - let data = await s.request("help"); + const data = await s.request("help"); return data.split(/\r?\n/).filter(v => v.length > 0); } } diff --git a/src/api/hardware-dygma-defy-wired/components/Keymap.js b/src/api/hardware-dygma-defy-wired/components/Keymap.js index 9bc4f6c14..dfa1ee3e9 100644 --- a/src/api/hardware-dygma-defy-wired/components/Keymap.js +++ b/src/api/hardware-dygma-defy-wired/components/Keymap.js @@ -41,7 +41,7 @@ const led_map = [ 3 + LEDS_LEFT_KEYS, 2 + LEDS_LEFT_KEYS, 1 + LEDS_LEFT_KEYS, - 0 + LEDS_LEFT_KEYS + 0 + LEDS_LEFT_KEYS, ], [ 7, @@ -59,7 +59,7 @@ const led_map = [ 10 + LEDS_LEFT_KEYS, 9 + LEDS_LEFT_KEYS, 8 + LEDS_LEFT_KEYS, - 7 + LEDS_LEFT_KEYS + 7 + LEDS_LEFT_KEYS, ], [ 14, @@ -77,7 +77,7 @@ const led_map = [ 17 + LEDS_LEFT_KEYS, 16 + LEDS_LEFT_KEYS, 15 + LEDS_LEFT_KEYS, - 14 + LEDS_LEFT_KEYS + 14 + LEDS_LEFT_KEYS, ], [ 21, @@ -95,7 +95,7 @@ const led_map = [ 24 + LEDS_LEFT_KEYS, 23 + LEDS_LEFT_KEYS, 22 + LEDS_LEFT_KEYS, - 21 + LEDS_LEFT_KEYS + 21 + LEDS_LEFT_KEYS, ], [ 27, @@ -113,8 +113,8 @@ const led_map = [ 30 + LEDS_LEFT_KEYS, 29 + LEDS_LEFT_KEYS, 28 + LEDS_LEFT_KEYS, - 27 + LEDS_LEFT_KEYS - ] + 27 + LEDS_LEFT_KEYS, + ], ]; const no_key_led_map = [...Array.apply(0, Array(107)).map((_, i) => i + UNDERGLOW)]; @@ -125,7 +125,7 @@ const keysRowsPosition = { row3: 169, row4: 236, row5: 303, - row6: 370 + row6: 370, }; const keysRowsDefyPosition = { @@ -133,25 +133,25 @@ const keysRowsDefyPosition = { y0: 111, y1: 88, y2: 71, - y3: 121 + y3: 121, }, row2: { y0: 176, y1: 153, y2: 137, - y3: 186 + y3: 186, }, row3: { y0: 241, y1: 217, y2: 203, - y3: 252 + y3: 252, }, row4: { y0: 306, y1: 282, - y2: 268 - } + y2: 268, + }, }; const keysColumnsPosition = { x0: 105, @@ -167,14 +167,14 @@ const keysColumnsPosition = { x10: 913, x11: 978, x12: 1043, - x13: 1107 + x13: 1107, }; class KeymapDEFY extends React.Component { constructor(props) { super(props); this.state = { - underglowIndex: null + underglowIndex: null, }; } @@ -200,22 +200,18 @@ class KeymapDEFY extends React.Component { } return aux; }; - let keyIndex = (row, col) => { - return col !== undefined ? row * 16 + col : row + 11; - }; + const keyIndex = (row, col) => (col !== undefined ? row * 16 + col : row + 11); - let getLabel = (row, col) => { - return keymap[keyIndex(row, col)]; - }; + const getLabel = (row, col) => keymap[keyIndex(row, col)]; - let isSelected = (row, col) => { + const isSelected = (row, col) => { const selectIndex = keyIndex(row, col); return underglowIndex ? underglowIndex == selectIndex : this.props.selectedKey == selectIndex; }; - let stroke = (row, col) => (isSelected(row, col) ? (this.props.darkMode ? "#fff" : "#000") : "#b3b3b3"); + const stroke = (row, col) => (isSelected(row, col) ? (this.props.darkMode ? "#fff" : "#000") : "#b3b3b3"); - let getStrokeWidth = (row, col) => (isSelected(row, col) ? "3.0" : "1.5"); + const getStrokeWidth = (row, col) => (isSelected(row, col) ? "3.0" : "1.5"); const colormap = this.props.colormap || @@ -228,23 +224,22 @@ class KeymapDEFY extends React.Component { : Array(16) .fill() .map(() => ({ - rgb: "#ffffff" + rgb: "#ffffff", })); // console.log("showing BARS", colormap, palette, led_map, no_key_led_map); - let getColor = (row, col) => { - let ledIndex = col !== undefined ? led_map[parseInt(row)][parseInt(col)] : no_key_led_map[row - UNDERGLOW]; - let colorIndex = colormap[ledIndex]; + const getColor = (row, col) => { + const ledIndex = col !== undefined ? led_map[parseInt(row)][parseInt(col)] : no_key_led_map[row - UNDERGLOW]; + const colorIndex = colormap[ledIndex]; // console.log("testing colors", row, col, ledIndex, colorIndex, row - UNDERGLOW); - let color = palette[colorIndex].rgb; + const color = palette[colorIndex].rgb; return color; }; - let getLEDIndex = (row, col) => { - return col !== undefined ? led_map[parseInt(row)][parseInt(col)] : no_key_led_map[row - UNDERGLOW]; - }; + const getLEDIndex = (row, col) => + col !== undefined ? led_map[parseInt(row)][parseInt(col)] : no_key_led_map[row - UNDERGLOW]; const onClick = e => { this.setState({ underglowIndex: null }); @@ -265,15 +260,13 @@ class KeymapDEFY extends React.Component { * @props {string} class - className of the button * @props {string} textLength length of the text if the button is small and additional text is longer then button */ - const GetCurrentKeyElement = props => { + function GetCurrentKeyElement(props) { return ( - <> - - {props.word}{" "} - - + + {props.word}{" "} + ); - }; + } /** * getDivideKeys - divides words on keyboard keys * @param {string} str Name of key @@ -293,24 +286,24 @@ class KeymapDEFY extends React.Component { return ( ); - } else if (str.length === 1) { + } + if (str.length === 1) { return shortWords.map((word, index) => ( )); - } else if (str.toLowerCase().endsWith("to")) { + } + if (str.toLowerCase().endsWith("to")) { return longWords.map((word, index) => ( )); - } else if ( - str.length > 8 && - smallKey === true && - (str.startsWith("C+") || str.startsWith("A+") || str.startsWith("AGr+")) - ) { + } + if (str.length > 8 && smallKey === true && (str.startsWith("C+") || str.startsWith("A+") || str.startsWith("AGr+"))) { return ; - } else if ( + } + if ( longWords.length === 1 && shortWords.length > 7 && !str.startsWith("C+") && @@ -320,22 +313,24 @@ class KeymapDEFY extends React.Component { ) { return longWords.map((word, index) => ( - + {` `} )); - } else if (longWords.length === 1) { + } + if (longWords.length === 1) { return longWords.map((word, index) => ); - } else if (longWords.length > 1 && smallKey === true) { + } + if (longWords.length > 1 && smallKey === true) { return longWords.map((word, index) => ( )); - } else if (longWords.length > 1) { - return ; - } else { + } + if (longWords.length > 1) { return ; } + return ; }; const topsArr = ["LEDEFF.", "SCadet", "Steno", "M.Btn", "Leader", "Numpad", "Media", "OSL", "Mouse", "M.Wheel", "M.Warp"]; const topsArrTransfer = ["SHIFTTO", "LockTo"]; @@ -364,3382 +359,3380 @@ class KeymapDEFY extends React.Component { // console.log("Selected Key: ", this.props.selectedKey); // console.log("Selected LED: ", this.props.selectedLED); return ( - <> - - { - setUndeglowIndex(176, e); - }} - className="key" - fill={getColor(176)} - stroke={stroke(176)} - strokeWidth={getStrokeWidth(176)} - dataLedIndex={getLEDIndex(176)} - dataKeyIndex={keyIndex(176)} - dataLayer={layer} - translateX={50} - translateY={72} - /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {/* + + { + setUndeglowIndex(176, e); + }} + className="key" + fill={getColor(176)} + stroke={stroke(176)} + strokeWidth={getStrokeWidth(176)} + dataLedIndex={getLEDIndex(176)} + dataKeyIndex={keyIndex(176)} + dataLayer={layer} + translateX={50} + translateY={72} + /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {/* // Thumbs keys // */} - - - - - - - - - - - {/* RIGHT SIDE */} - - - - - - - - - - - - - - - - - - - {/* Left side */} - { - setUndeglowIndex(70, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(70)} - stroke={stroke(70)} - strokeWidth={getStrokeWidth(70)} - dataLedIndex={getLEDIndex(70)} - dataKeyIndex={keyIndex(70)} - dataLayer={layer} - path="M6.20999 19.84H4.47C3.40914 19.84 2.39172 19.4185 1.64157 18.6684C0.891426 17.9182 0.470001 16.9009 0.470001 15.84C0.470001 14.7792 0.891426 13.7617 1.64157 13.0115C2.39172 12.2614 3.40914 11.84 4.47 11.84H6.20999C10.5481 11.8402 14.8393 10.9419 18.8133 9.20196C22.7872 7.46197 26.3577 4.9178 29.3 1.72991C29.6463 1.31366 30.0735 0.972085 30.5558 0.725823C31.038 0.479562 31.5652 0.333774 32.1055 0.297296C32.6457 0.260817 33.1877 0.334406 33.6987 0.513604C34.2097 0.692802 34.6789 0.973855 35.0781 1.33978C35.4772 1.7057 35.7979 2.14887 36.0207 2.64239C36.2435 3.13591 36.3637 3.66949 36.3742 4.21087C36.3847 4.75225 36.2851 5.29016 36.0815 5.79192C35.878 6.29369 35.5747 6.74886 35.19 7.12994C31.5008 11.137 27.0206 14.3355 22.0325 16.5231C17.0444 18.7108 11.6567 19.8402 6.20999 19.84V19.84Z" - /> - { - setUndeglowIndex(71, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(71)} - stroke={stroke(71)} - strokeWidth={getStrokeWidth(71)} - dataLedIndex={getLEDIndex(71)} - dataKeyIndex={keyIndex(71)} - dataLayer={layer} - path="M4.3 38.31C3.62973 38.3092 2.97042 38.1399 2.38261 37.8178C1.7948 37.4958 1.29735 37.0311 0.935956 36.4667C0.574561 35.9022 0.360812 35.2559 0.314343 34.5873C0.267874 33.9186 0.390189 33.249 0.670025 32.6399C1.51772 30.7876 2.1874 28.859 2.67003 26.8799L8.34001 3.42997C8.58931 2.39828 9.23825 1.50786 10.1441 0.954627C11.0499 0.401395 12.1383 0.230653 13.17 0.479957C14.2017 0.72926 15.0921 1.37817 15.6453 2.28397C16.1986 3.18977 16.3693 4.27828 16.12 5.30997L10.45 28.7599C9.84265 31.2358 9.00569 33.6496 7.95002 35.9699C7.63091 36.6696 7.1169 37.2623 6.46956 37.6773C5.82221 38.0924 5.06895 38.312 4.3 38.31Z" - /> - { - setUndeglowIndex(72, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(72)} - stroke={stroke(72)} - strokeWidth={getStrokeWidth(72)} - dataLedIndex={getLEDIndex(72)} - dataKeyIndex={keyIndex(72)} - dataLayer={layer} - path="M4.77999 38.68C4.46328 38.683 4.14746 38.646 3.83999 38.57C3.32901 38.4468 2.84733 38.224 2.42248 37.9146C1.99763 37.6051 1.63795 37.2149 1.36397 36.7664C1.09 36.3178 0.907126 35.8197 0.825797 35.3004C0.744468 34.7811 0.766265 34.2509 0.889976 33.74L8.17998 3.61C8.30343 3.09916 8.52627 2.6176 8.83581 2.19288C9.14534 1.76817 9.53552 1.40859 9.98403 1.13466C10.4325 0.860724 10.9306 0.677833 11.4498 0.596388C11.969 0.514943 12.4992 0.536544 13.01 0.659987C13.5208 0.783429 14.0024 1.00627 14.4271 1.31581C14.8518 1.62535 15.2114 2.0155 15.4853 2.464C15.7592 2.91251 15.9422 3.41063 16.0236 3.92982C16.1051 4.44902 16.0834 4.97916 15.96 5.49L8.67 35.62C8.45904 36.4926 7.96067 37.2688 7.25509 37.8239C6.5495 38.3789 5.67772 38.6805 4.77999 38.68V38.68Z" - /> - { - setUndeglowIndex(73, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(73)} - stroke={stroke(73)} - strokeWidth={getStrokeWidth(73)} - dataLedIndex={getLEDIndex(73)} - dataKeyIndex={keyIndex(73)} - dataLayer={layer} - path="M4.69001 38.91C4.37359 38.9079 4.05836 38.871 3.75001 38.8C3.23453 38.6823 2.74748 38.4636 2.31706 38.1565C1.88664 37.8494 1.52139 37.4599 1.24241 37.0108C0.963432 36.5616 0.776272 36.0616 0.691754 35.5396C0.607236 35.0177 0.627033 34.4842 0.750012 33.9699L8.04002 3.83994C8.28932 2.80825 8.93824 1.91783 9.84404 1.3646C10.7498 0.811368 11.8383 0.640626 12.87 0.88993C13.9017 1.13923 14.7921 1.78821 15.3453 2.69401C15.8986 3.59981 16.0693 4.68825 15.82 5.71995L8.53001 35.85C8.32111 36.7143 7.83018 37.4843 7.13478 38.0385C6.43937 38.5926 5.57915 38.8993 4.69001 38.91V38.91Z" - /> - { - setUndeglowIndex(74, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(74)} - stroke={stroke(74)} - strokeWidth={getStrokeWidth(74)} - dataLedIndex={getLEDIndex(74)} - dataKeyIndex={keyIndex(74)} - dataLayer={layer} - path="M4.57 39.04C4.23359 39.0411 3.89813 39.0042 3.57 38.93C2.53988 38.679 1.65156 38.0292 1.10027 37.1235C0.548989 36.2178 0.379843 35.1303 0.629997 34.1L5.05999 15.78C6.0631 11.6424 7.38025 7.58728 8.99999 3.64997C9.17373 3.13244 9.45157 2.65594 9.8164 2.24982C10.1812 1.84371 10.6253 1.5166 11.1213 1.28858C11.6174 1.06057 12.1548 0.936498 12.7006 0.924019C13.2464 0.91154 13.7889 1.01091 14.2949 1.21601C14.8008 1.42112 15.2593 1.72763 15.6424 2.11665C16.0254 2.50566 16.3247 2.96892 16.5219 3.47797C16.7191 3.98703 16.81 4.53109 16.7891 5.07661C16.7681 5.62212 16.6357 6.15756 16.4 6.64997C14.9349 10.2206 13.7447 13.898 12.84 17.65L8.39999 35.97C8.19343 36.8345 7.7048 37.6056 7.01125 38.1615C6.3177 38.7174 5.45875 39.0265 4.57 39.04V39.04Z" - /> - { - setUndeglowIndex(75, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(75)} - stroke={stroke(75)} - strokeWidth={getStrokeWidth(75)} - dataLedIndex={getLEDIndex(75)} - dataKeyIndex={keyIndex(75)} - dataLayer={layer} - path="M4.61999 31.3199C3.91709 31.3216 3.22656 31.1351 2.61999 30.78C2.16498 30.5153 1.76669 30.1635 1.44793 29.7446C1.12918 29.3257 0.896226 28.848 0.762449 28.3389C0.628671 27.8298 0.59668 27.2993 0.668333 26.7778C0.739985 26.2563 0.91386 25.7541 1.17999 25.3C6.65188 15.8904 13.9156 7.64482 22.56 1.02996C22.9769 0.710192 23.4528 0.475705 23.9604 0.339836C24.4679 0.203967 24.9973 0.169375 25.5182 0.23809C26.0392 0.306806 26.5415 0.477449 26.9965 0.740287C27.4515 1.00313 27.8502 1.353 28.17 1.76995C28.4898 2.1869 28.7243 2.66276 28.8601 3.17034C28.996 3.67792 29.0306 4.20727 28.9619 4.7282C28.8931 5.24914 28.7225 5.75149 28.4597 6.20647C28.1968 6.66146 27.8469 7.06017 27.43 7.37994C19.6063 13.3775 13.0355 20.8521 8.08999 29.3799C7.73089 29.9777 7.22175 30.4713 6.61307 30.8116C6.00438 31.1519 5.31731 31.3271 4.61999 31.3199V31.3199Z" - /> - { - setUndeglowIndex(76, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(76)} - stroke={stroke(76)} - strokeWidth={getStrokeWidth(76)} - dataLedIndex={getLEDIndex(76)} - dataKeyIndex={keyIndex(76)} - dataLayer={layer} - path="M4.78002 26.65C3.93963 26.6486 3.12103 26.3826 2.44039 25.8897C1.75975 25.3967 1.25164 24.7019 0.98821 23.9039C0.724779 23.1058 0.719406 22.2451 0.972829 21.4439C1.22625 20.6426 1.7256 19.9415 2.40001 19.4401L27.31 0.990059C28.1627 0.358844 29.2312 0.0921946 30.2804 0.248787C31.3297 0.40538 32.2738 0.972349 32.905 1.82502C33.5362 2.67769 33.8029 3.74621 33.6463 4.79548C33.4897 5.84475 32.9227 6.78884 32.07 7.42005L7.20003 25.91C6.4928 26.4082 5.64492 26.6675 4.78002 26.65V26.65Z" - /> - { - setUndeglowIndex(77, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(77)} - stroke={stroke(77)} - strokeWidth={getStrokeWidth(77)} - dataLedIndex={getLEDIndex(77)} - dataKeyIndex={keyIndex(77)} - dataLayer={layer} - path="M4.13002 34.11C3.33686 34.1087 2.56204 33.8715 1.90395 33.4288C1.24586 32.9861 0.73421 32.3577 0.4341 31.6235C0.13399 30.8893 0.0589337 30.0825 0.218463 29.3055C0.377992 28.5286 0.764904 27.8165 1.33004 27.26C8.32522 20.378 13.7611 12.0742 17.27 2.91001C17.4591 2.41952 17.743 1.97109 18.1054 1.5903C18.4678 1.20952 18.9017 0.903817 19.3822 0.690706C19.8628 0.477596 20.3806 0.36123 20.9061 0.348238C21.4316 0.335245 21.9545 0.425919 22.445 0.615023C22.9355 0.804126 23.3839 1.08794 23.7647 1.45035C24.1455 1.81276 24.4512 2.24666 24.6643 2.72721C24.8774 3.20775 24.9938 3.72555 25.0068 4.25107C25.0198 4.77659 24.9292 5.29952 24.7401 5.79001C20.8172 16.0086 14.7433 25.2644 6.93007 32.93C6.18828 33.6763 5.18223 34.1003 4.13002 34.11Z" - /> - { - setUndeglowIndex(78, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(78)} - stroke={stroke(78)} - strokeWidth={getStrokeWidth(78)} - dataLedIndex={getLEDIndex(78)} - dataKeyIndex={keyIndex(78)} - dataLayer={layer} - path="M14.19 73.91C13.8977 73.9098 13.6062 73.8796 13.32 73.82C12.2896 73.5817 11.3956 72.945 10.8334 72.0492C10.2712 71.1534 10.0866 70.0715 10.32 69.04C12.4601 59.4756 12.5317 49.5643 10.53 39.97C10.33 39.05 9.60002 36.1 9.34002 35.2L0.780021 5.36001C0.486957 4.34025 0.61102 3.24583 1.12487 2.31753C1.63872 1.38922 2.50025 0.70306 3.52001 0.409995C4.53977 0.116931 5.63419 0.240994 6.56249 0.754844C7.4908 1.26869 8.17696 2.13023 8.47002 3.14999L17.04 32.95C17.33 33.95 18.15 37.26 18.36 38.29C19.4482 43.4456 19.9946 48.7008 19.99 53.97C19.9895 59.6109 19.3691 65.2347 18.14 70.74C17.9485 71.643 17.4506 72.452 16.7306 73.0298C16.0107 73.6076 15.1131 73.9185 14.19 73.91V73.91Z" - /> - { - setUndeglowIndex(79, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(79)} - stroke={stroke(79)} - strokeWidth={getStrokeWidth(79)} - dataLedIndex={getLEDIndex(79)} - dataKeyIndex={keyIndex(79)} - dataLayer={layer} - path="M13.54 38.69C12.672 38.6888 11.8279 38.4051 11.1352 37.882C10.4425 37.3589 9.93872 36.6246 9.7 35.79L1.13 6.00004C0.836932 4.98028 0.960996 3.88586 1.47485 2.95756C1.98869 2.02925 2.85029 1.34309 3.87005 1.05003C4.88981 0.756963 5.98416 0.880966 6.91247 1.39482C7.84077 1.90866 8.52694 2.77026 8.82 3.79002L17.38 33.58C17.5328 34.0882 17.5829 34.6217 17.5275 35.1494C17.472 35.6771 17.3122 36.1885 17.0572 36.6538C16.8022 37.1192 16.4572 37.5292 16.0422 37.8598C15.6272 38.1905 15.1505 38.4353 14.64 38.58C14.2807 38.6701 13.9101 38.7072 13.54 38.69V38.69Z" - /> - { - setUndeglowIndex(80, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(80)} - stroke={stroke(80)} - strokeWidth={getStrokeWidth(80)} - dataLedIndex={getLEDIndex(80)} - dataKeyIndex={keyIndex(80)} - dataLayer={layer} - path="M11.93 38.32C11.0633 38.3193 10.2201 38.0372 9.52758 37.516C8.83504 36.9948 8.33055 36.2627 8.09002 35.43L3.38003 19.03C2.0574 14.3875 1.05504 9.65971 0.38003 4.87995C0.30452 4.35992 0.332174 3.83015 0.46142 3.32081C0.590667 2.81146 0.818969 2.33256 1.1333 1.91145C1.76811 1.06097 2.71475 0.497478 3.76501 0.344978C4.81527 0.192479 5.8831 0.463464 6.73358 1.09827C7.58405 1.73308 8.14754 2.67973 8.30004 3.72999C8.93549 8.15259 9.87437 12.5262 11.11 16.82L15.82 33.22C16.1102 34.2384 15.9848 35.3303 15.4711 36.2564C14.9575 37.1824 14.0976 37.867 13.08 38.16C12.7069 38.2708 12.3192 38.3248 11.93 38.32V38.32Z" - /> - { - setUndeglowIndex(81, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(81)} - stroke={stroke(81)} - strokeWidth={getStrokeWidth(81)} - dataLedIndex={getLEDIndex(81)} - dataKeyIndex={keyIndex(81)} - dataLayer={layer} - path="M4.31 39.36C3.27295 39.3607 2.27619 38.9585 1.52994 38.2384C0.78369 37.5182 0.346294 36.5364 0.309998 35.5C0.259998 34.24 0.23999 32.98 0.23999 31.72V4.36002C0.23999 3.29915 0.661415 2.28173 1.41156 1.53159C2.16171 0.78144 3.17912 0.360016 4.23999 0.360016C5.30086 0.360016 6.31831 0.78144 7.06845 1.53159C7.8186 2.28173 8.24002 3.29915 8.24002 4.36002V31.72C8.24002 32.88 8.24002 34.05 8.30002 35.21C8.33784 36.2694 7.9536 37.3004 7.23172 38.0767C6.50984 38.853 5.50934 39.3109 4.45001 39.35L4.31 39.36Z" - /> - { - setUndeglowIndex(82, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(82)} - stroke={stroke(82)} - strokeWidth={getStrokeWidth(82)} - dataLedIndex={getLEDIndex(82)} - dataKeyIndex={keyIndex(82)} - dataLayer={layer} - path="M4.25 39.36C3.18913 39.36 2.17172 38.9386 1.42157 38.1884C0.671424 37.4383 0.25 36.4209 0.25 35.36V4.36002C0.25 3.29915 0.671424 2.28173 1.42157 1.53159C2.17172 0.78144 3.18913 0.360016 4.25 0.360016C5.31087 0.360016 6.32825 0.78144 7.0784 1.53159C7.82855 2.28173 8.24997 3.29915 8.24997 4.36002V35.36C8.24997 36.4209 7.82855 37.4383 7.0784 38.1884C6.32825 38.9386 5.31087 39.36 4.25 39.36Z" - /> - { - setUndeglowIndex(83, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(83)} - stroke={stroke(83)} - strokeWidth={getStrokeWidth(83)} - dataLedIndex={getLEDIndex(83)} - dataKeyIndex={keyIndex(83)} - dataLayer={layer} - path="M4.25 39.36C3.18913 39.36 2.17172 38.9386 1.42157 38.1884C0.671424 37.4383 0.25 36.4209 0.25 35.36V4.36002C0.25 3.29915 0.671424 2.28173 1.42157 1.53159C2.17172 0.78144 3.18913 0.360016 4.25 0.360016C5.31087 0.360016 6.32825 0.78144 7.0784 1.53159C7.82855 2.28173 8.24997 3.29915 8.24997 4.36002V35.36C8.24997 36.4209 7.82855 37.4383 7.0784 38.1884C6.32825 38.9386 5.31087 39.36 4.25 39.36Z" - /> - { - setUndeglowIndex(84, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(84)} - stroke={stroke(84)} - strokeWidth={getStrokeWidth(84)} - dataLedIndex={getLEDIndex(84)} - dataKeyIndex={keyIndex(84)} - dataLayer={layer} - path="M4.25 39.36C3.18913 39.36 2.17172 38.9386 1.42157 38.1884C0.671424 37.4383 0.25 36.4209 0.25 35.36V4.36002C0.25 3.29915 0.671424 2.28173 1.42157 1.53159C2.17172 0.78144 3.18913 0.360016 4.25 0.360016C5.31087 0.360016 6.32825 0.78144 7.0784 1.53159C7.82855 2.28173 8.24997 3.29915 8.24997 4.36002V35.36C8.24997 36.4209 7.82855 37.4383 7.0784 38.1884C6.32825 38.9386 5.31087 39.36 4.25 39.36Z" - /> - { - setUndeglowIndex(85, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(85)} - stroke={stroke(85)} - strokeWidth={getStrokeWidth(85)} - dataLedIndex={getLEDIndex(85)} - dataKeyIndex={keyIndex(85)} - dataLayer={layer} - path="M4.25 39.36C3.18913 39.36 2.17172 38.9386 1.42157 38.1884C0.671424 37.4383 0.25 36.4209 0.25 35.36V4.36002C0.25 3.29915 0.671424 2.28173 1.42157 1.53159C2.17172 0.78144 3.18913 0.360016 4.25 0.360016C5.31087 0.360016 6.32825 0.78144 7.0784 1.53159C7.82855 2.28173 8.24997 3.29915 8.24997 4.36002V35.36C8.24997 36.4209 7.82855 37.4383 7.0784 38.1884C6.32825 38.9386 5.31087 39.36 4.25 39.36Z" - /> - - { - setUndeglowIndex(86, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(86)} - stroke={stroke(86)} - strokeWidth={getStrokeWidth(86)} - dataLedIndex={getLEDIndex(86)} - dataKeyIndex={keyIndex(86)} - dataLayer={layer} - path="M23.84 30.38C22.8974 30.3796 21.9851 30.0463 21.2643 29.4389C20.5434 28.8314 20.0603 27.9889 19.9 27.06C19.1211 22.6824 17.1359 18.6091 14.1679 15.2983C11.1999 11.9876 7.36682 9.57083 3.10002 8.32002C2.11714 7.99568 1.29822 7.30298 0.81538 6.38749C0.332543 5.47201 0.223369 4.40502 0.510784 3.41072C0.7982 2.41641 1.45985 1.57223 2.35667 1.05555C3.25349 0.538874 4.31568 0.38993 5.32002 0.640025C11.0268 2.30976 16.1535 5.54075 20.122 9.96864C24.0905 14.3965 26.7429 19.8452 27.78 25.7C27.8791 26.2742 27.8515 26.8631 27.6991 27.4256C27.5468 27.988 27.2735 28.5104 26.8982 28.9562C26.523 29.4019 26.0548 29.7603 25.5266 30.0062C24.9983 30.2522 24.4227 30.3798 23.84 30.38Z" - /> - - { - setUndeglowIndex(87, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(87)} - stroke={stroke(87)} - strokeWidth={getStrokeWidth(87)} - dataLedIndex={getLEDIndex(87)} - dataKeyIndex={keyIndex(87)} - dataLayer={layer} - path="M33.31 14.39H11.9C9.84222 14.3966 7.86392 13.5959 6.38997 12.16L1.67 7.58998C0.907504 6.85136 0.469655 5.8401 0.452777 4.77864C0.435899 3.71719 0.841347 2.69248 1.57997 1.92998C2.3186 1.16748 3.32989 0.729635 4.39135 0.712756C5.4528 0.695878 6.47748 1.10136 7.23998 1.83998L11.96 6.42H33.31C34.3709 6.42 35.3883 6.84143 36.1384 7.59157C36.8886 8.34172 37.31 9.35914 37.31 10.42C37.31 11.4809 36.8886 12.4983 36.1384 13.2484C35.3883 13.9986 34.3709 14.42 33.31 14.42V14.39Z" - /> - { - setUndeglowIndex(88, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(88)} - stroke={stroke(88)} - strokeWidth={getStrokeWidth(88)} - dataLedIndex={getLEDIndex(88)} - dataKeyIndex={keyIndex(88)} - dataLayer={layer} - path="M28.56 27.06C27.519 27.053 26.5217 26.6405 25.78 25.91L12.08 12.62C9.85559 10.4452 6.95595 9.09416 3.85997 8.79C2.7991 8.68258 1.82439 8.15815 1.15019 7.33205C0.475999 6.50595 0.157556 5.44586 0.264969 4.385C0.372382 3.32413 0.896849 2.34938 1.72295 1.67519C2.54904 1.00099 3.60913 0.682582 4.67 0.789995C9.56538 1.26913 14.1511 3.40321 17.67 6.83998L31.37 20.12C31.945 20.6742 32.3409 21.3878 32.5069 22.169C32.6728 22.9502 32.601 23.7632 32.3009 24.5032C32.0008 25.2433 31.486 25.8766 30.8229 26.3216C30.1597 26.7665 29.3786 27.0028 28.58 27L28.56 27.06Z" - /> - { - setUndeglowIndex(89, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(89)} - stroke={stroke(89)} - strokeWidth={getStrokeWidth(89)} - dataLedIndex={getLEDIndex(89)} - dataKeyIndex={keyIndex(89)} - dataLayer={layer} - path="M35.27 8.73999H4.26999C3.20912 8.73999 2.1917 8.31857 1.44156 7.56842C0.691413 6.81827 0.269989 5.80086 0.269989 4.73999C0.269989 3.67912 0.691413 2.66174 1.44156 1.91159C2.1917 1.16145 3.20912 0.73999 4.26999 0.73999H35.27C36.3309 0.73999 37.3483 1.16145 38.0984 1.91159C38.8486 2.66174 39.27 3.67912 39.27 4.73999C39.27 5.80086 38.8486 6.81827 38.0984 7.56842C37.3483 8.31857 36.3309 8.73999 35.27 8.73999Z" - /> - - { - setUndeglowIndex(90, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(90)} - stroke={stroke(90)} - strokeWidth={getStrokeWidth(90)} - dataLedIndex={getLEDIndex(90)} - dataKeyIndex={keyIndex(90)} - dataLayer={layer} - path="M35.27 10.74H11.47C8.23457 10.7269 5.07914 9.7332 2.42002 7.89002C1.96847 7.59882 1.5802 7.21961 1.27842 6.77506C0.976635 6.33051 0.767512 5.82973 0.66352 5.30259C0.559528 4.77544 0.562814 4.23276 0.673164 3.70691C0.783514 3.18106 0.998663 2.68282 1.30579 2.24195C1.61292 1.80108 2.00573 1.4266 2.46076 1.14087C2.91579 0.855146 3.42371 0.664037 3.95423 0.578923C4.48475 0.493808 5.02698 0.516437 5.54856 0.645481C6.07014 0.774526 6.56037 1.00735 6.99 1.33002C8.3067 2.24161 9.86856 2.73315 11.47 2.73999H35.27C36.3309 2.73999 37.3483 3.16145 38.0984 3.91159C38.8486 4.66174 39.27 5.67913 39.27 6.73999C39.27 7.80086 38.8486 8.81828 38.0984 9.56842C37.3483 10.3186 36.3309 10.74 35.27 10.74Z" - /> - { - setUndeglowIndex(91, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(91)} - stroke={stroke(91)} - strokeWidth={getStrokeWidth(91)} - dataLedIndex={getLEDIndex(91)} - dataKeyIndex={keyIndex(91)} - dataLayer={layer} - path="M30.99 22.91C30.1074 22.9101 29.2495 22.6183 28.55 22.08L14.68 11.31C11.9041 9.16698 8.49687 8.00311 4.98999 8H4.59C3.52913 8 2.51171 7.57858 1.76157 6.82843C1.01142 6.07828 0.589996 5.06087 0.589996 4C0.589996 2.93913 1.01142 1.92172 1.76157 1.17157C2.51171 0.421424 3.52913 0 4.59 0H4.98999C10.2675 0.0182659 15.3919 1.7756 19.57 5L33.45 15.74C34.1093 16.2517 34.592 16.9567 34.8306 17.7564C35.0692 18.5562 35.0517 19.4105 34.7805 20.1997C34.5093 20.989 33.9981 21.6737 33.3184 22.1579C32.6387 22.6421 31.8245 22.9016 30.99 22.9V22.91Z" - /> - { - setUndeglowIndex(92, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(92)} - stroke={stroke(92)} - strokeWidth={getStrokeWidth(92)} - dataLedIndex={getLEDIndex(92)} - dataKeyIndex={keyIndex(92)} - dataLayer={layer} - path="M35.59 8H4.59C3.52913 8 2.51171 7.57858 1.76157 6.82843C1.01142 6.07828 0.589996 5.06087 0.589996 4C0.589996 2.93913 1.01142 1.92172 1.76157 1.17157C2.51171 0.421424 3.52913 0 4.59 0H35.59C36.6509 0 37.6683 0.421424 38.4184 1.17157C39.1686 1.92172 39.59 2.93913 39.59 4C39.59 5.06087 39.1686 6.07828 38.4184 6.82843C37.6683 7.57858 36.6509 8 35.59 8Z" - /> - { - setUndeglowIndex(93, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(93)} - stroke={stroke(93)} - strokeWidth={getStrokeWidth(93)} - dataLedIndex={getLEDIndex(93)} - dataKeyIndex={keyIndex(93)} - dataLayer={layer} - path="M4.78001 20.85C3.97057 20.8428 3.18236 20.5902 2.51952 20.1256C1.85669 19.6609 1.35043 19.0061 1.06763 18.2476C0.784835 17.4892 0.738804 16.6627 0.935631 15.8775C1.13246 15.0924 1.56287 14.3854 2.17001 13.85L11.6 5.76999C15.9169 2.07079 21.415 0.0383127 27.1 0.0400096H31.64C32.7009 0.0400096 33.7183 0.461434 34.4684 1.21158C35.2186 1.96172 35.64 2.97914 35.64 4.04001C35.64 5.10088 35.2186 6.11829 34.4684 6.86844C33.7183 7.61859 32.7009 8.04001 31.64 8.04001H27.1C23.3204 8.02518 19.66 9.36233 16.78 11.81L7.33001 19.91C6.61577 20.5113 5.71366 20.8439 4.78001 20.85V20.85Z" - /> - - { - setUndeglowIndex(94, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(94)} - stroke={stroke(94)} - strokeWidth={getStrokeWidth(94)} - dataLedIndex={getLEDIndex(94)} - dataKeyIndex={keyIndex(94)} - dataLayer={layer} - path="M25.64 11.74H4.39001C3.32915 11.74 2.31173 11.3186 1.56158 10.5684C0.811439 9.81827 0.390015 8.80085 0.390015 7.73998C0.390015 6.67912 0.811439 5.66173 1.56158 4.91158C2.31173 4.16144 3.32915 3.73998 4.39001 3.73998H25.64C27.5112 3.73962 29.3205 3.06916 30.74 1.85L31.74 0.969993C32.547 0.295483 33.5872 -0.0340119 34.6354 0.0528182C35.6836 0.139648 36.6555 0.635813 37.3405 1.43392C38.0255 2.23203 38.3686 3.26783 38.2955 4.31707C38.2225 5.36631 37.7391 6.34456 36.95 7.04L35.95 7.92999C33.0755 10.3852 29.4203 11.736 25.64 11.74Z" - /> - { - setUndeglowIndex(95, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(95)} - stroke={stroke(95)} - strokeWidth={getStrokeWidth(95)} - dataLedIndex={getLEDIndex(95)} - dataKeyIndex={keyIndex(95)} - dataLayer={layer} - path="M4.22001 23.8C3.39568 23.8 2.5915 23.5453 1.91746 23.0708C1.24341 22.5962 0.732424 21.9251 0.454412 21.149C0.1764 20.373 0.144943 19.5301 0.364324 18.7355C0.583705 17.9409 1.04321 17.2334 1.68 16.71L14.53 6.14999C18.7944 2.65528 24.1366 0.7438 29.65 0.73999H30.39C31.4509 0.73999 32.4683 1.16145 33.2184 1.91159C33.9686 2.66174 34.39 3.67912 34.39 4.73999C34.39 5.80086 33.9686 6.81827 33.2184 7.56842C32.4683 8.31857 31.4509 8.73999 30.39 8.73999H29.65C26.0028 8.74969 22.4706 10.0178 19.65 12.33L6.78 22.91C6.05624 23.4955 5.15091 23.8103 4.22001 23.8Z" - /> - { - setUndeglowIndex(96, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(96)} - stroke={stroke(96)} - strokeWidth={getStrokeWidth(96)} - dataLedIndex={getLEDIndex(96)} - dataKeyIndex={keyIndex(96)} - dataLayer={layer} - path="M30.62 9.48999H4.62C3.55913 9.48999 2.54172 9.06857 1.79157 8.31842C1.04143 7.56828 0.619995 6.55086 0.619995 5.48999C0.619995 4.42913 1.04143 3.41174 1.79157 2.66159C2.54172 1.91145 3.55913 1.48999 4.62 1.48999H30.62C31.7296 1.48578 32.8261 1.25083 33.84 0.80002C34.322 0.560098 34.8475 0.419954 35.385 0.388002C35.9225 0.356049 36.4609 0.432923 36.9679 0.614045C37.475 0.795168 37.9403 1.07679 38.3358 1.44205C38.7314 1.8073 39.0492 2.24867 39.2702 2.73969C39.4911 3.23071 39.6106 3.76127 39.6216 4.29959C39.6325 4.83791 39.5347 5.3729 39.3339 5.8725C39.1331 6.3721 38.8335 6.82602 38.4531 7.20706C38.0727 7.5881 37.6193 7.88841 37.12 8.09C35.0753 9.00668 32.8608 9.48364 30.62 9.48999Z" - /> - { - setUndeglowIndex(97, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(97)} - stroke={stroke(97)} - strokeWidth={getStrokeWidth(97)} - dataLedIndex={getLEDIndex(97)} - dataKeyIndex={keyIndex(97)} - dataLayer={layer} - path="M35.63 8.48999H4.63C3.56914 8.48999 2.55172 8.06857 1.80158 7.31842C1.05143 6.56827 0.630005 5.55086 0.630005 4.48999C0.630005 3.42912 1.05143 2.41174 1.80158 1.66159C2.55172 0.911445 3.56914 0.48999 4.63 0.48999H35.63C36.6909 0.48999 37.7083 0.911445 38.4584 1.66159C39.2086 2.41174 39.63 3.42912 39.63 4.48999C39.63 5.55086 39.2086 6.56827 38.4584 7.31842C37.7083 8.06857 36.6909 8.48999 35.63 8.48999Z" - /> - { - setUndeglowIndex(98, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(98)} - stroke={stroke(98)} - strokeWidth={getStrokeWidth(98)} - dataLedIndex={getLEDIndex(98)} - dataKeyIndex={keyIndex(98)} - dataLayer={layer} - path="M4.60001 20.91C3.85886 20.9086 3.13267 20.7013 2.50245 20.3113C1.87223 19.9213 1.36276 19.3638 1.0309 18.7011C0.699026 18.0384 0.557805 17.2965 0.622982 16.5583C0.688159 15.82 0.957174 15.1143 1.40001 14.52C4.63694 10.1873 8.83732 6.66688 13.6691 4.23709C18.5009 1.8073 23.8317 0.534727 29.24 0.519989H31.63C32.6909 0.519989 33.7083 0.941444 34.4584 1.69159C35.2086 2.44173 35.63 3.45912 35.63 4.51999C35.63 5.58085 35.2086 6.59827 34.4584 7.34842C33.7083 8.09856 32.6909 8.51999 31.63 8.51999H29.24C25.0697 8.49829 20.953 9.46044 17.2243 11.3283C13.4955 13.1961 10.2599 15.917 7.78001 19.27C7.41365 19.7714 6.93556 20.1807 6.38361 20.4654C5.83165 20.75 5.221 20.9023 4.60001 20.91Z" - /> - { - setUndeglowIndex(99, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(99)} - stroke={stroke(99)} - strokeWidth={getStrokeWidth(99)} - dataLedIndex={getLEDIndex(99)} - dataKeyIndex={keyIndex(99)} - dataLayer={layer} - path="M4.5 39.56C3.43913 39.56 2.42172 39.1386 1.67157 38.3884C0.921428 37.6383 0.5 36.6209 0.5 35.56V13.19C0.499544 9.9321 0.957362 6.69034 1.86 3.55999C1.99535 3.04324 2.23283 2.55882 2.55843 2.13534C2.88403 1.71186 3.29116 1.3579 3.75579 1.09432C4.22042 0.830744 4.73313 0.662906 5.26368 0.600701C5.79424 0.538496 6.33187 0.583184 6.84487 0.73214C7.35786 0.881096 7.83583 1.1313 8.25056 1.46798C8.66529 1.80466 9.00837 2.221 9.25958 2.69244C9.51079 3.16387 9.66503 3.68084 9.71319 4.21285C9.76135 4.74486 9.70246 5.28112 9.54 5.79C8.86129 8.19757 8.52466 10.6886 8.54 13.19V35.56C8.54003 36.0887 8.43525 36.6121 8.23174 37.1C8.02822 37.588 7.73 38.0307 7.35432 38.4027C6.97864 38.7746 6.53295 39.0684 6.04302 39.2671C5.55309 39.4657 5.02864 39.5653 4.5 39.56Z" - /> - { - setUndeglowIndex(100, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(100)} - stroke={stroke(100)} - strokeWidth={getStrokeWidth(100)} - dataLedIndex={getLEDIndex(100)} - dataKeyIndex={keyIndex(100)} - dataLayer={layer} - path="M4.45999 39.56C3.39913 39.56 2.38171 39.1386 1.63156 38.3884C0.881419 37.6383 0.459991 36.6209 0.459991 35.56V4.56C0.459991 3.49913 0.881419 2.48171 1.63156 1.73157C2.38171 0.981422 3.39913 0.559998 4.45999 0.559998C5.52086 0.559998 6.53827 0.981422 7.28842 1.73157C8.03856 2.48171 8.45999 3.49913 8.45999 4.56V35.56C8.45999 36.6209 8.03856 37.6383 7.28842 38.3884C6.53827 39.1386 5.52086 39.56 4.45999 39.56Z" - /> - { - setUndeglowIndex(101, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(101)} - stroke={stroke(101)} - strokeWidth={getStrokeWidth(101)} - dataLedIndex={getLEDIndex(101)} - dataKeyIndex={keyIndex(101)} - dataLayer={layer} - path="M4.41 39.56C3.34914 39.56 2.33172 39.1386 1.58158 38.3884C0.831431 37.6383 0.410004 36.6209 0.410004 35.56V4.56C0.410004 3.49913 0.831431 2.48171 1.58158 1.73157C2.33172 0.981422 3.34914 0.559998 4.41 0.559998C5.47087 0.559998 6.48829 0.981422 7.23843 1.73157C7.98858 2.48171 8.41 3.49913 8.41 4.56V35.56C8.41 36.6209 7.98858 37.6383 7.23843 38.3884C6.48829 39.1386 5.47087 39.56 4.41 39.56Z" - /> - { - setUndeglowIndex(102, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(102)} - stroke={stroke(102)} - strokeWidth={getStrokeWidth(102)} - dataLedIndex={getLEDIndex(102)} - dataKeyIndex={keyIndex(102)} - dataLayer={layer} - path="M4.35999 39.56C3.29912 39.56 2.2817 39.1386 1.53156 38.3885C0.781413 37.6383 0.359985 36.6209 0.359985 35.56V4.56003C0.359985 3.49916 0.781413 2.48171 1.53156 1.73157C2.2817 0.981422 3.29912 0.559998 4.35999 0.559998C5.42085 0.559998 6.43827 0.981422 7.18841 1.73157C7.93856 2.48171 8.35999 3.49916 8.35999 4.56003V35.56C8.35999 36.6209 7.93856 37.6383 7.18841 38.3885C6.43827 39.1386 5.42085 39.56 4.35999 39.56Z" - /> - { - setUndeglowIndex(103, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(103)} - stroke={stroke(103)} - strokeWidth={getStrokeWidth(103)} - dataLedIndex={getLEDIndex(103)} - dataKeyIndex={keyIndex(103)} - dataLayer={layer} - path="M4.64999 38.7C4.02388 38.6997 3.4066 38.5524 2.8478 38.27C2.289 37.9876 1.8043 37.578 1.43269 37.0741C1.06109 36.5702 0.812963 35.9861 0.708282 35.3688C0.603601 34.7515 0.645288 34.1182 0.829989 33.52L6.32999 15.67V4.56003C6.32999 3.49916 6.75142 2.48174 7.50156 1.7316C8.25171 0.981452 9.26912 0.560028 10.33 0.560028C11.3909 0.560028 12.4083 0.981452 13.1584 1.7316C13.9086 2.48174 14.33 3.49916 14.33 4.56003V16.91L8.46999 35.91C8.21267 36.7208 7.70356 37.4285 7.01661 37.9302C6.32966 38.4319 5.50065 38.7016 4.64999 38.7Z" - /> - { - setUndeglowIndex(104, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(104)} - stroke={stroke(104)} - strokeWidth={getStrokeWidth(104)} - dataLedIndex={getLEDIndex(104)} - dataKeyIndex={keyIndex(104)} - dataLayer={layer} - path="M4.27 37.84C3.86988 37.8393 3.47212 37.7787 3.09 37.66C2.07717 37.3466 1.23018 36.6439 0.735161 35.7064C0.240137 34.7688 0.13757 33.6731 0.449999 32.66L9.58 3.03998C9.7343 2.53768 9.98603 2.07068 10.3208 1.66566C10.6556 1.26064 11.0669 0.925525 11.5312 0.67945C11.9955 0.433375 12.5037 0.28118 13.0268 0.231513C13.5499 0.181846 14.0777 0.235657 14.58 0.38996C15.0823 0.544264 15.5493 0.796023 15.9543 1.13081C16.3593 1.46559 16.6945 1.87684 16.9405 2.34113C17.1866 2.80543 17.3388 3.31368 17.3885 3.8368C17.4382 4.35992 17.3843 4.88765 17.23 5.38996L8.09 35.02C7.83794 35.8364 7.33109 36.5507 6.64368 37.0581C5.95627 37.5656 5.12443 37.8396 4.27 37.84Z" - /> - { - setUndeglowIndex(105, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(105)} - stroke={stroke(105)} - strokeWidth={getStrokeWidth(105)} - dataLedIndex={getLEDIndex(105)} - dataKeyIndex={keyIndex(105)} - dataLayer={layer} - path="M4.23999 38.91H4.00999C3.4853 38.8806 2.97154 38.7482 2.49807 38.5202C2.0246 38.2921 1.60069 37.973 1.25058 37.5811C0.900474 37.1892 0.631019 36.7322 0.457616 36.2361C0.284213 35.74 0.210261 35.2147 0.239986 34.69C0.836617 24.0939 2.51195 13.5862 5.23999 3.32997C5.37577 2.82232 5.61024 2.34644 5.93001 1.92945C6.24978 1.51246 6.64858 1.16254 7.10363 0.899729C7.55867 0.636917 8.06104 0.466367 8.58203 0.397776C9.10302 0.329184 9.63243 0.36393 10.14 0.50001C11.163 0.774342 12.0354 1.44317 12.566 2.35987C13.0965 3.27658 13.2418 4.36628 12.97 5.38996C10.3727 15.1187 8.77442 25.0869 8.19999 35.14C8.14164 36.1536 7.70002 37.1071 6.96467 37.8072C6.22931 38.5073 5.25526 38.9015 4.23999 38.91Z" - /> - { - setUndeglowIndex(106, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(106)} - stroke={stroke(106)} - strokeWidth={getStrokeWidth(106)} - dataLedIndex={getLEDIndex(106)} - dataKeyIndex={keyIndex(106)} - dataLayer={layer} - path="M7.02999 39.91C6.01912 39.9128 5.04465 39.5328 4.30256 38.8464C3.56047 38.16 3.10581 37.218 3.02999 36.21L1.39999 14.38C1.16999 11.28 1.02999 8.14001 0.979994 5.04001C0.962646 4.50723 1.05196 3.97637 1.24269 3.47861C1.43342 2.98084 1.72172 2.52621 2.09065 2.14145C2.45958 1.75669 2.90169 1.44954 3.391 1.23807C3.88031 1.02659 4.40696 0.915052 4.93999 0.910004H4.99999C6.05055 0.909885 7.05897 1.32305 7.80742 2.06027C8.55586 2.79749 8.98424 3.79957 8.99999 4.85001C8.99999 7.79001 9.17999 10.77 9.39999 13.72L11.03 35.54C11.0696 36.064 11.0055 36.5907 10.8414 37.0899C10.6774 37.5892 10.4166 38.0512 10.0739 38.4496C9.7312 38.848 9.31338 39.1749 8.84429 39.4118C8.37519 39.6486 7.86403 39.7908 7.33999 39.83L7.02999 39.91Z" - /> - { - setUndeglowIndex(107, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(107)} - stroke={stroke(107)} - strokeWidth={getStrokeWidth(107)} - dataLedIndex={getLEDIndex(107)} - dataKeyIndex={keyIndex(107)} - dataLayer={layer} - path="M7.15001 39.74C6.13913 39.7429 5.16466 39.3629 4.42258 38.6764C3.68049 37.99 3.22582 37.048 3.15001 36.04L0.850007 5.12998C0.810442 4.60597 0.874517 4.07935 1.03857 3.58011C1.20263 3.08088 1.46344 2.61883 1.80612 2.22043C2.1488 1.82203 2.56662 1.49507 3.03572 1.25821C3.50481 1.02135 4.01597 0.879234 4.54001 0.839999C5.59664 0.762866 6.64072 1.10811 7.44313 1.7999C8.24553 2.49169 8.74071 3.47353 8.82001 4.53L11.13 35.45C11.2071 36.5066 10.8619 37.5507 10.1701 38.3531C9.47835 39.1555 8.49648 39.6507 7.44001 39.73L7.15001 39.74Z" - /> - { - setUndeglowIndex(108, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(108)} - stroke={stroke(108)} - strokeWidth={getStrokeWidth(108)} - dataLedIndex={getLEDIndex(108)} - dataKeyIndex={keyIndex(108)} - dataLayer={layer} - path="M6.38999 39.51C5.37912 39.5128 4.40465 39.1329 3.66256 38.4464C2.92047 37.76 2.46581 36.818 2.38999 35.81L0.109993 4.90998C0.0317543 3.84912 0.378147 2.80059 1.07297 1.99513C1.76779 1.18966 2.75413 0.693237 3.81499 0.614999C4.87586 0.53676 5.92436 0.883128 6.72982 1.57795C7.53529 2.27277 8.03175 3.25909 8.10999 4.31995L10.39 35.21C10.4296 35.734 10.3655 36.2607 10.2014 36.7599C10.0374 37.2591 9.77656 37.7212 9.43388 38.1196C9.0912 38.518 8.67338 38.8449 8.20428 39.0818C7.73519 39.3187 7.22403 39.4608 6.69999 39.5L6.38999 39.51Z" - /> - { - setUndeglowIndex(109, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(109)} - stroke={stroke(109)} - strokeWidth={getStrokeWidth(109)} - dataLedIndex={getLEDIndex(109)} - dataKeyIndex={keyIndex(109)} - dataLayer={layer} - path="M6.38999 39.51C5.37912 39.5128 4.40465 39.1328 3.66256 38.4464C2.92047 37.76 2.46581 36.818 2.38999 35.81L0.109993 4.90998C0.0317543 3.84912 0.378147 2.80059 1.07297 1.99513C1.76779 1.18966 2.75413 0.693237 3.81499 0.614999C4.87586 0.53676 5.92435 0.883128 6.72982 1.57795C7.53529 2.27277 8.03175 3.25909 8.10999 4.31995L10.39 35.21C10.4296 35.734 10.3655 36.2607 10.2014 36.7599C10.0374 37.2591 9.77656 37.7212 9.43388 38.1196C9.0912 38.518 8.67338 38.8449 8.20428 39.0818C7.73519 39.3187 7.22403 39.4608 6.69999 39.5L6.38999 39.51Z" - /> - { - setUndeglowIndex(110, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(110)} - stroke={stroke(110)} - strokeWidth={getStrokeWidth(110)} - dataLedIndex={getLEDIndex(110)} - dataKeyIndex={keyIndex(110)} - dataLayer={layer} - path="M6.50998 39.4C5.4975 39.4026 4.52168 39.0212 3.77934 38.3327C3.037 37.6442 2.58339 36.6998 2.50998 35.69L0.229984 4.77997C0.190588 4.25468 0.25504 3.72676 0.419661 3.22638C0.584282 2.726 0.845849 2.26294 1.18943 1.86365C1.533 1.46436 1.95186 1.13665 2.42209 0.899233C2.89231 0.661817 3.4047 0.519379 3.92998 0.479983C4.45527 0.440586 4.98318 0.505059 5.48355 0.66968C5.98393 0.834301 6.44699 1.09582 6.84628 1.43939C7.24557 1.78297 7.57328 2.20183 7.8107 2.67206C8.04811 3.14229 8.19059 3.65471 8.22998 4.17999L10.54 35.1C10.578 35.6287 10.5105 36.1597 10.3414 36.6621C10.1724 37.1645 9.9052 37.6283 9.55535 38.0266C9.20549 38.4248 8.77998 38.7495 8.30352 38.9819C7.82707 39.2142 7.30919 39.3495 6.77998 39.3799L6.50998 39.4Z" - /> - { - setUndeglowIndex(111, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(111)} - stroke={stroke(111)} - strokeWidth={getStrokeWidth(111)} - dataLedIndex={getLEDIndex(111)} - dataKeyIndex={keyIndex(111)} - dataLayer={layer} - path="M6.62999 39.28C5.61912 39.2828 4.64465 38.9028 3.90256 38.2164C3.16047 37.5299 2.70581 36.588 2.62999 35.58L0.329994 4.65998C0.251755 3.59912 0.598149 2.55059 1.29297 1.74513C1.98779 0.939657 2.97413 0.443237 4.03499 0.364999C5.09586 0.28676 6.14436 0.633128 6.94982 1.32795C7.75529 2.02277 8.25176 3.00909 8.32999 4.06995L10.64 34.98C10.6796 35.504 10.6155 36.0307 10.4514 36.5299C10.2874 37.0292 10.0266 37.4911 9.68388 37.8895C9.3412 38.2879 8.92338 38.6149 8.45429 38.8518C7.98519 39.0886 7.47403 39.2307 6.94999 39.27L6.62999 39.28Z" - /> - { - setUndeglowIndex(112, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(112)} - stroke={stroke(112)} - strokeWidth={getStrokeWidth(112)} - dataLedIndex={getLEDIndex(112)} - dataKeyIndex={keyIndex(112)} - dataLayer={layer} - path="M6.77998 39.16C5.76911 39.1628 4.79464 38.7828 4.05255 38.0964C3.31046 37.41 2.8558 36.468 2.77998 35.46L0.479984 4.55C0.440588 4.02471 0.505041 3.49679 0.669662 2.99641C0.834283 2.49603 1.09585 2.03297 1.43943 1.63367C1.783 1.23438 2.20186 0.906675 2.67209 0.669258C3.14231 0.431842 3.6547 0.289404 4.17998 0.250008C4.70527 0.210611 5.23318 0.275023 5.73355 0.439644C6.23393 0.604265 6.69699 0.865843 7.09628 1.20942C7.49557 1.553 7.82328 1.97186 8.0607 2.44209C8.29811 2.91231 8.44059 3.42467 8.47998 3.94996L10.78 34.91C10.8181 35.434 10.7527 35.9604 10.5874 36.4591C10.4221 36.9577 10.1602 37.419 9.81657 37.8164C9.47298 38.2139 9.05446 38.5397 8.58491 38.7754C8.11536 39.0111 7.60398 39.152 7.07998 39.19L6.77998 39.16Z" - /> - { - setUndeglowIndex(113, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(113)} - stroke={stroke(113)} - strokeWidth={getStrokeWidth(113)} - dataLedIndex={getLEDIndex(113)} - dataKeyIndex={keyIndex(113)} - dataLayer={layer} - path="M6.87001 39.05C5.85753 39.0527 4.8817 38.6712 4.13936 37.9827C3.39703 37.2942 2.94341 36.3498 2.87001 35.34L0.570007 4.42999C0.531267 3.9047 0.596369 3.3769 0.761597 2.87677C0.926825 2.37664 1.18894 1.91396 1.53298 1.51514C1.87702 1.11631 2.29625 0.789178 2.76673 0.552368C3.23721 0.315558 3.74972 0.173688 4.27501 0.134948C4.80029 0.0962082 5.32807 0.16131 5.8282 0.326538C6.32832 0.491765 6.79101 0.75392 7.18984 1.09796C7.58866 1.442 7.91582 1.86119 8.15263 2.33166C8.38944 2.80214 8.53127 3.31468 8.57001 3.83997L10.88 34.75C10.9195 35.2748 10.8551 35.8022 10.6904 36.3021C10.5258 36.8019 10.2641 37.2643 9.92034 37.6628C9.57662 38.0614 9.15764 38.3882 8.6874 38.6245C8.21716 38.8608 7.70491 39.002 7.18001 39.04L6.87001 39.05Z" - /> - { - setUndeglowIndex(114, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(114)} - stroke={stroke(114)} - strokeWidth={getStrokeWidth(114)} - dataLedIndex={getLEDIndex(114)} - dataKeyIndex={keyIndex(114)} - dataLayer={layer} - path="M23.92 31.7C23.3507 31.6988 22.7881 31.5761 22.27 31.34C17.0077 28.9663 12.3311 25.4653 8.57094 21.0848C4.81081 16.7043 2.05897 11.5513 0.510007 5.98999C0.226226 4.96758 0.360218 3.8743 0.882507 2.95068C1.4048 2.02707 2.2726 1.34878 3.29501 1.065C4.31742 0.781219 5.41068 0.915209 6.3343 1.4375C7.25792 1.95979 7.93623 2.82756 8.22001 3.84997C9.45689 8.28448 11.6529 12.3931 14.6527 15.8854C17.6525 19.3776 21.3828 22.1683 25.58 24.06C26.4114 24.4388 27.0881 25.0908 27.4975 25.9075C27.9069 26.7243 28.0244 27.6565 27.8304 28.5493C27.6364 29.442 27.1426 30.2415 26.4312 30.8148C25.7198 31.388 24.8336 31.7004 23.92 31.7V31.7Z" - /> - { - setUndeglowIndex(115, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(115)} - stroke={stroke(115)} - strokeWidth={getStrokeWidth(115)} - dataLedIndex={getLEDIndex(115)} - dataKeyIndex={keyIndex(115)} - dataLayer={layer} - path="M35.47 8.84001H8.41001C6.94654 8.83676 5.48434 8.7533 4.03001 8.59001C3.50472 8.53091 2.99621 8.36894 2.53353 8.11332C2.07084 7.85771 1.66303 7.51336 1.33338 7.10014C1.00373 6.68692 0.758703 6.21291 0.612281 5.705C0.465858 5.19708 0.420911 4.66522 0.480006 4.13993C0.539101 3.61465 0.701079 3.10616 0.956694 2.64347C1.21231 2.18078 1.55655 1.77293 1.96977 1.44328C2.383 1.11363 2.8571 0.86863 3.36502 0.722208C3.87293 0.575786 4.40472 0.530911 4.93001 0.590006C6.08535 0.721699 7.24718 0.788422 8.41001 0.789957H35.47C36.5309 0.789957 37.5483 1.21132 38.2984 1.96147C39.0486 2.71161 39.47 3.72909 39.47 4.78996C39.47 5.85082 39.0486 6.86818 38.2984 7.61833C37.5483 8.36847 36.5309 8.78996 35.47 8.78996V8.84001Z" - /> - { - setUndeglowIndex(116, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(116)} - stroke={stroke(116)} - strokeWidth={getStrokeWidth(116)} - dataLedIndex={getLEDIndex(116)} - dataKeyIndex={keyIndex(116)} - dataLayer={layer} - path="M35.47 8.84003H4.47C3.40914 8.84003 2.39172 8.41854 1.64157 7.6684C0.891426 6.91825 0.470001 5.90089 0.470001 4.84003C0.470001 3.77916 0.891426 2.76168 1.64157 2.01154C2.39172 1.26139 3.40914 0.840027 4.47 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2984 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2984 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003Z" - /> - { - setUndeglowIndex(117, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(117)} - stroke={stroke(117)} - strokeWidth={getStrokeWidth(117)} - dataLedIndex={getLEDIndex(117)} - dataKeyIndex={keyIndex(117)} - dataLayer={layer} - path="M35.47 8.84003H4.47C3.40914 8.84003 2.39172 8.41854 1.64157 7.6684C0.891426 6.91825 0.470001 5.90089 0.470001 4.84003C0.470001 3.77916 0.891426 2.76168 1.64157 2.01154C2.39172 1.26139 3.40914 0.840027 4.47 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2984 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2984 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003Z" - /> - { - setUndeglowIndex(118, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(118)} - stroke={stroke(118)} - strokeWidth={getStrokeWidth(118)} - dataLedIndex={getLEDIndex(118)} - dataKeyIndex={keyIndex(118)} - dataLayer={layer} - path="M35.47 8.84003H4.47C3.40914 8.84003 2.39172 8.41854 1.64157 7.6684C0.891426 6.91825 0.470001 5.90089 0.470001 4.84003C0.470001 3.77916 0.891426 2.76168 1.64157 2.01154C2.39172 1.26139 3.40914 0.840027 4.47 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2984 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2984 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003Z" - /> - { - setUndeglowIndex(119, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(119)} - stroke={stroke(119)} - strokeWidth={getStrokeWidth(119)} - dataLedIndex={getLEDIndex(119)} - dataKeyIndex={keyIndex(119)} - dataLayer={layer} - path="M35.47 8.84003H4.47C3.40914 8.84003 2.39172 8.41854 1.64157 7.6684C0.891426 6.91825 0.470001 5.90089 0.470001 4.84003C0.470001 3.77916 0.891426 2.76168 1.64157 2.01154C2.39172 1.26139 3.40914 0.840027 4.47 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2984 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2984 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003Z" - /> - { - setUndeglowIndex(120, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(120)} - stroke={stroke(120)} - strokeWidth={getStrokeWidth(120)} - dataLedIndex={getLEDIndex(120)} - dataKeyIndex={keyIndex(120)} - dataLayer={layer} - path="M35.47 8.84003H4.47C3.40914 8.84003 2.39172 8.41854 1.64157 7.6684C0.891426 6.91825 0.470001 5.90089 0.470001 4.84003C0.470001 3.77916 0.891426 2.76168 1.64157 2.01154C2.39172 1.26139 3.40914 0.840027 4.47 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2984 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2984 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003Z" - /> - { - setUndeglowIndex(121, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(121)} - stroke={stroke(121)} - strokeWidth={getStrokeWidth(121)} - dataLedIndex={getLEDIndex(121)} - dataKeyIndex={keyIndex(121)} - dataLayer={layer} - path="M35.47 8.84003H4.47C3.40914 8.84003 2.39172 8.41854 1.64157 7.6684C0.891426 6.91825 0.470001 5.90089 0.470001 4.84003C0.470001 3.77916 0.891426 2.76168 1.64157 2.01154C2.39172 1.26139 3.40914 0.840027 4.47 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2984 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2984 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003Z" - /> - { - setUndeglowIndex(122, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(122)} - stroke={stroke(122)} - strokeWidth={getStrokeWidth(122)} - dataLedIndex={getLEDIndex(122)} - dataKeyIndex={keyIndex(122)} - dataLayer={layer} - path="M35.47 8.84003H4.47C3.40914 8.84003 2.39172 8.41854 1.64157 7.6684C0.891426 6.91825 0.470001 5.90089 0.470001 4.84003C0.470001 3.77916 0.891426 2.76168 1.64157 2.01154C2.39172 1.26139 3.40914 0.840027 4.47 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2984 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2984 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003Z" - /> - {/* End Left side */} - - {/* - Right side - */} + + + + + + + + + + + {/* RIGHT SIDE */} + + + + + + + + + + + + + + + + + + + {/* Left side */} + { + setUndeglowIndex(70, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(70)} + stroke={stroke(70)} + strokeWidth={getStrokeWidth(70)} + dataLedIndex={getLEDIndex(70)} + dataKeyIndex={keyIndex(70)} + dataLayer={layer} + path="M6.20999 19.84H4.47C3.40914 19.84 2.39172 19.4185 1.64157 18.6684C0.891426 17.9182 0.470001 16.9009 0.470001 15.84C0.470001 14.7792 0.891426 13.7617 1.64157 13.0115C2.39172 12.2614 3.40914 11.84 4.47 11.84H6.20999C10.5481 11.8402 14.8393 10.9419 18.8133 9.20196C22.7872 7.46197 26.3577 4.9178 29.3 1.72991C29.6463 1.31366 30.0735 0.972085 30.5558 0.725823C31.038 0.479562 31.5652 0.333774 32.1055 0.297296C32.6457 0.260817 33.1877 0.334406 33.6987 0.513604C34.2097 0.692802 34.6789 0.973855 35.0781 1.33978C35.4772 1.7057 35.7979 2.14887 36.0207 2.64239C36.2435 3.13591 36.3637 3.66949 36.3742 4.21087C36.3847 4.75225 36.2851 5.29016 36.0815 5.79192C35.878 6.29369 35.5747 6.74886 35.19 7.12994C31.5008 11.137 27.0206 14.3355 22.0325 16.5231C17.0444 18.7108 11.6567 19.8402 6.20999 19.84V19.84Z" + /> + { + setUndeglowIndex(71, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(71)} + stroke={stroke(71)} + strokeWidth={getStrokeWidth(71)} + dataLedIndex={getLEDIndex(71)} + dataKeyIndex={keyIndex(71)} + dataLayer={layer} + path="M4.3 38.31C3.62973 38.3092 2.97042 38.1399 2.38261 37.8178C1.7948 37.4958 1.29735 37.0311 0.935956 36.4667C0.574561 35.9022 0.360812 35.2559 0.314343 34.5873C0.267874 33.9186 0.390189 33.249 0.670025 32.6399C1.51772 30.7876 2.1874 28.859 2.67003 26.8799L8.34001 3.42997C8.58931 2.39828 9.23825 1.50786 10.1441 0.954627C11.0499 0.401395 12.1383 0.230653 13.17 0.479957C14.2017 0.72926 15.0921 1.37817 15.6453 2.28397C16.1986 3.18977 16.3693 4.27828 16.12 5.30997L10.45 28.7599C9.84265 31.2358 9.00569 33.6496 7.95002 35.9699C7.63091 36.6696 7.1169 37.2623 6.46956 37.6773C5.82221 38.0924 5.06895 38.312 4.3 38.31Z" + /> + { + setUndeglowIndex(72, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(72)} + stroke={stroke(72)} + strokeWidth={getStrokeWidth(72)} + dataLedIndex={getLEDIndex(72)} + dataKeyIndex={keyIndex(72)} + dataLayer={layer} + path="M4.77999 38.68C4.46328 38.683 4.14746 38.646 3.83999 38.57C3.32901 38.4468 2.84733 38.224 2.42248 37.9146C1.99763 37.6051 1.63795 37.2149 1.36397 36.7664C1.09 36.3178 0.907126 35.8197 0.825797 35.3004C0.744468 34.7811 0.766265 34.2509 0.889976 33.74L8.17998 3.61C8.30343 3.09916 8.52627 2.6176 8.83581 2.19288C9.14534 1.76817 9.53552 1.40859 9.98403 1.13466C10.4325 0.860724 10.9306 0.677833 11.4498 0.596388C11.969 0.514943 12.4992 0.536544 13.01 0.659987C13.5208 0.783429 14.0024 1.00627 14.4271 1.31581C14.8518 1.62535 15.2114 2.0155 15.4853 2.464C15.7592 2.91251 15.9422 3.41063 16.0236 3.92982C16.1051 4.44902 16.0834 4.97916 15.96 5.49L8.67 35.62C8.45904 36.4926 7.96067 37.2688 7.25509 37.8239C6.5495 38.3789 5.67772 38.6805 4.77999 38.68V38.68Z" + /> + { + setUndeglowIndex(73, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(73)} + stroke={stroke(73)} + strokeWidth={getStrokeWidth(73)} + dataLedIndex={getLEDIndex(73)} + dataKeyIndex={keyIndex(73)} + dataLayer={layer} + path="M4.69001 38.91C4.37359 38.9079 4.05836 38.871 3.75001 38.8C3.23453 38.6823 2.74748 38.4636 2.31706 38.1565C1.88664 37.8494 1.52139 37.4599 1.24241 37.0108C0.963432 36.5616 0.776272 36.0616 0.691754 35.5396C0.607236 35.0177 0.627033 34.4842 0.750012 33.9699L8.04002 3.83994C8.28932 2.80825 8.93824 1.91783 9.84404 1.3646C10.7498 0.811368 11.8383 0.640626 12.87 0.88993C13.9017 1.13923 14.7921 1.78821 15.3453 2.69401C15.8986 3.59981 16.0693 4.68825 15.82 5.71995L8.53001 35.85C8.32111 36.7143 7.83018 37.4843 7.13478 38.0385C6.43937 38.5926 5.57915 38.8993 4.69001 38.91V38.91Z" + /> + { + setUndeglowIndex(74, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(74)} + stroke={stroke(74)} + strokeWidth={getStrokeWidth(74)} + dataLedIndex={getLEDIndex(74)} + dataKeyIndex={keyIndex(74)} + dataLayer={layer} + path="M4.57 39.04C4.23359 39.0411 3.89813 39.0042 3.57 38.93C2.53988 38.679 1.65156 38.0292 1.10027 37.1235C0.548989 36.2178 0.379843 35.1303 0.629997 34.1L5.05999 15.78C6.0631 11.6424 7.38025 7.58728 8.99999 3.64997C9.17373 3.13244 9.45157 2.65594 9.8164 2.24982C10.1812 1.84371 10.6253 1.5166 11.1213 1.28858C11.6174 1.06057 12.1548 0.936498 12.7006 0.924019C13.2464 0.91154 13.7889 1.01091 14.2949 1.21601C14.8008 1.42112 15.2593 1.72763 15.6424 2.11665C16.0254 2.50566 16.3247 2.96892 16.5219 3.47797C16.7191 3.98703 16.81 4.53109 16.7891 5.07661C16.7681 5.62212 16.6357 6.15756 16.4 6.64997C14.9349 10.2206 13.7447 13.898 12.84 17.65L8.39999 35.97C8.19343 36.8345 7.7048 37.6056 7.01125 38.1615C6.3177 38.7174 5.45875 39.0265 4.57 39.04V39.04Z" + /> + { + setUndeglowIndex(75, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(75)} + stroke={stroke(75)} + strokeWidth={getStrokeWidth(75)} + dataLedIndex={getLEDIndex(75)} + dataKeyIndex={keyIndex(75)} + dataLayer={layer} + path="M4.61999 31.3199C3.91709 31.3216 3.22656 31.1351 2.61999 30.78C2.16498 30.5153 1.76669 30.1635 1.44793 29.7446C1.12918 29.3257 0.896226 28.848 0.762449 28.3389C0.628671 27.8298 0.59668 27.2993 0.668333 26.7778C0.739985 26.2563 0.91386 25.7541 1.17999 25.3C6.65188 15.8904 13.9156 7.64482 22.56 1.02996C22.9769 0.710192 23.4528 0.475705 23.9604 0.339836C24.4679 0.203967 24.9973 0.169375 25.5182 0.23809C26.0392 0.306806 26.5415 0.477449 26.9965 0.740287C27.4515 1.00313 27.8502 1.353 28.17 1.76995C28.4898 2.1869 28.7243 2.66276 28.8601 3.17034C28.996 3.67792 29.0306 4.20727 28.9619 4.7282C28.8931 5.24914 28.7225 5.75149 28.4597 6.20647C28.1968 6.66146 27.8469 7.06017 27.43 7.37994C19.6063 13.3775 13.0355 20.8521 8.08999 29.3799C7.73089 29.9777 7.22175 30.4713 6.61307 30.8116C6.00438 31.1519 5.31731 31.3271 4.61999 31.3199V31.3199Z" + /> + { + setUndeglowIndex(76, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(76)} + stroke={stroke(76)} + strokeWidth={getStrokeWidth(76)} + dataLedIndex={getLEDIndex(76)} + dataKeyIndex={keyIndex(76)} + dataLayer={layer} + path="M4.78002 26.65C3.93963 26.6486 3.12103 26.3826 2.44039 25.8897C1.75975 25.3967 1.25164 24.7019 0.98821 23.9039C0.724779 23.1058 0.719406 22.2451 0.972829 21.4439C1.22625 20.6426 1.7256 19.9415 2.40001 19.4401L27.31 0.990059C28.1627 0.358844 29.2312 0.0921946 30.2804 0.248787C31.3297 0.40538 32.2738 0.972349 32.905 1.82502C33.5362 2.67769 33.8029 3.74621 33.6463 4.79548C33.4897 5.84475 32.9227 6.78884 32.07 7.42005L7.20003 25.91C6.4928 26.4082 5.64492 26.6675 4.78002 26.65V26.65Z" + /> + { + setUndeglowIndex(77, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(77)} + stroke={stroke(77)} + strokeWidth={getStrokeWidth(77)} + dataLedIndex={getLEDIndex(77)} + dataKeyIndex={keyIndex(77)} + dataLayer={layer} + path="M4.13002 34.11C3.33686 34.1087 2.56204 33.8715 1.90395 33.4288C1.24586 32.9861 0.73421 32.3577 0.4341 31.6235C0.13399 30.8893 0.0589337 30.0825 0.218463 29.3055C0.377992 28.5286 0.764904 27.8165 1.33004 27.26C8.32522 20.378 13.7611 12.0742 17.27 2.91001C17.4591 2.41952 17.743 1.97109 18.1054 1.5903C18.4678 1.20952 18.9017 0.903817 19.3822 0.690706C19.8628 0.477596 20.3806 0.36123 20.9061 0.348238C21.4316 0.335245 21.9545 0.425919 22.445 0.615023C22.9355 0.804126 23.3839 1.08794 23.7647 1.45035C24.1455 1.81276 24.4512 2.24666 24.6643 2.72721C24.8774 3.20775 24.9938 3.72555 25.0068 4.25107C25.0198 4.77659 24.9292 5.29952 24.7401 5.79001C20.8172 16.0086 14.7433 25.2644 6.93007 32.93C6.18828 33.6763 5.18223 34.1003 4.13002 34.11Z" + /> + { + setUndeglowIndex(78, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(78)} + stroke={stroke(78)} + strokeWidth={getStrokeWidth(78)} + dataLedIndex={getLEDIndex(78)} + dataKeyIndex={keyIndex(78)} + dataLayer={layer} + path="M14.19 73.91C13.8977 73.9098 13.6062 73.8796 13.32 73.82C12.2896 73.5817 11.3956 72.945 10.8334 72.0492C10.2712 71.1534 10.0866 70.0715 10.32 69.04C12.4601 59.4756 12.5317 49.5643 10.53 39.97C10.33 39.05 9.60002 36.1 9.34002 35.2L0.780021 5.36001C0.486957 4.34025 0.61102 3.24583 1.12487 2.31753C1.63872 1.38922 2.50025 0.70306 3.52001 0.409995C4.53977 0.116931 5.63419 0.240994 6.56249 0.754844C7.4908 1.26869 8.17696 2.13023 8.47002 3.14999L17.04 32.95C17.33 33.95 18.15 37.26 18.36 38.29C19.4482 43.4456 19.9946 48.7008 19.99 53.97C19.9895 59.6109 19.3691 65.2347 18.14 70.74C17.9485 71.643 17.4506 72.452 16.7306 73.0298C16.0107 73.6076 15.1131 73.9185 14.19 73.91V73.91Z" + /> + { + setUndeglowIndex(79, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(79)} + stroke={stroke(79)} + strokeWidth={getStrokeWidth(79)} + dataLedIndex={getLEDIndex(79)} + dataKeyIndex={keyIndex(79)} + dataLayer={layer} + path="M13.54 38.69C12.672 38.6888 11.8279 38.4051 11.1352 37.882C10.4425 37.3589 9.93872 36.6246 9.7 35.79L1.13 6.00004C0.836932 4.98028 0.960996 3.88586 1.47485 2.95756C1.98869 2.02925 2.85029 1.34309 3.87005 1.05003C4.88981 0.756963 5.98416 0.880966 6.91247 1.39482C7.84077 1.90866 8.52694 2.77026 8.82 3.79002L17.38 33.58C17.5328 34.0882 17.5829 34.6217 17.5275 35.1494C17.472 35.6771 17.3122 36.1885 17.0572 36.6538C16.8022 37.1192 16.4572 37.5292 16.0422 37.8598C15.6272 38.1905 15.1505 38.4353 14.64 38.58C14.2807 38.6701 13.9101 38.7072 13.54 38.69V38.69Z" + /> + { + setUndeglowIndex(80, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(80)} + stroke={stroke(80)} + strokeWidth={getStrokeWidth(80)} + dataLedIndex={getLEDIndex(80)} + dataKeyIndex={keyIndex(80)} + dataLayer={layer} + path="M11.93 38.32C11.0633 38.3193 10.2201 38.0372 9.52758 37.516C8.83504 36.9948 8.33055 36.2627 8.09002 35.43L3.38003 19.03C2.0574 14.3875 1.05504 9.65971 0.38003 4.87995C0.30452 4.35992 0.332174 3.83015 0.46142 3.32081C0.590667 2.81146 0.818969 2.33256 1.1333 1.91145C1.76811 1.06097 2.71475 0.497478 3.76501 0.344978C4.81527 0.192479 5.8831 0.463464 6.73358 1.09827C7.58405 1.73308 8.14754 2.67973 8.30004 3.72999C8.93549 8.15259 9.87437 12.5262 11.11 16.82L15.82 33.22C16.1102 34.2384 15.9848 35.3303 15.4711 36.2564C14.9575 37.1824 14.0976 37.867 13.08 38.16C12.7069 38.2708 12.3192 38.3248 11.93 38.32V38.32Z" + /> + { + setUndeglowIndex(81, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(81)} + stroke={stroke(81)} + strokeWidth={getStrokeWidth(81)} + dataLedIndex={getLEDIndex(81)} + dataKeyIndex={keyIndex(81)} + dataLayer={layer} + path="M4.31 39.36C3.27295 39.3607 2.27619 38.9585 1.52994 38.2384C0.78369 37.5182 0.346294 36.5364 0.309998 35.5C0.259998 34.24 0.23999 32.98 0.23999 31.72V4.36002C0.23999 3.29915 0.661415 2.28173 1.41156 1.53159C2.16171 0.78144 3.17912 0.360016 4.23999 0.360016C5.30086 0.360016 6.31831 0.78144 7.06845 1.53159C7.8186 2.28173 8.24002 3.29915 8.24002 4.36002V31.72C8.24002 32.88 8.24002 34.05 8.30002 35.21C8.33784 36.2694 7.9536 37.3004 7.23172 38.0767C6.50984 38.853 5.50934 39.3109 4.45001 39.35L4.31 39.36Z" + /> + { + setUndeglowIndex(82, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(82)} + stroke={stroke(82)} + strokeWidth={getStrokeWidth(82)} + dataLedIndex={getLEDIndex(82)} + dataKeyIndex={keyIndex(82)} + dataLayer={layer} + path="M4.25 39.36C3.18913 39.36 2.17172 38.9386 1.42157 38.1884C0.671424 37.4383 0.25 36.4209 0.25 35.36V4.36002C0.25 3.29915 0.671424 2.28173 1.42157 1.53159C2.17172 0.78144 3.18913 0.360016 4.25 0.360016C5.31087 0.360016 6.32825 0.78144 7.0784 1.53159C7.82855 2.28173 8.24997 3.29915 8.24997 4.36002V35.36C8.24997 36.4209 7.82855 37.4383 7.0784 38.1884C6.32825 38.9386 5.31087 39.36 4.25 39.36Z" + /> + { + setUndeglowIndex(83, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(83)} + stroke={stroke(83)} + strokeWidth={getStrokeWidth(83)} + dataLedIndex={getLEDIndex(83)} + dataKeyIndex={keyIndex(83)} + dataLayer={layer} + path="M4.25 39.36C3.18913 39.36 2.17172 38.9386 1.42157 38.1884C0.671424 37.4383 0.25 36.4209 0.25 35.36V4.36002C0.25 3.29915 0.671424 2.28173 1.42157 1.53159C2.17172 0.78144 3.18913 0.360016 4.25 0.360016C5.31087 0.360016 6.32825 0.78144 7.0784 1.53159C7.82855 2.28173 8.24997 3.29915 8.24997 4.36002V35.36C8.24997 36.4209 7.82855 37.4383 7.0784 38.1884C6.32825 38.9386 5.31087 39.36 4.25 39.36Z" + /> + { + setUndeglowIndex(84, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(84)} + stroke={stroke(84)} + strokeWidth={getStrokeWidth(84)} + dataLedIndex={getLEDIndex(84)} + dataKeyIndex={keyIndex(84)} + dataLayer={layer} + path="M4.25 39.36C3.18913 39.36 2.17172 38.9386 1.42157 38.1884C0.671424 37.4383 0.25 36.4209 0.25 35.36V4.36002C0.25 3.29915 0.671424 2.28173 1.42157 1.53159C2.17172 0.78144 3.18913 0.360016 4.25 0.360016C5.31087 0.360016 6.32825 0.78144 7.0784 1.53159C7.82855 2.28173 8.24997 3.29915 8.24997 4.36002V35.36C8.24997 36.4209 7.82855 37.4383 7.0784 38.1884C6.32825 38.9386 5.31087 39.36 4.25 39.36Z" + /> + { + setUndeglowIndex(85, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(85)} + stroke={stroke(85)} + strokeWidth={getStrokeWidth(85)} + dataLedIndex={getLEDIndex(85)} + dataKeyIndex={keyIndex(85)} + dataLayer={layer} + path="M4.25 39.36C3.18913 39.36 2.17172 38.9386 1.42157 38.1884C0.671424 37.4383 0.25 36.4209 0.25 35.36V4.36002C0.25 3.29915 0.671424 2.28173 1.42157 1.53159C2.17172 0.78144 3.18913 0.360016 4.25 0.360016C5.31087 0.360016 6.32825 0.78144 7.0784 1.53159C7.82855 2.28173 8.24997 3.29915 8.24997 4.36002V35.36C8.24997 36.4209 7.82855 37.4383 7.0784 38.1884C6.32825 38.9386 5.31087 39.36 4.25 39.36Z" + /> + + { + setUndeglowIndex(86, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(86)} + stroke={stroke(86)} + strokeWidth={getStrokeWidth(86)} + dataLedIndex={getLEDIndex(86)} + dataKeyIndex={keyIndex(86)} + dataLayer={layer} + path="M23.84 30.38C22.8974 30.3796 21.9851 30.0463 21.2643 29.4389C20.5434 28.8314 20.0603 27.9889 19.9 27.06C19.1211 22.6824 17.1359 18.6091 14.1679 15.2983C11.1999 11.9876 7.36682 9.57083 3.10002 8.32002C2.11714 7.99568 1.29822 7.30298 0.81538 6.38749C0.332543 5.47201 0.223369 4.40502 0.510784 3.41072C0.7982 2.41641 1.45985 1.57223 2.35667 1.05555C3.25349 0.538874 4.31568 0.38993 5.32002 0.640025C11.0268 2.30976 16.1535 5.54075 20.122 9.96864C24.0905 14.3965 26.7429 19.8452 27.78 25.7C27.8791 26.2742 27.8515 26.8631 27.6991 27.4256C27.5468 27.988 27.2735 28.5104 26.8982 28.9562C26.523 29.4019 26.0548 29.7603 25.5266 30.0062C24.9983 30.2522 24.4227 30.3798 23.84 30.38Z" + /> + + { + setUndeglowIndex(87, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(87)} + stroke={stroke(87)} + strokeWidth={getStrokeWidth(87)} + dataLedIndex={getLEDIndex(87)} + dataKeyIndex={keyIndex(87)} + dataLayer={layer} + path="M33.31 14.39H11.9C9.84222 14.3966 7.86392 13.5959 6.38997 12.16L1.67 7.58998C0.907504 6.85136 0.469655 5.8401 0.452777 4.77864C0.435899 3.71719 0.841347 2.69248 1.57997 1.92998C2.3186 1.16748 3.32989 0.729635 4.39135 0.712756C5.4528 0.695878 6.47748 1.10136 7.23998 1.83998L11.96 6.42H33.31C34.3709 6.42 35.3883 6.84143 36.1384 7.59157C36.8886 8.34172 37.31 9.35914 37.31 10.42C37.31 11.4809 36.8886 12.4983 36.1384 13.2484C35.3883 13.9986 34.3709 14.42 33.31 14.42V14.39Z" + /> + { + setUndeglowIndex(88, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(88)} + stroke={stroke(88)} + strokeWidth={getStrokeWidth(88)} + dataLedIndex={getLEDIndex(88)} + dataKeyIndex={keyIndex(88)} + dataLayer={layer} + path="M28.56 27.06C27.519 27.053 26.5217 26.6405 25.78 25.91L12.08 12.62C9.85559 10.4452 6.95595 9.09416 3.85997 8.79C2.7991 8.68258 1.82439 8.15815 1.15019 7.33205C0.475999 6.50595 0.157556 5.44586 0.264969 4.385C0.372382 3.32413 0.896849 2.34938 1.72295 1.67519C2.54904 1.00099 3.60913 0.682582 4.67 0.789995C9.56538 1.26913 14.1511 3.40321 17.67 6.83998L31.37 20.12C31.945 20.6742 32.3409 21.3878 32.5069 22.169C32.6728 22.9502 32.601 23.7632 32.3009 24.5032C32.0008 25.2433 31.486 25.8766 30.8229 26.3216C30.1597 26.7665 29.3786 27.0028 28.58 27L28.56 27.06Z" + /> + { + setUndeglowIndex(89, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(89)} + stroke={stroke(89)} + strokeWidth={getStrokeWidth(89)} + dataLedIndex={getLEDIndex(89)} + dataKeyIndex={keyIndex(89)} + dataLayer={layer} + path="M35.27 8.73999H4.26999C3.20912 8.73999 2.1917 8.31857 1.44156 7.56842C0.691413 6.81827 0.269989 5.80086 0.269989 4.73999C0.269989 3.67912 0.691413 2.66174 1.44156 1.91159C2.1917 1.16145 3.20912 0.73999 4.26999 0.73999H35.27C36.3309 0.73999 37.3483 1.16145 38.0984 1.91159C38.8486 2.66174 39.27 3.67912 39.27 4.73999C39.27 5.80086 38.8486 6.81827 38.0984 7.56842C37.3483 8.31857 36.3309 8.73999 35.27 8.73999Z" + /> + + { + setUndeglowIndex(90, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(90)} + stroke={stroke(90)} + strokeWidth={getStrokeWidth(90)} + dataLedIndex={getLEDIndex(90)} + dataKeyIndex={keyIndex(90)} + dataLayer={layer} + path="M35.27 10.74H11.47C8.23457 10.7269 5.07914 9.7332 2.42002 7.89002C1.96847 7.59882 1.5802 7.21961 1.27842 6.77506C0.976635 6.33051 0.767512 5.82973 0.66352 5.30259C0.559528 4.77544 0.562814 4.23276 0.673164 3.70691C0.783514 3.18106 0.998663 2.68282 1.30579 2.24195C1.61292 1.80108 2.00573 1.4266 2.46076 1.14087C2.91579 0.855146 3.42371 0.664037 3.95423 0.578923C4.48475 0.493808 5.02698 0.516437 5.54856 0.645481C6.07014 0.774526 6.56037 1.00735 6.99 1.33002C8.3067 2.24161 9.86856 2.73315 11.47 2.73999H35.27C36.3309 2.73999 37.3483 3.16145 38.0984 3.91159C38.8486 4.66174 39.27 5.67913 39.27 6.73999C39.27 7.80086 38.8486 8.81828 38.0984 9.56842C37.3483 10.3186 36.3309 10.74 35.27 10.74Z" + /> + { + setUndeglowIndex(91, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(91)} + stroke={stroke(91)} + strokeWidth={getStrokeWidth(91)} + dataLedIndex={getLEDIndex(91)} + dataKeyIndex={keyIndex(91)} + dataLayer={layer} + path="M30.99 22.91C30.1074 22.9101 29.2495 22.6183 28.55 22.08L14.68 11.31C11.9041 9.16698 8.49687 8.00311 4.98999 8H4.59C3.52913 8 2.51171 7.57858 1.76157 6.82843C1.01142 6.07828 0.589996 5.06087 0.589996 4C0.589996 2.93913 1.01142 1.92172 1.76157 1.17157C2.51171 0.421424 3.52913 0 4.59 0H4.98999C10.2675 0.0182659 15.3919 1.7756 19.57 5L33.45 15.74C34.1093 16.2517 34.592 16.9567 34.8306 17.7564C35.0692 18.5562 35.0517 19.4105 34.7805 20.1997C34.5093 20.989 33.9981 21.6737 33.3184 22.1579C32.6387 22.6421 31.8245 22.9016 30.99 22.9V22.91Z" + /> + { + setUndeglowIndex(92, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(92)} + stroke={stroke(92)} + strokeWidth={getStrokeWidth(92)} + dataLedIndex={getLEDIndex(92)} + dataKeyIndex={keyIndex(92)} + dataLayer={layer} + path="M35.59 8H4.59C3.52913 8 2.51171 7.57858 1.76157 6.82843C1.01142 6.07828 0.589996 5.06087 0.589996 4C0.589996 2.93913 1.01142 1.92172 1.76157 1.17157C2.51171 0.421424 3.52913 0 4.59 0H35.59C36.6509 0 37.6683 0.421424 38.4184 1.17157C39.1686 1.92172 39.59 2.93913 39.59 4C39.59 5.06087 39.1686 6.07828 38.4184 6.82843C37.6683 7.57858 36.6509 8 35.59 8Z" + /> + { + setUndeglowIndex(93, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(93)} + stroke={stroke(93)} + strokeWidth={getStrokeWidth(93)} + dataLedIndex={getLEDIndex(93)} + dataKeyIndex={keyIndex(93)} + dataLayer={layer} + path="M4.78001 20.85C3.97057 20.8428 3.18236 20.5902 2.51952 20.1256C1.85669 19.6609 1.35043 19.0061 1.06763 18.2476C0.784835 17.4892 0.738804 16.6627 0.935631 15.8775C1.13246 15.0924 1.56287 14.3854 2.17001 13.85L11.6 5.76999C15.9169 2.07079 21.415 0.0383127 27.1 0.0400096H31.64C32.7009 0.0400096 33.7183 0.461434 34.4684 1.21158C35.2186 1.96172 35.64 2.97914 35.64 4.04001C35.64 5.10088 35.2186 6.11829 34.4684 6.86844C33.7183 7.61859 32.7009 8.04001 31.64 8.04001H27.1C23.3204 8.02518 19.66 9.36233 16.78 11.81L7.33001 19.91C6.61577 20.5113 5.71366 20.8439 4.78001 20.85V20.85Z" + /> + + { + setUndeglowIndex(94, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(94)} + stroke={stroke(94)} + strokeWidth={getStrokeWidth(94)} + dataLedIndex={getLEDIndex(94)} + dataKeyIndex={keyIndex(94)} + dataLayer={layer} + path="M25.64 11.74H4.39001C3.32915 11.74 2.31173 11.3186 1.56158 10.5684C0.811439 9.81827 0.390015 8.80085 0.390015 7.73998C0.390015 6.67912 0.811439 5.66173 1.56158 4.91158C2.31173 4.16144 3.32915 3.73998 4.39001 3.73998H25.64C27.5112 3.73962 29.3205 3.06916 30.74 1.85L31.74 0.969993C32.547 0.295483 33.5872 -0.0340119 34.6354 0.0528182C35.6836 0.139648 36.6555 0.635813 37.3405 1.43392C38.0255 2.23203 38.3686 3.26783 38.2955 4.31707C38.2225 5.36631 37.7391 6.34456 36.95 7.04L35.95 7.92999C33.0755 10.3852 29.4203 11.736 25.64 11.74Z" + /> + { + setUndeglowIndex(95, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(95)} + stroke={stroke(95)} + strokeWidth={getStrokeWidth(95)} + dataLedIndex={getLEDIndex(95)} + dataKeyIndex={keyIndex(95)} + dataLayer={layer} + path="M4.22001 23.8C3.39568 23.8 2.5915 23.5453 1.91746 23.0708C1.24341 22.5962 0.732424 21.9251 0.454412 21.149C0.1764 20.373 0.144943 19.5301 0.364324 18.7355C0.583705 17.9409 1.04321 17.2334 1.68 16.71L14.53 6.14999C18.7944 2.65528 24.1366 0.7438 29.65 0.73999H30.39C31.4509 0.73999 32.4683 1.16145 33.2184 1.91159C33.9686 2.66174 34.39 3.67912 34.39 4.73999C34.39 5.80086 33.9686 6.81827 33.2184 7.56842C32.4683 8.31857 31.4509 8.73999 30.39 8.73999H29.65C26.0028 8.74969 22.4706 10.0178 19.65 12.33L6.78 22.91C6.05624 23.4955 5.15091 23.8103 4.22001 23.8Z" + /> + { + setUndeglowIndex(96, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(96)} + stroke={stroke(96)} + strokeWidth={getStrokeWidth(96)} + dataLedIndex={getLEDIndex(96)} + dataKeyIndex={keyIndex(96)} + dataLayer={layer} + path="M30.62 9.48999H4.62C3.55913 9.48999 2.54172 9.06857 1.79157 8.31842C1.04143 7.56828 0.619995 6.55086 0.619995 5.48999C0.619995 4.42913 1.04143 3.41174 1.79157 2.66159C2.54172 1.91145 3.55913 1.48999 4.62 1.48999H30.62C31.7296 1.48578 32.8261 1.25083 33.84 0.80002C34.322 0.560098 34.8475 0.419954 35.385 0.388002C35.9225 0.356049 36.4609 0.432923 36.9679 0.614045C37.475 0.795168 37.9403 1.07679 38.3358 1.44205C38.7314 1.8073 39.0492 2.24867 39.2702 2.73969C39.4911 3.23071 39.6106 3.76127 39.6216 4.29959C39.6325 4.83791 39.5347 5.3729 39.3339 5.8725C39.1331 6.3721 38.8335 6.82602 38.4531 7.20706C38.0727 7.5881 37.6193 7.88841 37.12 8.09C35.0753 9.00668 32.8608 9.48364 30.62 9.48999Z" + /> + { + setUndeglowIndex(97, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(97)} + stroke={stroke(97)} + strokeWidth={getStrokeWidth(97)} + dataLedIndex={getLEDIndex(97)} + dataKeyIndex={keyIndex(97)} + dataLayer={layer} + path="M35.63 8.48999H4.63C3.56914 8.48999 2.55172 8.06857 1.80158 7.31842C1.05143 6.56827 0.630005 5.55086 0.630005 4.48999C0.630005 3.42912 1.05143 2.41174 1.80158 1.66159C2.55172 0.911445 3.56914 0.48999 4.63 0.48999H35.63C36.6909 0.48999 37.7083 0.911445 38.4584 1.66159C39.2086 2.41174 39.63 3.42912 39.63 4.48999C39.63 5.55086 39.2086 6.56827 38.4584 7.31842C37.7083 8.06857 36.6909 8.48999 35.63 8.48999Z" + /> + { + setUndeglowIndex(98, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(98)} + stroke={stroke(98)} + strokeWidth={getStrokeWidth(98)} + dataLedIndex={getLEDIndex(98)} + dataKeyIndex={keyIndex(98)} + dataLayer={layer} + path="M4.60001 20.91C3.85886 20.9086 3.13267 20.7013 2.50245 20.3113C1.87223 19.9213 1.36276 19.3638 1.0309 18.7011C0.699026 18.0384 0.557805 17.2965 0.622982 16.5583C0.688159 15.82 0.957174 15.1143 1.40001 14.52C4.63694 10.1873 8.83732 6.66688 13.6691 4.23709C18.5009 1.8073 23.8317 0.534727 29.24 0.519989H31.63C32.6909 0.519989 33.7083 0.941444 34.4584 1.69159C35.2086 2.44173 35.63 3.45912 35.63 4.51999C35.63 5.58085 35.2086 6.59827 34.4584 7.34842C33.7083 8.09856 32.6909 8.51999 31.63 8.51999H29.24C25.0697 8.49829 20.953 9.46044 17.2243 11.3283C13.4955 13.1961 10.2599 15.917 7.78001 19.27C7.41365 19.7714 6.93556 20.1807 6.38361 20.4654C5.83165 20.75 5.221 20.9023 4.60001 20.91Z" + /> + { + setUndeglowIndex(99, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(99)} + stroke={stroke(99)} + strokeWidth={getStrokeWidth(99)} + dataLedIndex={getLEDIndex(99)} + dataKeyIndex={keyIndex(99)} + dataLayer={layer} + path="M4.5 39.56C3.43913 39.56 2.42172 39.1386 1.67157 38.3884C0.921428 37.6383 0.5 36.6209 0.5 35.56V13.19C0.499544 9.9321 0.957362 6.69034 1.86 3.55999C1.99535 3.04324 2.23283 2.55882 2.55843 2.13534C2.88403 1.71186 3.29116 1.3579 3.75579 1.09432C4.22042 0.830744 4.73313 0.662906 5.26368 0.600701C5.79424 0.538496 6.33187 0.583184 6.84487 0.73214C7.35786 0.881096 7.83583 1.1313 8.25056 1.46798C8.66529 1.80466 9.00837 2.221 9.25958 2.69244C9.51079 3.16387 9.66503 3.68084 9.71319 4.21285C9.76135 4.74486 9.70246 5.28112 9.54 5.79C8.86129 8.19757 8.52466 10.6886 8.54 13.19V35.56C8.54003 36.0887 8.43525 36.6121 8.23174 37.1C8.02822 37.588 7.73 38.0307 7.35432 38.4027C6.97864 38.7746 6.53295 39.0684 6.04302 39.2671C5.55309 39.4657 5.02864 39.5653 4.5 39.56Z" + /> + { + setUndeglowIndex(100, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(100)} + stroke={stroke(100)} + strokeWidth={getStrokeWidth(100)} + dataLedIndex={getLEDIndex(100)} + dataKeyIndex={keyIndex(100)} + dataLayer={layer} + path="M4.45999 39.56C3.39913 39.56 2.38171 39.1386 1.63156 38.3884C0.881419 37.6383 0.459991 36.6209 0.459991 35.56V4.56C0.459991 3.49913 0.881419 2.48171 1.63156 1.73157C2.38171 0.981422 3.39913 0.559998 4.45999 0.559998C5.52086 0.559998 6.53827 0.981422 7.28842 1.73157C8.03856 2.48171 8.45999 3.49913 8.45999 4.56V35.56C8.45999 36.6209 8.03856 37.6383 7.28842 38.3884C6.53827 39.1386 5.52086 39.56 4.45999 39.56Z" + /> + { + setUndeglowIndex(101, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(101)} + stroke={stroke(101)} + strokeWidth={getStrokeWidth(101)} + dataLedIndex={getLEDIndex(101)} + dataKeyIndex={keyIndex(101)} + dataLayer={layer} + path="M4.41 39.56C3.34914 39.56 2.33172 39.1386 1.58158 38.3884C0.831431 37.6383 0.410004 36.6209 0.410004 35.56V4.56C0.410004 3.49913 0.831431 2.48171 1.58158 1.73157C2.33172 0.981422 3.34914 0.559998 4.41 0.559998C5.47087 0.559998 6.48829 0.981422 7.23843 1.73157C7.98858 2.48171 8.41 3.49913 8.41 4.56V35.56C8.41 36.6209 7.98858 37.6383 7.23843 38.3884C6.48829 39.1386 5.47087 39.56 4.41 39.56Z" + /> + { + setUndeglowIndex(102, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(102)} + stroke={stroke(102)} + strokeWidth={getStrokeWidth(102)} + dataLedIndex={getLEDIndex(102)} + dataKeyIndex={keyIndex(102)} + dataLayer={layer} + path="M4.35999 39.56C3.29912 39.56 2.2817 39.1386 1.53156 38.3885C0.781413 37.6383 0.359985 36.6209 0.359985 35.56V4.56003C0.359985 3.49916 0.781413 2.48171 1.53156 1.73157C2.2817 0.981422 3.29912 0.559998 4.35999 0.559998C5.42085 0.559998 6.43827 0.981422 7.18841 1.73157C7.93856 2.48171 8.35999 3.49916 8.35999 4.56003V35.56C8.35999 36.6209 7.93856 37.6383 7.18841 38.3885C6.43827 39.1386 5.42085 39.56 4.35999 39.56Z" + /> + { + setUndeglowIndex(103, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(103)} + stroke={stroke(103)} + strokeWidth={getStrokeWidth(103)} + dataLedIndex={getLEDIndex(103)} + dataKeyIndex={keyIndex(103)} + dataLayer={layer} + path="M4.64999 38.7C4.02388 38.6997 3.4066 38.5524 2.8478 38.27C2.289 37.9876 1.8043 37.578 1.43269 37.0741C1.06109 36.5702 0.812963 35.9861 0.708282 35.3688C0.603601 34.7515 0.645288 34.1182 0.829989 33.52L6.32999 15.67V4.56003C6.32999 3.49916 6.75142 2.48174 7.50156 1.7316C8.25171 0.981452 9.26912 0.560028 10.33 0.560028C11.3909 0.560028 12.4083 0.981452 13.1584 1.7316C13.9086 2.48174 14.33 3.49916 14.33 4.56003V16.91L8.46999 35.91C8.21267 36.7208 7.70356 37.4285 7.01661 37.9302C6.32966 38.4319 5.50065 38.7016 4.64999 38.7Z" + /> + { + setUndeglowIndex(104, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(104)} + stroke={stroke(104)} + strokeWidth={getStrokeWidth(104)} + dataLedIndex={getLEDIndex(104)} + dataKeyIndex={keyIndex(104)} + dataLayer={layer} + path="M4.27 37.84C3.86988 37.8393 3.47212 37.7787 3.09 37.66C2.07717 37.3466 1.23018 36.6439 0.735161 35.7064C0.240137 34.7688 0.13757 33.6731 0.449999 32.66L9.58 3.03998C9.7343 2.53768 9.98603 2.07068 10.3208 1.66566C10.6556 1.26064 11.0669 0.925525 11.5312 0.67945C11.9955 0.433375 12.5037 0.28118 13.0268 0.231513C13.5499 0.181846 14.0777 0.235657 14.58 0.38996C15.0823 0.544264 15.5493 0.796023 15.9543 1.13081C16.3593 1.46559 16.6945 1.87684 16.9405 2.34113C17.1866 2.80543 17.3388 3.31368 17.3885 3.8368C17.4382 4.35992 17.3843 4.88765 17.23 5.38996L8.09 35.02C7.83794 35.8364 7.33109 36.5507 6.64368 37.0581C5.95627 37.5656 5.12443 37.8396 4.27 37.84Z" + /> + { + setUndeglowIndex(105, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(105)} + stroke={stroke(105)} + strokeWidth={getStrokeWidth(105)} + dataLedIndex={getLEDIndex(105)} + dataKeyIndex={keyIndex(105)} + dataLayer={layer} + path="M4.23999 38.91H4.00999C3.4853 38.8806 2.97154 38.7482 2.49807 38.5202C2.0246 38.2921 1.60069 37.973 1.25058 37.5811C0.900474 37.1892 0.631019 36.7322 0.457616 36.2361C0.284213 35.74 0.210261 35.2147 0.239986 34.69C0.836617 24.0939 2.51195 13.5862 5.23999 3.32997C5.37577 2.82232 5.61024 2.34644 5.93001 1.92945C6.24978 1.51246 6.64858 1.16254 7.10363 0.899729C7.55867 0.636917 8.06104 0.466367 8.58203 0.397776C9.10302 0.329184 9.63243 0.36393 10.14 0.50001C11.163 0.774342 12.0354 1.44317 12.566 2.35987C13.0965 3.27658 13.2418 4.36628 12.97 5.38996C10.3727 15.1187 8.77442 25.0869 8.19999 35.14C8.14164 36.1536 7.70002 37.1071 6.96467 37.8072C6.22931 38.5073 5.25526 38.9015 4.23999 38.91Z" + /> + { + setUndeglowIndex(106, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(106)} + stroke={stroke(106)} + strokeWidth={getStrokeWidth(106)} + dataLedIndex={getLEDIndex(106)} + dataKeyIndex={keyIndex(106)} + dataLayer={layer} + path="M7.02999 39.91C6.01912 39.9128 5.04465 39.5328 4.30256 38.8464C3.56047 38.16 3.10581 37.218 3.02999 36.21L1.39999 14.38C1.16999 11.28 1.02999 8.14001 0.979994 5.04001C0.962646 4.50723 1.05196 3.97637 1.24269 3.47861C1.43342 2.98084 1.72172 2.52621 2.09065 2.14145C2.45958 1.75669 2.90169 1.44954 3.391 1.23807C3.88031 1.02659 4.40696 0.915052 4.93999 0.910004H4.99999C6.05055 0.909885 7.05897 1.32305 7.80742 2.06027C8.55586 2.79749 8.98424 3.79957 8.99999 4.85001C8.99999 7.79001 9.17999 10.77 9.39999 13.72L11.03 35.54C11.0696 36.064 11.0055 36.5907 10.8414 37.0899C10.6774 37.5892 10.4166 38.0512 10.0739 38.4496C9.7312 38.848 9.31338 39.1749 8.84429 39.4118C8.37519 39.6486 7.86403 39.7908 7.33999 39.83L7.02999 39.91Z" + /> + { + setUndeglowIndex(107, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(107)} + stroke={stroke(107)} + strokeWidth={getStrokeWidth(107)} + dataLedIndex={getLEDIndex(107)} + dataKeyIndex={keyIndex(107)} + dataLayer={layer} + path="M7.15001 39.74C6.13913 39.7429 5.16466 39.3629 4.42258 38.6764C3.68049 37.99 3.22582 37.048 3.15001 36.04L0.850007 5.12998C0.810442 4.60597 0.874517 4.07935 1.03857 3.58011C1.20263 3.08088 1.46344 2.61883 1.80612 2.22043C2.1488 1.82203 2.56662 1.49507 3.03572 1.25821C3.50481 1.02135 4.01597 0.879234 4.54001 0.839999C5.59664 0.762866 6.64072 1.10811 7.44313 1.7999C8.24553 2.49169 8.74071 3.47353 8.82001 4.53L11.13 35.45C11.2071 36.5066 10.8619 37.5507 10.1701 38.3531C9.47835 39.1555 8.49648 39.6507 7.44001 39.73L7.15001 39.74Z" + /> + { + setUndeglowIndex(108, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(108)} + stroke={stroke(108)} + strokeWidth={getStrokeWidth(108)} + dataLedIndex={getLEDIndex(108)} + dataKeyIndex={keyIndex(108)} + dataLayer={layer} + path="M6.38999 39.51C5.37912 39.5128 4.40465 39.1329 3.66256 38.4464C2.92047 37.76 2.46581 36.818 2.38999 35.81L0.109993 4.90998C0.0317543 3.84912 0.378147 2.80059 1.07297 1.99513C1.76779 1.18966 2.75413 0.693237 3.81499 0.614999C4.87586 0.53676 5.92436 0.883128 6.72982 1.57795C7.53529 2.27277 8.03175 3.25909 8.10999 4.31995L10.39 35.21C10.4296 35.734 10.3655 36.2607 10.2014 36.7599C10.0374 37.2591 9.77656 37.7212 9.43388 38.1196C9.0912 38.518 8.67338 38.8449 8.20428 39.0818C7.73519 39.3187 7.22403 39.4608 6.69999 39.5L6.38999 39.51Z" + /> + { + setUndeglowIndex(109, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(109)} + stroke={stroke(109)} + strokeWidth={getStrokeWidth(109)} + dataLedIndex={getLEDIndex(109)} + dataKeyIndex={keyIndex(109)} + dataLayer={layer} + path="M6.38999 39.51C5.37912 39.5128 4.40465 39.1328 3.66256 38.4464C2.92047 37.76 2.46581 36.818 2.38999 35.81L0.109993 4.90998C0.0317543 3.84912 0.378147 2.80059 1.07297 1.99513C1.76779 1.18966 2.75413 0.693237 3.81499 0.614999C4.87586 0.53676 5.92435 0.883128 6.72982 1.57795C7.53529 2.27277 8.03175 3.25909 8.10999 4.31995L10.39 35.21C10.4296 35.734 10.3655 36.2607 10.2014 36.7599C10.0374 37.2591 9.77656 37.7212 9.43388 38.1196C9.0912 38.518 8.67338 38.8449 8.20428 39.0818C7.73519 39.3187 7.22403 39.4608 6.69999 39.5L6.38999 39.51Z" + /> + { + setUndeglowIndex(110, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(110)} + stroke={stroke(110)} + strokeWidth={getStrokeWidth(110)} + dataLedIndex={getLEDIndex(110)} + dataKeyIndex={keyIndex(110)} + dataLayer={layer} + path="M6.50998 39.4C5.4975 39.4026 4.52168 39.0212 3.77934 38.3327C3.037 37.6442 2.58339 36.6998 2.50998 35.69L0.229984 4.77997C0.190588 4.25468 0.25504 3.72676 0.419661 3.22638C0.584282 2.726 0.845849 2.26294 1.18943 1.86365C1.533 1.46436 1.95186 1.13665 2.42209 0.899233C2.89231 0.661817 3.4047 0.519379 3.92998 0.479983C4.45527 0.440586 4.98318 0.505059 5.48355 0.66968C5.98393 0.834301 6.44699 1.09582 6.84628 1.43939C7.24557 1.78297 7.57328 2.20183 7.8107 2.67206C8.04811 3.14229 8.19059 3.65471 8.22998 4.17999L10.54 35.1C10.578 35.6287 10.5105 36.1597 10.3414 36.6621C10.1724 37.1645 9.9052 37.6283 9.55535 38.0266C9.20549 38.4248 8.77998 38.7495 8.30352 38.9819C7.82707 39.2142 7.30919 39.3495 6.77998 39.3799L6.50998 39.4Z" + /> + { + setUndeglowIndex(111, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(111)} + stroke={stroke(111)} + strokeWidth={getStrokeWidth(111)} + dataLedIndex={getLEDIndex(111)} + dataKeyIndex={keyIndex(111)} + dataLayer={layer} + path="M6.62999 39.28C5.61912 39.2828 4.64465 38.9028 3.90256 38.2164C3.16047 37.5299 2.70581 36.588 2.62999 35.58L0.329994 4.65998C0.251755 3.59912 0.598149 2.55059 1.29297 1.74513C1.98779 0.939657 2.97413 0.443237 4.03499 0.364999C5.09586 0.28676 6.14436 0.633128 6.94982 1.32795C7.75529 2.02277 8.25176 3.00909 8.32999 4.06995L10.64 34.98C10.6796 35.504 10.6155 36.0307 10.4514 36.5299C10.2874 37.0292 10.0266 37.4911 9.68388 37.8895C9.3412 38.2879 8.92338 38.6149 8.45429 38.8518C7.98519 39.0886 7.47403 39.2307 6.94999 39.27L6.62999 39.28Z" + /> + { + setUndeglowIndex(112, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(112)} + stroke={stroke(112)} + strokeWidth={getStrokeWidth(112)} + dataLedIndex={getLEDIndex(112)} + dataKeyIndex={keyIndex(112)} + dataLayer={layer} + path="M6.77998 39.16C5.76911 39.1628 4.79464 38.7828 4.05255 38.0964C3.31046 37.41 2.8558 36.468 2.77998 35.46L0.479984 4.55C0.440588 4.02471 0.505041 3.49679 0.669662 2.99641C0.834283 2.49603 1.09585 2.03297 1.43943 1.63367C1.783 1.23438 2.20186 0.906675 2.67209 0.669258C3.14231 0.431842 3.6547 0.289404 4.17998 0.250008C4.70527 0.210611 5.23318 0.275023 5.73355 0.439644C6.23393 0.604265 6.69699 0.865843 7.09628 1.20942C7.49557 1.553 7.82328 1.97186 8.0607 2.44209C8.29811 2.91231 8.44059 3.42467 8.47998 3.94996L10.78 34.91C10.8181 35.434 10.7527 35.9604 10.5874 36.4591C10.4221 36.9577 10.1602 37.419 9.81657 37.8164C9.47298 38.2139 9.05446 38.5397 8.58491 38.7754C8.11536 39.0111 7.60398 39.152 7.07998 39.19L6.77998 39.16Z" + /> + { + setUndeglowIndex(113, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(113)} + stroke={stroke(113)} + strokeWidth={getStrokeWidth(113)} + dataLedIndex={getLEDIndex(113)} + dataKeyIndex={keyIndex(113)} + dataLayer={layer} + path="M6.87001 39.05C5.85753 39.0527 4.8817 38.6712 4.13936 37.9827C3.39703 37.2942 2.94341 36.3498 2.87001 35.34L0.570007 4.42999C0.531267 3.9047 0.596369 3.3769 0.761597 2.87677C0.926825 2.37664 1.18894 1.91396 1.53298 1.51514C1.87702 1.11631 2.29625 0.789178 2.76673 0.552368C3.23721 0.315558 3.74972 0.173688 4.27501 0.134948C4.80029 0.0962082 5.32807 0.16131 5.8282 0.326538C6.32832 0.491765 6.79101 0.75392 7.18984 1.09796C7.58866 1.442 7.91582 1.86119 8.15263 2.33166C8.38944 2.80214 8.53127 3.31468 8.57001 3.83997L10.88 34.75C10.9195 35.2748 10.8551 35.8022 10.6904 36.3021C10.5258 36.8019 10.2641 37.2643 9.92034 37.6628C9.57662 38.0614 9.15764 38.3882 8.6874 38.6245C8.21716 38.8608 7.70491 39.002 7.18001 39.04L6.87001 39.05Z" + /> + { + setUndeglowIndex(114, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(114)} + stroke={stroke(114)} + strokeWidth={getStrokeWidth(114)} + dataLedIndex={getLEDIndex(114)} + dataKeyIndex={keyIndex(114)} + dataLayer={layer} + path="M23.92 31.7C23.3507 31.6988 22.7881 31.5761 22.27 31.34C17.0077 28.9663 12.3311 25.4653 8.57094 21.0848C4.81081 16.7043 2.05897 11.5513 0.510007 5.98999C0.226226 4.96758 0.360218 3.8743 0.882507 2.95068C1.4048 2.02707 2.2726 1.34878 3.29501 1.065C4.31742 0.781219 5.41068 0.915209 6.3343 1.4375C7.25792 1.95979 7.93623 2.82756 8.22001 3.84997C9.45689 8.28448 11.6529 12.3931 14.6527 15.8854C17.6525 19.3776 21.3828 22.1683 25.58 24.06C26.4114 24.4388 27.0881 25.0908 27.4975 25.9075C27.9069 26.7243 28.0244 27.6565 27.8304 28.5493C27.6364 29.442 27.1426 30.2415 26.4312 30.8148C25.7198 31.388 24.8336 31.7004 23.92 31.7V31.7Z" + /> + { + setUndeglowIndex(115, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(115)} + stroke={stroke(115)} + strokeWidth={getStrokeWidth(115)} + dataLedIndex={getLEDIndex(115)} + dataKeyIndex={keyIndex(115)} + dataLayer={layer} + path="M35.47 8.84001H8.41001C6.94654 8.83676 5.48434 8.7533 4.03001 8.59001C3.50472 8.53091 2.99621 8.36894 2.53353 8.11332C2.07084 7.85771 1.66303 7.51336 1.33338 7.10014C1.00373 6.68692 0.758703 6.21291 0.612281 5.705C0.465858 5.19708 0.420911 4.66522 0.480006 4.13993C0.539101 3.61465 0.701079 3.10616 0.956694 2.64347C1.21231 2.18078 1.55655 1.77293 1.96977 1.44328C2.383 1.11363 2.8571 0.86863 3.36502 0.722208C3.87293 0.575786 4.40472 0.530911 4.93001 0.590006C6.08535 0.721699 7.24718 0.788422 8.41001 0.789957H35.47C36.5309 0.789957 37.5483 1.21132 38.2984 1.96147C39.0486 2.71161 39.47 3.72909 39.47 4.78996C39.47 5.85082 39.0486 6.86818 38.2984 7.61833C37.5483 8.36847 36.5309 8.78996 35.47 8.78996V8.84001Z" + /> + { + setUndeglowIndex(116, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(116)} + stroke={stroke(116)} + strokeWidth={getStrokeWidth(116)} + dataLedIndex={getLEDIndex(116)} + dataKeyIndex={keyIndex(116)} + dataLayer={layer} + path="M35.47 8.84003H4.47C3.40914 8.84003 2.39172 8.41854 1.64157 7.6684C0.891426 6.91825 0.470001 5.90089 0.470001 4.84003C0.470001 3.77916 0.891426 2.76168 1.64157 2.01154C2.39172 1.26139 3.40914 0.840027 4.47 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2984 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2984 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003Z" + /> + { + setUndeglowIndex(117, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(117)} + stroke={stroke(117)} + strokeWidth={getStrokeWidth(117)} + dataLedIndex={getLEDIndex(117)} + dataKeyIndex={keyIndex(117)} + dataLayer={layer} + path="M35.47 8.84003H4.47C3.40914 8.84003 2.39172 8.41854 1.64157 7.6684C0.891426 6.91825 0.470001 5.90089 0.470001 4.84003C0.470001 3.77916 0.891426 2.76168 1.64157 2.01154C2.39172 1.26139 3.40914 0.840027 4.47 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2984 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2984 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003Z" + /> + { + setUndeglowIndex(118, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(118)} + stroke={stroke(118)} + strokeWidth={getStrokeWidth(118)} + dataLedIndex={getLEDIndex(118)} + dataKeyIndex={keyIndex(118)} + dataLayer={layer} + path="M35.47 8.84003H4.47C3.40914 8.84003 2.39172 8.41854 1.64157 7.6684C0.891426 6.91825 0.470001 5.90089 0.470001 4.84003C0.470001 3.77916 0.891426 2.76168 1.64157 2.01154C2.39172 1.26139 3.40914 0.840027 4.47 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2984 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2984 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003Z" + /> + { + setUndeglowIndex(119, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(119)} + stroke={stroke(119)} + strokeWidth={getStrokeWidth(119)} + dataLedIndex={getLEDIndex(119)} + dataKeyIndex={keyIndex(119)} + dataLayer={layer} + path="M35.47 8.84003H4.47C3.40914 8.84003 2.39172 8.41854 1.64157 7.6684C0.891426 6.91825 0.470001 5.90089 0.470001 4.84003C0.470001 3.77916 0.891426 2.76168 1.64157 2.01154C2.39172 1.26139 3.40914 0.840027 4.47 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2984 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2984 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003Z" + /> + { + setUndeglowIndex(120, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(120)} + stroke={stroke(120)} + strokeWidth={getStrokeWidth(120)} + dataLedIndex={getLEDIndex(120)} + dataKeyIndex={keyIndex(120)} + dataLayer={layer} + path="M35.47 8.84003H4.47C3.40914 8.84003 2.39172 8.41854 1.64157 7.6684C0.891426 6.91825 0.470001 5.90089 0.470001 4.84003C0.470001 3.77916 0.891426 2.76168 1.64157 2.01154C2.39172 1.26139 3.40914 0.840027 4.47 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2984 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2984 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003Z" + /> + { + setUndeglowIndex(121, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(121)} + stroke={stroke(121)} + strokeWidth={getStrokeWidth(121)} + dataLedIndex={getLEDIndex(121)} + dataKeyIndex={keyIndex(121)} + dataLayer={layer} + path="M35.47 8.84003H4.47C3.40914 8.84003 2.39172 8.41854 1.64157 7.6684C0.891426 6.91825 0.470001 5.90089 0.470001 4.84003C0.470001 3.77916 0.891426 2.76168 1.64157 2.01154C2.39172 1.26139 3.40914 0.840027 4.47 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2984 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2984 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003Z" + /> + { + setUndeglowIndex(122, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(122)} + stroke={stroke(122)} + strokeWidth={getStrokeWidth(122)} + dataLedIndex={getLEDIndex(122)} + dataKeyIndex={keyIndex(122)} + dataLayer={layer} + path="M35.47 8.84003H4.47C3.40914 8.84003 2.39172 8.41854 1.64157 7.6684C0.891426 6.91825 0.470001 5.90089 0.470001 4.84003C0.470001 3.77916 0.891426 2.76168 1.64157 2.01154C2.39172 1.26139 3.40914 0.840027 4.47 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2984 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2984 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003Z" + /> + {/* End Left side */} + + {/* + Right side + */} + + { + setUndeglowIndex(167, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(167)} + stroke={stroke(167)} + strokeWidth={getStrokeWidth(167)} + dataLedIndex={getLEDIndex(167)} + dataKeyIndex={keyIndex(167)} + dataLayer={layer} + path="M0.390066 29.3499C-0.0459419 28.3832 -0.0801932 27.2829 0.294851 26.291C0.669895 25.299 1.42353 24.4965 2.39007 24.06C6.58462 22.166 10.3124 19.3745 13.3102 15.8824C16.3081 12.3904 18.503 8.28294 19.74 3.84997C20.0238 2.82756 20.7022 1.95979 21.6258 1.4375C22.5494 0.915209 23.6427 0.781219 24.6651 1.065C25.6875 1.34878 26.5553 2.02707 27.0776 2.95068C27.5999 3.8743 27.7339 4.96758 27.4501 5.98999C25.9012 11.5513 23.1492 16.7043 19.3891 21.0848C15.629 25.4653 10.9525 28.9663 5.69011 31.34C4.72337 31.776 3.62302 31.8103 2.63103 31.4352C1.63904 31.0602 0.836564 30.3066 0.400076 29.34L0.390066 29.3499Z" + /> + { + setUndeglowIndex(166, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(166)} + stroke={stroke(166)} + strokeWidth={getStrokeWidth(166)} + dataLedIndex={getLEDIndex(166)} + dataKeyIndex={keyIndex(166)} + dataLayer={layer} + path="M3.77002 39.04C3.24598 39.0007 2.73484 38.8586 2.26575 38.6218C1.79665 38.3849 1.37881 38.0579 1.03613 37.6595C0.693452 37.2611 0.432607 36.7991 0.268553 36.2999C0.104498 35.8006 0.0403886 35.274 0.0799541 34.75L2.38 3.83997C2.41874 3.31468 2.56055 2.80214 2.79736 2.33166C3.03417 1.86119 3.3613 1.442 3.76013 1.09796C4.15896 0.75392 4.6217 0.491765 5.12182 0.326538C5.62195 0.16131 6.14976 0.0962082 6.67505 0.134948C7.20033 0.173688 7.71287 0.315558 8.18335 0.552368C8.65382 0.789177 9.07295 1.11631 9.41699 1.51514C9.76103 1.91396 10.0232 2.37664 10.1885 2.87677C10.3537 3.3769 10.4187 3.9047 10.38 4.42999L8.07007 35.34C7.99667 36.3498 7.543 37.2942 6.80066 37.9827C6.05832 38.6712 5.08255 39.0527 4.07007 39.05L3.77002 39.04Z" + /> + + { + setUndeglowIndex(165, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(165)} + stroke={stroke(165)} + strokeWidth={getStrokeWidth(165)} + dataLedIndex={getLEDIndex(165)} + dataKeyIndex={keyIndex(165)} + dataLayer={layer} + path="M3.89002 39.15C2.83354 39.0707 1.85171 38.5755 1.15992 37.7731C0.468124 36.9707 0.122944 35.9266 0.200077 34.87L2.5 3.94996C2.57957 2.8891 3.07726 1.90331 3.88367 1.20942C4.69008 0.51554 5.73919 0.170448 6.80005 0.250013C7.86092 0.329578 8.84665 0.827274 9.54053 1.63368C10.2344 2.44009 10.5796 3.48914 10.5 4.55L8.19007 35.46C8.11425 36.468 7.65957 37.41 6.91748 38.0964C6.1754 38.7828 5.20095 39.1628 4.19007 39.16L3.89002 39.15Z" + /> + { + setUndeglowIndex(164, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(164)} + stroke={stroke(164)} + strokeWidth={getStrokeWidth(164)} + dataLedIndex={getLEDIndex(164)} + dataKeyIndex={keyIndex(164)} + dataLayer={layer} + path="M4.01002 39.27C3.48599 39.2307 2.97484 39.0886 2.50575 38.8517C2.03666 38.6149 1.61881 38.2879 1.27613 37.8895C0.933454 37.4911 0.672609 37.0291 0.508555 36.5299C0.3445 36.0307 0.280513 35.504 0.320078 34.98L2.62 4.06995C2.65874 3.54466 2.80055 3.03218 3.03736 2.56171C3.27417 2.09123 3.60143 1.67198 4.00025 1.32794C4.39908 0.9839 4.8617 0.721807 5.36183 0.556579C5.86195 0.391351 6.38976 0.32625 6.91505 0.36499C7.44034 0.40373 7.95287 0.545538 8.42335 0.782348C8.89383 1.01916 9.31295 1.34629 9.65699 1.74512C10.001 2.14394 10.2632 2.60668 10.4285 3.10681C10.5937 3.60694 10.6587 4.13469 10.62 4.65997L8.31007 35.58C8.23426 36.588 7.77957 37.5299 7.03749 38.2164C6.2954 38.9028 5.32095 39.2828 4.31007 39.28L4.01002 39.27Z" + /> + + { + setUndeglowIndex(163, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(163)} + stroke={stroke(163)} + strokeWidth={getStrokeWidth(163)} + dataLedIndex={getLEDIndex(163)} + dataKeyIndex={keyIndex(163)} + dataLayer={layer} + path="M4.13001 39.38C3.07353 39.3007 2.0917 38.8055 1.39991 38.0031C0.708114 37.2007 0.362935 36.1566 0.440068 35.1L2.73999 4.18001C2.81956 3.11914 3.31738 2.13329 4.12378 1.43941C4.93019 0.745521 5.97918 0.400429 7.04004 0.479994C8.10091 0.559559 9.08664 1.05732 9.78052 1.86372C10.4744 2.67013 10.8196 3.71912 10.74 4.77998L8.39002 35.69C8.31662 36.6998 7.86295 37.6442 7.12061 38.3327C6.37827 39.0212 5.4025 39.4026 4.39002 39.4L4.13001 39.38Z" + /> + + { + setUndeglowIndex(162, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(162)} + stroke={stroke(162)} + strokeWidth={getStrokeWidth(162)} + dataLedIndex={getLEDIndex(162)} + dataKeyIndex={keyIndex(162)} + dataLayer={layer} + path="M4.25001 39.5C3.72598 39.4608 3.21483 39.3186 2.74574 39.0818C2.27665 38.8449 1.8588 38.518 1.51612 38.1196C1.17344 37.7212 0.912599 37.2591 0.748545 36.7599C0.58449 36.2607 0.520503 35.734 0.560068 35.21L2.86 4.29999C2.89874 3.7747 3.04054 3.26216 3.27735 2.79169C3.51416 2.32121 3.84142 1.90196 4.24024 1.55792C4.63907 1.21388 5.10169 0.951787 5.60182 0.78656C6.10194 0.621332 6.62975 0.55623 7.15504 0.59497C7.68033 0.63371 8.19286 0.775519 8.66334 1.01233C9.13382 1.24914 9.55306 1.57633 9.8971 1.97516C10.2411 2.37399 10.5032 2.83666 10.6685 3.33679C10.8337 3.83692 10.8987 4.36467 10.86 4.88995L8.55006 35.81C8.47425 36.818 8.01956 37.76 7.27748 38.4464C6.53539 39.1328 5.56094 39.5128 4.55006 39.5099L4.25001 39.5Z" + /> + + { + setUndeglowIndex(161, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(161)} + stroke={stroke(161)} + strokeWidth={getStrokeWidth(161)} + dataLedIndex={getLEDIndex(161)} + dataKeyIndex={keyIndex(161)} + dataLayer={layer} + path="M4.39002 39.62C3.86599 39.5808 3.35484 39.4387 2.88575 39.2018C2.41666 38.965 1.99882 38.638 1.65614 38.2396C1.31346 37.8412 1.05261 37.3792 0.88856 36.8799C0.724505 36.3807 0.660518 35.854 0.700083 35.33L3.00001 4.42001C3.03875 3.89473 3.18056 3.38219 3.41737 2.91171C3.65418 2.44123 3.98131 2.02205 4.38014 1.67801C4.77896 1.33397 5.2417 1.07181 5.74183 0.906585C6.24196 0.741357 6.76977 0.676256 7.29505 0.714996C7.82034 0.753736 8.33288 0.895544 8.80335 1.13235C9.27383 1.36916 9.69296 1.69636 10.037 2.09518C10.381 2.49401 10.6433 2.95669 10.8085 3.45682C10.9737 3.95694 11.0387 4.48469 11 5.00998L8.65003 35.91C8.57663 36.9198 8.12296 37.8642 7.38062 38.5528C6.63829 39.2413 5.66252 39.6227 4.65003 39.62H4.39002Z" + /> + { + setUndeglowIndex(160, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(160)} + stroke={stroke(160)} + strokeWidth={getStrokeWidth(160)} + dataLedIndex={getLEDIndex(160)} + dataKeyIndex={keyIndex(160)} + dataLayer={layer} + path="M4.48999 39.73C3.43352 39.6507 2.45168 39.1555 1.75989 38.3531C1.0681 37.5507 0.72292 36.5066 0.800053 35.45L3.09998 4.53001C3.17955 3.46914 3.67736 2.48336 4.48377 1.78947C5.29018 1.09559 6.33916 0.750433 7.40003 0.829998C8.46089 0.909563 9.44674 1.40732 10.1406 2.21373C10.8345 3.02013 11.1795 4.06912 11.1 5.12999L8.79004 36.04C8.71423 37.0481 8.25955 37.99 7.51746 38.6764C6.77537 39.3629 5.80092 39.7429 4.79004 39.74L4.48999 39.73Z" + /> + + { + setUndeglowIndex(159, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(159)} + stroke={stroke(159)} + strokeWidth={getStrokeWidth(159)} + dataLedIndex={getLEDIndex(159)} + dataKeyIndex={keyIndex(159)} + dataLayer={layer} + path="M4.61 39.85C4.08596 39.8108 3.57481 39.6687 3.10572 39.4318C2.63663 39.1949 2.21879 38.868 1.87611 38.4696C1.53343 38.0712 1.27258 37.6091 1.10853 37.1099C0.944476 36.6107 0.880488 36.084 0.920054 35.56L2.54005 13.74C2.76005 10.74 2.89007 7.81003 2.94007 4.87003C2.95583 3.81959 3.38413 2.81751 4.13258 2.08029C4.88102 1.34307 5.88952 0.929905 6.94007 0.930023H7.00001C7.52531 0.937844 8.04394 1.04908 8.52625 1.25735C9.00857 1.46563 9.44517 1.76687 9.81104 2.14389C10.1769 2.52091 10.4649 2.96628 10.6586 3.45462C10.8523 3.94296 10.948 4.46472 10.9401 4.99002C10.9401 8.09002 10.75 11.23 10.52 14.33L8.89002 36.16C8.81421 37.168 8.35953 38.11 7.61744 38.7964C6.87535 39.4828 5.9009 39.8629 4.89002 39.86L4.61 39.85Z" + /> + + { + setUndeglowIndex(158, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(158)} + stroke={stroke(158)} + strokeWidth={getStrokeWidth(158)} + dataLedIndex={getLEDIndex(158)} + dataKeyIndex={keyIndex(158)} + dataLayer={layer} + path="M5.71995 35.16C5.14217 25.1066 3.54064 15.1384 0.940038 5.41003C0.675729 4.38791 0.826131 3.30273 1.35862 2.39111C1.8911 1.47949 2.76243 0.815374 3.78257 0.543513C4.80271 0.271652 5.88901 0.414083 6.80454 0.939814C7.72007 1.46554 8.39062 2.33193 8.67002 3.35003C11.3981 13.6063 13.0734 24.1139 13.67 34.71C13.7301 35.768 13.3679 36.8066 12.6629 37.5978C11.958 38.389 10.9679 38.8682 9.91001 38.93H9.68003C8.66476 38.9216 7.69065 38.5273 6.9553 37.8273C6.21994 37.1272 5.77829 36.1737 5.71995 35.16Z" + /> + + { + setUndeglowIndex(157, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(157)} + stroke={stroke(157)} + strokeWidth={getStrokeWidth(157)} + dataLedIndex={getLEDIndex(157)} + dataKeyIndex={keyIndex(157)} + dataLayer={layer} + path="M9.84998 35.02L0.719974 5.38998C0.540451 4.88164 0.465555 4.34226 0.499759 3.80423C0.533964 3.2662 0.676618 2.74064 0.919071 2.25912C1.16152 1.7776 1.49879 1.35004 1.91065 1.00217C2.32251 0.654293 2.80051 0.393269 3.3158 0.234771C3.83109 0.0762724 4.37301 0.0235965 4.90918 0.0798637C5.44535 0.136131 5.96464 0.300206 6.43579 0.562225C6.90695 0.824244 7.32034 1.17879 7.651 1.60458C7.98167 2.03038 8.22278 2.51865 8.35999 3.04001L17.5 32.66C17.655 33.1623 17.7095 33.6902 17.6604 34.2136C17.6113 34.737 17.4597 35.2455 17.2141 35.7103C16.9685 36.1751 16.6338 36.5869 16.229 36.9223C15.8242 37.2577 15.3573 37.51 14.855 37.665C14.3527 37.82 13.8248 37.8745 13.3014 37.8254C12.778 37.7763 12.2694 37.6247 11.8047 37.3791C11.3399 37.1334 10.9282 36.7987 10.5928 36.394C10.2574 35.9892 10.0049 35.5223 9.84998 35.02Z" + /> + + { + setUndeglowIndex(156, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(156)} + stroke={stroke(156)} + strokeWidth={getStrokeWidth(156)} + dataLedIndex={getLEDIndex(156)} + dataKeyIndex={keyIndex(156)} + dataLayer={layer} + path="M6.46997 35.91L0.609985 16.91V4.56003C0.609985 3.49916 1.03147 2.48174 1.78162 1.7316C2.53176 0.981452 3.54912 0.560028 4.60999 0.560028C5.67085 0.560028 6.68833 0.981452 7.43848 1.7316C8.18862 2.48174 8.60999 3.49916 8.60999 4.56003V15.67L14.12 33.52C14.433 34.5344 14.3301 35.6317 13.8341 36.5703C13.3381 37.5089 12.4894 38.212 11.475 38.525C10.4605 38.8379 9.3633 38.7351 8.42468 38.239C7.48606 37.743 6.78293 36.8944 6.46997 35.88V35.91Z" + /> + + { + setUndeglowIndex(155, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(155)} + stroke={stroke(155)} + strokeWidth={getStrokeWidth(155)} + dataLedIndex={getLEDIndex(155)} + dataKeyIndex={keyIndex(155)} + dataLayer={layer} + path="M0.589966 35.56V4.56003C0.589966 3.49916 1.01145 2.48171 1.7616 1.73157C2.51174 0.981422 3.5291 0.559998 4.58997 0.559998C5.65083 0.559998 6.66831 0.981422 7.41846 1.73157C8.1686 2.48171 8.58997 3.49916 8.58997 4.56003V35.56C8.58997 36.6209 8.1686 37.6383 7.41846 38.3885C6.66831 39.1386 5.65083 39.56 4.58997 39.56C3.5291 39.56 2.51174 39.1386 1.7616 38.3885C1.01145 37.6383 0.589966 36.6209 0.589966 35.56Z" + /> + + { + setUndeglowIndex(154, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(154)} + stroke={stroke(154)} + strokeWidth={getStrokeWidth(154)} + dataLedIndex={getLEDIndex(154)} + dataKeyIndex={keyIndex(154)} + dataLayer={layer} + path="M0.540039 35.56V4.56C0.540039 3.49913 0.961402 2.48171 1.71155 1.73157C2.46169 0.981422 3.47917 0.559998 4.54004 0.559998C5.6009 0.559998 6.61826 0.981422 7.36841 1.73157C8.11855 2.48171 8.54004 3.49913 8.54004 4.56V35.56C8.54004 36.6209 8.11855 37.6383 7.36841 38.3884C6.61826 39.1386 5.6009 39.56 4.54004 39.56C3.47917 39.56 2.46169 39.1386 1.71155 38.3884C0.961402 37.6383 0.540039 36.6209 0.540039 35.56Z" + /> + + { + setUndeglowIndex(153, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(153)} + stroke={stroke(153)} + strokeWidth={getStrokeWidth(153)} + dataLedIndex={getLEDIndex(153)} + dataKeyIndex={keyIndex(153)} + dataLayer={layer} + path="M0.48999 35.56V4.56C0.48999 3.49913 0.911476 2.48171 1.66162 1.73157C2.41177 0.981422 3.42912 0.559998 4.48999 0.559998C5.55086 0.559998 6.56834 0.981422 7.31848 1.73157C8.06863 2.48171 8.48999 3.49913 8.48999 4.56V35.56C8.48999 36.6209 8.06863 37.6383 7.31848 38.3884C6.56834 39.1386 5.55086 39.56 4.48999 39.56C3.42912 39.56 2.41177 39.1386 1.66162 38.3884C0.911476 37.6383 0.48999 36.6209 0.48999 35.56Z" + /> + + { + setUndeglowIndex(152, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(152)} + stroke={stroke(152)} + strokeWidth={getStrokeWidth(152)} + dataLedIndex={getLEDIndex(152)} + dataKeyIndex={keyIndex(152)} + dataLayer={layer} + path="M1.44012 35.56V13.19C1.45546 10.6886 1.11883 8.19757 0.440115 5.79C0.277654 5.28112 0.218735 4.74486 0.266897 4.21285C0.315059 3.68084 0.469303 3.16387 0.720511 2.69244C0.971718 2.221 1.31482 1.80466 1.72954 1.46798C2.14427 1.1313 2.62219 0.881096 3.13518 0.73214C3.64818 0.583184 4.18581 0.538496 4.71636 0.600701C5.24691 0.662906 5.75967 0.830744 6.22429 1.09432C6.68892 1.3579 7.09608 1.71186 7.42168 2.13534C7.74728 2.55882 7.9847 3.04324 8.12005 3.55999C9.02754 6.6893 9.48545 9.93176 9.48003 13.19V35.56C9.48003 36.6209 9.05867 37.6383 8.30852 38.3884C7.55838 39.1386 6.5409 39.56 5.48003 39.56C4.95139 39.5653 4.42699 39.4657 3.93706 39.2671C3.44713 39.0684 3.00147 38.7746 2.62578 38.4027C2.2501 38.0307 1.95186 37.588 1.74834 37.1C1.54483 36.6121 1.44009 36.0887 1.44012 35.56Z" + /> + + { + setUndeglowIndex(151, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(151)} + stroke={stroke(151)} + strokeWidth={getStrokeWidth(151)} + dataLedIndex={getLEDIndex(151)} + dataKeyIndex={keyIndex(151)} + dataLayer={layer} + path="M28.13 19.27C25.6563 15.9156 22.4268 13.1914 18.7035 11.3185C14.9802 9.44552 10.8679 8.47648 6.70007 8.48999H4.31006C3.24919 8.48999 2.23171 8.06857 1.48157 7.31842C0.731422 6.56827 0.310059 5.55086 0.310059 4.48999C0.310059 3.42912 0.731422 2.41174 1.48157 1.66159C2.23171 0.911445 3.24919 0.48999 4.31006 0.48999H6.70007C12.1095 0.506273 17.4411 1.77947 22.2743 4.20908C27.1075 6.63868 31.31 10.1582 34.55 14.49C35.1839 15.3413 35.4536 16.4096 35.2998 17.4598C35.146 18.51 34.5813 19.4561 33.73 20.09C32.8786 20.7239 31.8103 20.9936 30.7601 20.8398C29.7099 20.686 28.7639 20.1213 28.13 19.27Z" + /> + + { + setUndeglowIndex(150, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(150)} + stroke={stroke(150)} + strokeWidth={getStrokeWidth(150)} + dataLedIndex={getLEDIndex(150)} + dataKeyIndex={keyIndex(150)} + dataLayer={layer} + path="M0.310059 4.48999C0.310059 3.42912 0.731422 2.41174 1.48157 1.66159C2.23171 0.911445 3.24919 0.48999 4.31006 0.48999H35.3101C36.3709 0.48999 37.3883 0.911445 38.1384 1.66159C38.8886 2.41174 39.3101 3.42912 39.3101 4.48999C39.3101 5.55086 38.8886 6.56827 38.1384 7.31842C37.3883 8.06857 36.3709 8.48999 35.3101 8.48999H4.31006C3.24919 8.48999 2.23171 8.06857 1.48157 7.31842C0.731422 6.56827 0.310059 5.55086 0.310059 4.48999Z" + /> + { + setUndeglowIndex(149, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(149)} + stroke={stroke(149)} + strokeWidth={getStrokeWidth(149)} + dataLedIndex={getLEDIndex(149)} + dataKeyIndex={keyIndex(149)} + dataLayer={layer} + path="M2.81998 8.09C2.32071 7.88841 1.86727 7.5881 1.48685 7.20706C1.10643 6.82602 0.806888 6.3721 0.606113 5.8725C0.405338 5.3729 0.307505 4.83791 0.318454 4.29959C0.329404 3.76127 0.448909 3.23071 0.669834 2.73969C0.890759 2.24867 1.20856 1.8073 1.60416 1.44205C1.99976 1.07679 2.46503 0.795168 2.97208 0.614045C3.47913 0.432923 4.01748 0.356049 4.55497 0.388002C5.09245 0.419954 5.61799 0.560098 6.10001 0.80002C7.11388 1.25083 8.21041 1.48578 9.31998 1.48999H35.32C36.3809 1.48999 37.3983 1.91145 38.1484 2.66159C38.8986 3.41174 39.32 4.42913 39.32 5.48999C39.32 6.55086 38.8986 7.56828 38.1484 8.31842C37.3983 9.06857 36.3809 9.48999 35.32 9.48999H9.31998C7.07918 9.48364 4.86471 9.00668 2.81998 8.09Z" + /> + + { + setUndeglowIndex(148, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(148)} + stroke={stroke(148)} + strokeWidth={getStrokeWidth(148)} + dataLedIndex={getLEDIndex(148)} + dataKeyIndex={keyIndex(148)} + dataLayer={layer} + path="M28.19 22.91L15.39 12.33C12.5541 10.0105 9.00372 8.74228 5.34003 8.73999H4.60999C3.54912 8.73999 2.53176 8.31857 1.78162 7.56842C1.03147 6.81827 0.609985 5.80086 0.609985 4.73999C0.609985 3.67912 1.03147 2.66174 1.78162 1.91159C2.53176 1.16145 3.54912 0.73999 4.60999 0.73999H5.34003C10.8294 0.759917 16.1443 2.67046 20.39 6.14999L33.25 16.71C33.6584 17.0427 33.997 17.4528 34.2465 17.9167C34.4959 18.3807 34.6513 18.8893 34.7036 19.4135C34.756 19.9376 34.7043 20.4669 34.5515 20.971C34.3988 21.4751 34.1479 21.9441 33.8134 22.351C33.4789 22.7579 33.0674 23.0948 32.6024 23.3422C32.1373 23.5897 31.6281 23.7428 31.1037 23.7929C30.5793 23.843 30.0503 23.789 29.5468 23.634C29.0434 23.4791 28.5755 23.2263 28.17 22.89L28.19 22.91Z" + /> + + { + setUndeglowIndex(147, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(147)} + stroke={stroke(147)} + strokeWidth={getStrokeWidth(147)} + dataLedIndex={getLEDIndex(147)} + dataKeyIndex={keyIndex(147)} + dataLayer={layer} + path="M3 8.91001L2 8.02C1.57572 7.68665 1.22329 7.27094 0.963869 6.79783C0.704448 6.32472 0.543409 5.804 0.49048 5.26704C0.437551 4.73007 0.493831 4.18794 0.655885 3.67329C0.81794 3.15863 1.08244 2.68208 1.43347 2.27232C1.78451 1.86255 2.2148 1.52804 2.69849 1.28892C3.18218 1.04979 3.70926 0.911008 4.24799 0.880898C4.78672 0.850788 5.32593 0.929982 5.83325 1.11372C6.34058 1.29745 6.8055 1.58192 7.20001 1.95002L8.20001 2.83002C9.61956 4.04919 11.4288 4.71965 13.3 4.72001H34.56C35.6209 4.72001 36.6383 5.14143 37.3884 5.89158C38.1386 6.64172 38.56 7.65914 38.56 8.72001C38.56 9.78088 38.1386 10.7983 37.3884 11.5484C36.6383 12.2986 35.6209 12.72 34.56 12.72H13.3C9.52233 12.718 5.8696 11.3669 3 8.91001Z" + /> + { + setUndeglowIndex(146, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(146)} + stroke={stroke(146)} + strokeWidth={getStrokeWidth(146)} + dataLedIndex={getLEDIndex(146)} + dataKeyIndex={keyIndex(146)} + dataLayer={layer} + path="M28.61 19.91L19.19 11.84C16.3218 9.38082 12.6682 8.02933 8.89001 8.03H4.39001C3.32915 8.03 2.31173 7.60857 1.56158 6.85843C0.811439 6.10828 0.390015 5.09086 0.390015 4.03C0.390015 2.96913 0.811439 1.95171 1.56158 1.20157C2.31173 0.451423 3.32915 0.0299988 4.39001 0.0299988H8.92999C14.597 0.0321082 20.078 2.0529 24.39 5.73001L33.81 13.81C34.2164 14.1497 34.5514 14.5667 34.7953 15.0369C35.0393 15.5071 35.1874 16.0211 35.2311 16.549C35.2749 17.0768 35.2133 17.6081 35.05 18.1121C34.8868 18.616 34.6251 19.0824 34.2801 19.4844C33.9351 19.8863 33.5137 20.2157 33.0403 20.4535C32.567 20.6913 32.0512 20.8327 31.5228 20.8695C30.9943 20.9063 30.4638 20.8378 29.9621 20.6679C29.4604 20.498 28.9974 20.2302 28.6 19.88L28.61 19.91Z" + /> + { + setUndeglowIndex(145, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(145)} + stroke={stroke(145)} + strokeWidth={getStrokeWidth(145)} + dataLedIndex={getLEDIndex(145)} + dataKeyIndex={keyIndex(145)} + dataLayer={layer} + path="M0.390015 4C0.390015 2.93913 0.811439 1.92172 1.56158 1.17157C2.31173 0.421424 3.32915 0 4.39001 0H35.39C36.4509 0 37.4683 0.421424 38.2184 1.17157C38.9686 1.92172 39.39 2.93913 39.39 4C39.39 5.06087 38.9686 6.07828 38.2184 6.82843C37.4683 7.57858 36.4509 8 35.39 8H4.39001C3.32915 8 2.31173 7.57858 1.56158 6.82843C0.811439 6.07828 0.390015 5.06087 0.390015 4Z" + /> + + { + setUndeglowIndex(144, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(144)} + stroke={stroke(144)} + strokeWidth={getStrokeWidth(144)} + dataLedIndex={getLEDIndex(144)} + dataKeyIndex={keyIndex(144)} + dataLayer={layer} + path="M1.78005 22.33C1.13175 21.4905 0.843398 20.4279 0.978418 19.3759C1.11344 18.3239 1.66075 17.3686 2.50002 16.72L16.39 5.98001C20.5708 2.75353 25.6991 0.996079 30.9801 0.980011H31.39C32.4509 0.980011 33.4683 1.40144 34.2185 2.15158C34.9686 2.90173 35.39 3.91915 35.39 4.98001C35.39 6.04088 34.9686 7.0583 34.2185 7.80844C33.4683 8.55859 32.4509 8.98001 31.39 8.98001H31C27.4931 8.98313 24.0859 10.147 21.31 12.29L7.39004 23.05C6.55057 23.6983 5.48797 23.9866 4.43594 23.8516C3.38391 23.7166 2.4286 23.1693 1.78005 22.33Z" + /> + { + setUndeglowIndex(143, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(143)} + stroke={stroke(143)} + strokeWidth={getStrokeWidth(143)} + dataLedIndex={getLEDIndex(143)} + dataKeyIndex={keyIndex(143)} + dataLayer={layer} + path="M0.679993 6.74C0.679993 5.67913 1.10142 4.66174 1.85156 3.9116C2.60171 3.16145 3.61913 2.74 4.67999 2.74H28.47C30.0718 2.73503 31.6342 2.24332 32.95 1.33002C33.8199 0.722677 34.8955 0.485762 35.9401 0.671423C36.9846 0.857084 37.9127 1.4501 38.52 2.32001C39.1274 3.18992 39.3643 4.26546 39.1786 5.31003C38.9929 6.35461 38.3999 7.28267 37.53 7.89002C34.8681 9.73513 31.7089 10.7289 28.47 10.74H4.67999C3.61913 10.74 2.60171 10.3186 1.85156 9.56843C1.10142 8.81828 0.679993 7.80086 0.679993 6.74Z" + /> + + { + setUndeglowIndex(142, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(142)} + stroke={stroke(142)} + strokeWidth={getStrokeWidth(142)} + dataLedIndex={getLEDIndex(142)} + dataKeyIndex={keyIndex(142)} + dataLayer={layer} + path="M0.679993 4.73999C0.679993 3.67912 1.10142 2.66174 1.85156 1.91159C2.60171 1.16145 3.61913 0.73999 4.67999 0.73999H35.68C36.7409 0.73999 37.7583 1.16145 38.5084 1.91159C39.2586 2.66174 39.68 3.67912 39.68 4.73999C39.68 5.80086 39.2586 6.81827 38.5084 7.56842C37.7583 8.31857 36.7409 8.73999 35.68 8.73999H4.67999C3.61913 8.73999 2.60171 8.31857 1.85156 7.56842C1.10142 6.81827 0.679993 5.80086 0.679993 4.73999Z" + /> + + { + setUndeglowIndex(141, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(141)} + stroke={stroke(141)} + strokeWidth={getStrokeWidth(141)} + dataLedIndex={getLEDIndex(141)} + dataKeyIndex={keyIndex(141)} + dataLayer={layer} + path="M1.51003 25.84C1.14397 25.4626 0.855923 25.0168 0.66231 24.528C0.468696 24.0392 0.373311 23.517 0.38167 22.9913C0.390029 22.4656 0.501959 21.9468 0.711016 21.4644C0.920072 20.982 1.22218 20.5455 1.60005 20.18L15.3 6.91C18.8166 3.46988 23.4035 1.33522 28.3 0.86001C28.8253 0.807481 29.3558 0.858919 29.8612 1.01141C30.3666 1.1639 30.837 1.41445 31.2456 1.74874C31.6542 2.08303 31.9929 2.49451 32.2424 2.95971C32.492 3.42491 32.6475 3.9347 32.7 4.45999C32.7526 4.98527 32.7011 5.51577 32.5486 6.02117C32.3961 6.52658 32.1456 6.99699 31.8113 7.40557C31.477 7.81415 31.0655 8.15288 30.6003 8.40243C30.1351 8.65198 29.6253 8.80748 29.1001 8.86001C26.0072 9.16481 23.1109 10.5159 20.89 12.69L7.17006 25.91C6.79269 26.2761 6.34685 26.5641 5.85805 26.7577C5.36925 26.9514 4.84705 27.0467 4.32137 27.0384C3.79569 27.03 3.27685 26.9181 2.79445 26.709C2.31206 26.5 1.87557 26.1979 1.51003 25.82V25.84Z" + /> + + { + setUndeglowIndex(140, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(140)} + stroke={stroke(140)} + strokeWidth={getStrokeWidth(140)} + dataLedIndex={getLEDIndex(140)} + dataKeyIndex={keyIndex(140)} + dataLayer={layer} + path="M0.630005 10.39C0.630005 9.32914 1.05143 8.31172 1.80157 7.56157C2.55172 6.81143 3.56914 6.39 4.63 6.39H25.98L30.7 1.80999C31.4625 1.07136 32.4872 0.665879 33.5486 0.682758C34.6101 0.699636 35.6214 1.13748 36.36 1.89998C37.0986 2.66248 37.5041 3.68719 37.4872 4.74864C37.4704 5.8101 37.0325 6.82136 36.27 7.55999L31.55 12.13C30.076 13.5659 28.0978 14.3666 26.04 14.36H4.63C3.57432 14.36 2.56142 13.9427 1.81213 13.1991C1.06284 12.4554 0.637923 11.4457 0.630005 10.39Z" + /> + + { + setUndeglowIndex(139, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(139)} + stroke={stroke(139)} + strokeWidth={getStrokeWidth(139)} + dataLedIndex={getLEDIndex(139)} + dataKeyIndex={keyIndex(139)} + dataLayer={layer} + path="M3.39002 30.32C2.34529 30.1392 1.41507 29.551 0.803782 28.6847C0.192496 27.8184 -0.0498507 26.7449 0.130015 25.7C1.16936 19.846 3.8225 14.3985 7.79066 9.97097C11.7588 5.54345 16.8844 2.31182 22.59 0.640009C23.0989 0.477548 23.6352 0.41866 24.1672 0.466822C24.6992 0.514984 25.2161 0.669197 25.6876 0.920405C26.159 1.17161 26.5754 1.51471 26.9121 1.92944C27.2487 2.34417 27.4989 2.82214 27.6479 3.33514C27.7969 3.84814 27.8415 4.38576 27.7793 4.91632C27.7171 5.44687 27.5493 5.95959 27.2857 6.42422C27.0221 6.88885 26.6682 7.29597 26.2447 7.62158C25.8212 7.94718 25.3368 8.18466 24.82 8.32C20.5519 9.57027 16.7173 11.9866 13.7476 15.2973C10.7779 18.608 8.79087 22.6816 8.01002 27.06C7.82924 28.1047 7.24107 29.0349 6.37477 29.6462C5.50846 30.2575 4.43492 30.4999 3.39002 30.32V30.32Z" + /> + + { + setUndeglowIndex(138, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(138)} + stroke={stroke(138)} + strokeWidth={getStrokeWidth(138)} + dataLedIndex={getLEDIndex(138)} + dataKeyIndex={keyIndex(138)} + dataLayer={layer} + path="M0.690002 35.36V4.36002C0.690002 3.29915 1.11143 2.28173 1.86157 1.53159C2.61172 0.78144 3.62914 0.360016 4.69 0.360016C5.75087 0.360016 6.76829 0.78144 7.51843 1.53159C8.26858 2.28173 8.69 3.29915 8.69 4.36002V35.36C8.69 36.4209 8.26858 37.4383 7.51843 38.1884C6.76829 38.9386 5.75087 39.36 4.69 39.36C3.62914 39.36 2.61172 38.9386 1.86157 38.1884C1.11143 37.4383 0.690002 36.4209 0.690002 35.36Z" + /> + + { + setUndeglowIndex(137, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(137)} + stroke={stroke(137)} + strokeWidth={getStrokeWidth(137)} + dataLedIndex={getLEDIndex(137)} + dataKeyIndex={keyIndex(137)} + dataLayer={layer} + path="M0.690002 35.36V4.36002C0.690002 3.29915 1.11143 2.28173 1.86157 1.53159C2.61172 0.78144 3.62914 0.360016 4.69 0.360016C5.75087 0.360016 6.76829 0.78144 7.51843 1.53159C8.26858 2.28173 8.69 3.29915 8.69 4.36002V35.36C8.69 36.4209 8.26858 37.4383 7.51843 38.1884C6.76829 38.9386 5.75087 39.36 4.69 39.36C3.62914 39.36 2.61172 38.9386 1.86157 38.1884C1.11143 37.4383 0.690002 36.4209 0.690002 35.36Z" + /> + + { + setUndeglowIndex(136, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(136)} + stroke={stroke(136)} + strokeWidth={getStrokeWidth(136)} + dataLedIndex={getLEDIndex(136)} + dataKeyIndex={keyIndex(136)} + dataLayer={layer} + path="M0.690002 35.36V4.36002C0.690002 3.29915 1.11143 2.28173 1.86157 1.53159C2.61172 0.78144 3.62914 0.360016 4.69 0.360016C5.75087 0.360016 6.76829 0.78144 7.51843 1.53159C8.26858 2.28173 8.69 3.29915 8.69 4.36002V35.36C8.69 36.4209 8.26858 37.4383 7.51843 38.1884C6.76829 38.9386 5.75087 39.36 4.69 39.36C3.62914 39.36 2.61172 38.9386 1.86157 38.1884C1.11143 37.4383 0.690002 36.4209 0.690002 35.36Z" + /> + + { + setUndeglowIndex(135, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(135)} + stroke={stroke(135)} + strokeWidth={getStrokeWidth(135)} + dataLedIndex={getLEDIndex(135)} + dataKeyIndex={keyIndex(135)} + dataLayer={layer} + path="M0.690002 35.36V4.36002C0.690002 3.29915 1.11143 2.28173 1.86157 1.53159C2.61172 0.78144 3.62914 0.360016 4.69 0.360016C5.75087 0.360016 6.76829 0.78144 7.51843 1.53159C8.26858 2.28173 8.69 3.29915 8.69 4.36002V35.36C8.69 36.4209 8.26858 37.4383 7.51843 38.1884C6.76829 38.9386 5.75087 39.36 4.69 39.36C3.62914 39.36 2.61172 38.9386 1.86157 38.1884C1.11143 37.4383 0.690002 36.4209 0.690002 35.36Z" + /> + { + setUndeglowIndex(134, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(134)} + stroke={stroke(134)} + strokeWidth={getStrokeWidth(134)} + dataLedIndex={getLEDIndex(134)} + dataKeyIndex={keyIndex(134)} + dataLayer={layer} + path="M4.48996 39.35C3.96457 39.3319 3.44793 39.2105 2.96951 38.9926C2.4911 38.7747 2.06031 38.4646 1.70181 38.0801C1.34332 37.6956 1.06413 37.2442 0.88022 36.7517C0.696306 36.2593 0.611266 35.7354 0.629976 35.21C0.629976 34.05 0.689973 32.88 0.689973 31.72V4.36002C0.689973 3.29915 1.1114 2.28173 1.86154 1.53159C2.61169 0.78144 3.62911 0.360016 4.68997 0.360016C5.75084 0.360016 6.76826 0.78144 7.5184 1.53159C8.26855 2.28173 8.68997 3.29915 8.68997 4.36002V31.72C8.68997 32.98 8.66998 34.24 8.62998 35.5C8.59368 36.5364 8.15631 37.5182 7.41007 38.2384C6.66382 38.9585 5.66703 39.3607 4.62998 39.36L4.48996 39.35Z" + /> + { + setUndeglowIndex(133, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(133)} + stroke={stroke(133)} + strokeWidth={getStrokeWidth(133)} + dataLedIndex={getLEDIndex(133)} + dataKeyIndex={keyIndex(133)} + dataLayer={layer} + path="M2.90004 38.16C1.88244 37.867 1.02256 37.1824 0.508925 36.2564C-0.00470662 35.3303 -0.130154 34.2384 0.160048 33.22L4.88002 16.82C6.11099 12.525 7.0498 8.15173 7.69002 3.72999C7.84252 2.67973 8.40601 1.73308 9.25648 1.09827C10.107 0.463464 11.1748 0.192479 12.225 0.344978C13.2753 0.497478 14.222 1.06097 14.8568 1.91145C15.4916 2.76192 15.7625 3.82969 15.61 4.87995C14.9303 9.65889 13.928 14.3864 12.61 19.03L7.89003 35.43C7.6495 36.2627 7.14501 36.9948 6.45247 37.516C5.75992 38.0372 4.91677 38.3193 4.05 38.32C3.6608 38.3248 3.27314 38.2708 2.90004 38.16Z" + /> + { + setUndeglowIndex(132, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(132)} + stroke={stroke(132)} + strokeWidth={getStrokeWidth(132)} + dataLedIndex={getLEDIndex(132)} + dataKeyIndex={keyIndex(132)} + dataLayer={layer} + path="M3.30002 38.53C2.7895 38.3853 2.3129 38.1405 1.89792 37.8098C1.48293 37.4792 1.13791 37.0692 0.882904 36.6038C0.6279 36.1385 0.467991 35.6271 0.412567 35.0994C0.357143 34.5717 0.407266 34.0382 0.560028 33.53L9.12003 3.74002C9.26514 3.23508 9.50831 2.76365 9.8356 2.35269C10.1629 1.94172 10.5679 1.59925 11.0276 1.34481C11.4872 1.09038 11.9925 0.929004 12.5145 0.869839C13.0365 0.810675 13.5651 0.854916 14.07 1.00003C14.575 1.14514 15.0464 1.38825 15.4574 1.71554C15.8683 2.04284 16.2108 2.44785 16.4652 2.9075C16.7197 3.36715 16.8811 3.87247 16.9402 4.3945C16.9994 4.91653 16.9551 5.44505 16.81 5.94998L8.25003 35.74C8.01132 36.5746 7.50762 37.3089 6.81491 37.832C6.1222 38.3551 5.27812 38.6387 4.41006 38.64C4.03669 38.6571 3.66277 38.6201 3.30002 38.53Z" + /> + { + setUndeglowIndex(131, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(131)} + stroke={stroke(131)} + strokeWidth={getStrokeWidth(131)} + dataLedIndex={getLEDIndex(131)} + dataKeyIndex={keyIndex(131)} + dataLayer={layer} + path="M1.85004 70.74C-0.540135 60.0598 -0.615183 48.9916 1.63001 38.28C1.85001 37.28 2.63002 33.95 2.96002 32.95L11.52 3.14999C11.6651 2.64506 11.9082 2.17369 12.2355 1.76272C12.5628 1.35176 12.9679 1.00928 13.4276 0.754849C13.8872 0.500416 14.3925 0.338977 14.9145 0.279812C15.4365 0.220648 15.9651 0.26489 16.47 0.41C16.975 0.555111 17.4463 0.798282 17.8573 1.12558C18.2683 1.45287 18.6107 1.85788 18.8652 2.31753C19.1196 2.77718 19.281 3.28244 19.3402 3.80447C19.3994 4.3265 19.3551 4.85508 19.21 5.36001L10.65 35.16C10.38 36.06 9.65002 39.01 9.46002 39.93C8.49144 44.5338 8.00214 49.2255 8 53.93C8.00451 58.9756 8.56119 64.0055 9.66004 68.93C9.89346 69.9615 9.70887 71.0435 9.14667 71.9392C8.58447 72.835 7.69042 73.4717 6.66003 73.71C6.37387 73.7696 6.08235 73.7998 5.79004 73.8C4.88377 73.8118 4.00036 73.5154 3.28455 72.9595C2.56873 72.4036 2.06295 71.621 1.85004 70.74Z" + /> + { + setUndeglowIndex(130, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(130)} + stroke={stroke(130)} + strokeWidth={getStrokeWidth(130)} + dataLedIndex={getLEDIndex(130)} + dataKeyIndex={keyIndex(130)} + dataLayer={layer} + path="M19.01 32.97C11.1997 25.304 5.12914 16.0481 1.21003 5.82996C1.00291 5.33661 0.896879 4.80674 0.898206 4.27167C0.899532 3.73661 1.00816 3.20723 1.21772 2.71491C1.42729 2.22259 1.73351 1.77732 2.11824 1.40546C2.50297 1.0336 2.95843 0.742698 3.45759 0.549993C3.95675 0.357287 4.4895 0.266706 5.0243 0.283574C5.55911 0.300443 6.08509 0.424419 6.57112 0.648198C7.05714 0.871978 7.4933 1.191 7.85383 1.58637C8.21436 1.98174 8.49193 2.44541 8.67006 2.94996C12.1986 12.1068 17.6553 20.3976 24.6701 27.26C25.4272 28.0039 25.8579 29.0181 25.8673 30.0796C25.8766 31.1411 25.464 32.1628 24.72 32.92C23.9761 33.6772 22.9619 34.1078 21.9004 34.1172C20.8389 34.1266 19.8172 33.7139 19.06 32.97H19.01Z" + /> + { + setUndeglowIndex(129, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(129)} + stroke={stroke(129)} + strokeWidth={getStrokeWidth(129)} + dataLedIndex={getLEDIndex(129)} + dataKeyIndex={keyIndex(129)} + dataLayer={layer} + path="M26.75 25.91L1.83003 7.45997C0.977354 6.82875 0.410324 5.88466 0.253731 4.8354C0.0971385 3.78613 0.363788 2.71767 0.995003 1.865C1.62622 1.01233 2.57031 0.445297 3.61958 0.288704C4.66884 0.132112 5.73736 0.398761 6.59003 1.02998L31.51 19.48C32.3627 20.1112 32.9297 21.0553 33.0863 22.1046C33.2429 23.1538 32.9763 24.2223 32.345 25.075C31.7138 25.9276 30.7697 26.4947 29.7205 26.6513C28.6712 26.8078 27.6027 26.5412 26.75 25.91Z" + /> + { + setUndeglowIndex(128, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(128)} + stroke={stroke(128)} + strokeWidth={getStrokeWidth(128)} + dataLedIndex={getLEDIndex(128)} + dataKeyIndex={keyIndex(128)} + dataLayer={layer} + path="M20.87 29.34C15.9182 20.8166 9.34845 13.3432 1.53003 7.33996C0.72352 6.68329 0.204462 5.73834 0.0829507 4.70543C-0.0385602 3.67252 0.246987 2.6329 0.879093 1.807C1.5112 0.981097 2.44015 0.433886 3.46894 0.281362C4.49773 0.128838 5.54548 0.383002 6.39002 0.98998C15.0349 7.60727 22.3014 15.8521 27.78 25.2599C28.2335 26.1707 28.3228 27.2201 28.0299 28.1944C27.737 29.1688 27.0838 29.9949 26.2033 30.5046C25.3227 31.0143 24.281 31.1693 23.2902 30.9381C22.2994 30.7069 21.434 30.1068 20.87 29.2599V29.34Z" + /> + { + setUndeglowIndex(127, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(127)} + stroke={stroke(127)} + strokeWidth={getStrokeWidth(127)} + dataLedIndex={getLEDIndex(127)} + dataKeyIndex={keyIndex(127)} + dataLayer={layer} + path="M8.49002 35.98L4.06002 17.66C3.15528 13.908 1.96515 10.2306 0.500027 6.65998C0.253419 6.16666 0.111481 5.62765 0.0831571 5.07685C0.0548333 4.52605 0.140772 3.97538 0.335476 3.45936C0.530181 2.94334 0.829446 2.47312 1.21457 2.07832C1.59969 1.68351 2.0623 1.37262 2.57333 1.16517C3.08436 0.957715 3.63277 0.858227 4.18411 0.872871C4.73544 0.887514 5.27777 1.01603 5.77707 1.25031C6.27636 1.4846 6.72186 1.81957 7.08548 2.23426C7.4491 2.64895 7.723 3.13435 7.89004 3.65998C9.51426 7.59564 10.8315 11.6511 11.83 15.79L16.27 34.11C16.393 34.6242 16.4129 35.1577 16.3283 35.6797C16.2438 36.2016 16.0566 36.7017 15.7776 37.1508C15.4986 37.6 15.1334 37.9894 14.703 38.2965C14.2725 38.6036 13.7855 38.8223 13.27 38.94C12.9583 39.0111 12.6398 39.048 12.32 39.05C11.4313 39.0366 10.5723 38.7274 9.87875 38.1715C9.1852 37.6156 8.69658 36.8445 8.49002 35.98Z" + /> + + { + setUndeglowIndex(126, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(126)} + stroke={stroke(126)} + strokeWidth={getStrokeWidth(126)} + dataLedIndex={getLEDIndex(126)} + dataKeyIndex={keyIndex(126)} + dataLayer={layer} + path="M8.39 35.8L1.10002 5.66999C0.953663 5.15217 0.913284 4.61015 0.981309 4.07636C1.04933 3.54258 1.22435 3.02798 1.4959 2.56342C1.76745 2.09886 2.12996 1.69387 2.56169 1.37269C2.99343 1.0515 3.48552 0.820767 4.00853 0.694221C4.53154 0.567675 5.0747 0.547947 5.60552 0.636237C6.13633 0.724528 6.64388 0.91898 7.09776 1.20801C7.55165 1.49705 7.94254 1.87472 8.24706 2.31837C8.55158 2.76201 8.76343 3.26254 8.86998 3.78998L16.14 33.91C16.3902 34.9403 16.221 36.0278 15.6697 36.9335C15.1184 37.8392 14.2301 38.489 13.2 38.74C12.8882 38.8105 12.5697 38.8474 12.25 38.85C11.3588 38.8443 10.495 38.5411 9.7957 37.9885C9.09641 37.436 8.60165 36.6657 8.39 35.8Z" + /> + + { + setUndeglowIndex(125, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(125)} + stroke={stroke(125)} + strokeWidth={getStrokeWidth(125)} + dataLedIndex={getLEDIndex(125)} + dataKeyIndex={keyIndex(125)} + dataLayer={layer} + path="M8.24999 35.62L0.960007 5.49C0.813648 4.97218 0.77327 4.43015 0.841294 3.89637C0.909319 3.36258 1.08433 2.84799 1.35588 2.38343C1.62743 1.91887 1.98994 1.51388 2.42168 1.1927C2.85341 0.871511 3.3455 0.640774 3.86852 0.514228C4.39153 0.387682 4.93469 0.367955 5.4655 0.456245C5.99631 0.544535 6.50386 0.738988 6.95775 1.02802C7.41164 1.31706 7.80252 1.69473 8.10704 2.13837C8.41156 2.58202 8.62348 3.08254 8.73003 3.60999L16.02 33.74C16.143 34.2542 16.1628 34.7878 16.0783 35.3097C15.9938 35.8316 15.8066 36.3317 15.5276 36.7808C15.2486 37.23 14.8833 37.6194 14.4529 37.9265C14.0225 38.2336 13.5355 38.4523 13.02 38.57C12.7125 38.646 12.3967 38.683 12.08 38.68C11.1926 38.6671 10.3347 38.3595 9.64128 37.8055C8.94791 37.2515 8.45845 36.4827 8.24999 35.62Z" + /> + { + setUndeglowIndex(124, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(124)} + stroke={stroke(124)} + strokeWidth={getStrokeWidth(124)} + dataLedIndex={getLEDIndex(124)} + dataKeyIndex={keyIndex(124)} + dataLayer={layer} + path="M9.00999 35.9699C7.94544 33.6531 7.10819 31.2385 6.50999 28.7599L0.829993 5.30997C0.58069 4.27828 0.751431 3.18977 1.30466 2.28397C1.8579 1.37817 2.74831 0.72926 3.78001 0.479957C4.8117 0.230653 5.90014 0.401395 6.80595 0.954627C7.71175 1.50786 8.36066 2.39828 8.60996 3.42997L14.28 26.8799C14.7583 28.8602 15.4281 30.7893 16.28 32.6399C16.5176 33.1198 16.6563 33.6425 16.6881 34.177C16.72 34.7115 16.6441 35.2469 16.4652 35.7516C16.2862 36.2562 16.0078 36.7197 15.6463 37.1148C15.2849 37.5098 14.8478 37.8283 14.361 38.0512C13.8742 38.2742 13.3476 38.3972 12.8124 38.4129C12.2771 38.4286 11.7442 38.3367 11.2452 38.1426C10.7462 37.9485 10.2912 37.6561 9.90726 37.2829C9.52331 36.9097 9.21818 36.4633 9.00999 35.9699Z" + /> + + { + setUndeglowIndex(123, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(123)} + stroke={stroke(123)} + strokeWidth={getStrokeWidth(123)} + dataLedIndex={getLEDIndex(123)} + dataKeyIndex={keyIndex(123)} + dataLayer={layer} + path="M1.75002 7.12992C1.06076 6.3433 0.707007 5.318 0.764548 4.27372C0.822088 3.22943 1.28637 2.24925 2.05788 1.54313C2.82939 0.837 3.84677 0.46115 4.89205 0.496068C5.93733 0.530986 6.92738 0.973854 7.65005 1.72989C10.5904 4.91751 14.1592 7.46155 18.1314 9.20157C22.1037 10.9416 26.3934 11.84 30.7301 11.84H32.4701C33.5309 11.84 34.5483 12.2614 35.2985 13.0115C36.0486 13.7617 36.4701 14.7791 36.4701 15.84C36.4701 16.9009 36.0486 17.9182 35.2985 18.6684C34.5483 19.4185 33.5309 19.84 32.4701 19.84H30.7301C25.2833 19.8402 19.8957 18.7108 14.9076 16.5231C9.91945 14.3354 5.43927 11.137 1.75002 7.12992Z" + /> + + { + setUndeglowIndex(175, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(175)} + stroke={stroke(175)} + strokeWidth={getStrokeWidth(175)} + dataLedIndex={getLEDIndex(175)} + dataKeyIndex={keyIndex(175)} + dataLayer={layer} + path="M0.470032 4.84003C0.470032 3.77916 0.891456 2.76168 1.6416 2.01154C2.39175 1.26139 3.40917 0.840027 4.47003 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2985 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2985 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003H4.47003C3.40917 8.84003 2.39175 8.41854 1.6416 7.6684C0.891456 6.91825 0.470032 5.90089 0.470032 4.84003Z" + /> + + { + setUndeglowIndex(174, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(174)} + stroke={stroke(174)} + strokeWidth={getStrokeWidth(174)} + dataLedIndex={getLEDIndex(174)} + dataKeyIndex={keyIndex(174)} + dataLayer={layer} + path="M0.470032 4.84003C0.470032 3.77916 0.891456 2.76168 1.6416 2.01154C2.39175 1.26139 3.40917 0.840027 4.47003 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2985 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2985 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003H4.47003C3.40917 8.84003 2.39175 8.41854 1.6416 7.6684C0.891456 6.91825 0.470032 5.90089 0.470032 4.84003Z" + /> + + { + setUndeglowIndex(173, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(173)} + stroke={stroke(173)} + strokeWidth={getStrokeWidth(173)} + dataLedIndex={getLEDIndex(173)} + dataKeyIndex={keyIndex(173)} + dataLayer={layer} + path="M0.470032 4.84003C0.470032 3.77916 0.891456 2.76168 1.6416 2.01154C2.39175 1.26139 3.40917 0.840027 4.47003 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2985 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2985 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003H4.47003C3.40917 8.84003 2.39175 8.41854 1.6416 7.6684C0.891456 6.91825 0.470032 5.90089 0.470032 4.84003Z" + /> + + { + setUndeglowIndex(172, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(172)} + stroke={stroke(172)} + strokeWidth={getStrokeWidth(172)} + dataLedIndex={getLEDIndex(172)} + dataKeyIndex={keyIndex(172)} + dataLayer={layer} + path="M0.470032 4.84003C0.470032 3.77916 0.891456 2.76168 1.6416 2.01154C2.39175 1.26139 3.40917 0.840027 4.47003 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2985 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2985 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003H4.47003C3.40917 8.84003 2.39175 8.41854 1.6416 7.6684C0.891456 6.91825 0.470032 5.90089 0.470032 4.84003Z" + /> + { + setUndeglowIndex(171, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(171)} + stroke={stroke(171)} + strokeWidth={getStrokeWidth(171)} + dataLedIndex={getLEDIndex(171)} + dataKeyIndex={keyIndex(171)} + dataLayer={layer} + path="M0.470032 4.84003C0.470032 3.77916 0.891456 2.76168 1.6416 2.01154C2.39175 1.26139 3.40917 0.840027 4.47003 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2985 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2985 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003H4.47003C3.40917 8.84003 2.39175 8.41854 1.6416 7.6684C0.891456 6.91825 0.470032 5.90089 0.470032 4.84003Z" + /> + { + setUndeglowIndex(170, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(170)} + stroke={stroke(170)} + strokeWidth={getStrokeWidth(170)} + dataLedIndex={getLEDIndex(170)} + dataKeyIndex={keyIndex(170)} + dataLayer={layer} + path="M0.469971 4.84003C0.469971 3.77916 0.891395 2.76168 1.64154 2.01154C2.39169 1.26139 3.4091 0.840027 4.46997 0.840027H35.47C36.5308 0.840027 37.5483 1.26139 38.2984 2.01154C39.0485 2.76168 39.4699 3.77916 39.4699 4.84003C39.4699 5.90089 39.0485 6.91825 38.2984 7.6684C37.5483 8.41854 36.5308 8.84003 35.47 8.84003H4.46997C3.4091 8.84003 2.39169 8.41854 1.64154 7.6684C0.891395 6.91825 0.469971 5.90089 0.469971 4.84003Z" + /> + { + setUndeglowIndex(169, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(169)} + stroke={stroke(169)} + strokeWidth={getStrokeWidth(169)} + dataLedIndex={getLEDIndex(169)} + dataKeyIndex={keyIndex(169)} + dataLayer={layer} + path="M0.469971 4.84003C0.469971 3.77916 0.891456 2.76168 1.6416 2.01154C2.39175 1.26139 3.4091 0.840027 4.46997 0.840027H35.47C36.5308 0.840027 37.5483 1.26139 38.2985 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2985 7.6684C37.5483 8.41854 36.5308 8.84003 35.47 8.84003H4.46997C3.4091 8.84003 2.39175 8.41854 1.6416 7.6684C0.891456 6.91825 0.469971 5.90089 0.469971 4.84003Z" + /> + { + setUndeglowIndex(168, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(168)} + stroke={stroke(168)} + strokeWidth={getStrokeWidth(168)} + dataLedIndex={getLEDIndex(168)} + dataKeyIndex={keyIndex(168)} + dataLayer={layer} + path="M0.469917 4.84006C0.469917 3.77919 0.891402 2.76171 1.64155 2.01157C2.39169 1.26142 3.40905 0.840058 4.46992 0.840058H31.53C32.6961 0.838229 33.8612 0.771386 35.02 0.639985C36.0808 0.521964 37.1451 0.830227 37.9787 1.49692C38.8123 2.16361 39.3469 3.13417 39.4649 4.19504C39.5829 5.2559 39.2748 6.32018 38.6081 7.15378C37.9414 7.98738 36.9708 8.52196 35.91 8.63999C34.4556 8.80328 32.9934 8.88674 31.53 8.88999H4.46992C3.9404 8.89003 3.41615 8.78492 2.92756 8.58078C2.43897 8.37664 1.99582 8.07752 1.62373 7.70078C1.25163 7.32403 0.958009 6.87717 0.759956 6.38608C0.561903 5.89499 0.463298 5.36954 0.469917 4.84006Z" + /> - { - setUndeglowIndex(167, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(167)} - stroke={stroke(167)} - strokeWidth={getStrokeWidth(167)} - dataLedIndex={getLEDIndex(167)} - dataKeyIndex={keyIndex(167)} - dataLayer={layer} - path="M0.390066 29.3499C-0.0459419 28.3832 -0.0801932 27.2829 0.294851 26.291C0.669895 25.299 1.42353 24.4965 2.39007 24.06C6.58462 22.166 10.3124 19.3745 13.3102 15.8824C16.3081 12.3904 18.503 8.28294 19.74 3.84997C20.0238 2.82756 20.7022 1.95979 21.6258 1.4375C22.5494 0.915209 23.6427 0.781219 24.6651 1.065C25.6875 1.34878 26.5553 2.02707 27.0776 2.95068C27.5999 3.8743 27.7339 4.96758 27.4501 5.98999C25.9012 11.5513 23.1492 16.7043 19.3891 21.0848C15.629 25.4653 10.9525 28.9663 5.69011 31.34C4.72337 31.776 3.62302 31.8103 2.63103 31.4352C1.63904 31.0602 0.836564 30.3066 0.400076 29.34L0.390066 29.3499Z" - /> - { - setUndeglowIndex(166, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(166)} - stroke={stroke(166)} - strokeWidth={getStrokeWidth(166)} - dataLedIndex={getLEDIndex(166)} - dataKeyIndex={keyIndex(166)} - dataLayer={layer} - path="M3.77002 39.04C3.24598 39.0007 2.73484 38.8586 2.26575 38.6218C1.79665 38.3849 1.37881 38.0579 1.03613 37.6595C0.693452 37.2611 0.432607 36.7991 0.268553 36.2999C0.104498 35.8006 0.0403886 35.274 0.0799541 34.75L2.38 3.83997C2.41874 3.31468 2.56055 2.80214 2.79736 2.33166C3.03417 1.86119 3.3613 1.442 3.76013 1.09796C4.15896 0.75392 4.6217 0.491765 5.12182 0.326538C5.62195 0.16131 6.14976 0.0962082 6.67505 0.134948C7.20033 0.173688 7.71287 0.315558 8.18335 0.552368C8.65382 0.789177 9.07295 1.11631 9.41699 1.51514C9.76103 1.91396 10.0232 2.37664 10.1885 2.87677C10.3537 3.3769 10.4187 3.9047 10.38 4.42999L8.07007 35.34C7.99667 36.3498 7.543 37.2942 6.80066 37.9827C6.05832 38.6712 5.08255 39.0527 4.07007 39.05L3.77002 39.04Z" - /> - - { - setUndeglowIndex(165, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(165)} - stroke={stroke(165)} - strokeWidth={getStrokeWidth(165)} - dataLedIndex={getLEDIndex(165)} - dataKeyIndex={keyIndex(165)} - dataLayer={layer} - path="M3.89002 39.15C2.83354 39.0707 1.85171 38.5755 1.15992 37.7731C0.468124 36.9707 0.122944 35.9266 0.200077 34.87L2.5 3.94996C2.57957 2.8891 3.07726 1.90331 3.88367 1.20942C4.69008 0.51554 5.73919 0.170448 6.80005 0.250013C7.86092 0.329578 8.84665 0.827274 9.54053 1.63368C10.2344 2.44009 10.5796 3.48914 10.5 4.55L8.19007 35.46C8.11425 36.468 7.65957 37.41 6.91748 38.0964C6.1754 38.7828 5.20095 39.1628 4.19007 39.16L3.89002 39.15Z" - /> - { - setUndeglowIndex(164, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(164)} - stroke={stroke(164)} - strokeWidth={getStrokeWidth(164)} - dataLedIndex={getLEDIndex(164)} - dataKeyIndex={keyIndex(164)} - dataLayer={layer} - path="M4.01002 39.27C3.48599 39.2307 2.97484 39.0886 2.50575 38.8517C2.03666 38.6149 1.61881 38.2879 1.27613 37.8895C0.933454 37.4911 0.672609 37.0291 0.508555 36.5299C0.3445 36.0307 0.280513 35.504 0.320078 34.98L2.62 4.06995C2.65874 3.54466 2.80055 3.03218 3.03736 2.56171C3.27417 2.09123 3.60143 1.67198 4.00025 1.32794C4.39908 0.9839 4.8617 0.721807 5.36183 0.556579C5.86195 0.391351 6.38976 0.32625 6.91505 0.36499C7.44034 0.40373 7.95287 0.545538 8.42335 0.782348C8.89383 1.01916 9.31295 1.34629 9.65699 1.74512C10.001 2.14394 10.2632 2.60668 10.4285 3.10681C10.5937 3.60694 10.6587 4.13469 10.62 4.65997L8.31007 35.58C8.23426 36.588 7.77957 37.5299 7.03749 38.2164C6.2954 38.9028 5.32095 39.2828 4.31007 39.28L4.01002 39.27Z" - /> - - { - setUndeglowIndex(163, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(163)} - stroke={stroke(163)} - strokeWidth={getStrokeWidth(163)} - dataLedIndex={getLEDIndex(163)} - dataKeyIndex={keyIndex(163)} - dataLayer={layer} - path="M4.13001 39.38C3.07353 39.3007 2.0917 38.8055 1.39991 38.0031C0.708114 37.2007 0.362935 36.1566 0.440068 35.1L2.73999 4.18001C2.81956 3.11914 3.31738 2.13329 4.12378 1.43941C4.93019 0.745521 5.97918 0.400429 7.04004 0.479994C8.10091 0.559559 9.08664 1.05732 9.78052 1.86372C10.4744 2.67013 10.8196 3.71912 10.74 4.77998L8.39002 35.69C8.31662 36.6998 7.86295 37.6442 7.12061 38.3327C6.37827 39.0212 5.4025 39.4026 4.39002 39.4L4.13001 39.38Z" - /> - - { - setUndeglowIndex(162, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(162)} - stroke={stroke(162)} - strokeWidth={getStrokeWidth(162)} - dataLedIndex={getLEDIndex(162)} - dataKeyIndex={keyIndex(162)} - dataLayer={layer} - path="M4.25001 39.5C3.72598 39.4608 3.21483 39.3186 2.74574 39.0818C2.27665 38.8449 1.8588 38.518 1.51612 38.1196C1.17344 37.7212 0.912599 37.2591 0.748545 36.7599C0.58449 36.2607 0.520503 35.734 0.560068 35.21L2.86 4.29999C2.89874 3.7747 3.04054 3.26216 3.27735 2.79169C3.51416 2.32121 3.84142 1.90196 4.24024 1.55792C4.63907 1.21388 5.10169 0.951787 5.60182 0.78656C6.10194 0.621332 6.62975 0.55623 7.15504 0.59497C7.68033 0.63371 8.19286 0.775519 8.66334 1.01233C9.13382 1.24914 9.55306 1.57633 9.8971 1.97516C10.2411 2.37399 10.5032 2.83666 10.6685 3.33679C10.8337 3.83692 10.8987 4.36467 10.86 4.88995L8.55006 35.81C8.47425 36.818 8.01956 37.76 7.27748 38.4464C6.53539 39.1328 5.56094 39.5128 4.55006 39.5099L4.25001 39.5Z" - /> - - { - setUndeglowIndex(161, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(161)} - stroke={stroke(161)} - strokeWidth={getStrokeWidth(161)} - dataLedIndex={getLEDIndex(161)} - dataKeyIndex={keyIndex(161)} - dataLayer={layer} - path="M4.39002 39.62C3.86599 39.5808 3.35484 39.4387 2.88575 39.2018C2.41666 38.965 1.99882 38.638 1.65614 38.2396C1.31346 37.8412 1.05261 37.3792 0.88856 36.8799C0.724505 36.3807 0.660518 35.854 0.700083 35.33L3.00001 4.42001C3.03875 3.89473 3.18056 3.38219 3.41737 2.91171C3.65418 2.44123 3.98131 2.02205 4.38014 1.67801C4.77896 1.33397 5.2417 1.07181 5.74183 0.906585C6.24196 0.741357 6.76977 0.676256 7.29505 0.714996C7.82034 0.753736 8.33288 0.895544 8.80335 1.13235C9.27383 1.36916 9.69296 1.69636 10.037 2.09518C10.381 2.49401 10.6433 2.95669 10.8085 3.45682C10.9737 3.95694 11.0387 4.48469 11 5.00998L8.65003 35.91C8.57663 36.9198 8.12296 37.8642 7.38062 38.5528C6.63829 39.2413 5.66252 39.6227 4.65003 39.62H4.39002Z" - /> - { - setUndeglowIndex(160, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(160)} - stroke={stroke(160)} - strokeWidth={getStrokeWidth(160)} - dataLedIndex={getLEDIndex(160)} - dataKeyIndex={keyIndex(160)} - dataLayer={layer} - path="M4.48999 39.73C3.43352 39.6507 2.45168 39.1555 1.75989 38.3531C1.0681 37.5507 0.72292 36.5066 0.800053 35.45L3.09998 4.53001C3.17955 3.46914 3.67736 2.48336 4.48377 1.78947C5.29018 1.09559 6.33916 0.750433 7.40003 0.829998C8.46089 0.909563 9.44674 1.40732 10.1406 2.21373C10.8345 3.02013 11.1795 4.06912 11.1 5.12999L8.79004 36.04C8.71423 37.0481 8.25955 37.99 7.51746 38.6764C6.77537 39.3629 5.80092 39.7429 4.79004 39.74L4.48999 39.73Z" - /> - - { - setUndeglowIndex(159, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(159)} - stroke={stroke(159)} - strokeWidth={getStrokeWidth(159)} - dataLedIndex={getLEDIndex(159)} - dataKeyIndex={keyIndex(159)} - dataLayer={layer} - path="M4.61 39.85C4.08596 39.8108 3.57481 39.6687 3.10572 39.4318C2.63663 39.1949 2.21879 38.868 1.87611 38.4696C1.53343 38.0712 1.27258 37.6091 1.10853 37.1099C0.944476 36.6107 0.880488 36.084 0.920054 35.56L2.54005 13.74C2.76005 10.74 2.89007 7.81003 2.94007 4.87003C2.95583 3.81959 3.38413 2.81751 4.13258 2.08029C4.88102 1.34307 5.88952 0.929905 6.94007 0.930023H7.00001C7.52531 0.937844 8.04394 1.04908 8.52625 1.25735C9.00857 1.46563 9.44517 1.76687 9.81104 2.14389C10.1769 2.52091 10.4649 2.96628 10.6586 3.45462C10.8523 3.94296 10.948 4.46472 10.9401 4.99002C10.9401 8.09002 10.75 11.23 10.52 14.33L8.89002 36.16C8.81421 37.168 8.35953 38.11 7.61744 38.7964C6.87535 39.4828 5.9009 39.8629 4.89002 39.86L4.61 39.85Z" - /> - - { - setUndeglowIndex(158, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(158)} - stroke={stroke(158)} - strokeWidth={getStrokeWidth(158)} - dataLedIndex={getLEDIndex(158)} - dataKeyIndex={keyIndex(158)} - dataLayer={layer} - path="M5.71995 35.16C5.14217 25.1066 3.54064 15.1384 0.940038 5.41003C0.675729 4.38791 0.826131 3.30273 1.35862 2.39111C1.8911 1.47949 2.76243 0.815374 3.78257 0.543513C4.80271 0.271652 5.88901 0.414083 6.80454 0.939814C7.72007 1.46554 8.39062 2.33193 8.67002 3.35003C11.3981 13.6063 13.0734 24.1139 13.67 34.71C13.7301 35.768 13.3679 36.8066 12.6629 37.5978C11.958 38.389 10.9679 38.8682 9.91001 38.93H9.68003C8.66476 38.9216 7.69065 38.5273 6.9553 37.8273C6.21994 37.1272 5.77829 36.1737 5.71995 35.16Z" - /> - - { - setUndeglowIndex(157, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(157)} - stroke={stroke(157)} - strokeWidth={getStrokeWidth(157)} - dataLedIndex={getLEDIndex(157)} - dataKeyIndex={keyIndex(157)} - dataLayer={layer} - path="M9.84998 35.02L0.719974 5.38998C0.540451 4.88164 0.465555 4.34226 0.499759 3.80423C0.533964 3.2662 0.676618 2.74064 0.919071 2.25912C1.16152 1.7776 1.49879 1.35004 1.91065 1.00217C2.32251 0.654293 2.80051 0.393269 3.3158 0.234771C3.83109 0.0762724 4.37301 0.0235965 4.90918 0.0798637C5.44535 0.136131 5.96464 0.300206 6.43579 0.562225C6.90695 0.824244 7.32034 1.17879 7.651 1.60458C7.98167 2.03038 8.22278 2.51865 8.35999 3.04001L17.5 32.66C17.655 33.1623 17.7095 33.6902 17.6604 34.2136C17.6113 34.737 17.4597 35.2455 17.2141 35.7103C16.9685 36.1751 16.6338 36.5869 16.229 36.9223C15.8242 37.2577 15.3573 37.51 14.855 37.665C14.3527 37.82 13.8248 37.8745 13.3014 37.8254C12.778 37.7763 12.2694 37.6247 11.8047 37.3791C11.3399 37.1334 10.9282 36.7987 10.5928 36.394C10.2574 35.9892 10.0049 35.5223 9.84998 35.02Z" - /> - - { - setUndeglowIndex(156, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(156)} - stroke={stroke(156)} - strokeWidth={getStrokeWidth(156)} - dataLedIndex={getLEDIndex(156)} - dataKeyIndex={keyIndex(156)} - dataLayer={layer} - path="M6.46997 35.91L0.609985 16.91V4.56003C0.609985 3.49916 1.03147 2.48174 1.78162 1.7316C2.53176 0.981452 3.54912 0.560028 4.60999 0.560028C5.67085 0.560028 6.68833 0.981452 7.43848 1.7316C8.18862 2.48174 8.60999 3.49916 8.60999 4.56003V15.67L14.12 33.52C14.433 34.5344 14.3301 35.6317 13.8341 36.5703C13.3381 37.5089 12.4894 38.212 11.475 38.525C10.4605 38.8379 9.3633 38.7351 8.42468 38.239C7.48606 37.743 6.78293 36.8944 6.46997 35.88V35.91Z" - /> - - { - setUndeglowIndex(155, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(155)} - stroke={stroke(155)} - strokeWidth={getStrokeWidth(155)} - dataLedIndex={getLEDIndex(155)} - dataKeyIndex={keyIndex(155)} - dataLayer={layer} - path="M0.589966 35.56V4.56003C0.589966 3.49916 1.01145 2.48171 1.7616 1.73157C2.51174 0.981422 3.5291 0.559998 4.58997 0.559998C5.65083 0.559998 6.66831 0.981422 7.41846 1.73157C8.1686 2.48171 8.58997 3.49916 8.58997 4.56003V35.56C8.58997 36.6209 8.1686 37.6383 7.41846 38.3885C6.66831 39.1386 5.65083 39.56 4.58997 39.56C3.5291 39.56 2.51174 39.1386 1.7616 38.3885C1.01145 37.6383 0.589966 36.6209 0.589966 35.56Z" - /> - - { - setUndeglowIndex(154, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(154)} - stroke={stroke(154)} - strokeWidth={getStrokeWidth(154)} - dataLedIndex={getLEDIndex(154)} - dataKeyIndex={keyIndex(154)} - dataLayer={layer} - path="M0.540039 35.56V4.56C0.540039 3.49913 0.961402 2.48171 1.71155 1.73157C2.46169 0.981422 3.47917 0.559998 4.54004 0.559998C5.6009 0.559998 6.61826 0.981422 7.36841 1.73157C8.11855 2.48171 8.54004 3.49913 8.54004 4.56V35.56C8.54004 36.6209 8.11855 37.6383 7.36841 38.3884C6.61826 39.1386 5.6009 39.56 4.54004 39.56C3.47917 39.56 2.46169 39.1386 1.71155 38.3884C0.961402 37.6383 0.540039 36.6209 0.540039 35.56Z" - /> - - { - setUndeglowIndex(153, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(153)} - stroke={stroke(153)} - strokeWidth={getStrokeWidth(153)} - dataLedIndex={getLEDIndex(153)} - dataKeyIndex={keyIndex(153)} - dataLayer={layer} - path="M0.48999 35.56V4.56C0.48999 3.49913 0.911476 2.48171 1.66162 1.73157C2.41177 0.981422 3.42912 0.559998 4.48999 0.559998C5.55086 0.559998 6.56834 0.981422 7.31848 1.73157C8.06863 2.48171 8.48999 3.49913 8.48999 4.56V35.56C8.48999 36.6209 8.06863 37.6383 7.31848 38.3884C6.56834 39.1386 5.55086 39.56 4.48999 39.56C3.42912 39.56 2.41177 39.1386 1.66162 38.3884C0.911476 37.6383 0.48999 36.6209 0.48999 35.56Z" - /> - - { - setUndeglowIndex(152, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(152)} - stroke={stroke(152)} - strokeWidth={getStrokeWidth(152)} - dataLedIndex={getLEDIndex(152)} - dataKeyIndex={keyIndex(152)} - dataLayer={layer} - path="M1.44012 35.56V13.19C1.45546 10.6886 1.11883 8.19757 0.440115 5.79C0.277654 5.28112 0.218735 4.74486 0.266897 4.21285C0.315059 3.68084 0.469303 3.16387 0.720511 2.69244C0.971718 2.221 1.31482 1.80466 1.72954 1.46798C2.14427 1.1313 2.62219 0.881096 3.13518 0.73214C3.64818 0.583184 4.18581 0.538496 4.71636 0.600701C5.24691 0.662906 5.75967 0.830744 6.22429 1.09432C6.68892 1.3579 7.09608 1.71186 7.42168 2.13534C7.74728 2.55882 7.9847 3.04324 8.12005 3.55999C9.02754 6.6893 9.48545 9.93176 9.48003 13.19V35.56C9.48003 36.6209 9.05867 37.6383 8.30852 38.3884C7.55838 39.1386 6.5409 39.56 5.48003 39.56C4.95139 39.5653 4.42699 39.4657 3.93706 39.2671C3.44713 39.0684 3.00147 38.7746 2.62578 38.4027C2.2501 38.0307 1.95186 37.588 1.74834 37.1C1.54483 36.6121 1.44009 36.0887 1.44012 35.56Z" - /> - - { - setUndeglowIndex(151, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(151)} - stroke={stroke(151)} - strokeWidth={getStrokeWidth(151)} - dataLedIndex={getLEDIndex(151)} - dataKeyIndex={keyIndex(151)} - dataLayer={layer} - path="M28.13 19.27C25.6563 15.9156 22.4268 13.1914 18.7035 11.3185C14.9802 9.44552 10.8679 8.47648 6.70007 8.48999H4.31006C3.24919 8.48999 2.23171 8.06857 1.48157 7.31842C0.731422 6.56827 0.310059 5.55086 0.310059 4.48999C0.310059 3.42912 0.731422 2.41174 1.48157 1.66159C2.23171 0.911445 3.24919 0.48999 4.31006 0.48999H6.70007C12.1095 0.506273 17.4411 1.77947 22.2743 4.20908C27.1075 6.63868 31.31 10.1582 34.55 14.49C35.1839 15.3413 35.4536 16.4096 35.2998 17.4598C35.146 18.51 34.5813 19.4561 33.73 20.09C32.8786 20.7239 31.8103 20.9936 30.7601 20.8398C29.7099 20.686 28.7639 20.1213 28.13 19.27Z" - /> - - { - setUndeglowIndex(150, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(150)} - stroke={stroke(150)} - strokeWidth={getStrokeWidth(150)} - dataLedIndex={getLEDIndex(150)} - dataKeyIndex={keyIndex(150)} - dataLayer={layer} - path="M0.310059 4.48999C0.310059 3.42912 0.731422 2.41174 1.48157 1.66159C2.23171 0.911445 3.24919 0.48999 4.31006 0.48999H35.3101C36.3709 0.48999 37.3883 0.911445 38.1384 1.66159C38.8886 2.41174 39.3101 3.42912 39.3101 4.48999C39.3101 5.55086 38.8886 6.56827 38.1384 7.31842C37.3883 8.06857 36.3709 8.48999 35.3101 8.48999H4.31006C3.24919 8.48999 2.23171 8.06857 1.48157 7.31842C0.731422 6.56827 0.310059 5.55086 0.310059 4.48999Z" - /> - { - setUndeglowIndex(149, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(149)} - stroke={stroke(149)} - strokeWidth={getStrokeWidth(149)} - dataLedIndex={getLEDIndex(149)} - dataKeyIndex={keyIndex(149)} - dataLayer={layer} - path="M2.81998 8.09C2.32071 7.88841 1.86727 7.5881 1.48685 7.20706C1.10643 6.82602 0.806888 6.3721 0.606113 5.8725C0.405338 5.3729 0.307505 4.83791 0.318454 4.29959C0.329404 3.76127 0.448909 3.23071 0.669834 2.73969C0.890759 2.24867 1.20856 1.8073 1.60416 1.44205C1.99976 1.07679 2.46503 0.795168 2.97208 0.614045C3.47913 0.432923 4.01748 0.356049 4.55497 0.388002C5.09245 0.419954 5.61799 0.560098 6.10001 0.80002C7.11388 1.25083 8.21041 1.48578 9.31998 1.48999H35.32C36.3809 1.48999 37.3983 1.91145 38.1484 2.66159C38.8986 3.41174 39.32 4.42913 39.32 5.48999C39.32 6.55086 38.8986 7.56828 38.1484 8.31842C37.3983 9.06857 36.3809 9.48999 35.32 9.48999H9.31998C7.07918 9.48364 4.86471 9.00668 2.81998 8.09Z" - /> - - { - setUndeglowIndex(148, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(148)} - stroke={stroke(148)} - strokeWidth={getStrokeWidth(148)} - dataLedIndex={getLEDIndex(148)} - dataKeyIndex={keyIndex(148)} - dataLayer={layer} - path="M28.19 22.91L15.39 12.33C12.5541 10.0105 9.00372 8.74228 5.34003 8.73999H4.60999C3.54912 8.73999 2.53176 8.31857 1.78162 7.56842C1.03147 6.81827 0.609985 5.80086 0.609985 4.73999C0.609985 3.67912 1.03147 2.66174 1.78162 1.91159C2.53176 1.16145 3.54912 0.73999 4.60999 0.73999H5.34003C10.8294 0.759917 16.1443 2.67046 20.39 6.14999L33.25 16.71C33.6584 17.0427 33.997 17.4528 34.2465 17.9167C34.4959 18.3807 34.6513 18.8893 34.7036 19.4135C34.756 19.9376 34.7043 20.4669 34.5515 20.971C34.3988 21.4751 34.1479 21.9441 33.8134 22.351C33.4789 22.7579 33.0674 23.0948 32.6024 23.3422C32.1373 23.5897 31.6281 23.7428 31.1037 23.7929C30.5793 23.843 30.0503 23.789 29.5468 23.634C29.0434 23.4791 28.5755 23.2263 28.17 22.89L28.19 22.91Z" - /> - - { - setUndeglowIndex(147, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(147)} - stroke={stroke(147)} - strokeWidth={getStrokeWidth(147)} - dataLedIndex={getLEDIndex(147)} - dataKeyIndex={keyIndex(147)} - dataLayer={layer} - path="M3 8.91001L2 8.02C1.57572 7.68665 1.22329 7.27094 0.963869 6.79783C0.704448 6.32472 0.543409 5.804 0.49048 5.26704C0.437551 4.73007 0.493831 4.18794 0.655885 3.67329C0.81794 3.15863 1.08244 2.68208 1.43347 2.27232C1.78451 1.86255 2.2148 1.52804 2.69849 1.28892C3.18218 1.04979 3.70926 0.911008 4.24799 0.880898C4.78672 0.850788 5.32593 0.929982 5.83325 1.11372C6.34058 1.29745 6.8055 1.58192 7.20001 1.95002L8.20001 2.83002C9.61956 4.04919 11.4288 4.71965 13.3 4.72001H34.56C35.6209 4.72001 36.6383 5.14143 37.3884 5.89158C38.1386 6.64172 38.56 7.65914 38.56 8.72001C38.56 9.78088 38.1386 10.7983 37.3884 11.5484C36.6383 12.2986 35.6209 12.72 34.56 12.72H13.3C9.52233 12.718 5.8696 11.3669 3 8.91001Z" - /> - { - setUndeglowIndex(146, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(146)} - stroke={stroke(146)} - strokeWidth={getStrokeWidth(146)} - dataLedIndex={getLEDIndex(146)} - dataKeyIndex={keyIndex(146)} - dataLayer={layer} - path="M28.61 19.91L19.19 11.84C16.3218 9.38082 12.6682 8.02933 8.89001 8.03H4.39001C3.32915 8.03 2.31173 7.60857 1.56158 6.85843C0.811439 6.10828 0.390015 5.09086 0.390015 4.03C0.390015 2.96913 0.811439 1.95171 1.56158 1.20157C2.31173 0.451423 3.32915 0.0299988 4.39001 0.0299988H8.92999C14.597 0.0321082 20.078 2.0529 24.39 5.73001L33.81 13.81C34.2164 14.1497 34.5514 14.5667 34.7953 15.0369C35.0393 15.5071 35.1874 16.0211 35.2311 16.549C35.2749 17.0768 35.2133 17.6081 35.05 18.1121C34.8868 18.616 34.6251 19.0824 34.2801 19.4844C33.9351 19.8863 33.5137 20.2157 33.0403 20.4535C32.567 20.6913 32.0512 20.8327 31.5228 20.8695C30.9943 20.9063 30.4638 20.8378 29.9621 20.6679C29.4604 20.498 28.9974 20.2302 28.6 19.88L28.61 19.91Z" - /> - { - setUndeglowIndex(145, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(145)} - stroke={stroke(145)} - strokeWidth={getStrokeWidth(145)} - dataLedIndex={getLEDIndex(145)} - dataKeyIndex={keyIndex(145)} - dataLayer={layer} - path="M0.390015 4C0.390015 2.93913 0.811439 1.92172 1.56158 1.17157C2.31173 0.421424 3.32915 0 4.39001 0H35.39C36.4509 0 37.4683 0.421424 38.2184 1.17157C38.9686 1.92172 39.39 2.93913 39.39 4C39.39 5.06087 38.9686 6.07828 38.2184 6.82843C37.4683 7.57858 36.4509 8 35.39 8H4.39001C3.32915 8 2.31173 7.57858 1.56158 6.82843C0.811439 6.07828 0.390015 5.06087 0.390015 4Z" - /> - - { - setUndeglowIndex(144, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(144)} - stroke={stroke(144)} - strokeWidth={getStrokeWidth(144)} - dataLedIndex={getLEDIndex(144)} - dataKeyIndex={keyIndex(144)} - dataLayer={layer} - path="M1.78005 22.33C1.13175 21.4905 0.843398 20.4279 0.978418 19.3759C1.11344 18.3239 1.66075 17.3686 2.50002 16.72L16.39 5.98001C20.5708 2.75353 25.6991 0.996079 30.9801 0.980011H31.39C32.4509 0.980011 33.4683 1.40144 34.2185 2.15158C34.9686 2.90173 35.39 3.91915 35.39 4.98001C35.39 6.04088 34.9686 7.0583 34.2185 7.80844C33.4683 8.55859 32.4509 8.98001 31.39 8.98001H31C27.4931 8.98313 24.0859 10.147 21.31 12.29L7.39004 23.05C6.55057 23.6983 5.48797 23.9866 4.43594 23.8516C3.38391 23.7166 2.4286 23.1693 1.78005 22.33Z" - /> - { - setUndeglowIndex(143, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(143)} - stroke={stroke(143)} - strokeWidth={getStrokeWidth(143)} - dataLedIndex={getLEDIndex(143)} - dataKeyIndex={keyIndex(143)} - dataLayer={layer} - path="M0.679993 6.74C0.679993 5.67913 1.10142 4.66174 1.85156 3.9116C2.60171 3.16145 3.61913 2.74 4.67999 2.74H28.47C30.0718 2.73503 31.6342 2.24332 32.95 1.33002C33.8199 0.722677 34.8955 0.485762 35.9401 0.671423C36.9846 0.857084 37.9127 1.4501 38.52 2.32001C39.1274 3.18992 39.3643 4.26546 39.1786 5.31003C38.9929 6.35461 38.3999 7.28267 37.53 7.89002C34.8681 9.73513 31.7089 10.7289 28.47 10.74H4.67999C3.61913 10.74 2.60171 10.3186 1.85156 9.56843C1.10142 8.81828 0.679993 7.80086 0.679993 6.74Z" - /> - - { - setUndeglowIndex(142, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(142)} - stroke={stroke(142)} - strokeWidth={getStrokeWidth(142)} - dataLedIndex={getLEDIndex(142)} - dataKeyIndex={keyIndex(142)} - dataLayer={layer} - path="M0.679993 4.73999C0.679993 3.67912 1.10142 2.66174 1.85156 1.91159C2.60171 1.16145 3.61913 0.73999 4.67999 0.73999H35.68C36.7409 0.73999 37.7583 1.16145 38.5084 1.91159C39.2586 2.66174 39.68 3.67912 39.68 4.73999C39.68 5.80086 39.2586 6.81827 38.5084 7.56842C37.7583 8.31857 36.7409 8.73999 35.68 8.73999H4.67999C3.61913 8.73999 2.60171 8.31857 1.85156 7.56842C1.10142 6.81827 0.679993 5.80086 0.679993 4.73999Z" - /> - - { - setUndeglowIndex(141, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(141)} - stroke={stroke(141)} - strokeWidth={getStrokeWidth(141)} - dataLedIndex={getLEDIndex(141)} - dataKeyIndex={keyIndex(141)} - dataLayer={layer} - path="M1.51003 25.84C1.14397 25.4626 0.855923 25.0168 0.66231 24.528C0.468696 24.0392 0.373311 23.517 0.38167 22.9913C0.390029 22.4656 0.501959 21.9468 0.711016 21.4644C0.920072 20.982 1.22218 20.5455 1.60005 20.18L15.3 6.91C18.8166 3.46988 23.4035 1.33522 28.3 0.86001C28.8253 0.807481 29.3558 0.858919 29.8612 1.01141C30.3666 1.1639 30.837 1.41445 31.2456 1.74874C31.6542 2.08303 31.9929 2.49451 32.2424 2.95971C32.492 3.42491 32.6475 3.9347 32.7 4.45999C32.7526 4.98527 32.7011 5.51577 32.5486 6.02117C32.3961 6.52658 32.1456 6.99699 31.8113 7.40557C31.477 7.81415 31.0655 8.15288 30.6003 8.40243C30.1351 8.65198 29.6253 8.80748 29.1001 8.86001C26.0072 9.16481 23.1109 10.5159 20.89 12.69L7.17006 25.91C6.79269 26.2761 6.34685 26.5641 5.85805 26.7577C5.36925 26.9514 4.84705 27.0467 4.32137 27.0384C3.79569 27.03 3.27685 26.9181 2.79445 26.709C2.31206 26.5 1.87557 26.1979 1.51003 25.82V25.84Z" - /> - - { - setUndeglowIndex(140, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(140)} - stroke={stroke(140)} - strokeWidth={getStrokeWidth(140)} - dataLedIndex={getLEDIndex(140)} - dataKeyIndex={keyIndex(140)} - dataLayer={layer} - path="M0.630005 10.39C0.630005 9.32914 1.05143 8.31172 1.80157 7.56157C2.55172 6.81143 3.56914 6.39 4.63 6.39H25.98L30.7 1.80999C31.4625 1.07136 32.4872 0.665879 33.5486 0.682758C34.6101 0.699636 35.6214 1.13748 36.36 1.89998C37.0986 2.66248 37.5041 3.68719 37.4872 4.74864C37.4704 5.8101 37.0325 6.82136 36.27 7.55999L31.55 12.13C30.076 13.5659 28.0978 14.3666 26.04 14.36H4.63C3.57432 14.36 2.56142 13.9427 1.81213 13.1991C1.06284 12.4554 0.637923 11.4457 0.630005 10.39Z" - /> - - { - setUndeglowIndex(139, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(139)} - stroke={stroke(139)} - strokeWidth={getStrokeWidth(139)} - dataLedIndex={getLEDIndex(139)} - dataKeyIndex={keyIndex(139)} - dataLayer={layer} - path="M3.39002 30.32C2.34529 30.1392 1.41507 29.551 0.803782 28.6847C0.192496 27.8184 -0.0498507 26.7449 0.130015 25.7C1.16936 19.846 3.8225 14.3985 7.79066 9.97097C11.7588 5.54345 16.8844 2.31182 22.59 0.640009C23.0989 0.477548 23.6352 0.41866 24.1672 0.466822C24.6992 0.514984 25.2161 0.669197 25.6876 0.920405C26.159 1.17161 26.5754 1.51471 26.9121 1.92944C27.2487 2.34417 27.4989 2.82214 27.6479 3.33514C27.7969 3.84814 27.8415 4.38576 27.7793 4.91632C27.7171 5.44687 27.5493 5.95959 27.2857 6.42422C27.0221 6.88885 26.6682 7.29597 26.2447 7.62158C25.8212 7.94718 25.3368 8.18466 24.82 8.32C20.5519 9.57027 16.7173 11.9866 13.7476 15.2973C10.7779 18.608 8.79087 22.6816 8.01002 27.06C7.82924 28.1047 7.24107 29.0349 6.37477 29.6462C5.50846 30.2575 4.43492 30.4999 3.39002 30.32V30.32Z" - /> - - { - setUndeglowIndex(138, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(138)} - stroke={stroke(138)} - strokeWidth={getStrokeWidth(138)} - dataLedIndex={getLEDIndex(138)} - dataKeyIndex={keyIndex(138)} - dataLayer={layer} - path="M0.690002 35.36V4.36002C0.690002 3.29915 1.11143 2.28173 1.86157 1.53159C2.61172 0.78144 3.62914 0.360016 4.69 0.360016C5.75087 0.360016 6.76829 0.78144 7.51843 1.53159C8.26858 2.28173 8.69 3.29915 8.69 4.36002V35.36C8.69 36.4209 8.26858 37.4383 7.51843 38.1884C6.76829 38.9386 5.75087 39.36 4.69 39.36C3.62914 39.36 2.61172 38.9386 1.86157 38.1884C1.11143 37.4383 0.690002 36.4209 0.690002 35.36Z" - /> - - { - setUndeglowIndex(137, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(137)} - stroke={stroke(137)} - strokeWidth={getStrokeWidth(137)} - dataLedIndex={getLEDIndex(137)} - dataKeyIndex={keyIndex(137)} - dataLayer={layer} - path="M0.690002 35.36V4.36002C0.690002 3.29915 1.11143 2.28173 1.86157 1.53159C2.61172 0.78144 3.62914 0.360016 4.69 0.360016C5.75087 0.360016 6.76829 0.78144 7.51843 1.53159C8.26858 2.28173 8.69 3.29915 8.69 4.36002V35.36C8.69 36.4209 8.26858 37.4383 7.51843 38.1884C6.76829 38.9386 5.75087 39.36 4.69 39.36C3.62914 39.36 2.61172 38.9386 1.86157 38.1884C1.11143 37.4383 0.690002 36.4209 0.690002 35.36Z" - /> - - { - setUndeglowIndex(136, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(136)} - stroke={stroke(136)} - strokeWidth={getStrokeWidth(136)} - dataLedIndex={getLEDIndex(136)} - dataKeyIndex={keyIndex(136)} - dataLayer={layer} - path="M0.690002 35.36V4.36002C0.690002 3.29915 1.11143 2.28173 1.86157 1.53159C2.61172 0.78144 3.62914 0.360016 4.69 0.360016C5.75087 0.360016 6.76829 0.78144 7.51843 1.53159C8.26858 2.28173 8.69 3.29915 8.69 4.36002V35.36C8.69 36.4209 8.26858 37.4383 7.51843 38.1884C6.76829 38.9386 5.75087 39.36 4.69 39.36C3.62914 39.36 2.61172 38.9386 1.86157 38.1884C1.11143 37.4383 0.690002 36.4209 0.690002 35.36Z" - /> - - { - setUndeglowIndex(135, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(135)} - stroke={stroke(135)} - strokeWidth={getStrokeWidth(135)} - dataLedIndex={getLEDIndex(135)} - dataKeyIndex={keyIndex(135)} - dataLayer={layer} - path="M0.690002 35.36V4.36002C0.690002 3.29915 1.11143 2.28173 1.86157 1.53159C2.61172 0.78144 3.62914 0.360016 4.69 0.360016C5.75087 0.360016 6.76829 0.78144 7.51843 1.53159C8.26858 2.28173 8.69 3.29915 8.69 4.36002V35.36C8.69 36.4209 8.26858 37.4383 7.51843 38.1884C6.76829 38.9386 5.75087 39.36 4.69 39.36C3.62914 39.36 2.61172 38.9386 1.86157 38.1884C1.11143 37.4383 0.690002 36.4209 0.690002 35.36Z" - /> - { - setUndeglowIndex(134, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(134)} - stroke={stroke(134)} - strokeWidth={getStrokeWidth(134)} - dataLedIndex={getLEDIndex(134)} - dataKeyIndex={keyIndex(134)} - dataLayer={layer} - path="M4.48996 39.35C3.96457 39.3319 3.44793 39.2105 2.96951 38.9926C2.4911 38.7747 2.06031 38.4646 1.70181 38.0801C1.34332 37.6956 1.06413 37.2442 0.88022 36.7517C0.696306 36.2593 0.611266 35.7354 0.629976 35.21C0.629976 34.05 0.689973 32.88 0.689973 31.72V4.36002C0.689973 3.29915 1.1114 2.28173 1.86154 1.53159C2.61169 0.78144 3.62911 0.360016 4.68997 0.360016C5.75084 0.360016 6.76826 0.78144 7.5184 1.53159C8.26855 2.28173 8.68997 3.29915 8.68997 4.36002V31.72C8.68997 32.98 8.66998 34.24 8.62998 35.5C8.59368 36.5364 8.15631 37.5182 7.41007 38.2384C6.66382 38.9585 5.66703 39.3607 4.62998 39.36L4.48996 39.35Z" - /> - { - setUndeglowIndex(133, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(133)} - stroke={stroke(133)} - strokeWidth={getStrokeWidth(133)} - dataLedIndex={getLEDIndex(133)} - dataKeyIndex={keyIndex(133)} - dataLayer={layer} - path="M2.90004 38.16C1.88244 37.867 1.02256 37.1824 0.508925 36.2564C-0.00470662 35.3303 -0.130154 34.2384 0.160048 33.22L4.88002 16.82C6.11099 12.525 7.0498 8.15173 7.69002 3.72999C7.84252 2.67973 8.40601 1.73308 9.25648 1.09827C10.107 0.463464 11.1748 0.192479 12.225 0.344978C13.2753 0.497478 14.222 1.06097 14.8568 1.91145C15.4916 2.76192 15.7625 3.82969 15.61 4.87995C14.9303 9.65889 13.928 14.3864 12.61 19.03L7.89003 35.43C7.6495 36.2627 7.14501 36.9948 6.45247 37.516C5.75992 38.0372 4.91677 38.3193 4.05 38.32C3.6608 38.3248 3.27314 38.2708 2.90004 38.16Z" - /> - { - setUndeglowIndex(132, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(132)} - stroke={stroke(132)} - strokeWidth={getStrokeWidth(132)} - dataLedIndex={getLEDIndex(132)} - dataKeyIndex={keyIndex(132)} - dataLayer={layer} - path="M3.30002 38.53C2.7895 38.3853 2.3129 38.1405 1.89792 37.8098C1.48293 37.4792 1.13791 37.0692 0.882904 36.6038C0.6279 36.1385 0.467991 35.6271 0.412567 35.0994C0.357143 34.5717 0.407266 34.0382 0.560028 33.53L9.12003 3.74002C9.26514 3.23508 9.50831 2.76365 9.8356 2.35269C10.1629 1.94172 10.5679 1.59925 11.0276 1.34481C11.4872 1.09038 11.9925 0.929004 12.5145 0.869839C13.0365 0.810675 13.5651 0.854916 14.07 1.00003C14.575 1.14514 15.0464 1.38825 15.4574 1.71554C15.8683 2.04284 16.2108 2.44785 16.4652 2.9075C16.7197 3.36715 16.8811 3.87247 16.9402 4.3945C16.9994 4.91653 16.9551 5.44505 16.81 5.94998L8.25003 35.74C8.01132 36.5746 7.50762 37.3089 6.81491 37.832C6.1222 38.3551 5.27812 38.6387 4.41006 38.64C4.03669 38.6571 3.66277 38.6201 3.30002 38.53Z" - /> - { - setUndeglowIndex(131, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(131)} - stroke={stroke(131)} - strokeWidth={getStrokeWidth(131)} - dataLedIndex={getLEDIndex(131)} - dataKeyIndex={keyIndex(131)} - dataLayer={layer} - path="M1.85004 70.74C-0.540135 60.0598 -0.615183 48.9916 1.63001 38.28C1.85001 37.28 2.63002 33.95 2.96002 32.95L11.52 3.14999C11.6651 2.64506 11.9082 2.17369 12.2355 1.76272C12.5628 1.35176 12.9679 1.00928 13.4276 0.754849C13.8872 0.500416 14.3925 0.338977 14.9145 0.279812C15.4365 0.220648 15.9651 0.26489 16.47 0.41C16.975 0.555111 17.4463 0.798282 17.8573 1.12558C18.2683 1.45287 18.6107 1.85788 18.8652 2.31753C19.1196 2.77718 19.281 3.28244 19.3402 3.80447C19.3994 4.3265 19.3551 4.85508 19.21 5.36001L10.65 35.16C10.38 36.06 9.65002 39.01 9.46002 39.93C8.49144 44.5338 8.00214 49.2255 8 53.93C8.00451 58.9756 8.56119 64.0055 9.66004 68.93C9.89346 69.9615 9.70887 71.0435 9.14667 71.9392C8.58447 72.835 7.69042 73.4717 6.66003 73.71C6.37387 73.7696 6.08235 73.7998 5.79004 73.8C4.88377 73.8118 4.00036 73.5154 3.28455 72.9595C2.56873 72.4036 2.06295 71.621 1.85004 70.74Z" - /> - { - setUndeglowIndex(130, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(130)} - stroke={stroke(130)} - strokeWidth={getStrokeWidth(130)} - dataLedIndex={getLEDIndex(130)} - dataKeyIndex={keyIndex(130)} - dataLayer={layer} - path="M19.01 32.97C11.1997 25.304 5.12914 16.0481 1.21003 5.82996C1.00291 5.33661 0.896879 4.80674 0.898206 4.27167C0.899532 3.73661 1.00816 3.20723 1.21772 2.71491C1.42729 2.22259 1.73351 1.77732 2.11824 1.40546C2.50297 1.0336 2.95843 0.742698 3.45759 0.549993C3.95675 0.357287 4.4895 0.266706 5.0243 0.283574C5.55911 0.300443 6.08509 0.424419 6.57112 0.648198C7.05714 0.871978 7.4933 1.191 7.85383 1.58637C8.21436 1.98174 8.49193 2.44541 8.67006 2.94996C12.1986 12.1068 17.6553 20.3976 24.6701 27.26C25.4272 28.0039 25.8579 29.0181 25.8673 30.0796C25.8766 31.1411 25.464 32.1628 24.72 32.92C23.9761 33.6772 22.9619 34.1078 21.9004 34.1172C20.8389 34.1266 19.8172 33.7139 19.06 32.97H19.01Z" - /> - { - setUndeglowIndex(129, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(129)} - stroke={stroke(129)} - strokeWidth={getStrokeWidth(129)} - dataLedIndex={getLEDIndex(129)} - dataKeyIndex={keyIndex(129)} - dataLayer={layer} - path="M26.75 25.91L1.83003 7.45997C0.977354 6.82875 0.410324 5.88466 0.253731 4.8354C0.0971385 3.78613 0.363788 2.71767 0.995003 1.865C1.62622 1.01233 2.57031 0.445297 3.61958 0.288704C4.66884 0.132112 5.73736 0.398761 6.59003 1.02998L31.51 19.48C32.3627 20.1112 32.9297 21.0553 33.0863 22.1046C33.2429 23.1538 32.9763 24.2223 32.345 25.075C31.7138 25.9276 30.7697 26.4947 29.7205 26.6513C28.6712 26.8078 27.6027 26.5412 26.75 25.91Z" - /> - { - setUndeglowIndex(128, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(128)} - stroke={stroke(128)} - strokeWidth={getStrokeWidth(128)} - dataLedIndex={getLEDIndex(128)} - dataKeyIndex={keyIndex(128)} - dataLayer={layer} - path="M20.87 29.34C15.9182 20.8166 9.34845 13.3432 1.53003 7.33996C0.72352 6.68329 0.204462 5.73834 0.0829507 4.70543C-0.0385602 3.67252 0.246987 2.6329 0.879093 1.807C1.5112 0.981097 2.44015 0.433886 3.46894 0.281362C4.49773 0.128838 5.54548 0.383002 6.39002 0.98998C15.0349 7.60727 22.3014 15.8521 27.78 25.2599C28.2335 26.1707 28.3228 27.2201 28.0299 28.1944C27.737 29.1688 27.0838 29.9949 26.2033 30.5046C25.3227 31.0143 24.281 31.1693 23.2902 30.9381C22.2994 30.7069 21.434 30.1068 20.87 29.2599V29.34Z" - /> - { - setUndeglowIndex(127, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(127)} - stroke={stroke(127)} - strokeWidth={getStrokeWidth(127)} - dataLedIndex={getLEDIndex(127)} - dataKeyIndex={keyIndex(127)} - dataLayer={layer} - path="M8.49002 35.98L4.06002 17.66C3.15528 13.908 1.96515 10.2306 0.500027 6.65998C0.253419 6.16666 0.111481 5.62765 0.0831571 5.07685C0.0548333 4.52605 0.140772 3.97538 0.335476 3.45936C0.530181 2.94334 0.829446 2.47312 1.21457 2.07832C1.59969 1.68351 2.0623 1.37262 2.57333 1.16517C3.08436 0.957715 3.63277 0.858227 4.18411 0.872871C4.73544 0.887514 5.27777 1.01603 5.77707 1.25031C6.27636 1.4846 6.72186 1.81957 7.08548 2.23426C7.4491 2.64895 7.723 3.13435 7.89004 3.65998C9.51426 7.59564 10.8315 11.6511 11.83 15.79L16.27 34.11C16.393 34.6242 16.4129 35.1577 16.3283 35.6797C16.2438 36.2016 16.0566 36.7017 15.7776 37.1508C15.4986 37.6 15.1334 37.9894 14.703 38.2965C14.2725 38.6036 13.7855 38.8223 13.27 38.94C12.9583 39.0111 12.6398 39.048 12.32 39.05C11.4313 39.0366 10.5723 38.7274 9.87875 38.1715C9.1852 37.6156 8.69658 36.8445 8.49002 35.98Z" - /> - - { - setUndeglowIndex(126, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(126)} - stroke={stroke(126)} - strokeWidth={getStrokeWidth(126)} - dataLedIndex={getLEDIndex(126)} - dataKeyIndex={keyIndex(126)} - dataLayer={layer} - path="M8.39 35.8L1.10002 5.66999C0.953663 5.15217 0.913284 4.61015 0.981309 4.07636C1.04933 3.54258 1.22435 3.02798 1.4959 2.56342C1.76745 2.09886 2.12996 1.69387 2.56169 1.37269C2.99343 1.0515 3.48552 0.820767 4.00853 0.694221C4.53154 0.567675 5.0747 0.547947 5.60552 0.636237C6.13633 0.724528 6.64388 0.91898 7.09776 1.20801C7.55165 1.49705 7.94254 1.87472 8.24706 2.31837C8.55158 2.76201 8.76343 3.26254 8.86998 3.78998L16.14 33.91C16.3902 34.9403 16.221 36.0278 15.6697 36.9335C15.1184 37.8392 14.2301 38.489 13.2 38.74C12.8882 38.8105 12.5697 38.8474 12.25 38.85C11.3588 38.8443 10.495 38.5411 9.7957 37.9885C9.09641 37.436 8.60165 36.6657 8.39 35.8Z" - /> - - { - setUndeglowIndex(125, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(125)} - stroke={stroke(125)} - strokeWidth={getStrokeWidth(125)} - dataLedIndex={getLEDIndex(125)} - dataKeyIndex={keyIndex(125)} - dataLayer={layer} - path="M8.24999 35.62L0.960007 5.49C0.813648 4.97218 0.77327 4.43015 0.841294 3.89637C0.909319 3.36258 1.08433 2.84799 1.35588 2.38343C1.62743 1.91887 1.98994 1.51388 2.42168 1.1927C2.85341 0.871511 3.3455 0.640774 3.86852 0.514228C4.39153 0.387682 4.93469 0.367955 5.4655 0.456245C5.99631 0.544535 6.50386 0.738988 6.95775 1.02802C7.41164 1.31706 7.80252 1.69473 8.10704 2.13837C8.41156 2.58202 8.62348 3.08254 8.73003 3.60999L16.02 33.74C16.143 34.2542 16.1628 34.7878 16.0783 35.3097C15.9938 35.8316 15.8066 36.3317 15.5276 36.7808C15.2486 37.23 14.8833 37.6194 14.4529 37.9265C14.0225 38.2336 13.5355 38.4523 13.02 38.57C12.7125 38.646 12.3967 38.683 12.08 38.68C11.1926 38.6671 10.3347 38.3595 9.64128 37.8055C8.94791 37.2515 8.45845 36.4827 8.24999 35.62Z" - /> - { - setUndeglowIndex(124, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(124)} - stroke={stroke(124)} - strokeWidth={getStrokeWidth(124)} - dataLedIndex={getLEDIndex(124)} - dataKeyIndex={keyIndex(124)} - dataLayer={layer} - path="M9.00999 35.9699C7.94544 33.6531 7.10819 31.2385 6.50999 28.7599L0.829993 5.30997C0.58069 4.27828 0.751431 3.18977 1.30466 2.28397C1.8579 1.37817 2.74831 0.72926 3.78001 0.479957C4.8117 0.230653 5.90014 0.401395 6.80595 0.954627C7.71175 1.50786 8.36066 2.39828 8.60996 3.42997L14.28 26.8799C14.7583 28.8602 15.4281 30.7893 16.28 32.6399C16.5176 33.1198 16.6563 33.6425 16.6881 34.177C16.72 34.7115 16.6441 35.2469 16.4652 35.7516C16.2862 36.2562 16.0078 36.7197 15.6463 37.1148C15.2849 37.5098 14.8478 37.8283 14.361 38.0512C13.8742 38.2742 13.3476 38.3972 12.8124 38.4129C12.2771 38.4286 11.7442 38.3367 11.2452 38.1426C10.7462 37.9485 10.2912 37.6561 9.90726 37.2829C9.52331 36.9097 9.21818 36.4633 9.00999 35.9699Z" - /> - - { - setUndeglowIndex(123, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(123)} - stroke={stroke(123)} - strokeWidth={getStrokeWidth(123)} - dataLedIndex={getLEDIndex(123)} - dataKeyIndex={keyIndex(123)} - dataLayer={layer} - path="M1.75002 7.12992C1.06076 6.3433 0.707007 5.318 0.764548 4.27372C0.822088 3.22943 1.28637 2.24925 2.05788 1.54313C2.82939 0.837 3.84677 0.46115 4.89205 0.496068C5.93733 0.530986 6.92738 0.973854 7.65005 1.72989C10.5904 4.91751 14.1592 7.46155 18.1314 9.20157C22.1037 10.9416 26.3934 11.84 30.7301 11.84H32.4701C33.5309 11.84 34.5483 12.2614 35.2985 13.0115C36.0486 13.7617 36.4701 14.7791 36.4701 15.84C36.4701 16.9009 36.0486 17.9182 35.2985 18.6684C34.5483 19.4185 33.5309 19.84 32.4701 19.84H30.7301C25.2833 19.8402 19.8957 18.7108 14.9076 16.5231C9.91945 14.3354 5.43927 11.137 1.75002 7.12992Z" - /> - - { - setUndeglowIndex(175, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(175)} - stroke={stroke(175)} - strokeWidth={getStrokeWidth(175)} - dataLedIndex={getLEDIndex(175)} - dataKeyIndex={keyIndex(175)} - dataLayer={layer} - path="M0.470032 4.84003C0.470032 3.77916 0.891456 2.76168 1.6416 2.01154C2.39175 1.26139 3.40917 0.840027 4.47003 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2985 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2985 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003H4.47003C3.40917 8.84003 2.39175 8.41854 1.6416 7.6684C0.891456 6.91825 0.470032 5.90089 0.470032 4.84003Z" - /> - - { - setUndeglowIndex(174, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(174)} - stroke={stroke(174)} - strokeWidth={getStrokeWidth(174)} - dataLedIndex={getLEDIndex(174)} - dataKeyIndex={keyIndex(174)} - dataLayer={layer} - path="M0.470032 4.84003C0.470032 3.77916 0.891456 2.76168 1.6416 2.01154C2.39175 1.26139 3.40917 0.840027 4.47003 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2985 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2985 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003H4.47003C3.40917 8.84003 2.39175 8.41854 1.6416 7.6684C0.891456 6.91825 0.470032 5.90089 0.470032 4.84003Z" - /> - - { - setUndeglowIndex(173, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(173)} - stroke={stroke(173)} - strokeWidth={getStrokeWidth(173)} - dataLedIndex={getLEDIndex(173)} - dataKeyIndex={keyIndex(173)} - dataLayer={layer} - path="M0.470032 4.84003C0.470032 3.77916 0.891456 2.76168 1.6416 2.01154C2.39175 1.26139 3.40917 0.840027 4.47003 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2985 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2985 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003H4.47003C3.40917 8.84003 2.39175 8.41854 1.6416 7.6684C0.891456 6.91825 0.470032 5.90089 0.470032 4.84003Z" - /> - - { - setUndeglowIndex(172, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(172)} - stroke={stroke(172)} - strokeWidth={getStrokeWidth(172)} - dataLedIndex={getLEDIndex(172)} - dataKeyIndex={keyIndex(172)} - dataLayer={layer} - path="M0.470032 4.84003C0.470032 3.77916 0.891456 2.76168 1.6416 2.01154C2.39175 1.26139 3.40917 0.840027 4.47003 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2985 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2985 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003H4.47003C3.40917 8.84003 2.39175 8.41854 1.6416 7.6684C0.891456 6.91825 0.470032 5.90089 0.470032 4.84003Z" - /> - { - setUndeglowIndex(171, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(171)} - stroke={stroke(171)} - strokeWidth={getStrokeWidth(171)} - dataLedIndex={getLEDIndex(171)} - dataKeyIndex={keyIndex(171)} - dataLayer={layer} - path="M0.470032 4.84003C0.470032 3.77916 0.891456 2.76168 1.6416 2.01154C2.39175 1.26139 3.40917 0.840027 4.47003 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2985 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2985 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003H4.47003C3.40917 8.84003 2.39175 8.41854 1.6416 7.6684C0.891456 6.91825 0.470032 5.90089 0.470032 4.84003Z" - /> - { - setUndeglowIndex(170, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(170)} - stroke={stroke(170)} - strokeWidth={getStrokeWidth(170)} - dataLedIndex={getLEDIndex(170)} - dataKeyIndex={keyIndex(170)} - dataLayer={layer} - path="M0.469971 4.84003C0.469971 3.77916 0.891395 2.76168 1.64154 2.01154C2.39169 1.26139 3.4091 0.840027 4.46997 0.840027H35.47C36.5308 0.840027 37.5483 1.26139 38.2984 2.01154C39.0485 2.76168 39.4699 3.77916 39.4699 4.84003C39.4699 5.90089 39.0485 6.91825 38.2984 7.6684C37.5483 8.41854 36.5308 8.84003 35.47 8.84003H4.46997C3.4091 8.84003 2.39169 8.41854 1.64154 7.6684C0.891395 6.91825 0.469971 5.90089 0.469971 4.84003Z" - /> - { - setUndeglowIndex(169, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(169)} - stroke={stroke(169)} - strokeWidth={getStrokeWidth(169)} - dataLedIndex={getLEDIndex(169)} - dataKeyIndex={keyIndex(169)} - dataLayer={layer} - path="M0.469971 4.84003C0.469971 3.77916 0.891456 2.76168 1.6416 2.01154C2.39175 1.26139 3.4091 0.840027 4.46997 0.840027H35.47C36.5308 0.840027 37.5483 1.26139 38.2985 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2985 7.6684C37.5483 8.41854 36.5308 8.84003 35.47 8.84003H4.46997C3.4091 8.84003 2.39175 8.41854 1.6416 7.6684C0.891456 6.91825 0.469971 5.90089 0.469971 4.84003Z" - /> - { - setUndeglowIndex(168, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(168)} - stroke={stroke(168)} - strokeWidth={getStrokeWidth(168)} - dataLedIndex={getLEDIndex(168)} - dataKeyIndex={keyIndex(168)} - dataLayer={layer} - path="M0.469917 4.84006C0.469917 3.77919 0.891402 2.76171 1.64155 2.01157C2.39169 1.26142 3.40905 0.840058 4.46992 0.840058H31.53C32.6961 0.838229 33.8612 0.771386 35.02 0.639985C36.0808 0.521964 37.1451 0.830227 37.9787 1.49692C38.8123 2.16361 39.3469 3.13417 39.4649 4.19504C39.5829 5.2559 39.2748 6.32018 38.6081 7.15378C37.9414 7.98738 36.9708 8.52196 35.91 8.63999C34.4556 8.80328 32.9934 8.88674 31.53 8.88999H4.46992C3.9404 8.89003 3.41615 8.78492 2.92756 8.58078C2.43897 8.37664 1.99582 8.07752 1.62373 7.70078C1.25163 7.32403 0.958009 6.87717 0.759956 6.38608C0.561903 5.89499 0.463298 5.36954 0.469917 4.84006Z" - /> - - {/* End Right side */} - - - + {/* End Right side */} + + ); } } diff --git a/src/api/hardware-dygma-defy-wired/index.js b/src/api/hardware-dygma-defy-wired/index.js index fbb093a42..a5adbc8b6 100644 --- a/src/api/hardware-dygma-defy-wired/index.js +++ b/src/api/hardware-dygma-defy-wired/index.js @@ -26,35 +26,35 @@ const Defy_wired = { urls: [ { name: "Homepage", - url: "https://www.dygma.com/defy/" - } - ] + url: "https://www.dygma.com/defy/", + }, + ], }, usb: { vendorId: 0x35ef, - productId: 0x0010 + productId: 0x0010, }, keyboard: { rows: 5, - columns: 16 + columns: 16, }, keyboardUnderglow: { rows: 2, - columns: 89 + columns: 89, }, RGBWMode: true, components: { - keymap: KeymapDEFY + keymap: KeymapDEFY, }, instructions: { en: { - updateInstructions: `To update the firmware, the keyboard needs a special reset. When the countdown starts, press and hold the Escape key. Soon after the countdown finished, the Neuron's light should start a blue pulsing pattern, and the flashing will proceed. At this point, you should release the Escape key.` - } + updateInstructions: `To update the firmware, the keyboard needs a special reset. When the countdown starts, press and hold the Escape key. Soon after the countdown finished, the Neuron's light should start a blue pulsing pattern, and the flashing will proceed. At this point, you should release the Escape key.`, + }, }, - flash: async (_, filename, filenameSides, flashDefy, stateUpdate) => { - return new Promise(async (resolve, reject) => { + flash: async (_, filename, filenameSides, flashDefy, stateUpdate) => + new Promise(async (resolve, reject) => { try { await flashDefy.updateFirmware(filename, filenameSides, stateUpdate); resolve(); @@ -62,23 +62,17 @@ const Defy_wired = { reject(e); } flashDefy.saveBackupFile(); - }); - }, + }), isDeviceSupported: async port => { - // let focus = new Focus(); - // let layout = localStorage.getItem(port.serialNumber); - // if (!layout) { - // focus._port && focus._port.path === port.path - // ? await focus.open(focus._port, port.device, null) - // : await focus.open(port.path, port.device, null); - // layout = await focus.command("hardware.layout"); - // focus.close(); - // localStorage.setItem(port.serialNumber, layout); - // } - // return layout.trim() === "ANSI"; - return 1; - } + // const focus = new Focus(); + // focus._port && focus._port.path === port.path + // ? await focus.open(focus._port, port.device, null) + // : await focus.open(port.path, port.device, null); + // port.serialNumber = await focus.command("hardware.chip_id"); + // let result = await focus.close(); + return true; + }, }; const Defy_wiredBootloader = { @@ -90,30 +84,29 @@ const Defy_wiredBootloader = { urls: [ { name: "Homepage", - url: "https://www.dygma.com/defy/" - } - ] + url: "https://www.dygma.com/defy/", + }, + ], }, usb: { vendorId: 0x35ef, - productId: 0x0011 + productId: 0x0011, }, bootloader: true, instructions: { en: { - updateInstructions: `To update the firmware, press the button at the bottom. You must not hold any key on the keyboard while the countdown is in progress, nor afterwards, until the flashing is finished. When the countdown reaches zero, the Neuron's light should start a blue pulsing pattern, and flashing will then proceed. ` - } + updateInstructions: `To update the firmware, press the button at the bottom. You must not hold any key on the keyboard while the countdown is in progress, nor afterwards, until the flashing is finished. When the countdown reaches zero, the Neuron's light should start a blue pulsing pattern, and flashing will then proceed. `, + }, }, - flash: async (_, filename, filenameSides, flashDefy, stateUpdate) => { - return new Promise(async (resolve, reject) => { + flash: async (_, filename, filenameSides, flashDefy, stateUpdate) => + new Promise(async (resolve, reject) => { try { await flashDefy.updateFirmware(filename, filenameSides, stateUpdate); resolve(); } catch (e) { reject(e); } - }); - } + }), }; export { Defy_wired, Defy_wiredBootloader }; diff --git a/src/api/hardware-dygma-defy-wireless/components/Keymap.js b/src/api/hardware-dygma-defy-wireless/components/Keymap.js index aa117cbc3..169fc6dc5 100644 --- a/src/api/hardware-dygma-defy-wireless/components/Keymap.js +++ b/src/api/hardware-dygma-defy-wireless/components/Keymap.js @@ -42,7 +42,7 @@ const led_map = [ 3 + LEDS_LEFT_KEYS, 2 + LEDS_LEFT_KEYS, 1 + LEDS_LEFT_KEYS, - 0 + LEDS_LEFT_KEYS + 0 + LEDS_LEFT_KEYS, ], [ 7, @@ -60,7 +60,7 @@ const led_map = [ 10 + LEDS_LEFT_KEYS, 9 + LEDS_LEFT_KEYS, 8 + LEDS_LEFT_KEYS, - 7 + LEDS_LEFT_KEYS + 7 + LEDS_LEFT_KEYS, ], [ 14, @@ -78,7 +78,7 @@ const led_map = [ 17 + LEDS_LEFT_KEYS, 16 + LEDS_LEFT_KEYS, 15 + LEDS_LEFT_KEYS, - 14 + LEDS_LEFT_KEYS + 14 + LEDS_LEFT_KEYS, ], [ 21, @@ -96,7 +96,7 @@ const led_map = [ 24 + LEDS_LEFT_KEYS, 23 + LEDS_LEFT_KEYS, 22 + LEDS_LEFT_KEYS, - 21 + LEDS_LEFT_KEYS + 21 + LEDS_LEFT_KEYS, ], [ 27, @@ -114,8 +114,8 @@ const led_map = [ 30 + LEDS_LEFT_KEYS, 29 + LEDS_LEFT_KEYS, 28 + LEDS_LEFT_KEYS, - 27 + LEDS_LEFT_KEYS - ] + 27 + LEDS_LEFT_KEYS, + ], ]; const no_key_led_map = [...Array.apply(0, Array(107)).map((_, i) => i + UNDERGLOW)]; @@ -126,7 +126,7 @@ const keysRowsPosition = { row3: 169, row4: 236, row5: 303, - row6: 370 + row6: 370, }; const keysRowsDefyPosition = { @@ -134,25 +134,25 @@ const keysRowsDefyPosition = { y0: 111, y1: 88, y2: 71, - y3: 121 + y3: 121, }, row2: { y0: 176, y1: 153, y2: 137, - y3: 186 + y3: 186, }, row3: { y0: 241, y1: 217, y2: 203, - y3: 252 + y3: 252, }, row4: { y0: 306, y1: 282, - y2: 268 - } + y2: 268, + }, }; const keysColumnsPosition = { x0: 105, @@ -168,14 +168,14 @@ const keysColumnsPosition = { x10: 913, x11: 978, x12: 1043, - x13: 1107 + x13: 1107, }; class KeymapDEFY extends React.Component { constructor(props) { super(props); this.state = { - underglowIndex: null + underglowIndex: null, }; } @@ -201,22 +201,18 @@ class KeymapDEFY extends React.Component { } return aux; }; - let keyIndex = (row, col) => { - return col !== undefined ? row * 16 + col : row + 11; - }; + const keyIndex = (row, col) => (col !== undefined ? row * 16 + col : row + 11); - let getLabel = (row, col) => { - return keymap[keyIndex(row, col)]; - }; + const getLabel = (row, col) => keymap[keyIndex(row, col)]; - let isSelected = (row, col) => { + const isSelected = (row, col) => { const selectIndex = keyIndex(row, col); return underglowIndex ? underglowIndex == selectIndex : this.props.selectedKey == selectIndex; }; - let stroke = (row, col) => (isSelected(row, col) ? (this.props.darkMode ? "#fff" : "#000") : "#b3b3b3"); + const stroke = (row, col) => (isSelected(row, col) ? (this.props.darkMode ? "#fff" : "#000") : "#b3b3b3"); - let getStrokeWidth = (row, col) => (isSelected(row, col) ? "3.0" : "1.5"); + const getStrokeWidth = (row, col) => (isSelected(row, col) ? "3.0" : "1.5"); const colormap = this.props.colormap || @@ -229,23 +225,22 @@ class KeymapDEFY extends React.Component { : Array(16) .fill() .map(() => ({ - rgb: "#ffffff" + rgb: "#ffffff", })); // console.log("showing BARS", colormap, palette, led_map, no_key_led_map); - let getColor = (row, col) => { - let ledIndex = col !== undefined ? led_map[parseInt(row)][parseInt(col)] : no_key_led_map[row - UNDERGLOW]; - let colorIndex = colormap[ledIndex]; + const getColor = (row, col) => { + const ledIndex = col !== undefined ? led_map[parseInt(row)][parseInt(col)] : no_key_led_map[row - UNDERGLOW]; + const colorIndex = colormap[ledIndex]; // console.log("testing colors", row, col, ledIndex, colorIndex, row - UNDERGLOW); - let color = palette[colorIndex].rgb; + const color = palette[colorIndex].rgb; return color; }; - let getLEDIndex = (row, col) => { - return col !== undefined ? led_map[parseInt(row)][parseInt(col)] : no_key_led_map[row - UNDERGLOW]; - }; + const getLEDIndex = (row, col) => + col !== undefined ? led_map[parseInt(row)][parseInt(col)] : no_key_led_map[row - UNDERGLOW]; const onClick = e => { this.setState({ underglowIndex: null }); @@ -266,15 +261,13 @@ class KeymapDEFY extends React.Component { * @props {string} class - className of the button * @props {string} textLength length of the text if the button is small and additional text is longer then button */ - const GetCurrentKeyElement = props => { + function GetCurrentKeyElement(props) { return ( - <> - - {props.word}{" "} - - + + {props.word}{" "} + ); - }; + } /** * getDivideKeys - divides words on keyboard keys * @param {string} str Name of key @@ -294,24 +287,24 @@ class KeymapDEFY extends React.Component { return ( ); - } else if (str.length === 1) { + } + if (str.length === 1) { return shortWords.map((word, index) => ( )); - } else if (str.toLowerCase().endsWith("to")) { + } + if (str.toLowerCase().endsWith("to")) { return longWords.map((word, index) => ( )); - } else if ( - str.length > 8 && - smallKey === true && - (str.startsWith("C+") || str.startsWith("A+") || str.startsWith("AGr+")) - ) { + } + if (str.length > 8 && smallKey === true && (str.startsWith("C+") || str.startsWith("A+") || str.startsWith("AGr+"))) { return ; - } else if ( + } + if ( longWords.length === 1 && shortWords.length > 7 && !str.startsWith("C+") && @@ -321,22 +314,24 @@ class KeymapDEFY extends React.Component { ) { return longWords.map((word, index) => ( - + {` `} )); - } else if (longWords.length === 1) { + } + if (longWords.length === 1) { return longWords.map((word, index) => ); - } else if (longWords.length > 1 && smallKey === true) { + } + if (longWords.length > 1 && smallKey === true) { return longWords.map((word, index) => ( )); - } else if (longWords.length > 1) { - return ; - } else { + } + if (longWords.length > 1) { return ; } + return ; }; const topsArr = ["LEDEFF.", "SCadet", "Steno", "M.Btn", "Leader", "Numpad", "Media", "OSL", "Mouse", "M.Wheel", "M.Warp"]; const topsArrTransfer = ["SHIFTTO", "LockTo"]; @@ -365,3382 +360,3380 @@ class KeymapDEFY extends React.Component { // console.log("Selected Key: ", this.props.selectedKey); // console.log("Selected LED: ", this.props.selectedLED); return ( - <> - - { - setUndeglowIndex(176, e); - }} - className="key" - fill={getColor(176)} - stroke={stroke(176)} - strokeWidth={getStrokeWidth(176)} - dataLedIndex={getLEDIndex(176)} - dataKeyIndex={keyIndex(176)} - dataLayer={layer} - translateX={50} - translateY={72} - /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {/* + + { + setUndeglowIndex(176, e); + }} + className="key" + fill={getColor(176)} + stroke={stroke(176)} + strokeWidth={getStrokeWidth(176)} + dataLedIndex={getLEDIndex(176)} + dataKeyIndex={keyIndex(176)} + dataLayer={layer} + translateX={50} + translateY={72} + /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {/* // Thumbs keys // */} - - - - - - - - - - - {/* RIGHT SIDE */} - - - - - - - - - - - - - - - - - - - {/* Left side */} - { - setUndeglowIndex(70, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(70)} - stroke={stroke(70)} - strokeWidth={getStrokeWidth(70)} - dataLedIndex={getLEDIndex(70)} - dataKeyIndex={keyIndex(70)} - dataLayer={layer} - path="M6.20999 19.84H4.47C3.40914 19.84 2.39172 19.4185 1.64157 18.6684C0.891426 17.9182 0.470001 16.9009 0.470001 15.84C0.470001 14.7792 0.891426 13.7617 1.64157 13.0115C2.39172 12.2614 3.40914 11.84 4.47 11.84H6.20999C10.5481 11.8402 14.8393 10.9419 18.8133 9.20196C22.7872 7.46197 26.3577 4.9178 29.3 1.72991C29.6463 1.31366 30.0735 0.972085 30.5558 0.725823C31.038 0.479562 31.5652 0.333774 32.1055 0.297296C32.6457 0.260817 33.1877 0.334406 33.6987 0.513604C34.2097 0.692802 34.6789 0.973855 35.0781 1.33978C35.4772 1.7057 35.7979 2.14887 36.0207 2.64239C36.2435 3.13591 36.3637 3.66949 36.3742 4.21087C36.3847 4.75225 36.2851 5.29016 36.0815 5.79192C35.878 6.29369 35.5747 6.74886 35.19 7.12994C31.5008 11.137 27.0206 14.3355 22.0325 16.5231C17.0444 18.7108 11.6567 19.8402 6.20999 19.84V19.84Z" - /> - { - setUndeglowIndex(71, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(71)} - stroke={stroke(71)} - strokeWidth={getStrokeWidth(71)} - dataLedIndex={getLEDIndex(71)} - dataKeyIndex={keyIndex(71)} - dataLayer={layer} - path="M4.3 38.31C3.62973 38.3092 2.97042 38.1399 2.38261 37.8178C1.7948 37.4958 1.29735 37.0311 0.935956 36.4667C0.574561 35.9022 0.360812 35.2559 0.314343 34.5873C0.267874 33.9186 0.390189 33.249 0.670025 32.6399C1.51772 30.7876 2.1874 28.859 2.67003 26.8799L8.34001 3.42997C8.58931 2.39828 9.23825 1.50786 10.1441 0.954627C11.0499 0.401395 12.1383 0.230653 13.17 0.479957C14.2017 0.72926 15.0921 1.37817 15.6453 2.28397C16.1986 3.18977 16.3693 4.27828 16.12 5.30997L10.45 28.7599C9.84265 31.2358 9.00569 33.6496 7.95002 35.9699C7.63091 36.6696 7.1169 37.2623 6.46956 37.6773C5.82221 38.0924 5.06895 38.312 4.3 38.31Z" - /> - { - setUndeglowIndex(72, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(72)} - stroke={stroke(72)} - strokeWidth={getStrokeWidth(72)} - dataLedIndex={getLEDIndex(72)} - dataKeyIndex={keyIndex(72)} - dataLayer={layer} - path="M4.77999 38.68C4.46328 38.683 4.14746 38.646 3.83999 38.57C3.32901 38.4468 2.84733 38.224 2.42248 37.9146C1.99763 37.6051 1.63795 37.2149 1.36397 36.7664C1.09 36.3178 0.907126 35.8197 0.825797 35.3004C0.744468 34.7811 0.766265 34.2509 0.889976 33.74L8.17998 3.61C8.30343 3.09916 8.52627 2.6176 8.83581 2.19288C9.14534 1.76817 9.53552 1.40859 9.98403 1.13466C10.4325 0.860724 10.9306 0.677833 11.4498 0.596388C11.969 0.514943 12.4992 0.536544 13.01 0.659987C13.5208 0.783429 14.0024 1.00627 14.4271 1.31581C14.8518 1.62535 15.2114 2.0155 15.4853 2.464C15.7592 2.91251 15.9422 3.41063 16.0236 3.92982C16.1051 4.44902 16.0834 4.97916 15.96 5.49L8.67 35.62C8.45904 36.4926 7.96067 37.2688 7.25509 37.8239C6.5495 38.3789 5.67772 38.6805 4.77999 38.68V38.68Z" - /> - { - setUndeglowIndex(73, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(73)} - stroke={stroke(73)} - strokeWidth={getStrokeWidth(73)} - dataLedIndex={getLEDIndex(73)} - dataKeyIndex={keyIndex(73)} - dataLayer={layer} - path="M4.69001 38.91C4.37359 38.9079 4.05836 38.871 3.75001 38.8C3.23453 38.6823 2.74748 38.4636 2.31706 38.1565C1.88664 37.8494 1.52139 37.4599 1.24241 37.0108C0.963432 36.5616 0.776272 36.0616 0.691754 35.5396C0.607236 35.0177 0.627033 34.4842 0.750012 33.9699L8.04002 3.83994C8.28932 2.80825 8.93824 1.91783 9.84404 1.3646C10.7498 0.811368 11.8383 0.640626 12.87 0.88993C13.9017 1.13923 14.7921 1.78821 15.3453 2.69401C15.8986 3.59981 16.0693 4.68825 15.82 5.71995L8.53001 35.85C8.32111 36.7143 7.83018 37.4843 7.13478 38.0385C6.43937 38.5926 5.57915 38.8993 4.69001 38.91V38.91Z" - /> - { - setUndeglowIndex(74, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(74)} - stroke={stroke(74)} - strokeWidth={getStrokeWidth(74)} - dataLedIndex={getLEDIndex(74)} - dataKeyIndex={keyIndex(74)} - dataLayer={layer} - path="M4.57 39.04C4.23359 39.0411 3.89813 39.0042 3.57 38.93C2.53988 38.679 1.65156 38.0292 1.10027 37.1235C0.548989 36.2178 0.379843 35.1303 0.629997 34.1L5.05999 15.78C6.0631 11.6424 7.38025 7.58728 8.99999 3.64997C9.17373 3.13244 9.45157 2.65594 9.8164 2.24982C10.1812 1.84371 10.6253 1.5166 11.1213 1.28858C11.6174 1.06057 12.1548 0.936498 12.7006 0.924019C13.2464 0.91154 13.7889 1.01091 14.2949 1.21601C14.8008 1.42112 15.2593 1.72763 15.6424 2.11665C16.0254 2.50566 16.3247 2.96892 16.5219 3.47797C16.7191 3.98703 16.81 4.53109 16.7891 5.07661C16.7681 5.62212 16.6357 6.15756 16.4 6.64997C14.9349 10.2206 13.7447 13.898 12.84 17.65L8.39999 35.97C8.19343 36.8345 7.7048 37.6056 7.01125 38.1615C6.3177 38.7174 5.45875 39.0265 4.57 39.04V39.04Z" - /> - { - setUndeglowIndex(75, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(75)} - stroke={stroke(75)} - strokeWidth={getStrokeWidth(75)} - dataLedIndex={getLEDIndex(75)} - dataKeyIndex={keyIndex(75)} - dataLayer={layer} - path="M4.61999 31.3199C3.91709 31.3216 3.22656 31.1351 2.61999 30.78C2.16498 30.5153 1.76669 30.1635 1.44793 29.7446C1.12918 29.3257 0.896226 28.848 0.762449 28.3389C0.628671 27.8298 0.59668 27.2993 0.668333 26.7778C0.739985 26.2563 0.91386 25.7541 1.17999 25.3C6.65188 15.8904 13.9156 7.64482 22.56 1.02996C22.9769 0.710192 23.4528 0.475705 23.9604 0.339836C24.4679 0.203967 24.9973 0.169375 25.5182 0.23809C26.0392 0.306806 26.5415 0.477449 26.9965 0.740287C27.4515 1.00313 27.8502 1.353 28.17 1.76995C28.4898 2.1869 28.7243 2.66276 28.8601 3.17034C28.996 3.67792 29.0306 4.20727 28.9619 4.7282C28.8931 5.24914 28.7225 5.75149 28.4597 6.20647C28.1968 6.66146 27.8469 7.06017 27.43 7.37994C19.6063 13.3775 13.0355 20.8521 8.08999 29.3799C7.73089 29.9777 7.22175 30.4713 6.61307 30.8116C6.00438 31.1519 5.31731 31.3271 4.61999 31.3199V31.3199Z" - /> - { - setUndeglowIndex(76, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(76)} - stroke={stroke(76)} - strokeWidth={getStrokeWidth(76)} - dataLedIndex={getLEDIndex(76)} - dataKeyIndex={keyIndex(76)} - dataLayer={layer} - path="M4.78002 26.65C3.93963 26.6486 3.12103 26.3826 2.44039 25.8897C1.75975 25.3967 1.25164 24.7019 0.98821 23.9039C0.724779 23.1058 0.719406 22.2451 0.972829 21.4439C1.22625 20.6426 1.7256 19.9415 2.40001 19.4401L27.31 0.990059C28.1627 0.358844 29.2312 0.0921946 30.2804 0.248787C31.3297 0.40538 32.2738 0.972349 32.905 1.82502C33.5362 2.67769 33.8029 3.74621 33.6463 4.79548C33.4897 5.84475 32.9227 6.78884 32.07 7.42005L7.20003 25.91C6.4928 26.4082 5.64492 26.6675 4.78002 26.65V26.65Z" - /> - { - setUndeglowIndex(77, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(77)} - stroke={stroke(77)} - strokeWidth={getStrokeWidth(77)} - dataLedIndex={getLEDIndex(77)} - dataKeyIndex={keyIndex(77)} - dataLayer={layer} - path="M4.13002 34.11C3.33686 34.1087 2.56204 33.8715 1.90395 33.4288C1.24586 32.9861 0.73421 32.3577 0.4341 31.6235C0.13399 30.8893 0.0589337 30.0825 0.218463 29.3055C0.377992 28.5286 0.764904 27.8165 1.33004 27.26C8.32522 20.378 13.7611 12.0742 17.27 2.91001C17.4591 2.41952 17.743 1.97109 18.1054 1.5903C18.4678 1.20952 18.9017 0.903817 19.3822 0.690706C19.8628 0.477596 20.3806 0.36123 20.9061 0.348238C21.4316 0.335245 21.9545 0.425919 22.445 0.615023C22.9355 0.804126 23.3839 1.08794 23.7647 1.45035C24.1455 1.81276 24.4512 2.24666 24.6643 2.72721C24.8774 3.20775 24.9938 3.72555 25.0068 4.25107C25.0198 4.77659 24.9292 5.29952 24.7401 5.79001C20.8172 16.0086 14.7433 25.2644 6.93007 32.93C6.18828 33.6763 5.18223 34.1003 4.13002 34.11Z" - /> - { - setUndeglowIndex(78, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(78)} - stroke={stroke(78)} - strokeWidth={getStrokeWidth(78)} - dataLedIndex={getLEDIndex(78)} - dataKeyIndex={keyIndex(78)} - dataLayer={layer} - path="M14.19 73.91C13.8977 73.9098 13.6062 73.8796 13.32 73.82C12.2896 73.5817 11.3956 72.945 10.8334 72.0492C10.2712 71.1534 10.0866 70.0715 10.32 69.04C12.4601 59.4756 12.5317 49.5643 10.53 39.97C10.33 39.05 9.60002 36.1 9.34002 35.2L0.780021 5.36001C0.486957 4.34025 0.61102 3.24583 1.12487 2.31753C1.63872 1.38922 2.50025 0.70306 3.52001 0.409995C4.53977 0.116931 5.63419 0.240994 6.56249 0.754844C7.4908 1.26869 8.17696 2.13023 8.47002 3.14999L17.04 32.95C17.33 33.95 18.15 37.26 18.36 38.29C19.4482 43.4456 19.9946 48.7008 19.99 53.97C19.9895 59.6109 19.3691 65.2347 18.14 70.74C17.9485 71.643 17.4506 72.452 16.7306 73.0298C16.0107 73.6076 15.1131 73.9185 14.19 73.91V73.91Z" - /> - { - setUndeglowIndex(79, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(79)} - stroke={stroke(79)} - strokeWidth={getStrokeWidth(79)} - dataLedIndex={getLEDIndex(79)} - dataKeyIndex={keyIndex(79)} - dataLayer={layer} - path="M13.54 38.69C12.672 38.6888 11.8279 38.4051 11.1352 37.882C10.4425 37.3589 9.93872 36.6246 9.7 35.79L1.13 6.00004C0.836932 4.98028 0.960996 3.88586 1.47485 2.95756C1.98869 2.02925 2.85029 1.34309 3.87005 1.05003C4.88981 0.756963 5.98416 0.880966 6.91247 1.39482C7.84077 1.90866 8.52694 2.77026 8.82 3.79002L17.38 33.58C17.5328 34.0882 17.5829 34.6217 17.5275 35.1494C17.472 35.6771 17.3122 36.1885 17.0572 36.6538C16.8022 37.1192 16.4572 37.5292 16.0422 37.8598C15.6272 38.1905 15.1505 38.4353 14.64 38.58C14.2807 38.6701 13.9101 38.7072 13.54 38.69V38.69Z" - /> - { - setUndeglowIndex(80, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(80)} - stroke={stroke(80)} - strokeWidth={getStrokeWidth(80)} - dataLedIndex={getLEDIndex(80)} - dataKeyIndex={keyIndex(80)} - dataLayer={layer} - path="M11.93 38.32C11.0633 38.3193 10.2201 38.0372 9.52758 37.516C8.83504 36.9948 8.33055 36.2627 8.09002 35.43L3.38003 19.03C2.0574 14.3875 1.05504 9.65971 0.38003 4.87995C0.30452 4.35992 0.332174 3.83015 0.46142 3.32081C0.590667 2.81146 0.818969 2.33256 1.1333 1.91145C1.76811 1.06097 2.71475 0.497478 3.76501 0.344978C4.81527 0.192479 5.8831 0.463464 6.73358 1.09827C7.58405 1.73308 8.14754 2.67973 8.30004 3.72999C8.93549 8.15259 9.87437 12.5262 11.11 16.82L15.82 33.22C16.1102 34.2384 15.9848 35.3303 15.4711 36.2564C14.9575 37.1824 14.0976 37.867 13.08 38.16C12.7069 38.2708 12.3192 38.3248 11.93 38.32V38.32Z" - /> - { - setUndeglowIndex(81, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(81)} - stroke={stroke(81)} - strokeWidth={getStrokeWidth(81)} - dataLedIndex={getLEDIndex(81)} - dataKeyIndex={keyIndex(81)} - dataLayer={layer} - path="M4.31 39.36C3.27295 39.3607 2.27619 38.9585 1.52994 38.2384C0.78369 37.5182 0.346294 36.5364 0.309998 35.5C0.259998 34.24 0.23999 32.98 0.23999 31.72V4.36002C0.23999 3.29915 0.661415 2.28173 1.41156 1.53159C2.16171 0.78144 3.17912 0.360016 4.23999 0.360016C5.30086 0.360016 6.31831 0.78144 7.06845 1.53159C7.8186 2.28173 8.24002 3.29915 8.24002 4.36002V31.72C8.24002 32.88 8.24002 34.05 8.30002 35.21C8.33784 36.2694 7.9536 37.3004 7.23172 38.0767C6.50984 38.853 5.50934 39.3109 4.45001 39.35L4.31 39.36Z" - /> - { - setUndeglowIndex(82, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(82)} - stroke={stroke(82)} - strokeWidth={getStrokeWidth(82)} - dataLedIndex={getLEDIndex(82)} - dataKeyIndex={keyIndex(82)} - dataLayer={layer} - path="M4.25 39.36C3.18913 39.36 2.17172 38.9386 1.42157 38.1884C0.671424 37.4383 0.25 36.4209 0.25 35.36V4.36002C0.25 3.29915 0.671424 2.28173 1.42157 1.53159C2.17172 0.78144 3.18913 0.360016 4.25 0.360016C5.31087 0.360016 6.32825 0.78144 7.0784 1.53159C7.82855 2.28173 8.24997 3.29915 8.24997 4.36002V35.36C8.24997 36.4209 7.82855 37.4383 7.0784 38.1884C6.32825 38.9386 5.31087 39.36 4.25 39.36Z" - /> - { - setUndeglowIndex(83, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(83)} - stroke={stroke(83)} - strokeWidth={getStrokeWidth(83)} - dataLedIndex={getLEDIndex(83)} - dataKeyIndex={keyIndex(83)} - dataLayer={layer} - path="M4.25 39.36C3.18913 39.36 2.17172 38.9386 1.42157 38.1884C0.671424 37.4383 0.25 36.4209 0.25 35.36V4.36002C0.25 3.29915 0.671424 2.28173 1.42157 1.53159C2.17172 0.78144 3.18913 0.360016 4.25 0.360016C5.31087 0.360016 6.32825 0.78144 7.0784 1.53159C7.82855 2.28173 8.24997 3.29915 8.24997 4.36002V35.36C8.24997 36.4209 7.82855 37.4383 7.0784 38.1884C6.32825 38.9386 5.31087 39.36 4.25 39.36Z" - /> - { - setUndeglowIndex(84, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(84)} - stroke={stroke(84)} - strokeWidth={getStrokeWidth(84)} - dataLedIndex={getLEDIndex(84)} - dataKeyIndex={keyIndex(84)} - dataLayer={layer} - path="M4.25 39.36C3.18913 39.36 2.17172 38.9386 1.42157 38.1884C0.671424 37.4383 0.25 36.4209 0.25 35.36V4.36002C0.25 3.29915 0.671424 2.28173 1.42157 1.53159C2.17172 0.78144 3.18913 0.360016 4.25 0.360016C5.31087 0.360016 6.32825 0.78144 7.0784 1.53159C7.82855 2.28173 8.24997 3.29915 8.24997 4.36002V35.36C8.24997 36.4209 7.82855 37.4383 7.0784 38.1884C6.32825 38.9386 5.31087 39.36 4.25 39.36Z" - /> - { - setUndeglowIndex(85, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(85)} - stroke={stroke(85)} - strokeWidth={getStrokeWidth(85)} - dataLedIndex={getLEDIndex(85)} - dataKeyIndex={keyIndex(85)} - dataLayer={layer} - path="M4.25 39.36C3.18913 39.36 2.17172 38.9386 1.42157 38.1884C0.671424 37.4383 0.25 36.4209 0.25 35.36V4.36002C0.25 3.29915 0.671424 2.28173 1.42157 1.53159C2.17172 0.78144 3.18913 0.360016 4.25 0.360016C5.31087 0.360016 6.32825 0.78144 7.0784 1.53159C7.82855 2.28173 8.24997 3.29915 8.24997 4.36002V35.36C8.24997 36.4209 7.82855 37.4383 7.0784 38.1884C6.32825 38.9386 5.31087 39.36 4.25 39.36Z" - /> - - { - setUndeglowIndex(86, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(86)} - stroke={stroke(86)} - strokeWidth={getStrokeWidth(86)} - dataLedIndex={getLEDIndex(86)} - dataKeyIndex={keyIndex(86)} - dataLayer={layer} - path="M23.84 30.38C22.8974 30.3796 21.9851 30.0463 21.2643 29.4389C20.5434 28.8314 20.0603 27.9889 19.9 27.06C19.1211 22.6824 17.1359 18.6091 14.1679 15.2983C11.1999 11.9876 7.36682 9.57083 3.10002 8.32002C2.11714 7.99568 1.29822 7.30298 0.81538 6.38749C0.332543 5.47201 0.223369 4.40502 0.510784 3.41072C0.7982 2.41641 1.45985 1.57223 2.35667 1.05555C3.25349 0.538874 4.31568 0.38993 5.32002 0.640025C11.0268 2.30976 16.1535 5.54075 20.122 9.96864C24.0905 14.3965 26.7429 19.8452 27.78 25.7C27.8791 26.2742 27.8515 26.8631 27.6991 27.4256C27.5468 27.988 27.2735 28.5104 26.8982 28.9562C26.523 29.4019 26.0548 29.7603 25.5266 30.0062C24.9983 30.2522 24.4227 30.3798 23.84 30.38Z" - /> - - { - setUndeglowIndex(87, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(87)} - stroke={stroke(87)} - strokeWidth={getStrokeWidth(87)} - dataLedIndex={getLEDIndex(87)} - dataKeyIndex={keyIndex(87)} - dataLayer={layer} - path="M33.31 14.39H11.9C9.84222 14.3966 7.86392 13.5959 6.38997 12.16L1.67 7.58998C0.907504 6.85136 0.469655 5.8401 0.452777 4.77864C0.435899 3.71719 0.841347 2.69248 1.57997 1.92998C2.3186 1.16748 3.32989 0.729635 4.39135 0.712756C5.4528 0.695878 6.47748 1.10136 7.23998 1.83998L11.96 6.42H33.31C34.3709 6.42 35.3883 6.84143 36.1384 7.59157C36.8886 8.34172 37.31 9.35914 37.31 10.42C37.31 11.4809 36.8886 12.4983 36.1384 13.2484C35.3883 13.9986 34.3709 14.42 33.31 14.42V14.39Z" - /> - { - setUndeglowIndex(88, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(88)} - stroke={stroke(88)} - strokeWidth={getStrokeWidth(88)} - dataLedIndex={getLEDIndex(88)} - dataKeyIndex={keyIndex(88)} - dataLayer={layer} - path="M28.56 27.06C27.519 27.053 26.5217 26.6405 25.78 25.91L12.08 12.62C9.85559 10.4452 6.95595 9.09416 3.85997 8.79C2.7991 8.68258 1.82439 8.15815 1.15019 7.33205C0.475999 6.50595 0.157556 5.44586 0.264969 4.385C0.372382 3.32413 0.896849 2.34938 1.72295 1.67519C2.54904 1.00099 3.60913 0.682582 4.67 0.789995C9.56538 1.26913 14.1511 3.40321 17.67 6.83998L31.37 20.12C31.945 20.6742 32.3409 21.3878 32.5069 22.169C32.6728 22.9502 32.601 23.7632 32.3009 24.5032C32.0008 25.2433 31.486 25.8766 30.8229 26.3216C30.1597 26.7665 29.3786 27.0028 28.58 27L28.56 27.06Z" - /> - { - setUndeglowIndex(89, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(89)} - stroke={stroke(89)} - strokeWidth={getStrokeWidth(89)} - dataLedIndex={getLEDIndex(89)} - dataKeyIndex={keyIndex(89)} - dataLayer={layer} - path="M35.27 8.73999H4.26999C3.20912 8.73999 2.1917 8.31857 1.44156 7.56842C0.691413 6.81827 0.269989 5.80086 0.269989 4.73999C0.269989 3.67912 0.691413 2.66174 1.44156 1.91159C2.1917 1.16145 3.20912 0.73999 4.26999 0.73999H35.27C36.3309 0.73999 37.3483 1.16145 38.0984 1.91159C38.8486 2.66174 39.27 3.67912 39.27 4.73999C39.27 5.80086 38.8486 6.81827 38.0984 7.56842C37.3483 8.31857 36.3309 8.73999 35.27 8.73999Z" - /> - - { - setUndeglowIndex(90, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(90)} - stroke={stroke(90)} - strokeWidth={getStrokeWidth(90)} - dataLedIndex={getLEDIndex(90)} - dataKeyIndex={keyIndex(90)} - dataLayer={layer} - path="M35.27 10.74H11.47C8.23457 10.7269 5.07914 9.7332 2.42002 7.89002C1.96847 7.59882 1.5802 7.21961 1.27842 6.77506C0.976635 6.33051 0.767512 5.82973 0.66352 5.30259C0.559528 4.77544 0.562814 4.23276 0.673164 3.70691C0.783514 3.18106 0.998663 2.68282 1.30579 2.24195C1.61292 1.80108 2.00573 1.4266 2.46076 1.14087C2.91579 0.855146 3.42371 0.664037 3.95423 0.578923C4.48475 0.493808 5.02698 0.516437 5.54856 0.645481C6.07014 0.774526 6.56037 1.00735 6.99 1.33002C8.3067 2.24161 9.86856 2.73315 11.47 2.73999H35.27C36.3309 2.73999 37.3483 3.16145 38.0984 3.91159C38.8486 4.66174 39.27 5.67913 39.27 6.73999C39.27 7.80086 38.8486 8.81828 38.0984 9.56842C37.3483 10.3186 36.3309 10.74 35.27 10.74Z" - /> - { - setUndeglowIndex(91, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(91)} - stroke={stroke(91)} - strokeWidth={getStrokeWidth(91)} - dataLedIndex={getLEDIndex(91)} - dataKeyIndex={keyIndex(91)} - dataLayer={layer} - path="M30.99 22.91C30.1074 22.9101 29.2495 22.6183 28.55 22.08L14.68 11.31C11.9041 9.16698 8.49687 8.00311 4.98999 8H4.59C3.52913 8 2.51171 7.57858 1.76157 6.82843C1.01142 6.07828 0.589996 5.06087 0.589996 4C0.589996 2.93913 1.01142 1.92172 1.76157 1.17157C2.51171 0.421424 3.52913 0 4.59 0H4.98999C10.2675 0.0182659 15.3919 1.7756 19.57 5L33.45 15.74C34.1093 16.2517 34.592 16.9567 34.8306 17.7564C35.0692 18.5562 35.0517 19.4105 34.7805 20.1997C34.5093 20.989 33.9981 21.6737 33.3184 22.1579C32.6387 22.6421 31.8245 22.9016 30.99 22.9V22.91Z" - /> - { - setUndeglowIndex(92, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(92)} - stroke={stroke(92)} - strokeWidth={getStrokeWidth(92)} - dataLedIndex={getLEDIndex(92)} - dataKeyIndex={keyIndex(92)} - dataLayer={layer} - path="M35.59 8H4.59C3.52913 8 2.51171 7.57858 1.76157 6.82843C1.01142 6.07828 0.589996 5.06087 0.589996 4C0.589996 2.93913 1.01142 1.92172 1.76157 1.17157C2.51171 0.421424 3.52913 0 4.59 0H35.59C36.6509 0 37.6683 0.421424 38.4184 1.17157C39.1686 1.92172 39.59 2.93913 39.59 4C39.59 5.06087 39.1686 6.07828 38.4184 6.82843C37.6683 7.57858 36.6509 8 35.59 8Z" - /> - { - setUndeglowIndex(93, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(93)} - stroke={stroke(93)} - strokeWidth={getStrokeWidth(93)} - dataLedIndex={getLEDIndex(93)} - dataKeyIndex={keyIndex(93)} - dataLayer={layer} - path="M4.78001 20.85C3.97057 20.8428 3.18236 20.5902 2.51952 20.1256C1.85669 19.6609 1.35043 19.0061 1.06763 18.2476C0.784835 17.4892 0.738804 16.6627 0.935631 15.8775C1.13246 15.0924 1.56287 14.3854 2.17001 13.85L11.6 5.76999C15.9169 2.07079 21.415 0.0383127 27.1 0.0400096H31.64C32.7009 0.0400096 33.7183 0.461434 34.4684 1.21158C35.2186 1.96172 35.64 2.97914 35.64 4.04001C35.64 5.10088 35.2186 6.11829 34.4684 6.86844C33.7183 7.61859 32.7009 8.04001 31.64 8.04001H27.1C23.3204 8.02518 19.66 9.36233 16.78 11.81L7.33001 19.91C6.61577 20.5113 5.71366 20.8439 4.78001 20.85V20.85Z" - /> - - { - setUndeglowIndex(94, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(94)} - stroke={stroke(94)} - strokeWidth={getStrokeWidth(94)} - dataLedIndex={getLEDIndex(94)} - dataKeyIndex={keyIndex(94)} - dataLayer={layer} - path="M25.64 11.74H4.39001C3.32915 11.74 2.31173 11.3186 1.56158 10.5684C0.811439 9.81827 0.390015 8.80085 0.390015 7.73998C0.390015 6.67912 0.811439 5.66173 1.56158 4.91158C2.31173 4.16144 3.32915 3.73998 4.39001 3.73998H25.64C27.5112 3.73962 29.3205 3.06916 30.74 1.85L31.74 0.969993C32.547 0.295483 33.5872 -0.0340119 34.6354 0.0528182C35.6836 0.139648 36.6555 0.635813 37.3405 1.43392C38.0255 2.23203 38.3686 3.26783 38.2955 4.31707C38.2225 5.36631 37.7391 6.34456 36.95 7.04L35.95 7.92999C33.0755 10.3852 29.4203 11.736 25.64 11.74Z" - /> - { - setUndeglowIndex(95, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(95)} - stroke={stroke(95)} - strokeWidth={getStrokeWidth(95)} - dataLedIndex={getLEDIndex(95)} - dataKeyIndex={keyIndex(95)} - dataLayer={layer} - path="M4.22001 23.8C3.39568 23.8 2.5915 23.5453 1.91746 23.0708C1.24341 22.5962 0.732424 21.9251 0.454412 21.149C0.1764 20.373 0.144943 19.5301 0.364324 18.7355C0.583705 17.9409 1.04321 17.2334 1.68 16.71L14.53 6.14999C18.7944 2.65528 24.1366 0.7438 29.65 0.73999H30.39C31.4509 0.73999 32.4683 1.16145 33.2184 1.91159C33.9686 2.66174 34.39 3.67912 34.39 4.73999C34.39 5.80086 33.9686 6.81827 33.2184 7.56842C32.4683 8.31857 31.4509 8.73999 30.39 8.73999H29.65C26.0028 8.74969 22.4706 10.0178 19.65 12.33L6.78 22.91C6.05624 23.4955 5.15091 23.8103 4.22001 23.8Z" - /> - { - setUndeglowIndex(96, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(96)} - stroke={stroke(96)} - strokeWidth={getStrokeWidth(96)} - dataLedIndex={getLEDIndex(96)} - dataKeyIndex={keyIndex(96)} - dataLayer={layer} - path="M30.62 9.48999H4.62C3.55913 9.48999 2.54172 9.06857 1.79157 8.31842C1.04143 7.56828 0.619995 6.55086 0.619995 5.48999C0.619995 4.42913 1.04143 3.41174 1.79157 2.66159C2.54172 1.91145 3.55913 1.48999 4.62 1.48999H30.62C31.7296 1.48578 32.8261 1.25083 33.84 0.80002C34.322 0.560098 34.8475 0.419954 35.385 0.388002C35.9225 0.356049 36.4609 0.432923 36.9679 0.614045C37.475 0.795168 37.9403 1.07679 38.3358 1.44205C38.7314 1.8073 39.0492 2.24867 39.2702 2.73969C39.4911 3.23071 39.6106 3.76127 39.6216 4.29959C39.6325 4.83791 39.5347 5.3729 39.3339 5.8725C39.1331 6.3721 38.8335 6.82602 38.4531 7.20706C38.0727 7.5881 37.6193 7.88841 37.12 8.09C35.0753 9.00668 32.8608 9.48364 30.62 9.48999Z" - /> - { - setUndeglowIndex(97, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(97)} - stroke={stroke(97)} - strokeWidth={getStrokeWidth(97)} - dataLedIndex={getLEDIndex(97)} - dataKeyIndex={keyIndex(97)} - dataLayer={layer} - path="M35.63 8.48999H4.63C3.56914 8.48999 2.55172 8.06857 1.80158 7.31842C1.05143 6.56827 0.630005 5.55086 0.630005 4.48999C0.630005 3.42912 1.05143 2.41174 1.80158 1.66159C2.55172 0.911445 3.56914 0.48999 4.63 0.48999H35.63C36.6909 0.48999 37.7083 0.911445 38.4584 1.66159C39.2086 2.41174 39.63 3.42912 39.63 4.48999C39.63 5.55086 39.2086 6.56827 38.4584 7.31842C37.7083 8.06857 36.6909 8.48999 35.63 8.48999Z" - /> - { - setUndeglowIndex(98, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(98)} - stroke={stroke(98)} - strokeWidth={getStrokeWidth(98)} - dataLedIndex={getLEDIndex(98)} - dataKeyIndex={keyIndex(98)} - dataLayer={layer} - path="M4.60001 20.91C3.85886 20.9086 3.13267 20.7013 2.50245 20.3113C1.87223 19.9213 1.36276 19.3638 1.0309 18.7011C0.699026 18.0384 0.557805 17.2965 0.622982 16.5583C0.688159 15.82 0.957174 15.1143 1.40001 14.52C4.63694 10.1873 8.83732 6.66688 13.6691 4.23709C18.5009 1.8073 23.8317 0.534727 29.24 0.519989H31.63C32.6909 0.519989 33.7083 0.941444 34.4584 1.69159C35.2086 2.44173 35.63 3.45912 35.63 4.51999C35.63 5.58085 35.2086 6.59827 34.4584 7.34842C33.7083 8.09856 32.6909 8.51999 31.63 8.51999H29.24C25.0697 8.49829 20.953 9.46044 17.2243 11.3283C13.4955 13.1961 10.2599 15.917 7.78001 19.27C7.41365 19.7714 6.93556 20.1807 6.38361 20.4654C5.83165 20.75 5.221 20.9023 4.60001 20.91Z" - /> - { - setUndeglowIndex(99, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(99)} - stroke={stroke(99)} - strokeWidth={getStrokeWidth(99)} - dataLedIndex={getLEDIndex(99)} - dataKeyIndex={keyIndex(99)} - dataLayer={layer} - path="M4.5 39.56C3.43913 39.56 2.42172 39.1386 1.67157 38.3884C0.921428 37.6383 0.5 36.6209 0.5 35.56V13.19C0.499544 9.9321 0.957362 6.69034 1.86 3.55999C1.99535 3.04324 2.23283 2.55882 2.55843 2.13534C2.88403 1.71186 3.29116 1.3579 3.75579 1.09432C4.22042 0.830744 4.73313 0.662906 5.26368 0.600701C5.79424 0.538496 6.33187 0.583184 6.84487 0.73214C7.35786 0.881096 7.83583 1.1313 8.25056 1.46798C8.66529 1.80466 9.00837 2.221 9.25958 2.69244C9.51079 3.16387 9.66503 3.68084 9.71319 4.21285C9.76135 4.74486 9.70246 5.28112 9.54 5.79C8.86129 8.19757 8.52466 10.6886 8.54 13.19V35.56C8.54003 36.0887 8.43525 36.6121 8.23174 37.1C8.02822 37.588 7.73 38.0307 7.35432 38.4027C6.97864 38.7746 6.53295 39.0684 6.04302 39.2671C5.55309 39.4657 5.02864 39.5653 4.5 39.56Z" - /> - { - setUndeglowIndex(100, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(100)} - stroke={stroke(100)} - strokeWidth={getStrokeWidth(100)} - dataLedIndex={getLEDIndex(100)} - dataKeyIndex={keyIndex(100)} - dataLayer={layer} - path="M4.45999 39.56C3.39913 39.56 2.38171 39.1386 1.63156 38.3884C0.881419 37.6383 0.459991 36.6209 0.459991 35.56V4.56C0.459991 3.49913 0.881419 2.48171 1.63156 1.73157C2.38171 0.981422 3.39913 0.559998 4.45999 0.559998C5.52086 0.559998 6.53827 0.981422 7.28842 1.73157C8.03856 2.48171 8.45999 3.49913 8.45999 4.56V35.56C8.45999 36.6209 8.03856 37.6383 7.28842 38.3884C6.53827 39.1386 5.52086 39.56 4.45999 39.56Z" - /> - { - setUndeglowIndex(101, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(101)} - stroke={stroke(101)} - strokeWidth={getStrokeWidth(101)} - dataLedIndex={getLEDIndex(101)} - dataKeyIndex={keyIndex(101)} - dataLayer={layer} - path="M4.41 39.56C3.34914 39.56 2.33172 39.1386 1.58158 38.3884C0.831431 37.6383 0.410004 36.6209 0.410004 35.56V4.56C0.410004 3.49913 0.831431 2.48171 1.58158 1.73157C2.33172 0.981422 3.34914 0.559998 4.41 0.559998C5.47087 0.559998 6.48829 0.981422 7.23843 1.73157C7.98858 2.48171 8.41 3.49913 8.41 4.56V35.56C8.41 36.6209 7.98858 37.6383 7.23843 38.3884C6.48829 39.1386 5.47087 39.56 4.41 39.56Z" - /> - { - setUndeglowIndex(102, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(102)} - stroke={stroke(102)} - strokeWidth={getStrokeWidth(102)} - dataLedIndex={getLEDIndex(102)} - dataKeyIndex={keyIndex(102)} - dataLayer={layer} - path="M4.35999 39.56C3.29912 39.56 2.2817 39.1386 1.53156 38.3885C0.781413 37.6383 0.359985 36.6209 0.359985 35.56V4.56003C0.359985 3.49916 0.781413 2.48171 1.53156 1.73157C2.2817 0.981422 3.29912 0.559998 4.35999 0.559998C5.42085 0.559998 6.43827 0.981422 7.18841 1.73157C7.93856 2.48171 8.35999 3.49916 8.35999 4.56003V35.56C8.35999 36.6209 7.93856 37.6383 7.18841 38.3885C6.43827 39.1386 5.42085 39.56 4.35999 39.56Z" - /> - { - setUndeglowIndex(103, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(103)} - stroke={stroke(103)} - strokeWidth={getStrokeWidth(103)} - dataLedIndex={getLEDIndex(103)} - dataKeyIndex={keyIndex(103)} - dataLayer={layer} - path="M4.64999 38.7C4.02388 38.6997 3.4066 38.5524 2.8478 38.27C2.289 37.9876 1.8043 37.578 1.43269 37.0741C1.06109 36.5702 0.812963 35.9861 0.708282 35.3688C0.603601 34.7515 0.645288 34.1182 0.829989 33.52L6.32999 15.67V4.56003C6.32999 3.49916 6.75142 2.48174 7.50156 1.7316C8.25171 0.981452 9.26912 0.560028 10.33 0.560028C11.3909 0.560028 12.4083 0.981452 13.1584 1.7316C13.9086 2.48174 14.33 3.49916 14.33 4.56003V16.91L8.46999 35.91C8.21267 36.7208 7.70356 37.4285 7.01661 37.9302C6.32966 38.4319 5.50065 38.7016 4.64999 38.7Z" - /> - { - setUndeglowIndex(104, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(104)} - stroke={stroke(104)} - strokeWidth={getStrokeWidth(104)} - dataLedIndex={getLEDIndex(104)} - dataKeyIndex={keyIndex(104)} - dataLayer={layer} - path="M4.27 37.84C3.86988 37.8393 3.47212 37.7787 3.09 37.66C2.07717 37.3466 1.23018 36.6439 0.735161 35.7064C0.240137 34.7688 0.13757 33.6731 0.449999 32.66L9.58 3.03998C9.7343 2.53768 9.98603 2.07068 10.3208 1.66566C10.6556 1.26064 11.0669 0.925525 11.5312 0.67945C11.9955 0.433375 12.5037 0.28118 13.0268 0.231513C13.5499 0.181846 14.0777 0.235657 14.58 0.38996C15.0823 0.544264 15.5493 0.796023 15.9543 1.13081C16.3593 1.46559 16.6945 1.87684 16.9405 2.34113C17.1866 2.80543 17.3388 3.31368 17.3885 3.8368C17.4382 4.35992 17.3843 4.88765 17.23 5.38996L8.09 35.02C7.83794 35.8364 7.33109 36.5507 6.64368 37.0581C5.95627 37.5656 5.12443 37.8396 4.27 37.84Z" - /> - { - setUndeglowIndex(105, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(105)} - stroke={stroke(105)} - strokeWidth={getStrokeWidth(105)} - dataLedIndex={getLEDIndex(105)} - dataKeyIndex={keyIndex(105)} - dataLayer={layer} - path="M4.23999 38.91H4.00999C3.4853 38.8806 2.97154 38.7482 2.49807 38.5202C2.0246 38.2921 1.60069 37.973 1.25058 37.5811C0.900474 37.1892 0.631019 36.7322 0.457616 36.2361C0.284213 35.74 0.210261 35.2147 0.239986 34.69C0.836617 24.0939 2.51195 13.5862 5.23999 3.32997C5.37577 2.82232 5.61024 2.34644 5.93001 1.92945C6.24978 1.51246 6.64858 1.16254 7.10363 0.899729C7.55867 0.636917 8.06104 0.466367 8.58203 0.397776C9.10302 0.329184 9.63243 0.36393 10.14 0.50001C11.163 0.774342 12.0354 1.44317 12.566 2.35987C13.0965 3.27658 13.2418 4.36628 12.97 5.38996C10.3727 15.1187 8.77442 25.0869 8.19999 35.14C8.14164 36.1536 7.70002 37.1071 6.96467 37.8072C6.22931 38.5073 5.25526 38.9015 4.23999 38.91Z" - /> - { - setUndeglowIndex(106, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(106)} - stroke={stroke(106)} - strokeWidth={getStrokeWidth(106)} - dataLedIndex={getLEDIndex(106)} - dataKeyIndex={keyIndex(106)} - dataLayer={layer} - path="M7.02999 39.91C6.01912 39.9128 5.04465 39.5328 4.30256 38.8464C3.56047 38.16 3.10581 37.218 3.02999 36.21L1.39999 14.38C1.16999 11.28 1.02999 8.14001 0.979994 5.04001C0.962646 4.50723 1.05196 3.97637 1.24269 3.47861C1.43342 2.98084 1.72172 2.52621 2.09065 2.14145C2.45958 1.75669 2.90169 1.44954 3.391 1.23807C3.88031 1.02659 4.40696 0.915052 4.93999 0.910004H4.99999C6.05055 0.909885 7.05897 1.32305 7.80742 2.06027C8.55586 2.79749 8.98424 3.79957 8.99999 4.85001C8.99999 7.79001 9.17999 10.77 9.39999 13.72L11.03 35.54C11.0696 36.064 11.0055 36.5907 10.8414 37.0899C10.6774 37.5892 10.4166 38.0512 10.0739 38.4496C9.7312 38.848 9.31338 39.1749 8.84429 39.4118C8.37519 39.6486 7.86403 39.7908 7.33999 39.83L7.02999 39.91Z" - /> - { - setUndeglowIndex(107, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(107)} - stroke={stroke(107)} - strokeWidth={getStrokeWidth(107)} - dataLedIndex={getLEDIndex(107)} - dataKeyIndex={keyIndex(107)} - dataLayer={layer} - path="M7.15001 39.74C6.13913 39.7429 5.16466 39.3629 4.42258 38.6764C3.68049 37.99 3.22582 37.048 3.15001 36.04L0.850007 5.12998C0.810442 4.60597 0.874517 4.07935 1.03857 3.58011C1.20263 3.08088 1.46344 2.61883 1.80612 2.22043C2.1488 1.82203 2.56662 1.49507 3.03572 1.25821C3.50481 1.02135 4.01597 0.879234 4.54001 0.839999C5.59664 0.762866 6.64072 1.10811 7.44313 1.7999C8.24553 2.49169 8.74071 3.47353 8.82001 4.53L11.13 35.45C11.2071 36.5066 10.8619 37.5507 10.1701 38.3531C9.47835 39.1555 8.49648 39.6507 7.44001 39.73L7.15001 39.74Z" - /> - { - setUndeglowIndex(108, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(108)} - stroke={stroke(108)} - strokeWidth={getStrokeWidth(108)} - dataLedIndex={getLEDIndex(108)} - dataKeyIndex={keyIndex(108)} - dataLayer={layer} - path="M6.38999 39.51C5.37912 39.5128 4.40465 39.1329 3.66256 38.4464C2.92047 37.76 2.46581 36.818 2.38999 35.81L0.109993 4.90998C0.0317543 3.84912 0.378147 2.80059 1.07297 1.99513C1.76779 1.18966 2.75413 0.693237 3.81499 0.614999C4.87586 0.53676 5.92436 0.883128 6.72982 1.57795C7.53529 2.27277 8.03175 3.25909 8.10999 4.31995L10.39 35.21C10.4296 35.734 10.3655 36.2607 10.2014 36.7599C10.0374 37.2591 9.77656 37.7212 9.43388 38.1196C9.0912 38.518 8.67338 38.8449 8.20428 39.0818C7.73519 39.3187 7.22403 39.4608 6.69999 39.5L6.38999 39.51Z" - /> - { - setUndeglowIndex(109, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(109)} - stroke={stroke(109)} - strokeWidth={getStrokeWidth(109)} - dataLedIndex={getLEDIndex(109)} - dataKeyIndex={keyIndex(109)} - dataLayer={layer} - path="M6.38999 39.51C5.37912 39.5128 4.40465 39.1328 3.66256 38.4464C2.92047 37.76 2.46581 36.818 2.38999 35.81L0.109993 4.90998C0.0317543 3.84912 0.378147 2.80059 1.07297 1.99513C1.76779 1.18966 2.75413 0.693237 3.81499 0.614999C4.87586 0.53676 5.92435 0.883128 6.72982 1.57795C7.53529 2.27277 8.03175 3.25909 8.10999 4.31995L10.39 35.21C10.4296 35.734 10.3655 36.2607 10.2014 36.7599C10.0374 37.2591 9.77656 37.7212 9.43388 38.1196C9.0912 38.518 8.67338 38.8449 8.20428 39.0818C7.73519 39.3187 7.22403 39.4608 6.69999 39.5L6.38999 39.51Z" - /> - { - setUndeglowIndex(110, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(110)} - stroke={stroke(110)} - strokeWidth={getStrokeWidth(110)} - dataLedIndex={getLEDIndex(110)} - dataKeyIndex={keyIndex(110)} - dataLayer={layer} - path="M6.50998 39.4C5.4975 39.4026 4.52168 39.0212 3.77934 38.3327C3.037 37.6442 2.58339 36.6998 2.50998 35.69L0.229984 4.77997C0.190588 4.25468 0.25504 3.72676 0.419661 3.22638C0.584282 2.726 0.845849 2.26294 1.18943 1.86365C1.533 1.46436 1.95186 1.13665 2.42209 0.899233C2.89231 0.661817 3.4047 0.519379 3.92998 0.479983C4.45527 0.440586 4.98318 0.505059 5.48355 0.66968C5.98393 0.834301 6.44699 1.09582 6.84628 1.43939C7.24557 1.78297 7.57328 2.20183 7.8107 2.67206C8.04811 3.14229 8.19059 3.65471 8.22998 4.17999L10.54 35.1C10.578 35.6287 10.5105 36.1597 10.3414 36.6621C10.1724 37.1645 9.9052 37.6283 9.55535 38.0266C9.20549 38.4248 8.77998 38.7495 8.30352 38.9819C7.82707 39.2142 7.30919 39.3495 6.77998 39.3799L6.50998 39.4Z" - /> - { - setUndeglowIndex(111, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(111)} - stroke={stroke(111)} - strokeWidth={getStrokeWidth(111)} - dataLedIndex={getLEDIndex(111)} - dataKeyIndex={keyIndex(111)} - dataLayer={layer} - path="M6.62999 39.28C5.61912 39.2828 4.64465 38.9028 3.90256 38.2164C3.16047 37.5299 2.70581 36.588 2.62999 35.58L0.329994 4.65998C0.251755 3.59912 0.598149 2.55059 1.29297 1.74513C1.98779 0.939657 2.97413 0.443237 4.03499 0.364999C5.09586 0.28676 6.14436 0.633128 6.94982 1.32795C7.75529 2.02277 8.25176 3.00909 8.32999 4.06995L10.64 34.98C10.6796 35.504 10.6155 36.0307 10.4514 36.5299C10.2874 37.0292 10.0266 37.4911 9.68388 37.8895C9.3412 38.2879 8.92338 38.6149 8.45429 38.8518C7.98519 39.0886 7.47403 39.2307 6.94999 39.27L6.62999 39.28Z" - /> - { - setUndeglowIndex(112, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(112)} - stroke={stroke(112)} - strokeWidth={getStrokeWidth(112)} - dataLedIndex={getLEDIndex(112)} - dataKeyIndex={keyIndex(112)} - dataLayer={layer} - path="M6.77998 39.16C5.76911 39.1628 4.79464 38.7828 4.05255 38.0964C3.31046 37.41 2.8558 36.468 2.77998 35.46L0.479984 4.55C0.440588 4.02471 0.505041 3.49679 0.669662 2.99641C0.834283 2.49603 1.09585 2.03297 1.43943 1.63367C1.783 1.23438 2.20186 0.906675 2.67209 0.669258C3.14231 0.431842 3.6547 0.289404 4.17998 0.250008C4.70527 0.210611 5.23318 0.275023 5.73355 0.439644C6.23393 0.604265 6.69699 0.865843 7.09628 1.20942C7.49557 1.553 7.82328 1.97186 8.0607 2.44209C8.29811 2.91231 8.44059 3.42467 8.47998 3.94996L10.78 34.91C10.8181 35.434 10.7527 35.9604 10.5874 36.4591C10.4221 36.9577 10.1602 37.419 9.81657 37.8164C9.47298 38.2139 9.05446 38.5397 8.58491 38.7754C8.11536 39.0111 7.60398 39.152 7.07998 39.19L6.77998 39.16Z" - /> - { - setUndeglowIndex(113, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(113)} - stroke={stroke(113)} - strokeWidth={getStrokeWidth(113)} - dataLedIndex={getLEDIndex(113)} - dataKeyIndex={keyIndex(113)} - dataLayer={layer} - path="M6.87001 39.05C5.85753 39.0527 4.8817 38.6712 4.13936 37.9827C3.39703 37.2942 2.94341 36.3498 2.87001 35.34L0.570007 4.42999C0.531267 3.9047 0.596369 3.3769 0.761597 2.87677C0.926825 2.37664 1.18894 1.91396 1.53298 1.51514C1.87702 1.11631 2.29625 0.789178 2.76673 0.552368C3.23721 0.315558 3.74972 0.173688 4.27501 0.134948C4.80029 0.0962082 5.32807 0.16131 5.8282 0.326538C6.32832 0.491765 6.79101 0.75392 7.18984 1.09796C7.58866 1.442 7.91582 1.86119 8.15263 2.33166C8.38944 2.80214 8.53127 3.31468 8.57001 3.83997L10.88 34.75C10.9195 35.2748 10.8551 35.8022 10.6904 36.3021C10.5258 36.8019 10.2641 37.2643 9.92034 37.6628C9.57662 38.0614 9.15764 38.3882 8.6874 38.6245C8.21716 38.8608 7.70491 39.002 7.18001 39.04L6.87001 39.05Z" - /> - { - setUndeglowIndex(114, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(114)} - stroke={stroke(114)} - strokeWidth={getStrokeWidth(114)} - dataLedIndex={getLEDIndex(114)} - dataKeyIndex={keyIndex(114)} - dataLayer={layer} - path="M23.92 31.7C23.3507 31.6988 22.7881 31.5761 22.27 31.34C17.0077 28.9663 12.3311 25.4653 8.57094 21.0848C4.81081 16.7043 2.05897 11.5513 0.510007 5.98999C0.226226 4.96758 0.360218 3.8743 0.882507 2.95068C1.4048 2.02707 2.2726 1.34878 3.29501 1.065C4.31742 0.781219 5.41068 0.915209 6.3343 1.4375C7.25792 1.95979 7.93623 2.82756 8.22001 3.84997C9.45689 8.28448 11.6529 12.3931 14.6527 15.8854C17.6525 19.3776 21.3828 22.1683 25.58 24.06C26.4114 24.4388 27.0881 25.0908 27.4975 25.9075C27.9069 26.7243 28.0244 27.6565 27.8304 28.5493C27.6364 29.442 27.1426 30.2415 26.4312 30.8148C25.7198 31.388 24.8336 31.7004 23.92 31.7V31.7Z" - /> - { - setUndeglowIndex(115, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(115)} - stroke={stroke(115)} - strokeWidth={getStrokeWidth(115)} - dataLedIndex={getLEDIndex(115)} - dataKeyIndex={keyIndex(115)} - dataLayer={layer} - path="M35.47 8.84001H8.41001C6.94654 8.83676 5.48434 8.7533 4.03001 8.59001C3.50472 8.53091 2.99621 8.36894 2.53353 8.11332C2.07084 7.85771 1.66303 7.51336 1.33338 7.10014C1.00373 6.68692 0.758703 6.21291 0.612281 5.705C0.465858 5.19708 0.420911 4.66522 0.480006 4.13993C0.539101 3.61465 0.701079 3.10616 0.956694 2.64347C1.21231 2.18078 1.55655 1.77293 1.96977 1.44328C2.383 1.11363 2.8571 0.86863 3.36502 0.722208C3.87293 0.575786 4.40472 0.530911 4.93001 0.590006C6.08535 0.721699 7.24718 0.788422 8.41001 0.789957H35.47C36.5309 0.789957 37.5483 1.21132 38.2984 1.96147C39.0486 2.71161 39.47 3.72909 39.47 4.78996C39.47 5.85082 39.0486 6.86818 38.2984 7.61833C37.5483 8.36847 36.5309 8.78996 35.47 8.78996V8.84001Z" - /> - { - setUndeglowIndex(116, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(116)} - stroke={stroke(116)} - strokeWidth={getStrokeWidth(116)} - dataLedIndex={getLEDIndex(116)} - dataKeyIndex={keyIndex(116)} - dataLayer={layer} - path="M35.47 8.84003H4.47C3.40914 8.84003 2.39172 8.41854 1.64157 7.6684C0.891426 6.91825 0.470001 5.90089 0.470001 4.84003C0.470001 3.77916 0.891426 2.76168 1.64157 2.01154C2.39172 1.26139 3.40914 0.840027 4.47 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2984 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2984 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003Z" - /> - { - setUndeglowIndex(117, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(117)} - stroke={stroke(117)} - strokeWidth={getStrokeWidth(117)} - dataLedIndex={getLEDIndex(117)} - dataKeyIndex={keyIndex(117)} - dataLayer={layer} - path="M35.47 8.84003H4.47C3.40914 8.84003 2.39172 8.41854 1.64157 7.6684C0.891426 6.91825 0.470001 5.90089 0.470001 4.84003C0.470001 3.77916 0.891426 2.76168 1.64157 2.01154C2.39172 1.26139 3.40914 0.840027 4.47 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2984 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2984 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003Z" - /> - { - setUndeglowIndex(118, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(118)} - stroke={stroke(118)} - strokeWidth={getStrokeWidth(118)} - dataLedIndex={getLEDIndex(118)} - dataKeyIndex={keyIndex(118)} - dataLayer={layer} - path="M35.47 8.84003H4.47C3.40914 8.84003 2.39172 8.41854 1.64157 7.6684C0.891426 6.91825 0.470001 5.90089 0.470001 4.84003C0.470001 3.77916 0.891426 2.76168 1.64157 2.01154C2.39172 1.26139 3.40914 0.840027 4.47 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2984 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2984 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003Z" - /> - { - setUndeglowIndex(119, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(119)} - stroke={stroke(119)} - strokeWidth={getStrokeWidth(119)} - dataLedIndex={getLEDIndex(119)} - dataKeyIndex={keyIndex(119)} - dataLayer={layer} - path="M35.47 8.84003H4.47C3.40914 8.84003 2.39172 8.41854 1.64157 7.6684C0.891426 6.91825 0.470001 5.90089 0.470001 4.84003C0.470001 3.77916 0.891426 2.76168 1.64157 2.01154C2.39172 1.26139 3.40914 0.840027 4.47 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2984 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2984 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003Z" - /> - { - setUndeglowIndex(120, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(120)} - stroke={stroke(120)} - strokeWidth={getStrokeWidth(120)} - dataLedIndex={getLEDIndex(120)} - dataKeyIndex={keyIndex(120)} - dataLayer={layer} - path="M35.47 8.84003H4.47C3.40914 8.84003 2.39172 8.41854 1.64157 7.6684C0.891426 6.91825 0.470001 5.90089 0.470001 4.84003C0.470001 3.77916 0.891426 2.76168 1.64157 2.01154C2.39172 1.26139 3.40914 0.840027 4.47 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2984 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2984 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003Z" - /> - { - setUndeglowIndex(121, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(121)} - stroke={stroke(121)} - strokeWidth={getStrokeWidth(121)} - dataLedIndex={getLEDIndex(121)} - dataKeyIndex={keyIndex(121)} - dataLayer={layer} - path="M35.47 8.84003H4.47C3.40914 8.84003 2.39172 8.41854 1.64157 7.6684C0.891426 6.91825 0.470001 5.90089 0.470001 4.84003C0.470001 3.77916 0.891426 2.76168 1.64157 2.01154C2.39172 1.26139 3.40914 0.840027 4.47 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2984 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2984 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003Z" - /> - { - setUndeglowIndex(122, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(122)} - stroke={stroke(122)} - strokeWidth={getStrokeWidth(122)} - dataLedIndex={getLEDIndex(122)} - dataKeyIndex={keyIndex(122)} - dataLayer={layer} - path="M35.47 8.84003H4.47C3.40914 8.84003 2.39172 8.41854 1.64157 7.6684C0.891426 6.91825 0.470001 5.90089 0.470001 4.84003C0.470001 3.77916 0.891426 2.76168 1.64157 2.01154C2.39172 1.26139 3.40914 0.840027 4.47 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2984 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2984 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003Z" - /> - {/* End Left side */} - - {/* - Right side - */} + + + + + + + + + + + {/* RIGHT SIDE */} + + + + + + + + + + + + + + + + + + + {/* Left side */} + { + setUndeglowIndex(70, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(70)} + stroke={stroke(70)} + strokeWidth={getStrokeWidth(70)} + dataLedIndex={getLEDIndex(70)} + dataKeyIndex={keyIndex(70)} + dataLayer={layer} + path="M6.20999 19.84H4.47C3.40914 19.84 2.39172 19.4185 1.64157 18.6684C0.891426 17.9182 0.470001 16.9009 0.470001 15.84C0.470001 14.7792 0.891426 13.7617 1.64157 13.0115C2.39172 12.2614 3.40914 11.84 4.47 11.84H6.20999C10.5481 11.8402 14.8393 10.9419 18.8133 9.20196C22.7872 7.46197 26.3577 4.9178 29.3 1.72991C29.6463 1.31366 30.0735 0.972085 30.5558 0.725823C31.038 0.479562 31.5652 0.333774 32.1055 0.297296C32.6457 0.260817 33.1877 0.334406 33.6987 0.513604C34.2097 0.692802 34.6789 0.973855 35.0781 1.33978C35.4772 1.7057 35.7979 2.14887 36.0207 2.64239C36.2435 3.13591 36.3637 3.66949 36.3742 4.21087C36.3847 4.75225 36.2851 5.29016 36.0815 5.79192C35.878 6.29369 35.5747 6.74886 35.19 7.12994C31.5008 11.137 27.0206 14.3355 22.0325 16.5231C17.0444 18.7108 11.6567 19.8402 6.20999 19.84V19.84Z" + /> + { + setUndeglowIndex(71, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(71)} + stroke={stroke(71)} + strokeWidth={getStrokeWidth(71)} + dataLedIndex={getLEDIndex(71)} + dataKeyIndex={keyIndex(71)} + dataLayer={layer} + path="M4.3 38.31C3.62973 38.3092 2.97042 38.1399 2.38261 37.8178C1.7948 37.4958 1.29735 37.0311 0.935956 36.4667C0.574561 35.9022 0.360812 35.2559 0.314343 34.5873C0.267874 33.9186 0.390189 33.249 0.670025 32.6399C1.51772 30.7876 2.1874 28.859 2.67003 26.8799L8.34001 3.42997C8.58931 2.39828 9.23825 1.50786 10.1441 0.954627C11.0499 0.401395 12.1383 0.230653 13.17 0.479957C14.2017 0.72926 15.0921 1.37817 15.6453 2.28397C16.1986 3.18977 16.3693 4.27828 16.12 5.30997L10.45 28.7599C9.84265 31.2358 9.00569 33.6496 7.95002 35.9699C7.63091 36.6696 7.1169 37.2623 6.46956 37.6773C5.82221 38.0924 5.06895 38.312 4.3 38.31Z" + /> + { + setUndeglowIndex(72, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(72)} + stroke={stroke(72)} + strokeWidth={getStrokeWidth(72)} + dataLedIndex={getLEDIndex(72)} + dataKeyIndex={keyIndex(72)} + dataLayer={layer} + path="M4.77999 38.68C4.46328 38.683 4.14746 38.646 3.83999 38.57C3.32901 38.4468 2.84733 38.224 2.42248 37.9146C1.99763 37.6051 1.63795 37.2149 1.36397 36.7664C1.09 36.3178 0.907126 35.8197 0.825797 35.3004C0.744468 34.7811 0.766265 34.2509 0.889976 33.74L8.17998 3.61C8.30343 3.09916 8.52627 2.6176 8.83581 2.19288C9.14534 1.76817 9.53552 1.40859 9.98403 1.13466C10.4325 0.860724 10.9306 0.677833 11.4498 0.596388C11.969 0.514943 12.4992 0.536544 13.01 0.659987C13.5208 0.783429 14.0024 1.00627 14.4271 1.31581C14.8518 1.62535 15.2114 2.0155 15.4853 2.464C15.7592 2.91251 15.9422 3.41063 16.0236 3.92982C16.1051 4.44902 16.0834 4.97916 15.96 5.49L8.67 35.62C8.45904 36.4926 7.96067 37.2688 7.25509 37.8239C6.5495 38.3789 5.67772 38.6805 4.77999 38.68V38.68Z" + /> + { + setUndeglowIndex(73, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(73)} + stroke={stroke(73)} + strokeWidth={getStrokeWidth(73)} + dataLedIndex={getLEDIndex(73)} + dataKeyIndex={keyIndex(73)} + dataLayer={layer} + path="M4.69001 38.91C4.37359 38.9079 4.05836 38.871 3.75001 38.8C3.23453 38.6823 2.74748 38.4636 2.31706 38.1565C1.88664 37.8494 1.52139 37.4599 1.24241 37.0108C0.963432 36.5616 0.776272 36.0616 0.691754 35.5396C0.607236 35.0177 0.627033 34.4842 0.750012 33.9699L8.04002 3.83994C8.28932 2.80825 8.93824 1.91783 9.84404 1.3646C10.7498 0.811368 11.8383 0.640626 12.87 0.88993C13.9017 1.13923 14.7921 1.78821 15.3453 2.69401C15.8986 3.59981 16.0693 4.68825 15.82 5.71995L8.53001 35.85C8.32111 36.7143 7.83018 37.4843 7.13478 38.0385C6.43937 38.5926 5.57915 38.8993 4.69001 38.91V38.91Z" + /> + { + setUndeglowIndex(74, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(74)} + stroke={stroke(74)} + strokeWidth={getStrokeWidth(74)} + dataLedIndex={getLEDIndex(74)} + dataKeyIndex={keyIndex(74)} + dataLayer={layer} + path="M4.57 39.04C4.23359 39.0411 3.89813 39.0042 3.57 38.93C2.53988 38.679 1.65156 38.0292 1.10027 37.1235C0.548989 36.2178 0.379843 35.1303 0.629997 34.1L5.05999 15.78C6.0631 11.6424 7.38025 7.58728 8.99999 3.64997C9.17373 3.13244 9.45157 2.65594 9.8164 2.24982C10.1812 1.84371 10.6253 1.5166 11.1213 1.28858C11.6174 1.06057 12.1548 0.936498 12.7006 0.924019C13.2464 0.91154 13.7889 1.01091 14.2949 1.21601C14.8008 1.42112 15.2593 1.72763 15.6424 2.11665C16.0254 2.50566 16.3247 2.96892 16.5219 3.47797C16.7191 3.98703 16.81 4.53109 16.7891 5.07661C16.7681 5.62212 16.6357 6.15756 16.4 6.64997C14.9349 10.2206 13.7447 13.898 12.84 17.65L8.39999 35.97C8.19343 36.8345 7.7048 37.6056 7.01125 38.1615C6.3177 38.7174 5.45875 39.0265 4.57 39.04V39.04Z" + /> + { + setUndeglowIndex(75, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(75)} + stroke={stroke(75)} + strokeWidth={getStrokeWidth(75)} + dataLedIndex={getLEDIndex(75)} + dataKeyIndex={keyIndex(75)} + dataLayer={layer} + path="M4.61999 31.3199C3.91709 31.3216 3.22656 31.1351 2.61999 30.78C2.16498 30.5153 1.76669 30.1635 1.44793 29.7446C1.12918 29.3257 0.896226 28.848 0.762449 28.3389C0.628671 27.8298 0.59668 27.2993 0.668333 26.7778C0.739985 26.2563 0.91386 25.7541 1.17999 25.3C6.65188 15.8904 13.9156 7.64482 22.56 1.02996C22.9769 0.710192 23.4528 0.475705 23.9604 0.339836C24.4679 0.203967 24.9973 0.169375 25.5182 0.23809C26.0392 0.306806 26.5415 0.477449 26.9965 0.740287C27.4515 1.00313 27.8502 1.353 28.17 1.76995C28.4898 2.1869 28.7243 2.66276 28.8601 3.17034C28.996 3.67792 29.0306 4.20727 28.9619 4.7282C28.8931 5.24914 28.7225 5.75149 28.4597 6.20647C28.1968 6.66146 27.8469 7.06017 27.43 7.37994C19.6063 13.3775 13.0355 20.8521 8.08999 29.3799C7.73089 29.9777 7.22175 30.4713 6.61307 30.8116C6.00438 31.1519 5.31731 31.3271 4.61999 31.3199V31.3199Z" + /> + { + setUndeglowIndex(76, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(76)} + stroke={stroke(76)} + strokeWidth={getStrokeWidth(76)} + dataLedIndex={getLEDIndex(76)} + dataKeyIndex={keyIndex(76)} + dataLayer={layer} + path="M4.78002 26.65C3.93963 26.6486 3.12103 26.3826 2.44039 25.8897C1.75975 25.3967 1.25164 24.7019 0.98821 23.9039C0.724779 23.1058 0.719406 22.2451 0.972829 21.4439C1.22625 20.6426 1.7256 19.9415 2.40001 19.4401L27.31 0.990059C28.1627 0.358844 29.2312 0.0921946 30.2804 0.248787C31.3297 0.40538 32.2738 0.972349 32.905 1.82502C33.5362 2.67769 33.8029 3.74621 33.6463 4.79548C33.4897 5.84475 32.9227 6.78884 32.07 7.42005L7.20003 25.91C6.4928 26.4082 5.64492 26.6675 4.78002 26.65V26.65Z" + /> + { + setUndeglowIndex(77, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(77)} + stroke={stroke(77)} + strokeWidth={getStrokeWidth(77)} + dataLedIndex={getLEDIndex(77)} + dataKeyIndex={keyIndex(77)} + dataLayer={layer} + path="M4.13002 34.11C3.33686 34.1087 2.56204 33.8715 1.90395 33.4288C1.24586 32.9861 0.73421 32.3577 0.4341 31.6235C0.13399 30.8893 0.0589337 30.0825 0.218463 29.3055C0.377992 28.5286 0.764904 27.8165 1.33004 27.26C8.32522 20.378 13.7611 12.0742 17.27 2.91001C17.4591 2.41952 17.743 1.97109 18.1054 1.5903C18.4678 1.20952 18.9017 0.903817 19.3822 0.690706C19.8628 0.477596 20.3806 0.36123 20.9061 0.348238C21.4316 0.335245 21.9545 0.425919 22.445 0.615023C22.9355 0.804126 23.3839 1.08794 23.7647 1.45035C24.1455 1.81276 24.4512 2.24666 24.6643 2.72721C24.8774 3.20775 24.9938 3.72555 25.0068 4.25107C25.0198 4.77659 24.9292 5.29952 24.7401 5.79001C20.8172 16.0086 14.7433 25.2644 6.93007 32.93C6.18828 33.6763 5.18223 34.1003 4.13002 34.11Z" + /> + { + setUndeglowIndex(78, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(78)} + stroke={stroke(78)} + strokeWidth={getStrokeWidth(78)} + dataLedIndex={getLEDIndex(78)} + dataKeyIndex={keyIndex(78)} + dataLayer={layer} + path="M14.19 73.91C13.8977 73.9098 13.6062 73.8796 13.32 73.82C12.2896 73.5817 11.3956 72.945 10.8334 72.0492C10.2712 71.1534 10.0866 70.0715 10.32 69.04C12.4601 59.4756 12.5317 49.5643 10.53 39.97C10.33 39.05 9.60002 36.1 9.34002 35.2L0.780021 5.36001C0.486957 4.34025 0.61102 3.24583 1.12487 2.31753C1.63872 1.38922 2.50025 0.70306 3.52001 0.409995C4.53977 0.116931 5.63419 0.240994 6.56249 0.754844C7.4908 1.26869 8.17696 2.13023 8.47002 3.14999L17.04 32.95C17.33 33.95 18.15 37.26 18.36 38.29C19.4482 43.4456 19.9946 48.7008 19.99 53.97C19.9895 59.6109 19.3691 65.2347 18.14 70.74C17.9485 71.643 17.4506 72.452 16.7306 73.0298C16.0107 73.6076 15.1131 73.9185 14.19 73.91V73.91Z" + /> + { + setUndeglowIndex(79, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(79)} + stroke={stroke(79)} + strokeWidth={getStrokeWidth(79)} + dataLedIndex={getLEDIndex(79)} + dataKeyIndex={keyIndex(79)} + dataLayer={layer} + path="M13.54 38.69C12.672 38.6888 11.8279 38.4051 11.1352 37.882C10.4425 37.3589 9.93872 36.6246 9.7 35.79L1.13 6.00004C0.836932 4.98028 0.960996 3.88586 1.47485 2.95756C1.98869 2.02925 2.85029 1.34309 3.87005 1.05003C4.88981 0.756963 5.98416 0.880966 6.91247 1.39482C7.84077 1.90866 8.52694 2.77026 8.82 3.79002L17.38 33.58C17.5328 34.0882 17.5829 34.6217 17.5275 35.1494C17.472 35.6771 17.3122 36.1885 17.0572 36.6538C16.8022 37.1192 16.4572 37.5292 16.0422 37.8598C15.6272 38.1905 15.1505 38.4353 14.64 38.58C14.2807 38.6701 13.9101 38.7072 13.54 38.69V38.69Z" + /> + { + setUndeglowIndex(80, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(80)} + stroke={stroke(80)} + strokeWidth={getStrokeWidth(80)} + dataLedIndex={getLEDIndex(80)} + dataKeyIndex={keyIndex(80)} + dataLayer={layer} + path="M11.93 38.32C11.0633 38.3193 10.2201 38.0372 9.52758 37.516C8.83504 36.9948 8.33055 36.2627 8.09002 35.43L3.38003 19.03C2.0574 14.3875 1.05504 9.65971 0.38003 4.87995C0.30452 4.35992 0.332174 3.83015 0.46142 3.32081C0.590667 2.81146 0.818969 2.33256 1.1333 1.91145C1.76811 1.06097 2.71475 0.497478 3.76501 0.344978C4.81527 0.192479 5.8831 0.463464 6.73358 1.09827C7.58405 1.73308 8.14754 2.67973 8.30004 3.72999C8.93549 8.15259 9.87437 12.5262 11.11 16.82L15.82 33.22C16.1102 34.2384 15.9848 35.3303 15.4711 36.2564C14.9575 37.1824 14.0976 37.867 13.08 38.16C12.7069 38.2708 12.3192 38.3248 11.93 38.32V38.32Z" + /> + { + setUndeglowIndex(81, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(81)} + stroke={stroke(81)} + strokeWidth={getStrokeWidth(81)} + dataLedIndex={getLEDIndex(81)} + dataKeyIndex={keyIndex(81)} + dataLayer={layer} + path="M4.31 39.36C3.27295 39.3607 2.27619 38.9585 1.52994 38.2384C0.78369 37.5182 0.346294 36.5364 0.309998 35.5C0.259998 34.24 0.23999 32.98 0.23999 31.72V4.36002C0.23999 3.29915 0.661415 2.28173 1.41156 1.53159C2.16171 0.78144 3.17912 0.360016 4.23999 0.360016C5.30086 0.360016 6.31831 0.78144 7.06845 1.53159C7.8186 2.28173 8.24002 3.29915 8.24002 4.36002V31.72C8.24002 32.88 8.24002 34.05 8.30002 35.21C8.33784 36.2694 7.9536 37.3004 7.23172 38.0767C6.50984 38.853 5.50934 39.3109 4.45001 39.35L4.31 39.36Z" + /> + { + setUndeglowIndex(82, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(82)} + stroke={stroke(82)} + strokeWidth={getStrokeWidth(82)} + dataLedIndex={getLEDIndex(82)} + dataKeyIndex={keyIndex(82)} + dataLayer={layer} + path="M4.25 39.36C3.18913 39.36 2.17172 38.9386 1.42157 38.1884C0.671424 37.4383 0.25 36.4209 0.25 35.36V4.36002C0.25 3.29915 0.671424 2.28173 1.42157 1.53159C2.17172 0.78144 3.18913 0.360016 4.25 0.360016C5.31087 0.360016 6.32825 0.78144 7.0784 1.53159C7.82855 2.28173 8.24997 3.29915 8.24997 4.36002V35.36C8.24997 36.4209 7.82855 37.4383 7.0784 38.1884C6.32825 38.9386 5.31087 39.36 4.25 39.36Z" + /> + { + setUndeglowIndex(83, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(83)} + stroke={stroke(83)} + strokeWidth={getStrokeWidth(83)} + dataLedIndex={getLEDIndex(83)} + dataKeyIndex={keyIndex(83)} + dataLayer={layer} + path="M4.25 39.36C3.18913 39.36 2.17172 38.9386 1.42157 38.1884C0.671424 37.4383 0.25 36.4209 0.25 35.36V4.36002C0.25 3.29915 0.671424 2.28173 1.42157 1.53159C2.17172 0.78144 3.18913 0.360016 4.25 0.360016C5.31087 0.360016 6.32825 0.78144 7.0784 1.53159C7.82855 2.28173 8.24997 3.29915 8.24997 4.36002V35.36C8.24997 36.4209 7.82855 37.4383 7.0784 38.1884C6.32825 38.9386 5.31087 39.36 4.25 39.36Z" + /> + { + setUndeglowIndex(84, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(84)} + stroke={stroke(84)} + strokeWidth={getStrokeWidth(84)} + dataLedIndex={getLEDIndex(84)} + dataKeyIndex={keyIndex(84)} + dataLayer={layer} + path="M4.25 39.36C3.18913 39.36 2.17172 38.9386 1.42157 38.1884C0.671424 37.4383 0.25 36.4209 0.25 35.36V4.36002C0.25 3.29915 0.671424 2.28173 1.42157 1.53159C2.17172 0.78144 3.18913 0.360016 4.25 0.360016C5.31087 0.360016 6.32825 0.78144 7.0784 1.53159C7.82855 2.28173 8.24997 3.29915 8.24997 4.36002V35.36C8.24997 36.4209 7.82855 37.4383 7.0784 38.1884C6.32825 38.9386 5.31087 39.36 4.25 39.36Z" + /> + { + setUndeglowIndex(85, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(85)} + stroke={stroke(85)} + strokeWidth={getStrokeWidth(85)} + dataLedIndex={getLEDIndex(85)} + dataKeyIndex={keyIndex(85)} + dataLayer={layer} + path="M4.25 39.36C3.18913 39.36 2.17172 38.9386 1.42157 38.1884C0.671424 37.4383 0.25 36.4209 0.25 35.36V4.36002C0.25 3.29915 0.671424 2.28173 1.42157 1.53159C2.17172 0.78144 3.18913 0.360016 4.25 0.360016C5.31087 0.360016 6.32825 0.78144 7.0784 1.53159C7.82855 2.28173 8.24997 3.29915 8.24997 4.36002V35.36C8.24997 36.4209 7.82855 37.4383 7.0784 38.1884C6.32825 38.9386 5.31087 39.36 4.25 39.36Z" + /> + + { + setUndeglowIndex(86, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(86)} + stroke={stroke(86)} + strokeWidth={getStrokeWidth(86)} + dataLedIndex={getLEDIndex(86)} + dataKeyIndex={keyIndex(86)} + dataLayer={layer} + path="M23.84 30.38C22.8974 30.3796 21.9851 30.0463 21.2643 29.4389C20.5434 28.8314 20.0603 27.9889 19.9 27.06C19.1211 22.6824 17.1359 18.6091 14.1679 15.2983C11.1999 11.9876 7.36682 9.57083 3.10002 8.32002C2.11714 7.99568 1.29822 7.30298 0.81538 6.38749C0.332543 5.47201 0.223369 4.40502 0.510784 3.41072C0.7982 2.41641 1.45985 1.57223 2.35667 1.05555C3.25349 0.538874 4.31568 0.38993 5.32002 0.640025C11.0268 2.30976 16.1535 5.54075 20.122 9.96864C24.0905 14.3965 26.7429 19.8452 27.78 25.7C27.8791 26.2742 27.8515 26.8631 27.6991 27.4256C27.5468 27.988 27.2735 28.5104 26.8982 28.9562C26.523 29.4019 26.0548 29.7603 25.5266 30.0062C24.9983 30.2522 24.4227 30.3798 23.84 30.38Z" + /> + + { + setUndeglowIndex(87, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(87)} + stroke={stroke(87)} + strokeWidth={getStrokeWidth(87)} + dataLedIndex={getLEDIndex(87)} + dataKeyIndex={keyIndex(87)} + dataLayer={layer} + path="M33.31 14.39H11.9C9.84222 14.3966 7.86392 13.5959 6.38997 12.16L1.67 7.58998C0.907504 6.85136 0.469655 5.8401 0.452777 4.77864C0.435899 3.71719 0.841347 2.69248 1.57997 1.92998C2.3186 1.16748 3.32989 0.729635 4.39135 0.712756C5.4528 0.695878 6.47748 1.10136 7.23998 1.83998L11.96 6.42H33.31C34.3709 6.42 35.3883 6.84143 36.1384 7.59157C36.8886 8.34172 37.31 9.35914 37.31 10.42C37.31 11.4809 36.8886 12.4983 36.1384 13.2484C35.3883 13.9986 34.3709 14.42 33.31 14.42V14.39Z" + /> + { + setUndeglowIndex(88, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(88)} + stroke={stroke(88)} + strokeWidth={getStrokeWidth(88)} + dataLedIndex={getLEDIndex(88)} + dataKeyIndex={keyIndex(88)} + dataLayer={layer} + path="M28.56 27.06C27.519 27.053 26.5217 26.6405 25.78 25.91L12.08 12.62C9.85559 10.4452 6.95595 9.09416 3.85997 8.79C2.7991 8.68258 1.82439 8.15815 1.15019 7.33205C0.475999 6.50595 0.157556 5.44586 0.264969 4.385C0.372382 3.32413 0.896849 2.34938 1.72295 1.67519C2.54904 1.00099 3.60913 0.682582 4.67 0.789995C9.56538 1.26913 14.1511 3.40321 17.67 6.83998L31.37 20.12C31.945 20.6742 32.3409 21.3878 32.5069 22.169C32.6728 22.9502 32.601 23.7632 32.3009 24.5032C32.0008 25.2433 31.486 25.8766 30.8229 26.3216C30.1597 26.7665 29.3786 27.0028 28.58 27L28.56 27.06Z" + /> + { + setUndeglowIndex(89, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(89)} + stroke={stroke(89)} + strokeWidth={getStrokeWidth(89)} + dataLedIndex={getLEDIndex(89)} + dataKeyIndex={keyIndex(89)} + dataLayer={layer} + path="M35.27 8.73999H4.26999C3.20912 8.73999 2.1917 8.31857 1.44156 7.56842C0.691413 6.81827 0.269989 5.80086 0.269989 4.73999C0.269989 3.67912 0.691413 2.66174 1.44156 1.91159C2.1917 1.16145 3.20912 0.73999 4.26999 0.73999H35.27C36.3309 0.73999 37.3483 1.16145 38.0984 1.91159C38.8486 2.66174 39.27 3.67912 39.27 4.73999C39.27 5.80086 38.8486 6.81827 38.0984 7.56842C37.3483 8.31857 36.3309 8.73999 35.27 8.73999Z" + /> + + { + setUndeglowIndex(90, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(90)} + stroke={stroke(90)} + strokeWidth={getStrokeWidth(90)} + dataLedIndex={getLEDIndex(90)} + dataKeyIndex={keyIndex(90)} + dataLayer={layer} + path="M35.27 10.74H11.47C8.23457 10.7269 5.07914 9.7332 2.42002 7.89002C1.96847 7.59882 1.5802 7.21961 1.27842 6.77506C0.976635 6.33051 0.767512 5.82973 0.66352 5.30259C0.559528 4.77544 0.562814 4.23276 0.673164 3.70691C0.783514 3.18106 0.998663 2.68282 1.30579 2.24195C1.61292 1.80108 2.00573 1.4266 2.46076 1.14087C2.91579 0.855146 3.42371 0.664037 3.95423 0.578923C4.48475 0.493808 5.02698 0.516437 5.54856 0.645481C6.07014 0.774526 6.56037 1.00735 6.99 1.33002C8.3067 2.24161 9.86856 2.73315 11.47 2.73999H35.27C36.3309 2.73999 37.3483 3.16145 38.0984 3.91159C38.8486 4.66174 39.27 5.67913 39.27 6.73999C39.27 7.80086 38.8486 8.81828 38.0984 9.56842C37.3483 10.3186 36.3309 10.74 35.27 10.74Z" + /> + { + setUndeglowIndex(91, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(91)} + stroke={stroke(91)} + strokeWidth={getStrokeWidth(91)} + dataLedIndex={getLEDIndex(91)} + dataKeyIndex={keyIndex(91)} + dataLayer={layer} + path="M30.99 22.91C30.1074 22.9101 29.2495 22.6183 28.55 22.08L14.68 11.31C11.9041 9.16698 8.49687 8.00311 4.98999 8H4.59C3.52913 8 2.51171 7.57858 1.76157 6.82843C1.01142 6.07828 0.589996 5.06087 0.589996 4C0.589996 2.93913 1.01142 1.92172 1.76157 1.17157C2.51171 0.421424 3.52913 0 4.59 0H4.98999C10.2675 0.0182659 15.3919 1.7756 19.57 5L33.45 15.74C34.1093 16.2517 34.592 16.9567 34.8306 17.7564C35.0692 18.5562 35.0517 19.4105 34.7805 20.1997C34.5093 20.989 33.9981 21.6737 33.3184 22.1579C32.6387 22.6421 31.8245 22.9016 30.99 22.9V22.91Z" + /> + { + setUndeglowIndex(92, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(92)} + stroke={stroke(92)} + strokeWidth={getStrokeWidth(92)} + dataLedIndex={getLEDIndex(92)} + dataKeyIndex={keyIndex(92)} + dataLayer={layer} + path="M35.59 8H4.59C3.52913 8 2.51171 7.57858 1.76157 6.82843C1.01142 6.07828 0.589996 5.06087 0.589996 4C0.589996 2.93913 1.01142 1.92172 1.76157 1.17157C2.51171 0.421424 3.52913 0 4.59 0H35.59C36.6509 0 37.6683 0.421424 38.4184 1.17157C39.1686 1.92172 39.59 2.93913 39.59 4C39.59 5.06087 39.1686 6.07828 38.4184 6.82843C37.6683 7.57858 36.6509 8 35.59 8Z" + /> + { + setUndeglowIndex(93, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(93)} + stroke={stroke(93)} + strokeWidth={getStrokeWidth(93)} + dataLedIndex={getLEDIndex(93)} + dataKeyIndex={keyIndex(93)} + dataLayer={layer} + path="M4.78001 20.85C3.97057 20.8428 3.18236 20.5902 2.51952 20.1256C1.85669 19.6609 1.35043 19.0061 1.06763 18.2476C0.784835 17.4892 0.738804 16.6627 0.935631 15.8775C1.13246 15.0924 1.56287 14.3854 2.17001 13.85L11.6 5.76999C15.9169 2.07079 21.415 0.0383127 27.1 0.0400096H31.64C32.7009 0.0400096 33.7183 0.461434 34.4684 1.21158C35.2186 1.96172 35.64 2.97914 35.64 4.04001C35.64 5.10088 35.2186 6.11829 34.4684 6.86844C33.7183 7.61859 32.7009 8.04001 31.64 8.04001H27.1C23.3204 8.02518 19.66 9.36233 16.78 11.81L7.33001 19.91C6.61577 20.5113 5.71366 20.8439 4.78001 20.85V20.85Z" + /> + + { + setUndeglowIndex(94, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(94)} + stroke={stroke(94)} + strokeWidth={getStrokeWidth(94)} + dataLedIndex={getLEDIndex(94)} + dataKeyIndex={keyIndex(94)} + dataLayer={layer} + path="M25.64 11.74H4.39001C3.32915 11.74 2.31173 11.3186 1.56158 10.5684C0.811439 9.81827 0.390015 8.80085 0.390015 7.73998C0.390015 6.67912 0.811439 5.66173 1.56158 4.91158C2.31173 4.16144 3.32915 3.73998 4.39001 3.73998H25.64C27.5112 3.73962 29.3205 3.06916 30.74 1.85L31.74 0.969993C32.547 0.295483 33.5872 -0.0340119 34.6354 0.0528182C35.6836 0.139648 36.6555 0.635813 37.3405 1.43392C38.0255 2.23203 38.3686 3.26783 38.2955 4.31707C38.2225 5.36631 37.7391 6.34456 36.95 7.04L35.95 7.92999C33.0755 10.3852 29.4203 11.736 25.64 11.74Z" + /> + { + setUndeglowIndex(95, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(95)} + stroke={stroke(95)} + strokeWidth={getStrokeWidth(95)} + dataLedIndex={getLEDIndex(95)} + dataKeyIndex={keyIndex(95)} + dataLayer={layer} + path="M4.22001 23.8C3.39568 23.8 2.5915 23.5453 1.91746 23.0708C1.24341 22.5962 0.732424 21.9251 0.454412 21.149C0.1764 20.373 0.144943 19.5301 0.364324 18.7355C0.583705 17.9409 1.04321 17.2334 1.68 16.71L14.53 6.14999C18.7944 2.65528 24.1366 0.7438 29.65 0.73999H30.39C31.4509 0.73999 32.4683 1.16145 33.2184 1.91159C33.9686 2.66174 34.39 3.67912 34.39 4.73999C34.39 5.80086 33.9686 6.81827 33.2184 7.56842C32.4683 8.31857 31.4509 8.73999 30.39 8.73999H29.65C26.0028 8.74969 22.4706 10.0178 19.65 12.33L6.78 22.91C6.05624 23.4955 5.15091 23.8103 4.22001 23.8Z" + /> + { + setUndeglowIndex(96, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(96)} + stroke={stroke(96)} + strokeWidth={getStrokeWidth(96)} + dataLedIndex={getLEDIndex(96)} + dataKeyIndex={keyIndex(96)} + dataLayer={layer} + path="M30.62 9.48999H4.62C3.55913 9.48999 2.54172 9.06857 1.79157 8.31842C1.04143 7.56828 0.619995 6.55086 0.619995 5.48999C0.619995 4.42913 1.04143 3.41174 1.79157 2.66159C2.54172 1.91145 3.55913 1.48999 4.62 1.48999H30.62C31.7296 1.48578 32.8261 1.25083 33.84 0.80002C34.322 0.560098 34.8475 0.419954 35.385 0.388002C35.9225 0.356049 36.4609 0.432923 36.9679 0.614045C37.475 0.795168 37.9403 1.07679 38.3358 1.44205C38.7314 1.8073 39.0492 2.24867 39.2702 2.73969C39.4911 3.23071 39.6106 3.76127 39.6216 4.29959C39.6325 4.83791 39.5347 5.3729 39.3339 5.8725C39.1331 6.3721 38.8335 6.82602 38.4531 7.20706C38.0727 7.5881 37.6193 7.88841 37.12 8.09C35.0753 9.00668 32.8608 9.48364 30.62 9.48999Z" + /> + { + setUndeglowIndex(97, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(97)} + stroke={stroke(97)} + strokeWidth={getStrokeWidth(97)} + dataLedIndex={getLEDIndex(97)} + dataKeyIndex={keyIndex(97)} + dataLayer={layer} + path="M35.63 8.48999H4.63C3.56914 8.48999 2.55172 8.06857 1.80158 7.31842C1.05143 6.56827 0.630005 5.55086 0.630005 4.48999C0.630005 3.42912 1.05143 2.41174 1.80158 1.66159C2.55172 0.911445 3.56914 0.48999 4.63 0.48999H35.63C36.6909 0.48999 37.7083 0.911445 38.4584 1.66159C39.2086 2.41174 39.63 3.42912 39.63 4.48999C39.63 5.55086 39.2086 6.56827 38.4584 7.31842C37.7083 8.06857 36.6909 8.48999 35.63 8.48999Z" + /> + { + setUndeglowIndex(98, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(98)} + stroke={stroke(98)} + strokeWidth={getStrokeWidth(98)} + dataLedIndex={getLEDIndex(98)} + dataKeyIndex={keyIndex(98)} + dataLayer={layer} + path="M4.60001 20.91C3.85886 20.9086 3.13267 20.7013 2.50245 20.3113C1.87223 19.9213 1.36276 19.3638 1.0309 18.7011C0.699026 18.0384 0.557805 17.2965 0.622982 16.5583C0.688159 15.82 0.957174 15.1143 1.40001 14.52C4.63694 10.1873 8.83732 6.66688 13.6691 4.23709C18.5009 1.8073 23.8317 0.534727 29.24 0.519989H31.63C32.6909 0.519989 33.7083 0.941444 34.4584 1.69159C35.2086 2.44173 35.63 3.45912 35.63 4.51999C35.63 5.58085 35.2086 6.59827 34.4584 7.34842C33.7083 8.09856 32.6909 8.51999 31.63 8.51999H29.24C25.0697 8.49829 20.953 9.46044 17.2243 11.3283C13.4955 13.1961 10.2599 15.917 7.78001 19.27C7.41365 19.7714 6.93556 20.1807 6.38361 20.4654C5.83165 20.75 5.221 20.9023 4.60001 20.91Z" + /> + { + setUndeglowIndex(99, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(99)} + stroke={stroke(99)} + strokeWidth={getStrokeWidth(99)} + dataLedIndex={getLEDIndex(99)} + dataKeyIndex={keyIndex(99)} + dataLayer={layer} + path="M4.5 39.56C3.43913 39.56 2.42172 39.1386 1.67157 38.3884C0.921428 37.6383 0.5 36.6209 0.5 35.56V13.19C0.499544 9.9321 0.957362 6.69034 1.86 3.55999C1.99535 3.04324 2.23283 2.55882 2.55843 2.13534C2.88403 1.71186 3.29116 1.3579 3.75579 1.09432C4.22042 0.830744 4.73313 0.662906 5.26368 0.600701C5.79424 0.538496 6.33187 0.583184 6.84487 0.73214C7.35786 0.881096 7.83583 1.1313 8.25056 1.46798C8.66529 1.80466 9.00837 2.221 9.25958 2.69244C9.51079 3.16387 9.66503 3.68084 9.71319 4.21285C9.76135 4.74486 9.70246 5.28112 9.54 5.79C8.86129 8.19757 8.52466 10.6886 8.54 13.19V35.56C8.54003 36.0887 8.43525 36.6121 8.23174 37.1C8.02822 37.588 7.73 38.0307 7.35432 38.4027C6.97864 38.7746 6.53295 39.0684 6.04302 39.2671C5.55309 39.4657 5.02864 39.5653 4.5 39.56Z" + /> + { + setUndeglowIndex(100, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(100)} + stroke={stroke(100)} + strokeWidth={getStrokeWidth(100)} + dataLedIndex={getLEDIndex(100)} + dataKeyIndex={keyIndex(100)} + dataLayer={layer} + path="M4.45999 39.56C3.39913 39.56 2.38171 39.1386 1.63156 38.3884C0.881419 37.6383 0.459991 36.6209 0.459991 35.56V4.56C0.459991 3.49913 0.881419 2.48171 1.63156 1.73157C2.38171 0.981422 3.39913 0.559998 4.45999 0.559998C5.52086 0.559998 6.53827 0.981422 7.28842 1.73157C8.03856 2.48171 8.45999 3.49913 8.45999 4.56V35.56C8.45999 36.6209 8.03856 37.6383 7.28842 38.3884C6.53827 39.1386 5.52086 39.56 4.45999 39.56Z" + /> + { + setUndeglowIndex(101, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(101)} + stroke={stroke(101)} + strokeWidth={getStrokeWidth(101)} + dataLedIndex={getLEDIndex(101)} + dataKeyIndex={keyIndex(101)} + dataLayer={layer} + path="M4.41 39.56C3.34914 39.56 2.33172 39.1386 1.58158 38.3884C0.831431 37.6383 0.410004 36.6209 0.410004 35.56V4.56C0.410004 3.49913 0.831431 2.48171 1.58158 1.73157C2.33172 0.981422 3.34914 0.559998 4.41 0.559998C5.47087 0.559998 6.48829 0.981422 7.23843 1.73157C7.98858 2.48171 8.41 3.49913 8.41 4.56V35.56C8.41 36.6209 7.98858 37.6383 7.23843 38.3884C6.48829 39.1386 5.47087 39.56 4.41 39.56Z" + /> + { + setUndeglowIndex(102, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(102)} + stroke={stroke(102)} + strokeWidth={getStrokeWidth(102)} + dataLedIndex={getLEDIndex(102)} + dataKeyIndex={keyIndex(102)} + dataLayer={layer} + path="M4.35999 39.56C3.29912 39.56 2.2817 39.1386 1.53156 38.3885C0.781413 37.6383 0.359985 36.6209 0.359985 35.56V4.56003C0.359985 3.49916 0.781413 2.48171 1.53156 1.73157C2.2817 0.981422 3.29912 0.559998 4.35999 0.559998C5.42085 0.559998 6.43827 0.981422 7.18841 1.73157C7.93856 2.48171 8.35999 3.49916 8.35999 4.56003V35.56C8.35999 36.6209 7.93856 37.6383 7.18841 38.3885C6.43827 39.1386 5.42085 39.56 4.35999 39.56Z" + /> + { + setUndeglowIndex(103, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(103)} + stroke={stroke(103)} + strokeWidth={getStrokeWidth(103)} + dataLedIndex={getLEDIndex(103)} + dataKeyIndex={keyIndex(103)} + dataLayer={layer} + path="M4.64999 38.7C4.02388 38.6997 3.4066 38.5524 2.8478 38.27C2.289 37.9876 1.8043 37.578 1.43269 37.0741C1.06109 36.5702 0.812963 35.9861 0.708282 35.3688C0.603601 34.7515 0.645288 34.1182 0.829989 33.52L6.32999 15.67V4.56003C6.32999 3.49916 6.75142 2.48174 7.50156 1.7316C8.25171 0.981452 9.26912 0.560028 10.33 0.560028C11.3909 0.560028 12.4083 0.981452 13.1584 1.7316C13.9086 2.48174 14.33 3.49916 14.33 4.56003V16.91L8.46999 35.91C8.21267 36.7208 7.70356 37.4285 7.01661 37.9302C6.32966 38.4319 5.50065 38.7016 4.64999 38.7Z" + /> + { + setUndeglowIndex(104, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(104)} + stroke={stroke(104)} + strokeWidth={getStrokeWidth(104)} + dataLedIndex={getLEDIndex(104)} + dataKeyIndex={keyIndex(104)} + dataLayer={layer} + path="M4.27 37.84C3.86988 37.8393 3.47212 37.7787 3.09 37.66C2.07717 37.3466 1.23018 36.6439 0.735161 35.7064C0.240137 34.7688 0.13757 33.6731 0.449999 32.66L9.58 3.03998C9.7343 2.53768 9.98603 2.07068 10.3208 1.66566C10.6556 1.26064 11.0669 0.925525 11.5312 0.67945C11.9955 0.433375 12.5037 0.28118 13.0268 0.231513C13.5499 0.181846 14.0777 0.235657 14.58 0.38996C15.0823 0.544264 15.5493 0.796023 15.9543 1.13081C16.3593 1.46559 16.6945 1.87684 16.9405 2.34113C17.1866 2.80543 17.3388 3.31368 17.3885 3.8368C17.4382 4.35992 17.3843 4.88765 17.23 5.38996L8.09 35.02C7.83794 35.8364 7.33109 36.5507 6.64368 37.0581C5.95627 37.5656 5.12443 37.8396 4.27 37.84Z" + /> + { + setUndeglowIndex(105, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(105)} + stroke={stroke(105)} + strokeWidth={getStrokeWidth(105)} + dataLedIndex={getLEDIndex(105)} + dataKeyIndex={keyIndex(105)} + dataLayer={layer} + path="M4.23999 38.91H4.00999C3.4853 38.8806 2.97154 38.7482 2.49807 38.5202C2.0246 38.2921 1.60069 37.973 1.25058 37.5811C0.900474 37.1892 0.631019 36.7322 0.457616 36.2361C0.284213 35.74 0.210261 35.2147 0.239986 34.69C0.836617 24.0939 2.51195 13.5862 5.23999 3.32997C5.37577 2.82232 5.61024 2.34644 5.93001 1.92945C6.24978 1.51246 6.64858 1.16254 7.10363 0.899729C7.55867 0.636917 8.06104 0.466367 8.58203 0.397776C9.10302 0.329184 9.63243 0.36393 10.14 0.50001C11.163 0.774342 12.0354 1.44317 12.566 2.35987C13.0965 3.27658 13.2418 4.36628 12.97 5.38996C10.3727 15.1187 8.77442 25.0869 8.19999 35.14C8.14164 36.1536 7.70002 37.1071 6.96467 37.8072C6.22931 38.5073 5.25526 38.9015 4.23999 38.91Z" + /> + { + setUndeglowIndex(106, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(106)} + stroke={stroke(106)} + strokeWidth={getStrokeWidth(106)} + dataLedIndex={getLEDIndex(106)} + dataKeyIndex={keyIndex(106)} + dataLayer={layer} + path="M7.02999 39.91C6.01912 39.9128 5.04465 39.5328 4.30256 38.8464C3.56047 38.16 3.10581 37.218 3.02999 36.21L1.39999 14.38C1.16999 11.28 1.02999 8.14001 0.979994 5.04001C0.962646 4.50723 1.05196 3.97637 1.24269 3.47861C1.43342 2.98084 1.72172 2.52621 2.09065 2.14145C2.45958 1.75669 2.90169 1.44954 3.391 1.23807C3.88031 1.02659 4.40696 0.915052 4.93999 0.910004H4.99999C6.05055 0.909885 7.05897 1.32305 7.80742 2.06027C8.55586 2.79749 8.98424 3.79957 8.99999 4.85001C8.99999 7.79001 9.17999 10.77 9.39999 13.72L11.03 35.54C11.0696 36.064 11.0055 36.5907 10.8414 37.0899C10.6774 37.5892 10.4166 38.0512 10.0739 38.4496C9.7312 38.848 9.31338 39.1749 8.84429 39.4118C8.37519 39.6486 7.86403 39.7908 7.33999 39.83L7.02999 39.91Z" + /> + { + setUndeglowIndex(107, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(107)} + stroke={stroke(107)} + strokeWidth={getStrokeWidth(107)} + dataLedIndex={getLEDIndex(107)} + dataKeyIndex={keyIndex(107)} + dataLayer={layer} + path="M7.15001 39.74C6.13913 39.7429 5.16466 39.3629 4.42258 38.6764C3.68049 37.99 3.22582 37.048 3.15001 36.04L0.850007 5.12998C0.810442 4.60597 0.874517 4.07935 1.03857 3.58011C1.20263 3.08088 1.46344 2.61883 1.80612 2.22043C2.1488 1.82203 2.56662 1.49507 3.03572 1.25821C3.50481 1.02135 4.01597 0.879234 4.54001 0.839999C5.59664 0.762866 6.64072 1.10811 7.44313 1.7999C8.24553 2.49169 8.74071 3.47353 8.82001 4.53L11.13 35.45C11.2071 36.5066 10.8619 37.5507 10.1701 38.3531C9.47835 39.1555 8.49648 39.6507 7.44001 39.73L7.15001 39.74Z" + /> + { + setUndeglowIndex(108, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(108)} + stroke={stroke(108)} + strokeWidth={getStrokeWidth(108)} + dataLedIndex={getLEDIndex(108)} + dataKeyIndex={keyIndex(108)} + dataLayer={layer} + path="M6.38999 39.51C5.37912 39.5128 4.40465 39.1329 3.66256 38.4464C2.92047 37.76 2.46581 36.818 2.38999 35.81L0.109993 4.90998C0.0317543 3.84912 0.378147 2.80059 1.07297 1.99513C1.76779 1.18966 2.75413 0.693237 3.81499 0.614999C4.87586 0.53676 5.92436 0.883128 6.72982 1.57795C7.53529 2.27277 8.03175 3.25909 8.10999 4.31995L10.39 35.21C10.4296 35.734 10.3655 36.2607 10.2014 36.7599C10.0374 37.2591 9.77656 37.7212 9.43388 38.1196C9.0912 38.518 8.67338 38.8449 8.20428 39.0818C7.73519 39.3187 7.22403 39.4608 6.69999 39.5L6.38999 39.51Z" + /> + { + setUndeglowIndex(109, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(109)} + stroke={stroke(109)} + strokeWidth={getStrokeWidth(109)} + dataLedIndex={getLEDIndex(109)} + dataKeyIndex={keyIndex(109)} + dataLayer={layer} + path="M6.38999 39.51C5.37912 39.5128 4.40465 39.1328 3.66256 38.4464C2.92047 37.76 2.46581 36.818 2.38999 35.81L0.109993 4.90998C0.0317543 3.84912 0.378147 2.80059 1.07297 1.99513C1.76779 1.18966 2.75413 0.693237 3.81499 0.614999C4.87586 0.53676 5.92435 0.883128 6.72982 1.57795C7.53529 2.27277 8.03175 3.25909 8.10999 4.31995L10.39 35.21C10.4296 35.734 10.3655 36.2607 10.2014 36.7599C10.0374 37.2591 9.77656 37.7212 9.43388 38.1196C9.0912 38.518 8.67338 38.8449 8.20428 39.0818C7.73519 39.3187 7.22403 39.4608 6.69999 39.5L6.38999 39.51Z" + /> + { + setUndeglowIndex(110, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(110)} + stroke={stroke(110)} + strokeWidth={getStrokeWidth(110)} + dataLedIndex={getLEDIndex(110)} + dataKeyIndex={keyIndex(110)} + dataLayer={layer} + path="M6.50998 39.4C5.4975 39.4026 4.52168 39.0212 3.77934 38.3327C3.037 37.6442 2.58339 36.6998 2.50998 35.69L0.229984 4.77997C0.190588 4.25468 0.25504 3.72676 0.419661 3.22638C0.584282 2.726 0.845849 2.26294 1.18943 1.86365C1.533 1.46436 1.95186 1.13665 2.42209 0.899233C2.89231 0.661817 3.4047 0.519379 3.92998 0.479983C4.45527 0.440586 4.98318 0.505059 5.48355 0.66968C5.98393 0.834301 6.44699 1.09582 6.84628 1.43939C7.24557 1.78297 7.57328 2.20183 7.8107 2.67206C8.04811 3.14229 8.19059 3.65471 8.22998 4.17999L10.54 35.1C10.578 35.6287 10.5105 36.1597 10.3414 36.6621C10.1724 37.1645 9.9052 37.6283 9.55535 38.0266C9.20549 38.4248 8.77998 38.7495 8.30352 38.9819C7.82707 39.2142 7.30919 39.3495 6.77998 39.3799L6.50998 39.4Z" + /> + { + setUndeglowIndex(111, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(111)} + stroke={stroke(111)} + strokeWidth={getStrokeWidth(111)} + dataLedIndex={getLEDIndex(111)} + dataKeyIndex={keyIndex(111)} + dataLayer={layer} + path="M6.62999 39.28C5.61912 39.2828 4.64465 38.9028 3.90256 38.2164C3.16047 37.5299 2.70581 36.588 2.62999 35.58L0.329994 4.65998C0.251755 3.59912 0.598149 2.55059 1.29297 1.74513C1.98779 0.939657 2.97413 0.443237 4.03499 0.364999C5.09586 0.28676 6.14436 0.633128 6.94982 1.32795C7.75529 2.02277 8.25176 3.00909 8.32999 4.06995L10.64 34.98C10.6796 35.504 10.6155 36.0307 10.4514 36.5299C10.2874 37.0292 10.0266 37.4911 9.68388 37.8895C9.3412 38.2879 8.92338 38.6149 8.45429 38.8518C7.98519 39.0886 7.47403 39.2307 6.94999 39.27L6.62999 39.28Z" + /> + { + setUndeglowIndex(112, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(112)} + stroke={stroke(112)} + strokeWidth={getStrokeWidth(112)} + dataLedIndex={getLEDIndex(112)} + dataKeyIndex={keyIndex(112)} + dataLayer={layer} + path="M6.77998 39.16C5.76911 39.1628 4.79464 38.7828 4.05255 38.0964C3.31046 37.41 2.8558 36.468 2.77998 35.46L0.479984 4.55C0.440588 4.02471 0.505041 3.49679 0.669662 2.99641C0.834283 2.49603 1.09585 2.03297 1.43943 1.63367C1.783 1.23438 2.20186 0.906675 2.67209 0.669258C3.14231 0.431842 3.6547 0.289404 4.17998 0.250008C4.70527 0.210611 5.23318 0.275023 5.73355 0.439644C6.23393 0.604265 6.69699 0.865843 7.09628 1.20942C7.49557 1.553 7.82328 1.97186 8.0607 2.44209C8.29811 2.91231 8.44059 3.42467 8.47998 3.94996L10.78 34.91C10.8181 35.434 10.7527 35.9604 10.5874 36.4591C10.4221 36.9577 10.1602 37.419 9.81657 37.8164C9.47298 38.2139 9.05446 38.5397 8.58491 38.7754C8.11536 39.0111 7.60398 39.152 7.07998 39.19L6.77998 39.16Z" + /> + { + setUndeglowIndex(113, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(113)} + stroke={stroke(113)} + strokeWidth={getStrokeWidth(113)} + dataLedIndex={getLEDIndex(113)} + dataKeyIndex={keyIndex(113)} + dataLayer={layer} + path="M6.87001 39.05C5.85753 39.0527 4.8817 38.6712 4.13936 37.9827C3.39703 37.2942 2.94341 36.3498 2.87001 35.34L0.570007 4.42999C0.531267 3.9047 0.596369 3.3769 0.761597 2.87677C0.926825 2.37664 1.18894 1.91396 1.53298 1.51514C1.87702 1.11631 2.29625 0.789178 2.76673 0.552368C3.23721 0.315558 3.74972 0.173688 4.27501 0.134948C4.80029 0.0962082 5.32807 0.16131 5.8282 0.326538C6.32832 0.491765 6.79101 0.75392 7.18984 1.09796C7.58866 1.442 7.91582 1.86119 8.15263 2.33166C8.38944 2.80214 8.53127 3.31468 8.57001 3.83997L10.88 34.75C10.9195 35.2748 10.8551 35.8022 10.6904 36.3021C10.5258 36.8019 10.2641 37.2643 9.92034 37.6628C9.57662 38.0614 9.15764 38.3882 8.6874 38.6245C8.21716 38.8608 7.70491 39.002 7.18001 39.04L6.87001 39.05Z" + /> + { + setUndeglowIndex(114, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(114)} + stroke={stroke(114)} + strokeWidth={getStrokeWidth(114)} + dataLedIndex={getLEDIndex(114)} + dataKeyIndex={keyIndex(114)} + dataLayer={layer} + path="M23.92 31.7C23.3507 31.6988 22.7881 31.5761 22.27 31.34C17.0077 28.9663 12.3311 25.4653 8.57094 21.0848C4.81081 16.7043 2.05897 11.5513 0.510007 5.98999C0.226226 4.96758 0.360218 3.8743 0.882507 2.95068C1.4048 2.02707 2.2726 1.34878 3.29501 1.065C4.31742 0.781219 5.41068 0.915209 6.3343 1.4375C7.25792 1.95979 7.93623 2.82756 8.22001 3.84997C9.45689 8.28448 11.6529 12.3931 14.6527 15.8854C17.6525 19.3776 21.3828 22.1683 25.58 24.06C26.4114 24.4388 27.0881 25.0908 27.4975 25.9075C27.9069 26.7243 28.0244 27.6565 27.8304 28.5493C27.6364 29.442 27.1426 30.2415 26.4312 30.8148C25.7198 31.388 24.8336 31.7004 23.92 31.7V31.7Z" + /> + { + setUndeglowIndex(115, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(115)} + stroke={stroke(115)} + strokeWidth={getStrokeWidth(115)} + dataLedIndex={getLEDIndex(115)} + dataKeyIndex={keyIndex(115)} + dataLayer={layer} + path="M35.47 8.84001H8.41001C6.94654 8.83676 5.48434 8.7533 4.03001 8.59001C3.50472 8.53091 2.99621 8.36894 2.53353 8.11332C2.07084 7.85771 1.66303 7.51336 1.33338 7.10014C1.00373 6.68692 0.758703 6.21291 0.612281 5.705C0.465858 5.19708 0.420911 4.66522 0.480006 4.13993C0.539101 3.61465 0.701079 3.10616 0.956694 2.64347C1.21231 2.18078 1.55655 1.77293 1.96977 1.44328C2.383 1.11363 2.8571 0.86863 3.36502 0.722208C3.87293 0.575786 4.40472 0.530911 4.93001 0.590006C6.08535 0.721699 7.24718 0.788422 8.41001 0.789957H35.47C36.5309 0.789957 37.5483 1.21132 38.2984 1.96147C39.0486 2.71161 39.47 3.72909 39.47 4.78996C39.47 5.85082 39.0486 6.86818 38.2984 7.61833C37.5483 8.36847 36.5309 8.78996 35.47 8.78996V8.84001Z" + /> + { + setUndeglowIndex(116, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(116)} + stroke={stroke(116)} + strokeWidth={getStrokeWidth(116)} + dataLedIndex={getLEDIndex(116)} + dataKeyIndex={keyIndex(116)} + dataLayer={layer} + path="M35.47 8.84003H4.47C3.40914 8.84003 2.39172 8.41854 1.64157 7.6684C0.891426 6.91825 0.470001 5.90089 0.470001 4.84003C0.470001 3.77916 0.891426 2.76168 1.64157 2.01154C2.39172 1.26139 3.40914 0.840027 4.47 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2984 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2984 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003Z" + /> + { + setUndeglowIndex(117, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(117)} + stroke={stroke(117)} + strokeWidth={getStrokeWidth(117)} + dataLedIndex={getLEDIndex(117)} + dataKeyIndex={keyIndex(117)} + dataLayer={layer} + path="M35.47 8.84003H4.47C3.40914 8.84003 2.39172 8.41854 1.64157 7.6684C0.891426 6.91825 0.470001 5.90089 0.470001 4.84003C0.470001 3.77916 0.891426 2.76168 1.64157 2.01154C2.39172 1.26139 3.40914 0.840027 4.47 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2984 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2984 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003Z" + /> + { + setUndeglowIndex(118, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(118)} + stroke={stroke(118)} + strokeWidth={getStrokeWidth(118)} + dataLedIndex={getLEDIndex(118)} + dataKeyIndex={keyIndex(118)} + dataLayer={layer} + path="M35.47 8.84003H4.47C3.40914 8.84003 2.39172 8.41854 1.64157 7.6684C0.891426 6.91825 0.470001 5.90089 0.470001 4.84003C0.470001 3.77916 0.891426 2.76168 1.64157 2.01154C2.39172 1.26139 3.40914 0.840027 4.47 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2984 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2984 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003Z" + /> + { + setUndeglowIndex(119, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(119)} + stroke={stroke(119)} + strokeWidth={getStrokeWidth(119)} + dataLedIndex={getLEDIndex(119)} + dataKeyIndex={keyIndex(119)} + dataLayer={layer} + path="M35.47 8.84003H4.47C3.40914 8.84003 2.39172 8.41854 1.64157 7.6684C0.891426 6.91825 0.470001 5.90089 0.470001 4.84003C0.470001 3.77916 0.891426 2.76168 1.64157 2.01154C2.39172 1.26139 3.40914 0.840027 4.47 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2984 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2984 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003Z" + /> + { + setUndeglowIndex(120, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(120)} + stroke={stroke(120)} + strokeWidth={getStrokeWidth(120)} + dataLedIndex={getLEDIndex(120)} + dataKeyIndex={keyIndex(120)} + dataLayer={layer} + path="M35.47 8.84003H4.47C3.40914 8.84003 2.39172 8.41854 1.64157 7.6684C0.891426 6.91825 0.470001 5.90089 0.470001 4.84003C0.470001 3.77916 0.891426 2.76168 1.64157 2.01154C2.39172 1.26139 3.40914 0.840027 4.47 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2984 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2984 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003Z" + /> + { + setUndeglowIndex(121, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(121)} + stroke={stroke(121)} + strokeWidth={getStrokeWidth(121)} + dataLedIndex={getLEDIndex(121)} + dataKeyIndex={keyIndex(121)} + dataLayer={layer} + path="M35.47 8.84003H4.47C3.40914 8.84003 2.39172 8.41854 1.64157 7.6684C0.891426 6.91825 0.470001 5.90089 0.470001 4.84003C0.470001 3.77916 0.891426 2.76168 1.64157 2.01154C2.39172 1.26139 3.40914 0.840027 4.47 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2984 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2984 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003Z" + /> + { + setUndeglowIndex(122, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(122)} + stroke={stroke(122)} + strokeWidth={getStrokeWidth(122)} + dataLedIndex={getLEDIndex(122)} + dataKeyIndex={keyIndex(122)} + dataLayer={layer} + path="M35.47 8.84003H4.47C3.40914 8.84003 2.39172 8.41854 1.64157 7.6684C0.891426 6.91825 0.470001 5.90089 0.470001 4.84003C0.470001 3.77916 0.891426 2.76168 1.64157 2.01154C2.39172 1.26139 3.40914 0.840027 4.47 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2984 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2984 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003Z" + /> + {/* End Left side */} + + {/* + Right side + */} + + { + setUndeglowIndex(167, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(167)} + stroke={stroke(167)} + strokeWidth={getStrokeWidth(167)} + dataLedIndex={getLEDIndex(167)} + dataKeyIndex={keyIndex(167)} + dataLayer={layer} + path="M0.390066 29.3499C-0.0459419 28.3832 -0.0801932 27.2829 0.294851 26.291C0.669895 25.299 1.42353 24.4965 2.39007 24.06C6.58462 22.166 10.3124 19.3745 13.3102 15.8824C16.3081 12.3904 18.503 8.28294 19.74 3.84997C20.0238 2.82756 20.7022 1.95979 21.6258 1.4375C22.5494 0.915209 23.6427 0.781219 24.6651 1.065C25.6875 1.34878 26.5553 2.02707 27.0776 2.95068C27.5999 3.8743 27.7339 4.96758 27.4501 5.98999C25.9012 11.5513 23.1492 16.7043 19.3891 21.0848C15.629 25.4653 10.9525 28.9663 5.69011 31.34C4.72337 31.776 3.62302 31.8103 2.63103 31.4352C1.63904 31.0602 0.836564 30.3066 0.400076 29.34L0.390066 29.3499Z" + /> + { + setUndeglowIndex(166, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(166)} + stroke={stroke(166)} + strokeWidth={getStrokeWidth(166)} + dataLedIndex={getLEDIndex(166)} + dataKeyIndex={keyIndex(166)} + dataLayer={layer} + path="M3.77002 39.04C3.24598 39.0007 2.73484 38.8586 2.26575 38.6218C1.79665 38.3849 1.37881 38.0579 1.03613 37.6595C0.693452 37.2611 0.432607 36.7991 0.268553 36.2999C0.104498 35.8006 0.0403886 35.274 0.0799541 34.75L2.38 3.83997C2.41874 3.31468 2.56055 2.80214 2.79736 2.33166C3.03417 1.86119 3.3613 1.442 3.76013 1.09796C4.15896 0.75392 4.6217 0.491765 5.12182 0.326538C5.62195 0.16131 6.14976 0.0962082 6.67505 0.134948C7.20033 0.173688 7.71287 0.315558 8.18335 0.552368C8.65382 0.789177 9.07295 1.11631 9.41699 1.51514C9.76103 1.91396 10.0232 2.37664 10.1885 2.87677C10.3537 3.3769 10.4187 3.9047 10.38 4.42999L8.07007 35.34C7.99667 36.3498 7.543 37.2942 6.80066 37.9827C6.05832 38.6712 5.08255 39.0527 4.07007 39.05L3.77002 39.04Z" + /> + + { + setUndeglowIndex(165, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(165)} + stroke={stroke(165)} + strokeWidth={getStrokeWidth(165)} + dataLedIndex={getLEDIndex(165)} + dataKeyIndex={keyIndex(165)} + dataLayer={layer} + path="M3.89002 39.15C2.83354 39.0707 1.85171 38.5755 1.15992 37.7731C0.468124 36.9707 0.122944 35.9266 0.200077 34.87L2.5 3.94996C2.57957 2.8891 3.07726 1.90331 3.88367 1.20942C4.69008 0.51554 5.73919 0.170448 6.80005 0.250013C7.86092 0.329578 8.84665 0.827274 9.54053 1.63368C10.2344 2.44009 10.5796 3.48914 10.5 4.55L8.19007 35.46C8.11425 36.468 7.65957 37.41 6.91748 38.0964C6.1754 38.7828 5.20095 39.1628 4.19007 39.16L3.89002 39.15Z" + /> + { + setUndeglowIndex(164, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(164)} + stroke={stroke(164)} + strokeWidth={getStrokeWidth(164)} + dataLedIndex={getLEDIndex(164)} + dataKeyIndex={keyIndex(164)} + dataLayer={layer} + path="M4.01002 39.27C3.48599 39.2307 2.97484 39.0886 2.50575 38.8517C2.03666 38.6149 1.61881 38.2879 1.27613 37.8895C0.933454 37.4911 0.672609 37.0291 0.508555 36.5299C0.3445 36.0307 0.280513 35.504 0.320078 34.98L2.62 4.06995C2.65874 3.54466 2.80055 3.03218 3.03736 2.56171C3.27417 2.09123 3.60143 1.67198 4.00025 1.32794C4.39908 0.9839 4.8617 0.721807 5.36183 0.556579C5.86195 0.391351 6.38976 0.32625 6.91505 0.36499C7.44034 0.40373 7.95287 0.545538 8.42335 0.782348C8.89383 1.01916 9.31295 1.34629 9.65699 1.74512C10.001 2.14394 10.2632 2.60668 10.4285 3.10681C10.5937 3.60694 10.6587 4.13469 10.62 4.65997L8.31007 35.58C8.23426 36.588 7.77957 37.5299 7.03749 38.2164C6.2954 38.9028 5.32095 39.2828 4.31007 39.28L4.01002 39.27Z" + /> + + { + setUndeglowIndex(163, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(163)} + stroke={stroke(163)} + strokeWidth={getStrokeWidth(163)} + dataLedIndex={getLEDIndex(163)} + dataKeyIndex={keyIndex(163)} + dataLayer={layer} + path="M4.13001 39.38C3.07353 39.3007 2.0917 38.8055 1.39991 38.0031C0.708114 37.2007 0.362935 36.1566 0.440068 35.1L2.73999 4.18001C2.81956 3.11914 3.31738 2.13329 4.12378 1.43941C4.93019 0.745521 5.97918 0.400429 7.04004 0.479994C8.10091 0.559559 9.08664 1.05732 9.78052 1.86372C10.4744 2.67013 10.8196 3.71912 10.74 4.77998L8.39002 35.69C8.31662 36.6998 7.86295 37.6442 7.12061 38.3327C6.37827 39.0212 5.4025 39.4026 4.39002 39.4L4.13001 39.38Z" + /> + + { + setUndeglowIndex(162, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(162)} + stroke={stroke(162)} + strokeWidth={getStrokeWidth(162)} + dataLedIndex={getLEDIndex(162)} + dataKeyIndex={keyIndex(162)} + dataLayer={layer} + path="M4.25001 39.5C3.72598 39.4608 3.21483 39.3186 2.74574 39.0818C2.27665 38.8449 1.8588 38.518 1.51612 38.1196C1.17344 37.7212 0.912599 37.2591 0.748545 36.7599C0.58449 36.2607 0.520503 35.734 0.560068 35.21L2.86 4.29999C2.89874 3.7747 3.04054 3.26216 3.27735 2.79169C3.51416 2.32121 3.84142 1.90196 4.24024 1.55792C4.63907 1.21388 5.10169 0.951787 5.60182 0.78656C6.10194 0.621332 6.62975 0.55623 7.15504 0.59497C7.68033 0.63371 8.19286 0.775519 8.66334 1.01233C9.13382 1.24914 9.55306 1.57633 9.8971 1.97516C10.2411 2.37399 10.5032 2.83666 10.6685 3.33679C10.8337 3.83692 10.8987 4.36467 10.86 4.88995L8.55006 35.81C8.47425 36.818 8.01956 37.76 7.27748 38.4464C6.53539 39.1328 5.56094 39.5128 4.55006 39.5099L4.25001 39.5Z" + /> + + { + setUndeglowIndex(161, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(161)} + stroke={stroke(161)} + strokeWidth={getStrokeWidth(161)} + dataLedIndex={getLEDIndex(161)} + dataKeyIndex={keyIndex(161)} + dataLayer={layer} + path="M4.39002 39.62C3.86599 39.5808 3.35484 39.4387 2.88575 39.2018C2.41666 38.965 1.99882 38.638 1.65614 38.2396C1.31346 37.8412 1.05261 37.3792 0.88856 36.8799C0.724505 36.3807 0.660518 35.854 0.700083 35.33L3.00001 4.42001C3.03875 3.89473 3.18056 3.38219 3.41737 2.91171C3.65418 2.44123 3.98131 2.02205 4.38014 1.67801C4.77896 1.33397 5.2417 1.07181 5.74183 0.906585C6.24196 0.741357 6.76977 0.676256 7.29505 0.714996C7.82034 0.753736 8.33288 0.895544 8.80335 1.13235C9.27383 1.36916 9.69296 1.69636 10.037 2.09518C10.381 2.49401 10.6433 2.95669 10.8085 3.45682C10.9737 3.95694 11.0387 4.48469 11 5.00998L8.65003 35.91C8.57663 36.9198 8.12296 37.8642 7.38062 38.5528C6.63829 39.2413 5.66252 39.6227 4.65003 39.62H4.39002Z" + /> + { + setUndeglowIndex(160, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(160)} + stroke={stroke(160)} + strokeWidth={getStrokeWidth(160)} + dataLedIndex={getLEDIndex(160)} + dataKeyIndex={keyIndex(160)} + dataLayer={layer} + path="M4.48999 39.73C3.43352 39.6507 2.45168 39.1555 1.75989 38.3531C1.0681 37.5507 0.72292 36.5066 0.800053 35.45L3.09998 4.53001C3.17955 3.46914 3.67736 2.48336 4.48377 1.78947C5.29018 1.09559 6.33916 0.750433 7.40003 0.829998C8.46089 0.909563 9.44674 1.40732 10.1406 2.21373C10.8345 3.02013 11.1795 4.06912 11.1 5.12999L8.79004 36.04C8.71423 37.0481 8.25955 37.99 7.51746 38.6764C6.77537 39.3629 5.80092 39.7429 4.79004 39.74L4.48999 39.73Z" + /> + + { + setUndeglowIndex(159, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(159)} + stroke={stroke(159)} + strokeWidth={getStrokeWidth(159)} + dataLedIndex={getLEDIndex(159)} + dataKeyIndex={keyIndex(159)} + dataLayer={layer} + path="M4.61 39.85C4.08596 39.8108 3.57481 39.6687 3.10572 39.4318C2.63663 39.1949 2.21879 38.868 1.87611 38.4696C1.53343 38.0712 1.27258 37.6091 1.10853 37.1099C0.944476 36.6107 0.880488 36.084 0.920054 35.56L2.54005 13.74C2.76005 10.74 2.89007 7.81003 2.94007 4.87003C2.95583 3.81959 3.38413 2.81751 4.13258 2.08029C4.88102 1.34307 5.88952 0.929905 6.94007 0.930023H7.00001C7.52531 0.937844 8.04394 1.04908 8.52625 1.25735C9.00857 1.46563 9.44517 1.76687 9.81104 2.14389C10.1769 2.52091 10.4649 2.96628 10.6586 3.45462C10.8523 3.94296 10.948 4.46472 10.9401 4.99002C10.9401 8.09002 10.75 11.23 10.52 14.33L8.89002 36.16C8.81421 37.168 8.35953 38.11 7.61744 38.7964C6.87535 39.4828 5.9009 39.8629 4.89002 39.86L4.61 39.85Z" + /> + + { + setUndeglowIndex(158, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(158)} + stroke={stroke(158)} + strokeWidth={getStrokeWidth(158)} + dataLedIndex={getLEDIndex(158)} + dataKeyIndex={keyIndex(158)} + dataLayer={layer} + path="M5.71995 35.16C5.14217 25.1066 3.54064 15.1384 0.940038 5.41003C0.675729 4.38791 0.826131 3.30273 1.35862 2.39111C1.8911 1.47949 2.76243 0.815374 3.78257 0.543513C4.80271 0.271652 5.88901 0.414083 6.80454 0.939814C7.72007 1.46554 8.39062 2.33193 8.67002 3.35003C11.3981 13.6063 13.0734 24.1139 13.67 34.71C13.7301 35.768 13.3679 36.8066 12.6629 37.5978C11.958 38.389 10.9679 38.8682 9.91001 38.93H9.68003C8.66476 38.9216 7.69065 38.5273 6.9553 37.8273C6.21994 37.1272 5.77829 36.1737 5.71995 35.16Z" + /> + + { + setUndeglowIndex(157, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(157)} + stroke={stroke(157)} + strokeWidth={getStrokeWidth(157)} + dataLedIndex={getLEDIndex(157)} + dataKeyIndex={keyIndex(157)} + dataLayer={layer} + path="M9.84998 35.02L0.719974 5.38998C0.540451 4.88164 0.465555 4.34226 0.499759 3.80423C0.533964 3.2662 0.676618 2.74064 0.919071 2.25912C1.16152 1.7776 1.49879 1.35004 1.91065 1.00217C2.32251 0.654293 2.80051 0.393269 3.3158 0.234771C3.83109 0.0762724 4.37301 0.0235965 4.90918 0.0798637C5.44535 0.136131 5.96464 0.300206 6.43579 0.562225C6.90695 0.824244 7.32034 1.17879 7.651 1.60458C7.98167 2.03038 8.22278 2.51865 8.35999 3.04001L17.5 32.66C17.655 33.1623 17.7095 33.6902 17.6604 34.2136C17.6113 34.737 17.4597 35.2455 17.2141 35.7103C16.9685 36.1751 16.6338 36.5869 16.229 36.9223C15.8242 37.2577 15.3573 37.51 14.855 37.665C14.3527 37.82 13.8248 37.8745 13.3014 37.8254C12.778 37.7763 12.2694 37.6247 11.8047 37.3791C11.3399 37.1334 10.9282 36.7987 10.5928 36.394C10.2574 35.9892 10.0049 35.5223 9.84998 35.02Z" + /> + + { + setUndeglowIndex(156, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(156)} + stroke={stroke(156)} + strokeWidth={getStrokeWidth(156)} + dataLedIndex={getLEDIndex(156)} + dataKeyIndex={keyIndex(156)} + dataLayer={layer} + path="M6.46997 35.91L0.609985 16.91V4.56003C0.609985 3.49916 1.03147 2.48174 1.78162 1.7316C2.53176 0.981452 3.54912 0.560028 4.60999 0.560028C5.67085 0.560028 6.68833 0.981452 7.43848 1.7316C8.18862 2.48174 8.60999 3.49916 8.60999 4.56003V15.67L14.12 33.52C14.433 34.5344 14.3301 35.6317 13.8341 36.5703C13.3381 37.5089 12.4894 38.212 11.475 38.525C10.4605 38.8379 9.3633 38.7351 8.42468 38.239C7.48606 37.743 6.78293 36.8944 6.46997 35.88V35.91Z" + /> + + { + setUndeglowIndex(155, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(155)} + stroke={stroke(155)} + strokeWidth={getStrokeWidth(155)} + dataLedIndex={getLEDIndex(155)} + dataKeyIndex={keyIndex(155)} + dataLayer={layer} + path="M0.589966 35.56V4.56003C0.589966 3.49916 1.01145 2.48171 1.7616 1.73157C2.51174 0.981422 3.5291 0.559998 4.58997 0.559998C5.65083 0.559998 6.66831 0.981422 7.41846 1.73157C8.1686 2.48171 8.58997 3.49916 8.58997 4.56003V35.56C8.58997 36.6209 8.1686 37.6383 7.41846 38.3885C6.66831 39.1386 5.65083 39.56 4.58997 39.56C3.5291 39.56 2.51174 39.1386 1.7616 38.3885C1.01145 37.6383 0.589966 36.6209 0.589966 35.56Z" + /> + + { + setUndeglowIndex(154, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(154)} + stroke={stroke(154)} + strokeWidth={getStrokeWidth(154)} + dataLedIndex={getLEDIndex(154)} + dataKeyIndex={keyIndex(154)} + dataLayer={layer} + path="M0.540039 35.56V4.56C0.540039 3.49913 0.961402 2.48171 1.71155 1.73157C2.46169 0.981422 3.47917 0.559998 4.54004 0.559998C5.6009 0.559998 6.61826 0.981422 7.36841 1.73157C8.11855 2.48171 8.54004 3.49913 8.54004 4.56V35.56C8.54004 36.6209 8.11855 37.6383 7.36841 38.3884C6.61826 39.1386 5.6009 39.56 4.54004 39.56C3.47917 39.56 2.46169 39.1386 1.71155 38.3884C0.961402 37.6383 0.540039 36.6209 0.540039 35.56Z" + /> + + { + setUndeglowIndex(153, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(153)} + stroke={stroke(153)} + strokeWidth={getStrokeWidth(153)} + dataLedIndex={getLEDIndex(153)} + dataKeyIndex={keyIndex(153)} + dataLayer={layer} + path="M0.48999 35.56V4.56C0.48999 3.49913 0.911476 2.48171 1.66162 1.73157C2.41177 0.981422 3.42912 0.559998 4.48999 0.559998C5.55086 0.559998 6.56834 0.981422 7.31848 1.73157C8.06863 2.48171 8.48999 3.49913 8.48999 4.56V35.56C8.48999 36.6209 8.06863 37.6383 7.31848 38.3884C6.56834 39.1386 5.55086 39.56 4.48999 39.56C3.42912 39.56 2.41177 39.1386 1.66162 38.3884C0.911476 37.6383 0.48999 36.6209 0.48999 35.56Z" + /> + + { + setUndeglowIndex(152, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(152)} + stroke={stroke(152)} + strokeWidth={getStrokeWidth(152)} + dataLedIndex={getLEDIndex(152)} + dataKeyIndex={keyIndex(152)} + dataLayer={layer} + path="M1.44012 35.56V13.19C1.45546 10.6886 1.11883 8.19757 0.440115 5.79C0.277654 5.28112 0.218735 4.74486 0.266897 4.21285C0.315059 3.68084 0.469303 3.16387 0.720511 2.69244C0.971718 2.221 1.31482 1.80466 1.72954 1.46798C2.14427 1.1313 2.62219 0.881096 3.13518 0.73214C3.64818 0.583184 4.18581 0.538496 4.71636 0.600701C5.24691 0.662906 5.75967 0.830744 6.22429 1.09432C6.68892 1.3579 7.09608 1.71186 7.42168 2.13534C7.74728 2.55882 7.9847 3.04324 8.12005 3.55999C9.02754 6.6893 9.48545 9.93176 9.48003 13.19V35.56C9.48003 36.6209 9.05867 37.6383 8.30852 38.3884C7.55838 39.1386 6.5409 39.56 5.48003 39.56C4.95139 39.5653 4.42699 39.4657 3.93706 39.2671C3.44713 39.0684 3.00147 38.7746 2.62578 38.4027C2.2501 38.0307 1.95186 37.588 1.74834 37.1C1.54483 36.6121 1.44009 36.0887 1.44012 35.56Z" + /> + + { + setUndeglowIndex(151, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(151)} + stroke={stroke(151)} + strokeWidth={getStrokeWidth(151)} + dataLedIndex={getLEDIndex(151)} + dataKeyIndex={keyIndex(151)} + dataLayer={layer} + path="M28.13 19.27C25.6563 15.9156 22.4268 13.1914 18.7035 11.3185C14.9802 9.44552 10.8679 8.47648 6.70007 8.48999H4.31006C3.24919 8.48999 2.23171 8.06857 1.48157 7.31842C0.731422 6.56827 0.310059 5.55086 0.310059 4.48999C0.310059 3.42912 0.731422 2.41174 1.48157 1.66159C2.23171 0.911445 3.24919 0.48999 4.31006 0.48999H6.70007C12.1095 0.506273 17.4411 1.77947 22.2743 4.20908C27.1075 6.63868 31.31 10.1582 34.55 14.49C35.1839 15.3413 35.4536 16.4096 35.2998 17.4598C35.146 18.51 34.5813 19.4561 33.73 20.09C32.8786 20.7239 31.8103 20.9936 30.7601 20.8398C29.7099 20.686 28.7639 20.1213 28.13 19.27Z" + /> + + { + setUndeglowIndex(150, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(150)} + stroke={stroke(150)} + strokeWidth={getStrokeWidth(150)} + dataLedIndex={getLEDIndex(150)} + dataKeyIndex={keyIndex(150)} + dataLayer={layer} + path="M0.310059 4.48999C0.310059 3.42912 0.731422 2.41174 1.48157 1.66159C2.23171 0.911445 3.24919 0.48999 4.31006 0.48999H35.3101C36.3709 0.48999 37.3883 0.911445 38.1384 1.66159C38.8886 2.41174 39.3101 3.42912 39.3101 4.48999C39.3101 5.55086 38.8886 6.56827 38.1384 7.31842C37.3883 8.06857 36.3709 8.48999 35.3101 8.48999H4.31006C3.24919 8.48999 2.23171 8.06857 1.48157 7.31842C0.731422 6.56827 0.310059 5.55086 0.310059 4.48999Z" + /> + { + setUndeglowIndex(149, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(149)} + stroke={stroke(149)} + strokeWidth={getStrokeWidth(149)} + dataLedIndex={getLEDIndex(149)} + dataKeyIndex={keyIndex(149)} + dataLayer={layer} + path="M2.81998 8.09C2.32071 7.88841 1.86727 7.5881 1.48685 7.20706C1.10643 6.82602 0.806888 6.3721 0.606113 5.8725C0.405338 5.3729 0.307505 4.83791 0.318454 4.29959C0.329404 3.76127 0.448909 3.23071 0.669834 2.73969C0.890759 2.24867 1.20856 1.8073 1.60416 1.44205C1.99976 1.07679 2.46503 0.795168 2.97208 0.614045C3.47913 0.432923 4.01748 0.356049 4.55497 0.388002C5.09245 0.419954 5.61799 0.560098 6.10001 0.80002C7.11388 1.25083 8.21041 1.48578 9.31998 1.48999H35.32C36.3809 1.48999 37.3983 1.91145 38.1484 2.66159C38.8986 3.41174 39.32 4.42913 39.32 5.48999C39.32 6.55086 38.8986 7.56828 38.1484 8.31842C37.3983 9.06857 36.3809 9.48999 35.32 9.48999H9.31998C7.07918 9.48364 4.86471 9.00668 2.81998 8.09Z" + /> + + { + setUndeglowIndex(148, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(148)} + stroke={stroke(148)} + strokeWidth={getStrokeWidth(148)} + dataLedIndex={getLEDIndex(148)} + dataKeyIndex={keyIndex(148)} + dataLayer={layer} + path="M28.19 22.91L15.39 12.33C12.5541 10.0105 9.00372 8.74228 5.34003 8.73999H4.60999C3.54912 8.73999 2.53176 8.31857 1.78162 7.56842C1.03147 6.81827 0.609985 5.80086 0.609985 4.73999C0.609985 3.67912 1.03147 2.66174 1.78162 1.91159C2.53176 1.16145 3.54912 0.73999 4.60999 0.73999H5.34003C10.8294 0.759917 16.1443 2.67046 20.39 6.14999L33.25 16.71C33.6584 17.0427 33.997 17.4528 34.2465 17.9167C34.4959 18.3807 34.6513 18.8893 34.7036 19.4135C34.756 19.9376 34.7043 20.4669 34.5515 20.971C34.3988 21.4751 34.1479 21.9441 33.8134 22.351C33.4789 22.7579 33.0674 23.0948 32.6024 23.3422C32.1373 23.5897 31.6281 23.7428 31.1037 23.7929C30.5793 23.843 30.0503 23.789 29.5468 23.634C29.0434 23.4791 28.5755 23.2263 28.17 22.89L28.19 22.91Z" + /> + + { + setUndeglowIndex(147, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(147)} + stroke={stroke(147)} + strokeWidth={getStrokeWidth(147)} + dataLedIndex={getLEDIndex(147)} + dataKeyIndex={keyIndex(147)} + dataLayer={layer} + path="M3 8.91001L2 8.02C1.57572 7.68665 1.22329 7.27094 0.963869 6.79783C0.704448 6.32472 0.543409 5.804 0.49048 5.26704C0.437551 4.73007 0.493831 4.18794 0.655885 3.67329C0.81794 3.15863 1.08244 2.68208 1.43347 2.27232C1.78451 1.86255 2.2148 1.52804 2.69849 1.28892C3.18218 1.04979 3.70926 0.911008 4.24799 0.880898C4.78672 0.850788 5.32593 0.929982 5.83325 1.11372C6.34058 1.29745 6.8055 1.58192 7.20001 1.95002L8.20001 2.83002C9.61956 4.04919 11.4288 4.71965 13.3 4.72001H34.56C35.6209 4.72001 36.6383 5.14143 37.3884 5.89158C38.1386 6.64172 38.56 7.65914 38.56 8.72001C38.56 9.78088 38.1386 10.7983 37.3884 11.5484C36.6383 12.2986 35.6209 12.72 34.56 12.72H13.3C9.52233 12.718 5.8696 11.3669 3 8.91001Z" + /> + { + setUndeglowIndex(146, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(146)} + stroke={stroke(146)} + strokeWidth={getStrokeWidth(146)} + dataLedIndex={getLEDIndex(146)} + dataKeyIndex={keyIndex(146)} + dataLayer={layer} + path="M28.61 19.91L19.19 11.84C16.3218 9.38082 12.6682 8.02933 8.89001 8.03H4.39001C3.32915 8.03 2.31173 7.60857 1.56158 6.85843C0.811439 6.10828 0.390015 5.09086 0.390015 4.03C0.390015 2.96913 0.811439 1.95171 1.56158 1.20157C2.31173 0.451423 3.32915 0.0299988 4.39001 0.0299988H8.92999C14.597 0.0321082 20.078 2.0529 24.39 5.73001L33.81 13.81C34.2164 14.1497 34.5514 14.5667 34.7953 15.0369C35.0393 15.5071 35.1874 16.0211 35.2311 16.549C35.2749 17.0768 35.2133 17.6081 35.05 18.1121C34.8868 18.616 34.6251 19.0824 34.2801 19.4844C33.9351 19.8863 33.5137 20.2157 33.0403 20.4535C32.567 20.6913 32.0512 20.8327 31.5228 20.8695C30.9943 20.9063 30.4638 20.8378 29.9621 20.6679C29.4604 20.498 28.9974 20.2302 28.6 19.88L28.61 19.91Z" + /> + { + setUndeglowIndex(145, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(145)} + stroke={stroke(145)} + strokeWidth={getStrokeWidth(145)} + dataLedIndex={getLEDIndex(145)} + dataKeyIndex={keyIndex(145)} + dataLayer={layer} + path="M0.390015 4C0.390015 2.93913 0.811439 1.92172 1.56158 1.17157C2.31173 0.421424 3.32915 0 4.39001 0H35.39C36.4509 0 37.4683 0.421424 38.2184 1.17157C38.9686 1.92172 39.39 2.93913 39.39 4C39.39 5.06087 38.9686 6.07828 38.2184 6.82843C37.4683 7.57858 36.4509 8 35.39 8H4.39001C3.32915 8 2.31173 7.57858 1.56158 6.82843C0.811439 6.07828 0.390015 5.06087 0.390015 4Z" + /> + + { + setUndeglowIndex(144, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(144)} + stroke={stroke(144)} + strokeWidth={getStrokeWidth(144)} + dataLedIndex={getLEDIndex(144)} + dataKeyIndex={keyIndex(144)} + dataLayer={layer} + path="M1.78005 22.33C1.13175 21.4905 0.843398 20.4279 0.978418 19.3759C1.11344 18.3239 1.66075 17.3686 2.50002 16.72L16.39 5.98001C20.5708 2.75353 25.6991 0.996079 30.9801 0.980011H31.39C32.4509 0.980011 33.4683 1.40144 34.2185 2.15158C34.9686 2.90173 35.39 3.91915 35.39 4.98001C35.39 6.04088 34.9686 7.0583 34.2185 7.80844C33.4683 8.55859 32.4509 8.98001 31.39 8.98001H31C27.4931 8.98313 24.0859 10.147 21.31 12.29L7.39004 23.05C6.55057 23.6983 5.48797 23.9866 4.43594 23.8516C3.38391 23.7166 2.4286 23.1693 1.78005 22.33Z" + /> + { + setUndeglowIndex(143, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(143)} + stroke={stroke(143)} + strokeWidth={getStrokeWidth(143)} + dataLedIndex={getLEDIndex(143)} + dataKeyIndex={keyIndex(143)} + dataLayer={layer} + path="M0.679993 6.74C0.679993 5.67913 1.10142 4.66174 1.85156 3.9116C2.60171 3.16145 3.61913 2.74 4.67999 2.74H28.47C30.0718 2.73503 31.6342 2.24332 32.95 1.33002C33.8199 0.722677 34.8955 0.485762 35.9401 0.671423C36.9846 0.857084 37.9127 1.4501 38.52 2.32001C39.1274 3.18992 39.3643 4.26546 39.1786 5.31003C38.9929 6.35461 38.3999 7.28267 37.53 7.89002C34.8681 9.73513 31.7089 10.7289 28.47 10.74H4.67999C3.61913 10.74 2.60171 10.3186 1.85156 9.56843C1.10142 8.81828 0.679993 7.80086 0.679993 6.74Z" + /> + + { + setUndeglowIndex(142, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(142)} + stroke={stroke(142)} + strokeWidth={getStrokeWidth(142)} + dataLedIndex={getLEDIndex(142)} + dataKeyIndex={keyIndex(142)} + dataLayer={layer} + path="M0.679993 4.73999C0.679993 3.67912 1.10142 2.66174 1.85156 1.91159C2.60171 1.16145 3.61913 0.73999 4.67999 0.73999H35.68C36.7409 0.73999 37.7583 1.16145 38.5084 1.91159C39.2586 2.66174 39.68 3.67912 39.68 4.73999C39.68 5.80086 39.2586 6.81827 38.5084 7.56842C37.7583 8.31857 36.7409 8.73999 35.68 8.73999H4.67999C3.61913 8.73999 2.60171 8.31857 1.85156 7.56842C1.10142 6.81827 0.679993 5.80086 0.679993 4.73999Z" + /> + + { + setUndeglowIndex(141, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(141)} + stroke={stroke(141)} + strokeWidth={getStrokeWidth(141)} + dataLedIndex={getLEDIndex(141)} + dataKeyIndex={keyIndex(141)} + dataLayer={layer} + path="M1.51003 25.84C1.14397 25.4626 0.855923 25.0168 0.66231 24.528C0.468696 24.0392 0.373311 23.517 0.38167 22.9913C0.390029 22.4656 0.501959 21.9468 0.711016 21.4644C0.920072 20.982 1.22218 20.5455 1.60005 20.18L15.3 6.91C18.8166 3.46988 23.4035 1.33522 28.3 0.86001C28.8253 0.807481 29.3558 0.858919 29.8612 1.01141C30.3666 1.1639 30.837 1.41445 31.2456 1.74874C31.6542 2.08303 31.9929 2.49451 32.2424 2.95971C32.492 3.42491 32.6475 3.9347 32.7 4.45999C32.7526 4.98527 32.7011 5.51577 32.5486 6.02117C32.3961 6.52658 32.1456 6.99699 31.8113 7.40557C31.477 7.81415 31.0655 8.15288 30.6003 8.40243C30.1351 8.65198 29.6253 8.80748 29.1001 8.86001C26.0072 9.16481 23.1109 10.5159 20.89 12.69L7.17006 25.91C6.79269 26.2761 6.34685 26.5641 5.85805 26.7577C5.36925 26.9514 4.84705 27.0467 4.32137 27.0384C3.79569 27.03 3.27685 26.9181 2.79445 26.709C2.31206 26.5 1.87557 26.1979 1.51003 25.82V25.84Z" + /> + + { + setUndeglowIndex(140, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(140)} + stroke={stroke(140)} + strokeWidth={getStrokeWidth(140)} + dataLedIndex={getLEDIndex(140)} + dataKeyIndex={keyIndex(140)} + dataLayer={layer} + path="M0.630005 10.39C0.630005 9.32914 1.05143 8.31172 1.80157 7.56157C2.55172 6.81143 3.56914 6.39 4.63 6.39H25.98L30.7 1.80999C31.4625 1.07136 32.4872 0.665879 33.5486 0.682758C34.6101 0.699636 35.6214 1.13748 36.36 1.89998C37.0986 2.66248 37.5041 3.68719 37.4872 4.74864C37.4704 5.8101 37.0325 6.82136 36.27 7.55999L31.55 12.13C30.076 13.5659 28.0978 14.3666 26.04 14.36H4.63C3.57432 14.36 2.56142 13.9427 1.81213 13.1991C1.06284 12.4554 0.637923 11.4457 0.630005 10.39Z" + /> + + { + setUndeglowIndex(139, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(139)} + stroke={stroke(139)} + strokeWidth={getStrokeWidth(139)} + dataLedIndex={getLEDIndex(139)} + dataKeyIndex={keyIndex(139)} + dataLayer={layer} + path="M3.39002 30.32C2.34529 30.1392 1.41507 29.551 0.803782 28.6847C0.192496 27.8184 -0.0498507 26.7449 0.130015 25.7C1.16936 19.846 3.8225 14.3985 7.79066 9.97097C11.7588 5.54345 16.8844 2.31182 22.59 0.640009C23.0989 0.477548 23.6352 0.41866 24.1672 0.466822C24.6992 0.514984 25.2161 0.669197 25.6876 0.920405C26.159 1.17161 26.5754 1.51471 26.9121 1.92944C27.2487 2.34417 27.4989 2.82214 27.6479 3.33514C27.7969 3.84814 27.8415 4.38576 27.7793 4.91632C27.7171 5.44687 27.5493 5.95959 27.2857 6.42422C27.0221 6.88885 26.6682 7.29597 26.2447 7.62158C25.8212 7.94718 25.3368 8.18466 24.82 8.32C20.5519 9.57027 16.7173 11.9866 13.7476 15.2973C10.7779 18.608 8.79087 22.6816 8.01002 27.06C7.82924 28.1047 7.24107 29.0349 6.37477 29.6462C5.50846 30.2575 4.43492 30.4999 3.39002 30.32V30.32Z" + /> + + { + setUndeglowIndex(138, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(138)} + stroke={stroke(138)} + strokeWidth={getStrokeWidth(138)} + dataLedIndex={getLEDIndex(138)} + dataKeyIndex={keyIndex(138)} + dataLayer={layer} + path="M0.690002 35.36V4.36002C0.690002 3.29915 1.11143 2.28173 1.86157 1.53159C2.61172 0.78144 3.62914 0.360016 4.69 0.360016C5.75087 0.360016 6.76829 0.78144 7.51843 1.53159C8.26858 2.28173 8.69 3.29915 8.69 4.36002V35.36C8.69 36.4209 8.26858 37.4383 7.51843 38.1884C6.76829 38.9386 5.75087 39.36 4.69 39.36C3.62914 39.36 2.61172 38.9386 1.86157 38.1884C1.11143 37.4383 0.690002 36.4209 0.690002 35.36Z" + /> + + { + setUndeglowIndex(137, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(137)} + stroke={stroke(137)} + strokeWidth={getStrokeWidth(137)} + dataLedIndex={getLEDIndex(137)} + dataKeyIndex={keyIndex(137)} + dataLayer={layer} + path="M0.690002 35.36V4.36002C0.690002 3.29915 1.11143 2.28173 1.86157 1.53159C2.61172 0.78144 3.62914 0.360016 4.69 0.360016C5.75087 0.360016 6.76829 0.78144 7.51843 1.53159C8.26858 2.28173 8.69 3.29915 8.69 4.36002V35.36C8.69 36.4209 8.26858 37.4383 7.51843 38.1884C6.76829 38.9386 5.75087 39.36 4.69 39.36C3.62914 39.36 2.61172 38.9386 1.86157 38.1884C1.11143 37.4383 0.690002 36.4209 0.690002 35.36Z" + /> + + { + setUndeglowIndex(136, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(136)} + stroke={stroke(136)} + strokeWidth={getStrokeWidth(136)} + dataLedIndex={getLEDIndex(136)} + dataKeyIndex={keyIndex(136)} + dataLayer={layer} + path="M0.690002 35.36V4.36002C0.690002 3.29915 1.11143 2.28173 1.86157 1.53159C2.61172 0.78144 3.62914 0.360016 4.69 0.360016C5.75087 0.360016 6.76829 0.78144 7.51843 1.53159C8.26858 2.28173 8.69 3.29915 8.69 4.36002V35.36C8.69 36.4209 8.26858 37.4383 7.51843 38.1884C6.76829 38.9386 5.75087 39.36 4.69 39.36C3.62914 39.36 2.61172 38.9386 1.86157 38.1884C1.11143 37.4383 0.690002 36.4209 0.690002 35.36Z" + /> + + { + setUndeglowIndex(135, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(135)} + stroke={stroke(135)} + strokeWidth={getStrokeWidth(135)} + dataLedIndex={getLEDIndex(135)} + dataKeyIndex={keyIndex(135)} + dataLayer={layer} + path="M0.690002 35.36V4.36002C0.690002 3.29915 1.11143 2.28173 1.86157 1.53159C2.61172 0.78144 3.62914 0.360016 4.69 0.360016C5.75087 0.360016 6.76829 0.78144 7.51843 1.53159C8.26858 2.28173 8.69 3.29915 8.69 4.36002V35.36C8.69 36.4209 8.26858 37.4383 7.51843 38.1884C6.76829 38.9386 5.75087 39.36 4.69 39.36C3.62914 39.36 2.61172 38.9386 1.86157 38.1884C1.11143 37.4383 0.690002 36.4209 0.690002 35.36Z" + /> + { + setUndeglowIndex(134, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(134)} + stroke={stroke(134)} + strokeWidth={getStrokeWidth(134)} + dataLedIndex={getLEDIndex(134)} + dataKeyIndex={keyIndex(134)} + dataLayer={layer} + path="M4.48996 39.35C3.96457 39.3319 3.44793 39.2105 2.96951 38.9926C2.4911 38.7747 2.06031 38.4646 1.70181 38.0801C1.34332 37.6956 1.06413 37.2442 0.88022 36.7517C0.696306 36.2593 0.611266 35.7354 0.629976 35.21C0.629976 34.05 0.689973 32.88 0.689973 31.72V4.36002C0.689973 3.29915 1.1114 2.28173 1.86154 1.53159C2.61169 0.78144 3.62911 0.360016 4.68997 0.360016C5.75084 0.360016 6.76826 0.78144 7.5184 1.53159C8.26855 2.28173 8.68997 3.29915 8.68997 4.36002V31.72C8.68997 32.98 8.66998 34.24 8.62998 35.5C8.59368 36.5364 8.15631 37.5182 7.41007 38.2384C6.66382 38.9585 5.66703 39.3607 4.62998 39.36L4.48996 39.35Z" + /> + { + setUndeglowIndex(133, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(133)} + stroke={stroke(133)} + strokeWidth={getStrokeWidth(133)} + dataLedIndex={getLEDIndex(133)} + dataKeyIndex={keyIndex(133)} + dataLayer={layer} + path="M2.90004 38.16C1.88244 37.867 1.02256 37.1824 0.508925 36.2564C-0.00470662 35.3303 -0.130154 34.2384 0.160048 33.22L4.88002 16.82C6.11099 12.525 7.0498 8.15173 7.69002 3.72999C7.84252 2.67973 8.40601 1.73308 9.25648 1.09827C10.107 0.463464 11.1748 0.192479 12.225 0.344978C13.2753 0.497478 14.222 1.06097 14.8568 1.91145C15.4916 2.76192 15.7625 3.82969 15.61 4.87995C14.9303 9.65889 13.928 14.3864 12.61 19.03L7.89003 35.43C7.6495 36.2627 7.14501 36.9948 6.45247 37.516C5.75992 38.0372 4.91677 38.3193 4.05 38.32C3.6608 38.3248 3.27314 38.2708 2.90004 38.16Z" + /> + { + setUndeglowIndex(132, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(132)} + stroke={stroke(132)} + strokeWidth={getStrokeWidth(132)} + dataLedIndex={getLEDIndex(132)} + dataKeyIndex={keyIndex(132)} + dataLayer={layer} + path="M3.30002 38.53C2.7895 38.3853 2.3129 38.1405 1.89792 37.8098C1.48293 37.4792 1.13791 37.0692 0.882904 36.6038C0.6279 36.1385 0.467991 35.6271 0.412567 35.0994C0.357143 34.5717 0.407266 34.0382 0.560028 33.53L9.12003 3.74002C9.26514 3.23508 9.50831 2.76365 9.8356 2.35269C10.1629 1.94172 10.5679 1.59925 11.0276 1.34481C11.4872 1.09038 11.9925 0.929004 12.5145 0.869839C13.0365 0.810675 13.5651 0.854916 14.07 1.00003C14.575 1.14514 15.0464 1.38825 15.4574 1.71554C15.8683 2.04284 16.2108 2.44785 16.4652 2.9075C16.7197 3.36715 16.8811 3.87247 16.9402 4.3945C16.9994 4.91653 16.9551 5.44505 16.81 5.94998L8.25003 35.74C8.01132 36.5746 7.50762 37.3089 6.81491 37.832C6.1222 38.3551 5.27812 38.6387 4.41006 38.64C4.03669 38.6571 3.66277 38.6201 3.30002 38.53Z" + /> + { + setUndeglowIndex(131, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(131)} + stroke={stroke(131)} + strokeWidth={getStrokeWidth(131)} + dataLedIndex={getLEDIndex(131)} + dataKeyIndex={keyIndex(131)} + dataLayer={layer} + path="M1.85004 70.74C-0.540135 60.0598 -0.615183 48.9916 1.63001 38.28C1.85001 37.28 2.63002 33.95 2.96002 32.95L11.52 3.14999C11.6651 2.64506 11.9082 2.17369 12.2355 1.76272C12.5628 1.35176 12.9679 1.00928 13.4276 0.754849C13.8872 0.500416 14.3925 0.338977 14.9145 0.279812C15.4365 0.220648 15.9651 0.26489 16.47 0.41C16.975 0.555111 17.4463 0.798282 17.8573 1.12558C18.2683 1.45287 18.6107 1.85788 18.8652 2.31753C19.1196 2.77718 19.281 3.28244 19.3402 3.80447C19.3994 4.3265 19.3551 4.85508 19.21 5.36001L10.65 35.16C10.38 36.06 9.65002 39.01 9.46002 39.93C8.49144 44.5338 8.00214 49.2255 8 53.93C8.00451 58.9756 8.56119 64.0055 9.66004 68.93C9.89346 69.9615 9.70887 71.0435 9.14667 71.9392C8.58447 72.835 7.69042 73.4717 6.66003 73.71C6.37387 73.7696 6.08235 73.7998 5.79004 73.8C4.88377 73.8118 4.00036 73.5154 3.28455 72.9595C2.56873 72.4036 2.06295 71.621 1.85004 70.74Z" + /> + { + setUndeglowIndex(130, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(130)} + stroke={stroke(130)} + strokeWidth={getStrokeWidth(130)} + dataLedIndex={getLEDIndex(130)} + dataKeyIndex={keyIndex(130)} + dataLayer={layer} + path="M19.01 32.97C11.1997 25.304 5.12914 16.0481 1.21003 5.82996C1.00291 5.33661 0.896879 4.80674 0.898206 4.27167C0.899532 3.73661 1.00816 3.20723 1.21772 2.71491C1.42729 2.22259 1.73351 1.77732 2.11824 1.40546C2.50297 1.0336 2.95843 0.742698 3.45759 0.549993C3.95675 0.357287 4.4895 0.266706 5.0243 0.283574C5.55911 0.300443 6.08509 0.424419 6.57112 0.648198C7.05714 0.871978 7.4933 1.191 7.85383 1.58637C8.21436 1.98174 8.49193 2.44541 8.67006 2.94996C12.1986 12.1068 17.6553 20.3976 24.6701 27.26C25.4272 28.0039 25.8579 29.0181 25.8673 30.0796C25.8766 31.1411 25.464 32.1628 24.72 32.92C23.9761 33.6772 22.9619 34.1078 21.9004 34.1172C20.8389 34.1266 19.8172 33.7139 19.06 32.97H19.01Z" + /> + { + setUndeglowIndex(129, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(129)} + stroke={stroke(129)} + strokeWidth={getStrokeWidth(129)} + dataLedIndex={getLEDIndex(129)} + dataKeyIndex={keyIndex(129)} + dataLayer={layer} + path="M26.75 25.91L1.83003 7.45997C0.977354 6.82875 0.410324 5.88466 0.253731 4.8354C0.0971385 3.78613 0.363788 2.71767 0.995003 1.865C1.62622 1.01233 2.57031 0.445297 3.61958 0.288704C4.66884 0.132112 5.73736 0.398761 6.59003 1.02998L31.51 19.48C32.3627 20.1112 32.9297 21.0553 33.0863 22.1046C33.2429 23.1538 32.9763 24.2223 32.345 25.075C31.7138 25.9276 30.7697 26.4947 29.7205 26.6513C28.6712 26.8078 27.6027 26.5412 26.75 25.91Z" + /> + { + setUndeglowIndex(128, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(128)} + stroke={stroke(128)} + strokeWidth={getStrokeWidth(128)} + dataLedIndex={getLEDIndex(128)} + dataKeyIndex={keyIndex(128)} + dataLayer={layer} + path="M20.87 29.34C15.9182 20.8166 9.34845 13.3432 1.53003 7.33996C0.72352 6.68329 0.204462 5.73834 0.0829507 4.70543C-0.0385602 3.67252 0.246987 2.6329 0.879093 1.807C1.5112 0.981097 2.44015 0.433886 3.46894 0.281362C4.49773 0.128838 5.54548 0.383002 6.39002 0.98998C15.0349 7.60727 22.3014 15.8521 27.78 25.2599C28.2335 26.1707 28.3228 27.2201 28.0299 28.1944C27.737 29.1688 27.0838 29.9949 26.2033 30.5046C25.3227 31.0143 24.281 31.1693 23.2902 30.9381C22.2994 30.7069 21.434 30.1068 20.87 29.2599V29.34Z" + /> + { + setUndeglowIndex(127, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(127)} + stroke={stroke(127)} + strokeWidth={getStrokeWidth(127)} + dataLedIndex={getLEDIndex(127)} + dataKeyIndex={keyIndex(127)} + dataLayer={layer} + path="M8.49002 35.98L4.06002 17.66C3.15528 13.908 1.96515 10.2306 0.500027 6.65998C0.253419 6.16666 0.111481 5.62765 0.0831571 5.07685C0.0548333 4.52605 0.140772 3.97538 0.335476 3.45936C0.530181 2.94334 0.829446 2.47312 1.21457 2.07832C1.59969 1.68351 2.0623 1.37262 2.57333 1.16517C3.08436 0.957715 3.63277 0.858227 4.18411 0.872871C4.73544 0.887514 5.27777 1.01603 5.77707 1.25031C6.27636 1.4846 6.72186 1.81957 7.08548 2.23426C7.4491 2.64895 7.723 3.13435 7.89004 3.65998C9.51426 7.59564 10.8315 11.6511 11.83 15.79L16.27 34.11C16.393 34.6242 16.4129 35.1577 16.3283 35.6797C16.2438 36.2016 16.0566 36.7017 15.7776 37.1508C15.4986 37.6 15.1334 37.9894 14.703 38.2965C14.2725 38.6036 13.7855 38.8223 13.27 38.94C12.9583 39.0111 12.6398 39.048 12.32 39.05C11.4313 39.0366 10.5723 38.7274 9.87875 38.1715C9.1852 37.6156 8.69658 36.8445 8.49002 35.98Z" + /> + + { + setUndeglowIndex(126, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(126)} + stroke={stroke(126)} + strokeWidth={getStrokeWidth(126)} + dataLedIndex={getLEDIndex(126)} + dataKeyIndex={keyIndex(126)} + dataLayer={layer} + path="M8.39 35.8L1.10002 5.66999C0.953663 5.15217 0.913284 4.61015 0.981309 4.07636C1.04933 3.54258 1.22435 3.02798 1.4959 2.56342C1.76745 2.09886 2.12996 1.69387 2.56169 1.37269C2.99343 1.0515 3.48552 0.820767 4.00853 0.694221C4.53154 0.567675 5.0747 0.547947 5.60552 0.636237C6.13633 0.724528 6.64388 0.91898 7.09776 1.20801C7.55165 1.49705 7.94254 1.87472 8.24706 2.31837C8.55158 2.76201 8.76343 3.26254 8.86998 3.78998L16.14 33.91C16.3902 34.9403 16.221 36.0278 15.6697 36.9335C15.1184 37.8392 14.2301 38.489 13.2 38.74C12.8882 38.8105 12.5697 38.8474 12.25 38.85C11.3588 38.8443 10.495 38.5411 9.7957 37.9885C9.09641 37.436 8.60165 36.6657 8.39 35.8Z" + /> + + { + setUndeglowIndex(125, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(125)} + stroke={stroke(125)} + strokeWidth={getStrokeWidth(125)} + dataLedIndex={getLEDIndex(125)} + dataKeyIndex={keyIndex(125)} + dataLayer={layer} + path="M8.24999 35.62L0.960007 5.49C0.813648 4.97218 0.77327 4.43015 0.841294 3.89637C0.909319 3.36258 1.08433 2.84799 1.35588 2.38343C1.62743 1.91887 1.98994 1.51388 2.42168 1.1927C2.85341 0.871511 3.3455 0.640774 3.86852 0.514228C4.39153 0.387682 4.93469 0.367955 5.4655 0.456245C5.99631 0.544535 6.50386 0.738988 6.95775 1.02802C7.41164 1.31706 7.80252 1.69473 8.10704 2.13837C8.41156 2.58202 8.62348 3.08254 8.73003 3.60999L16.02 33.74C16.143 34.2542 16.1628 34.7878 16.0783 35.3097C15.9938 35.8316 15.8066 36.3317 15.5276 36.7808C15.2486 37.23 14.8833 37.6194 14.4529 37.9265C14.0225 38.2336 13.5355 38.4523 13.02 38.57C12.7125 38.646 12.3967 38.683 12.08 38.68C11.1926 38.6671 10.3347 38.3595 9.64128 37.8055C8.94791 37.2515 8.45845 36.4827 8.24999 35.62Z" + /> + { + setUndeglowIndex(124, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(124)} + stroke={stroke(124)} + strokeWidth={getStrokeWidth(124)} + dataLedIndex={getLEDIndex(124)} + dataKeyIndex={keyIndex(124)} + dataLayer={layer} + path="M9.00999 35.9699C7.94544 33.6531 7.10819 31.2385 6.50999 28.7599L0.829993 5.30997C0.58069 4.27828 0.751431 3.18977 1.30466 2.28397C1.8579 1.37817 2.74831 0.72926 3.78001 0.479957C4.8117 0.230653 5.90014 0.401395 6.80595 0.954627C7.71175 1.50786 8.36066 2.39828 8.60996 3.42997L14.28 26.8799C14.7583 28.8602 15.4281 30.7893 16.28 32.6399C16.5176 33.1198 16.6563 33.6425 16.6881 34.177C16.72 34.7115 16.6441 35.2469 16.4652 35.7516C16.2862 36.2562 16.0078 36.7197 15.6463 37.1148C15.2849 37.5098 14.8478 37.8283 14.361 38.0512C13.8742 38.2742 13.3476 38.3972 12.8124 38.4129C12.2771 38.4286 11.7442 38.3367 11.2452 38.1426C10.7462 37.9485 10.2912 37.6561 9.90726 37.2829C9.52331 36.9097 9.21818 36.4633 9.00999 35.9699Z" + /> + + { + setUndeglowIndex(123, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(123)} + stroke={stroke(123)} + strokeWidth={getStrokeWidth(123)} + dataLedIndex={getLEDIndex(123)} + dataKeyIndex={keyIndex(123)} + dataLayer={layer} + path="M1.75002 7.12992C1.06076 6.3433 0.707007 5.318 0.764548 4.27372C0.822088 3.22943 1.28637 2.24925 2.05788 1.54313C2.82939 0.837 3.84677 0.46115 4.89205 0.496068C5.93733 0.530986 6.92738 0.973854 7.65005 1.72989C10.5904 4.91751 14.1592 7.46155 18.1314 9.20157C22.1037 10.9416 26.3934 11.84 30.7301 11.84H32.4701C33.5309 11.84 34.5483 12.2614 35.2985 13.0115C36.0486 13.7617 36.4701 14.7791 36.4701 15.84C36.4701 16.9009 36.0486 17.9182 35.2985 18.6684C34.5483 19.4185 33.5309 19.84 32.4701 19.84H30.7301C25.2833 19.8402 19.8957 18.7108 14.9076 16.5231C9.91945 14.3354 5.43927 11.137 1.75002 7.12992Z" + /> + + { + setUndeglowIndex(175, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(175)} + stroke={stroke(175)} + strokeWidth={getStrokeWidth(175)} + dataLedIndex={getLEDIndex(175)} + dataKeyIndex={keyIndex(175)} + dataLayer={layer} + path="M0.470032 4.84003C0.470032 3.77916 0.891456 2.76168 1.6416 2.01154C2.39175 1.26139 3.40917 0.840027 4.47003 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2985 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2985 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003H4.47003C3.40917 8.84003 2.39175 8.41854 1.6416 7.6684C0.891456 6.91825 0.470032 5.90089 0.470032 4.84003Z" + /> + + { + setUndeglowIndex(174, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(174)} + stroke={stroke(174)} + strokeWidth={getStrokeWidth(174)} + dataLedIndex={getLEDIndex(174)} + dataKeyIndex={keyIndex(174)} + dataLayer={layer} + path="M0.470032 4.84003C0.470032 3.77916 0.891456 2.76168 1.6416 2.01154C2.39175 1.26139 3.40917 0.840027 4.47003 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2985 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2985 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003H4.47003C3.40917 8.84003 2.39175 8.41854 1.6416 7.6684C0.891456 6.91825 0.470032 5.90089 0.470032 4.84003Z" + /> + + { + setUndeglowIndex(173, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(173)} + stroke={stroke(173)} + strokeWidth={getStrokeWidth(173)} + dataLedIndex={getLEDIndex(173)} + dataKeyIndex={keyIndex(173)} + dataLayer={layer} + path="M0.470032 4.84003C0.470032 3.77916 0.891456 2.76168 1.6416 2.01154C2.39175 1.26139 3.40917 0.840027 4.47003 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2985 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2985 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003H4.47003C3.40917 8.84003 2.39175 8.41854 1.6416 7.6684C0.891456 6.91825 0.470032 5.90089 0.470032 4.84003Z" + /> + + { + setUndeglowIndex(172, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(172)} + stroke={stroke(172)} + strokeWidth={getStrokeWidth(172)} + dataLedIndex={getLEDIndex(172)} + dataKeyIndex={keyIndex(172)} + dataLayer={layer} + path="M0.470032 4.84003C0.470032 3.77916 0.891456 2.76168 1.6416 2.01154C2.39175 1.26139 3.40917 0.840027 4.47003 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2985 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2985 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003H4.47003C3.40917 8.84003 2.39175 8.41854 1.6416 7.6684C0.891456 6.91825 0.470032 5.90089 0.470032 4.84003Z" + /> + { + setUndeglowIndex(171, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(171)} + stroke={stroke(171)} + strokeWidth={getStrokeWidth(171)} + dataLedIndex={getLEDIndex(171)} + dataKeyIndex={keyIndex(171)} + dataLayer={layer} + path="M0.470032 4.84003C0.470032 3.77916 0.891456 2.76168 1.6416 2.01154C2.39175 1.26139 3.40917 0.840027 4.47003 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2985 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2985 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003H4.47003C3.40917 8.84003 2.39175 8.41854 1.6416 7.6684C0.891456 6.91825 0.470032 5.90089 0.470032 4.84003Z" + /> + { + setUndeglowIndex(170, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(170)} + stroke={stroke(170)} + strokeWidth={getStrokeWidth(170)} + dataLedIndex={getLEDIndex(170)} + dataKeyIndex={keyIndex(170)} + dataLayer={layer} + path="M0.469971 4.84003C0.469971 3.77916 0.891395 2.76168 1.64154 2.01154C2.39169 1.26139 3.4091 0.840027 4.46997 0.840027H35.47C36.5308 0.840027 37.5483 1.26139 38.2984 2.01154C39.0485 2.76168 39.4699 3.77916 39.4699 4.84003C39.4699 5.90089 39.0485 6.91825 38.2984 7.6684C37.5483 8.41854 36.5308 8.84003 35.47 8.84003H4.46997C3.4091 8.84003 2.39169 8.41854 1.64154 7.6684C0.891395 6.91825 0.469971 5.90089 0.469971 4.84003Z" + /> + { + setUndeglowIndex(169, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(169)} + stroke={stroke(169)} + strokeWidth={getStrokeWidth(169)} + dataLedIndex={getLEDIndex(169)} + dataKeyIndex={keyIndex(169)} + dataLayer={layer} + path="M0.469971 4.84003C0.469971 3.77916 0.891456 2.76168 1.6416 2.01154C2.39175 1.26139 3.4091 0.840027 4.46997 0.840027H35.47C36.5308 0.840027 37.5483 1.26139 38.2985 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2985 7.6684C37.5483 8.41854 36.5308 8.84003 35.47 8.84003H4.46997C3.4091 8.84003 2.39175 8.41854 1.6416 7.6684C0.891456 6.91825 0.469971 5.90089 0.469971 4.84003Z" + /> + { + setUndeglowIndex(168, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(168)} + stroke={stroke(168)} + strokeWidth={getStrokeWidth(168)} + dataLedIndex={getLEDIndex(168)} + dataKeyIndex={keyIndex(168)} + dataLayer={layer} + path="M0.469917 4.84006C0.469917 3.77919 0.891402 2.76171 1.64155 2.01157C2.39169 1.26142 3.40905 0.840058 4.46992 0.840058H31.53C32.6961 0.838229 33.8612 0.771386 35.02 0.639985C36.0808 0.521964 37.1451 0.830227 37.9787 1.49692C38.8123 2.16361 39.3469 3.13417 39.4649 4.19504C39.5829 5.2559 39.2748 6.32018 38.6081 7.15378C37.9414 7.98738 36.9708 8.52196 35.91 8.63999C34.4556 8.80328 32.9934 8.88674 31.53 8.88999H4.46992C3.9404 8.89003 3.41615 8.78492 2.92756 8.58078C2.43897 8.37664 1.99582 8.07752 1.62373 7.70078C1.25163 7.32403 0.958009 6.87717 0.759956 6.38608C0.561903 5.89499 0.463298 5.36954 0.469917 4.84006Z" + /> - { - setUndeglowIndex(167, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(167)} - stroke={stroke(167)} - strokeWidth={getStrokeWidth(167)} - dataLedIndex={getLEDIndex(167)} - dataKeyIndex={keyIndex(167)} - dataLayer={layer} - path="M0.390066 29.3499C-0.0459419 28.3832 -0.0801932 27.2829 0.294851 26.291C0.669895 25.299 1.42353 24.4965 2.39007 24.06C6.58462 22.166 10.3124 19.3745 13.3102 15.8824C16.3081 12.3904 18.503 8.28294 19.74 3.84997C20.0238 2.82756 20.7022 1.95979 21.6258 1.4375C22.5494 0.915209 23.6427 0.781219 24.6651 1.065C25.6875 1.34878 26.5553 2.02707 27.0776 2.95068C27.5999 3.8743 27.7339 4.96758 27.4501 5.98999C25.9012 11.5513 23.1492 16.7043 19.3891 21.0848C15.629 25.4653 10.9525 28.9663 5.69011 31.34C4.72337 31.776 3.62302 31.8103 2.63103 31.4352C1.63904 31.0602 0.836564 30.3066 0.400076 29.34L0.390066 29.3499Z" - /> - { - setUndeglowIndex(166, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(166)} - stroke={stroke(166)} - strokeWidth={getStrokeWidth(166)} - dataLedIndex={getLEDIndex(166)} - dataKeyIndex={keyIndex(166)} - dataLayer={layer} - path="M3.77002 39.04C3.24598 39.0007 2.73484 38.8586 2.26575 38.6218C1.79665 38.3849 1.37881 38.0579 1.03613 37.6595C0.693452 37.2611 0.432607 36.7991 0.268553 36.2999C0.104498 35.8006 0.0403886 35.274 0.0799541 34.75L2.38 3.83997C2.41874 3.31468 2.56055 2.80214 2.79736 2.33166C3.03417 1.86119 3.3613 1.442 3.76013 1.09796C4.15896 0.75392 4.6217 0.491765 5.12182 0.326538C5.62195 0.16131 6.14976 0.0962082 6.67505 0.134948C7.20033 0.173688 7.71287 0.315558 8.18335 0.552368C8.65382 0.789177 9.07295 1.11631 9.41699 1.51514C9.76103 1.91396 10.0232 2.37664 10.1885 2.87677C10.3537 3.3769 10.4187 3.9047 10.38 4.42999L8.07007 35.34C7.99667 36.3498 7.543 37.2942 6.80066 37.9827C6.05832 38.6712 5.08255 39.0527 4.07007 39.05L3.77002 39.04Z" - /> - - { - setUndeglowIndex(165, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(165)} - stroke={stroke(165)} - strokeWidth={getStrokeWidth(165)} - dataLedIndex={getLEDIndex(165)} - dataKeyIndex={keyIndex(165)} - dataLayer={layer} - path="M3.89002 39.15C2.83354 39.0707 1.85171 38.5755 1.15992 37.7731C0.468124 36.9707 0.122944 35.9266 0.200077 34.87L2.5 3.94996C2.57957 2.8891 3.07726 1.90331 3.88367 1.20942C4.69008 0.51554 5.73919 0.170448 6.80005 0.250013C7.86092 0.329578 8.84665 0.827274 9.54053 1.63368C10.2344 2.44009 10.5796 3.48914 10.5 4.55L8.19007 35.46C8.11425 36.468 7.65957 37.41 6.91748 38.0964C6.1754 38.7828 5.20095 39.1628 4.19007 39.16L3.89002 39.15Z" - /> - { - setUndeglowIndex(164, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(164)} - stroke={stroke(164)} - strokeWidth={getStrokeWidth(164)} - dataLedIndex={getLEDIndex(164)} - dataKeyIndex={keyIndex(164)} - dataLayer={layer} - path="M4.01002 39.27C3.48599 39.2307 2.97484 39.0886 2.50575 38.8517C2.03666 38.6149 1.61881 38.2879 1.27613 37.8895C0.933454 37.4911 0.672609 37.0291 0.508555 36.5299C0.3445 36.0307 0.280513 35.504 0.320078 34.98L2.62 4.06995C2.65874 3.54466 2.80055 3.03218 3.03736 2.56171C3.27417 2.09123 3.60143 1.67198 4.00025 1.32794C4.39908 0.9839 4.8617 0.721807 5.36183 0.556579C5.86195 0.391351 6.38976 0.32625 6.91505 0.36499C7.44034 0.40373 7.95287 0.545538 8.42335 0.782348C8.89383 1.01916 9.31295 1.34629 9.65699 1.74512C10.001 2.14394 10.2632 2.60668 10.4285 3.10681C10.5937 3.60694 10.6587 4.13469 10.62 4.65997L8.31007 35.58C8.23426 36.588 7.77957 37.5299 7.03749 38.2164C6.2954 38.9028 5.32095 39.2828 4.31007 39.28L4.01002 39.27Z" - /> - - { - setUndeglowIndex(163, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(163)} - stroke={stroke(163)} - strokeWidth={getStrokeWidth(163)} - dataLedIndex={getLEDIndex(163)} - dataKeyIndex={keyIndex(163)} - dataLayer={layer} - path="M4.13001 39.38C3.07353 39.3007 2.0917 38.8055 1.39991 38.0031C0.708114 37.2007 0.362935 36.1566 0.440068 35.1L2.73999 4.18001C2.81956 3.11914 3.31738 2.13329 4.12378 1.43941C4.93019 0.745521 5.97918 0.400429 7.04004 0.479994C8.10091 0.559559 9.08664 1.05732 9.78052 1.86372C10.4744 2.67013 10.8196 3.71912 10.74 4.77998L8.39002 35.69C8.31662 36.6998 7.86295 37.6442 7.12061 38.3327C6.37827 39.0212 5.4025 39.4026 4.39002 39.4L4.13001 39.38Z" - /> - - { - setUndeglowIndex(162, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(162)} - stroke={stroke(162)} - strokeWidth={getStrokeWidth(162)} - dataLedIndex={getLEDIndex(162)} - dataKeyIndex={keyIndex(162)} - dataLayer={layer} - path="M4.25001 39.5C3.72598 39.4608 3.21483 39.3186 2.74574 39.0818C2.27665 38.8449 1.8588 38.518 1.51612 38.1196C1.17344 37.7212 0.912599 37.2591 0.748545 36.7599C0.58449 36.2607 0.520503 35.734 0.560068 35.21L2.86 4.29999C2.89874 3.7747 3.04054 3.26216 3.27735 2.79169C3.51416 2.32121 3.84142 1.90196 4.24024 1.55792C4.63907 1.21388 5.10169 0.951787 5.60182 0.78656C6.10194 0.621332 6.62975 0.55623 7.15504 0.59497C7.68033 0.63371 8.19286 0.775519 8.66334 1.01233C9.13382 1.24914 9.55306 1.57633 9.8971 1.97516C10.2411 2.37399 10.5032 2.83666 10.6685 3.33679C10.8337 3.83692 10.8987 4.36467 10.86 4.88995L8.55006 35.81C8.47425 36.818 8.01956 37.76 7.27748 38.4464C6.53539 39.1328 5.56094 39.5128 4.55006 39.5099L4.25001 39.5Z" - /> - - { - setUndeglowIndex(161, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(161)} - stroke={stroke(161)} - strokeWidth={getStrokeWidth(161)} - dataLedIndex={getLEDIndex(161)} - dataKeyIndex={keyIndex(161)} - dataLayer={layer} - path="M4.39002 39.62C3.86599 39.5808 3.35484 39.4387 2.88575 39.2018C2.41666 38.965 1.99882 38.638 1.65614 38.2396C1.31346 37.8412 1.05261 37.3792 0.88856 36.8799C0.724505 36.3807 0.660518 35.854 0.700083 35.33L3.00001 4.42001C3.03875 3.89473 3.18056 3.38219 3.41737 2.91171C3.65418 2.44123 3.98131 2.02205 4.38014 1.67801C4.77896 1.33397 5.2417 1.07181 5.74183 0.906585C6.24196 0.741357 6.76977 0.676256 7.29505 0.714996C7.82034 0.753736 8.33288 0.895544 8.80335 1.13235C9.27383 1.36916 9.69296 1.69636 10.037 2.09518C10.381 2.49401 10.6433 2.95669 10.8085 3.45682C10.9737 3.95694 11.0387 4.48469 11 5.00998L8.65003 35.91C8.57663 36.9198 8.12296 37.8642 7.38062 38.5528C6.63829 39.2413 5.66252 39.6227 4.65003 39.62H4.39002Z" - /> - { - setUndeglowIndex(160, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(160)} - stroke={stroke(160)} - strokeWidth={getStrokeWidth(160)} - dataLedIndex={getLEDIndex(160)} - dataKeyIndex={keyIndex(160)} - dataLayer={layer} - path="M4.48999 39.73C3.43352 39.6507 2.45168 39.1555 1.75989 38.3531C1.0681 37.5507 0.72292 36.5066 0.800053 35.45L3.09998 4.53001C3.17955 3.46914 3.67736 2.48336 4.48377 1.78947C5.29018 1.09559 6.33916 0.750433 7.40003 0.829998C8.46089 0.909563 9.44674 1.40732 10.1406 2.21373C10.8345 3.02013 11.1795 4.06912 11.1 5.12999L8.79004 36.04C8.71423 37.0481 8.25955 37.99 7.51746 38.6764C6.77537 39.3629 5.80092 39.7429 4.79004 39.74L4.48999 39.73Z" - /> - - { - setUndeglowIndex(159, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(159)} - stroke={stroke(159)} - strokeWidth={getStrokeWidth(159)} - dataLedIndex={getLEDIndex(159)} - dataKeyIndex={keyIndex(159)} - dataLayer={layer} - path="M4.61 39.85C4.08596 39.8108 3.57481 39.6687 3.10572 39.4318C2.63663 39.1949 2.21879 38.868 1.87611 38.4696C1.53343 38.0712 1.27258 37.6091 1.10853 37.1099C0.944476 36.6107 0.880488 36.084 0.920054 35.56L2.54005 13.74C2.76005 10.74 2.89007 7.81003 2.94007 4.87003C2.95583 3.81959 3.38413 2.81751 4.13258 2.08029C4.88102 1.34307 5.88952 0.929905 6.94007 0.930023H7.00001C7.52531 0.937844 8.04394 1.04908 8.52625 1.25735C9.00857 1.46563 9.44517 1.76687 9.81104 2.14389C10.1769 2.52091 10.4649 2.96628 10.6586 3.45462C10.8523 3.94296 10.948 4.46472 10.9401 4.99002C10.9401 8.09002 10.75 11.23 10.52 14.33L8.89002 36.16C8.81421 37.168 8.35953 38.11 7.61744 38.7964C6.87535 39.4828 5.9009 39.8629 4.89002 39.86L4.61 39.85Z" - /> - - { - setUndeglowIndex(158, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(158)} - stroke={stroke(158)} - strokeWidth={getStrokeWidth(158)} - dataLedIndex={getLEDIndex(158)} - dataKeyIndex={keyIndex(158)} - dataLayer={layer} - path="M5.71995 35.16C5.14217 25.1066 3.54064 15.1384 0.940038 5.41003C0.675729 4.38791 0.826131 3.30273 1.35862 2.39111C1.8911 1.47949 2.76243 0.815374 3.78257 0.543513C4.80271 0.271652 5.88901 0.414083 6.80454 0.939814C7.72007 1.46554 8.39062 2.33193 8.67002 3.35003C11.3981 13.6063 13.0734 24.1139 13.67 34.71C13.7301 35.768 13.3679 36.8066 12.6629 37.5978C11.958 38.389 10.9679 38.8682 9.91001 38.93H9.68003C8.66476 38.9216 7.69065 38.5273 6.9553 37.8273C6.21994 37.1272 5.77829 36.1737 5.71995 35.16Z" - /> - - { - setUndeglowIndex(157, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(157)} - stroke={stroke(157)} - strokeWidth={getStrokeWidth(157)} - dataLedIndex={getLEDIndex(157)} - dataKeyIndex={keyIndex(157)} - dataLayer={layer} - path="M9.84998 35.02L0.719974 5.38998C0.540451 4.88164 0.465555 4.34226 0.499759 3.80423C0.533964 3.2662 0.676618 2.74064 0.919071 2.25912C1.16152 1.7776 1.49879 1.35004 1.91065 1.00217C2.32251 0.654293 2.80051 0.393269 3.3158 0.234771C3.83109 0.0762724 4.37301 0.0235965 4.90918 0.0798637C5.44535 0.136131 5.96464 0.300206 6.43579 0.562225C6.90695 0.824244 7.32034 1.17879 7.651 1.60458C7.98167 2.03038 8.22278 2.51865 8.35999 3.04001L17.5 32.66C17.655 33.1623 17.7095 33.6902 17.6604 34.2136C17.6113 34.737 17.4597 35.2455 17.2141 35.7103C16.9685 36.1751 16.6338 36.5869 16.229 36.9223C15.8242 37.2577 15.3573 37.51 14.855 37.665C14.3527 37.82 13.8248 37.8745 13.3014 37.8254C12.778 37.7763 12.2694 37.6247 11.8047 37.3791C11.3399 37.1334 10.9282 36.7987 10.5928 36.394C10.2574 35.9892 10.0049 35.5223 9.84998 35.02Z" - /> - - { - setUndeglowIndex(156, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(156)} - stroke={stroke(156)} - strokeWidth={getStrokeWidth(156)} - dataLedIndex={getLEDIndex(156)} - dataKeyIndex={keyIndex(156)} - dataLayer={layer} - path="M6.46997 35.91L0.609985 16.91V4.56003C0.609985 3.49916 1.03147 2.48174 1.78162 1.7316C2.53176 0.981452 3.54912 0.560028 4.60999 0.560028C5.67085 0.560028 6.68833 0.981452 7.43848 1.7316C8.18862 2.48174 8.60999 3.49916 8.60999 4.56003V15.67L14.12 33.52C14.433 34.5344 14.3301 35.6317 13.8341 36.5703C13.3381 37.5089 12.4894 38.212 11.475 38.525C10.4605 38.8379 9.3633 38.7351 8.42468 38.239C7.48606 37.743 6.78293 36.8944 6.46997 35.88V35.91Z" - /> - - { - setUndeglowIndex(155, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(155)} - stroke={stroke(155)} - strokeWidth={getStrokeWidth(155)} - dataLedIndex={getLEDIndex(155)} - dataKeyIndex={keyIndex(155)} - dataLayer={layer} - path="M0.589966 35.56V4.56003C0.589966 3.49916 1.01145 2.48171 1.7616 1.73157C2.51174 0.981422 3.5291 0.559998 4.58997 0.559998C5.65083 0.559998 6.66831 0.981422 7.41846 1.73157C8.1686 2.48171 8.58997 3.49916 8.58997 4.56003V35.56C8.58997 36.6209 8.1686 37.6383 7.41846 38.3885C6.66831 39.1386 5.65083 39.56 4.58997 39.56C3.5291 39.56 2.51174 39.1386 1.7616 38.3885C1.01145 37.6383 0.589966 36.6209 0.589966 35.56Z" - /> - - { - setUndeglowIndex(154, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(154)} - stroke={stroke(154)} - strokeWidth={getStrokeWidth(154)} - dataLedIndex={getLEDIndex(154)} - dataKeyIndex={keyIndex(154)} - dataLayer={layer} - path="M0.540039 35.56V4.56C0.540039 3.49913 0.961402 2.48171 1.71155 1.73157C2.46169 0.981422 3.47917 0.559998 4.54004 0.559998C5.6009 0.559998 6.61826 0.981422 7.36841 1.73157C8.11855 2.48171 8.54004 3.49913 8.54004 4.56V35.56C8.54004 36.6209 8.11855 37.6383 7.36841 38.3884C6.61826 39.1386 5.6009 39.56 4.54004 39.56C3.47917 39.56 2.46169 39.1386 1.71155 38.3884C0.961402 37.6383 0.540039 36.6209 0.540039 35.56Z" - /> - - { - setUndeglowIndex(153, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(153)} - stroke={stroke(153)} - strokeWidth={getStrokeWidth(153)} - dataLedIndex={getLEDIndex(153)} - dataKeyIndex={keyIndex(153)} - dataLayer={layer} - path="M0.48999 35.56V4.56C0.48999 3.49913 0.911476 2.48171 1.66162 1.73157C2.41177 0.981422 3.42912 0.559998 4.48999 0.559998C5.55086 0.559998 6.56834 0.981422 7.31848 1.73157C8.06863 2.48171 8.48999 3.49913 8.48999 4.56V35.56C8.48999 36.6209 8.06863 37.6383 7.31848 38.3884C6.56834 39.1386 5.55086 39.56 4.48999 39.56C3.42912 39.56 2.41177 39.1386 1.66162 38.3884C0.911476 37.6383 0.48999 36.6209 0.48999 35.56Z" - /> - - { - setUndeglowIndex(152, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(152)} - stroke={stroke(152)} - strokeWidth={getStrokeWidth(152)} - dataLedIndex={getLEDIndex(152)} - dataKeyIndex={keyIndex(152)} - dataLayer={layer} - path="M1.44012 35.56V13.19C1.45546 10.6886 1.11883 8.19757 0.440115 5.79C0.277654 5.28112 0.218735 4.74486 0.266897 4.21285C0.315059 3.68084 0.469303 3.16387 0.720511 2.69244C0.971718 2.221 1.31482 1.80466 1.72954 1.46798C2.14427 1.1313 2.62219 0.881096 3.13518 0.73214C3.64818 0.583184 4.18581 0.538496 4.71636 0.600701C5.24691 0.662906 5.75967 0.830744 6.22429 1.09432C6.68892 1.3579 7.09608 1.71186 7.42168 2.13534C7.74728 2.55882 7.9847 3.04324 8.12005 3.55999C9.02754 6.6893 9.48545 9.93176 9.48003 13.19V35.56C9.48003 36.6209 9.05867 37.6383 8.30852 38.3884C7.55838 39.1386 6.5409 39.56 5.48003 39.56C4.95139 39.5653 4.42699 39.4657 3.93706 39.2671C3.44713 39.0684 3.00147 38.7746 2.62578 38.4027C2.2501 38.0307 1.95186 37.588 1.74834 37.1C1.54483 36.6121 1.44009 36.0887 1.44012 35.56Z" - /> - - { - setUndeglowIndex(151, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(151)} - stroke={stroke(151)} - strokeWidth={getStrokeWidth(151)} - dataLedIndex={getLEDIndex(151)} - dataKeyIndex={keyIndex(151)} - dataLayer={layer} - path="M28.13 19.27C25.6563 15.9156 22.4268 13.1914 18.7035 11.3185C14.9802 9.44552 10.8679 8.47648 6.70007 8.48999H4.31006C3.24919 8.48999 2.23171 8.06857 1.48157 7.31842C0.731422 6.56827 0.310059 5.55086 0.310059 4.48999C0.310059 3.42912 0.731422 2.41174 1.48157 1.66159C2.23171 0.911445 3.24919 0.48999 4.31006 0.48999H6.70007C12.1095 0.506273 17.4411 1.77947 22.2743 4.20908C27.1075 6.63868 31.31 10.1582 34.55 14.49C35.1839 15.3413 35.4536 16.4096 35.2998 17.4598C35.146 18.51 34.5813 19.4561 33.73 20.09C32.8786 20.7239 31.8103 20.9936 30.7601 20.8398C29.7099 20.686 28.7639 20.1213 28.13 19.27Z" - /> - - { - setUndeglowIndex(150, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(150)} - stroke={stroke(150)} - strokeWidth={getStrokeWidth(150)} - dataLedIndex={getLEDIndex(150)} - dataKeyIndex={keyIndex(150)} - dataLayer={layer} - path="M0.310059 4.48999C0.310059 3.42912 0.731422 2.41174 1.48157 1.66159C2.23171 0.911445 3.24919 0.48999 4.31006 0.48999H35.3101C36.3709 0.48999 37.3883 0.911445 38.1384 1.66159C38.8886 2.41174 39.3101 3.42912 39.3101 4.48999C39.3101 5.55086 38.8886 6.56827 38.1384 7.31842C37.3883 8.06857 36.3709 8.48999 35.3101 8.48999H4.31006C3.24919 8.48999 2.23171 8.06857 1.48157 7.31842C0.731422 6.56827 0.310059 5.55086 0.310059 4.48999Z" - /> - { - setUndeglowIndex(149, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(149)} - stroke={stroke(149)} - strokeWidth={getStrokeWidth(149)} - dataLedIndex={getLEDIndex(149)} - dataKeyIndex={keyIndex(149)} - dataLayer={layer} - path="M2.81998 8.09C2.32071 7.88841 1.86727 7.5881 1.48685 7.20706C1.10643 6.82602 0.806888 6.3721 0.606113 5.8725C0.405338 5.3729 0.307505 4.83791 0.318454 4.29959C0.329404 3.76127 0.448909 3.23071 0.669834 2.73969C0.890759 2.24867 1.20856 1.8073 1.60416 1.44205C1.99976 1.07679 2.46503 0.795168 2.97208 0.614045C3.47913 0.432923 4.01748 0.356049 4.55497 0.388002C5.09245 0.419954 5.61799 0.560098 6.10001 0.80002C7.11388 1.25083 8.21041 1.48578 9.31998 1.48999H35.32C36.3809 1.48999 37.3983 1.91145 38.1484 2.66159C38.8986 3.41174 39.32 4.42913 39.32 5.48999C39.32 6.55086 38.8986 7.56828 38.1484 8.31842C37.3983 9.06857 36.3809 9.48999 35.32 9.48999H9.31998C7.07918 9.48364 4.86471 9.00668 2.81998 8.09Z" - /> - - { - setUndeglowIndex(148, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(148)} - stroke={stroke(148)} - strokeWidth={getStrokeWidth(148)} - dataLedIndex={getLEDIndex(148)} - dataKeyIndex={keyIndex(148)} - dataLayer={layer} - path="M28.19 22.91L15.39 12.33C12.5541 10.0105 9.00372 8.74228 5.34003 8.73999H4.60999C3.54912 8.73999 2.53176 8.31857 1.78162 7.56842C1.03147 6.81827 0.609985 5.80086 0.609985 4.73999C0.609985 3.67912 1.03147 2.66174 1.78162 1.91159C2.53176 1.16145 3.54912 0.73999 4.60999 0.73999H5.34003C10.8294 0.759917 16.1443 2.67046 20.39 6.14999L33.25 16.71C33.6584 17.0427 33.997 17.4528 34.2465 17.9167C34.4959 18.3807 34.6513 18.8893 34.7036 19.4135C34.756 19.9376 34.7043 20.4669 34.5515 20.971C34.3988 21.4751 34.1479 21.9441 33.8134 22.351C33.4789 22.7579 33.0674 23.0948 32.6024 23.3422C32.1373 23.5897 31.6281 23.7428 31.1037 23.7929C30.5793 23.843 30.0503 23.789 29.5468 23.634C29.0434 23.4791 28.5755 23.2263 28.17 22.89L28.19 22.91Z" - /> - - { - setUndeglowIndex(147, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(147)} - stroke={stroke(147)} - strokeWidth={getStrokeWidth(147)} - dataLedIndex={getLEDIndex(147)} - dataKeyIndex={keyIndex(147)} - dataLayer={layer} - path="M3 8.91001L2 8.02C1.57572 7.68665 1.22329 7.27094 0.963869 6.79783C0.704448 6.32472 0.543409 5.804 0.49048 5.26704C0.437551 4.73007 0.493831 4.18794 0.655885 3.67329C0.81794 3.15863 1.08244 2.68208 1.43347 2.27232C1.78451 1.86255 2.2148 1.52804 2.69849 1.28892C3.18218 1.04979 3.70926 0.911008 4.24799 0.880898C4.78672 0.850788 5.32593 0.929982 5.83325 1.11372C6.34058 1.29745 6.8055 1.58192 7.20001 1.95002L8.20001 2.83002C9.61956 4.04919 11.4288 4.71965 13.3 4.72001H34.56C35.6209 4.72001 36.6383 5.14143 37.3884 5.89158C38.1386 6.64172 38.56 7.65914 38.56 8.72001C38.56 9.78088 38.1386 10.7983 37.3884 11.5484C36.6383 12.2986 35.6209 12.72 34.56 12.72H13.3C9.52233 12.718 5.8696 11.3669 3 8.91001Z" - /> - { - setUndeglowIndex(146, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(146)} - stroke={stroke(146)} - strokeWidth={getStrokeWidth(146)} - dataLedIndex={getLEDIndex(146)} - dataKeyIndex={keyIndex(146)} - dataLayer={layer} - path="M28.61 19.91L19.19 11.84C16.3218 9.38082 12.6682 8.02933 8.89001 8.03H4.39001C3.32915 8.03 2.31173 7.60857 1.56158 6.85843C0.811439 6.10828 0.390015 5.09086 0.390015 4.03C0.390015 2.96913 0.811439 1.95171 1.56158 1.20157C2.31173 0.451423 3.32915 0.0299988 4.39001 0.0299988H8.92999C14.597 0.0321082 20.078 2.0529 24.39 5.73001L33.81 13.81C34.2164 14.1497 34.5514 14.5667 34.7953 15.0369C35.0393 15.5071 35.1874 16.0211 35.2311 16.549C35.2749 17.0768 35.2133 17.6081 35.05 18.1121C34.8868 18.616 34.6251 19.0824 34.2801 19.4844C33.9351 19.8863 33.5137 20.2157 33.0403 20.4535C32.567 20.6913 32.0512 20.8327 31.5228 20.8695C30.9943 20.9063 30.4638 20.8378 29.9621 20.6679C29.4604 20.498 28.9974 20.2302 28.6 19.88L28.61 19.91Z" - /> - { - setUndeglowIndex(145, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(145)} - stroke={stroke(145)} - strokeWidth={getStrokeWidth(145)} - dataLedIndex={getLEDIndex(145)} - dataKeyIndex={keyIndex(145)} - dataLayer={layer} - path="M0.390015 4C0.390015 2.93913 0.811439 1.92172 1.56158 1.17157C2.31173 0.421424 3.32915 0 4.39001 0H35.39C36.4509 0 37.4683 0.421424 38.2184 1.17157C38.9686 1.92172 39.39 2.93913 39.39 4C39.39 5.06087 38.9686 6.07828 38.2184 6.82843C37.4683 7.57858 36.4509 8 35.39 8H4.39001C3.32915 8 2.31173 7.57858 1.56158 6.82843C0.811439 6.07828 0.390015 5.06087 0.390015 4Z" - /> - - { - setUndeglowIndex(144, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(144)} - stroke={stroke(144)} - strokeWidth={getStrokeWidth(144)} - dataLedIndex={getLEDIndex(144)} - dataKeyIndex={keyIndex(144)} - dataLayer={layer} - path="M1.78005 22.33C1.13175 21.4905 0.843398 20.4279 0.978418 19.3759C1.11344 18.3239 1.66075 17.3686 2.50002 16.72L16.39 5.98001C20.5708 2.75353 25.6991 0.996079 30.9801 0.980011H31.39C32.4509 0.980011 33.4683 1.40144 34.2185 2.15158C34.9686 2.90173 35.39 3.91915 35.39 4.98001C35.39 6.04088 34.9686 7.0583 34.2185 7.80844C33.4683 8.55859 32.4509 8.98001 31.39 8.98001H31C27.4931 8.98313 24.0859 10.147 21.31 12.29L7.39004 23.05C6.55057 23.6983 5.48797 23.9866 4.43594 23.8516C3.38391 23.7166 2.4286 23.1693 1.78005 22.33Z" - /> - { - setUndeglowIndex(143, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(143)} - stroke={stroke(143)} - strokeWidth={getStrokeWidth(143)} - dataLedIndex={getLEDIndex(143)} - dataKeyIndex={keyIndex(143)} - dataLayer={layer} - path="M0.679993 6.74C0.679993 5.67913 1.10142 4.66174 1.85156 3.9116C2.60171 3.16145 3.61913 2.74 4.67999 2.74H28.47C30.0718 2.73503 31.6342 2.24332 32.95 1.33002C33.8199 0.722677 34.8955 0.485762 35.9401 0.671423C36.9846 0.857084 37.9127 1.4501 38.52 2.32001C39.1274 3.18992 39.3643 4.26546 39.1786 5.31003C38.9929 6.35461 38.3999 7.28267 37.53 7.89002C34.8681 9.73513 31.7089 10.7289 28.47 10.74H4.67999C3.61913 10.74 2.60171 10.3186 1.85156 9.56843C1.10142 8.81828 0.679993 7.80086 0.679993 6.74Z" - /> - - { - setUndeglowIndex(142, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(142)} - stroke={stroke(142)} - strokeWidth={getStrokeWidth(142)} - dataLedIndex={getLEDIndex(142)} - dataKeyIndex={keyIndex(142)} - dataLayer={layer} - path="M0.679993 4.73999C0.679993 3.67912 1.10142 2.66174 1.85156 1.91159C2.60171 1.16145 3.61913 0.73999 4.67999 0.73999H35.68C36.7409 0.73999 37.7583 1.16145 38.5084 1.91159C39.2586 2.66174 39.68 3.67912 39.68 4.73999C39.68 5.80086 39.2586 6.81827 38.5084 7.56842C37.7583 8.31857 36.7409 8.73999 35.68 8.73999H4.67999C3.61913 8.73999 2.60171 8.31857 1.85156 7.56842C1.10142 6.81827 0.679993 5.80086 0.679993 4.73999Z" - /> - - { - setUndeglowIndex(141, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(141)} - stroke={stroke(141)} - strokeWidth={getStrokeWidth(141)} - dataLedIndex={getLEDIndex(141)} - dataKeyIndex={keyIndex(141)} - dataLayer={layer} - path="M1.51003 25.84C1.14397 25.4626 0.855923 25.0168 0.66231 24.528C0.468696 24.0392 0.373311 23.517 0.38167 22.9913C0.390029 22.4656 0.501959 21.9468 0.711016 21.4644C0.920072 20.982 1.22218 20.5455 1.60005 20.18L15.3 6.91C18.8166 3.46988 23.4035 1.33522 28.3 0.86001C28.8253 0.807481 29.3558 0.858919 29.8612 1.01141C30.3666 1.1639 30.837 1.41445 31.2456 1.74874C31.6542 2.08303 31.9929 2.49451 32.2424 2.95971C32.492 3.42491 32.6475 3.9347 32.7 4.45999C32.7526 4.98527 32.7011 5.51577 32.5486 6.02117C32.3961 6.52658 32.1456 6.99699 31.8113 7.40557C31.477 7.81415 31.0655 8.15288 30.6003 8.40243C30.1351 8.65198 29.6253 8.80748 29.1001 8.86001C26.0072 9.16481 23.1109 10.5159 20.89 12.69L7.17006 25.91C6.79269 26.2761 6.34685 26.5641 5.85805 26.7577C5.36925 26.9514 4.84705 27.0467 4.32137 27.0384C3.79569 27.03 3.27685 26.9181 2.79445 26.709C2.31206 26.5 1.87557 26.1979 1.51003 25.82V25.84Z" - /> - - { - setUndeglowIndex(140, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(140)} - stroke={stroke(140)} - strokeWidth={getStrokeWidth(140)} - dataLedIndex={getLEDIndex(140)} - dataKeyIndex={keyIndex(140)} - dataLayer={layer} - path="M0.630005 10.39C0.630005 9.32914 1.05143 8.31172 1.80157 7.56157C2.55172 6.81143 3.56914 6.39 4.63 6.39H25.98L30.7 1.80999C31.4625 1.07136 32.4872 0.665879 33.5486 0.682758C34.6101 0.699636 35.6214 1.13748 36.36 1.89998C37.0986 2.66248 37.5041 3.68719 37.4872 4.74864C37.4704 5.8101 37.0325 6.82136 36.27 7.55999L31.55 12.13C30.076 13.5659 28.0978 14.3666 26.04 14.36H4.63C3.57432 14.36 2.56142 13.9427 1.81213 13.1991C1.06284 12.4554 0.637923 11.4457 0.630005 10.39Z" - /> - - { - setUndeglowIndex(139, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(139)} - stroke={stroke(139)} - strokeWidth={getStrokeWidth(139)} - dataLedIndex={getLEDIndex(139)} - dataKeyIndex={keyIndex(139)} - dataLayer={layer} - path="M3.39002 30.32C2.34529 30.1392 1.41507 29.551 0.803782 28.6847C0.192496 27.8184 -0.0498507 26.7449 0.130015 25.7C1.16936 19.846 3.8225 14.3985 7.79066 9.97097C11.7588 5.54345 16.8844 2.31182 22.59 0.640009C23.0989 0.477548 23.6352 0.41866 24.1672 0.466822C24.6992 0.514984 25.2161 0.669197 25.6876 0.920405C26.159 1.17161 26.5754 1.51471 26.9121 1.92944C27.2487 2.34417 27.4989 2.82214 27.6479 3.33514C27.7969 3.84814 27.8415 4.38576 27.7793 4.91632C27.7171 5.44687 27.5493 5.95959 27.2857 6.42422C27.0221 6.88885 26.6682 7.29597 26.2447 7.62158C25.8212 7.94718 25.3368 8.18466 24.82 8.32C20.5519 9.57027 16.7173 11.9866 13.7476 15.2973C10.7779 18.608 8.79087 22.6816 8.01002 27.06C7.82924 28.1047 7.24107 29.0349 6.37477 29.6462C5.50846 30.2575 4.43492 30.4999 3.39002 30.32V30.32Z" - /> - - { - setUndeglowIndex(138, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(138)} - stroke={stroke(138)} - strokeWidth={getStrokeWidth(138)} - dataLedIndex={getLEDIndex(138)} - dataKeyIndex={keyIndex(138)} - dataLayer={layer} - path="M0.690002 35.36V4.36002C0.690002 3.29915 1.11143 2.28173 1.86157 1.53159C2.61172 0.78144 3.62914 0.360016 4.69 0.360016C5.75087 0.360016 6.76829 0.78144 7.51843 1.53159C8.26858 2.28173 8.69 3.29915 8.69 4.36002V35.36C8.69 36.4209 8.26858 37.4383 7.51843 38.1884C6.76829 38.9386 5.75087 39.36 4.69 39.36C3.62914 39.36 2.61172 38.9386 1.86157 38.1884C1.11143 37.4383 0.690002 36.4209 0.690002 35.36Z" - /> - - { - setUndeglowIndex(137, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(137)} - stroke={stroke(137)} - strokeWidth={getStrokeWidth(137)} - dataLedIndex={getLEDIndex(137)} - dataKeyIndex={keyIndex(137)} - dataLayer={layer} - path="M0.690002 35.36V4.36002C0.690002 3.29915 1.11143 2.28173 1.86157 1.53159C2.61172 0.78144 3.62914 0.360016 4.69 0.360016C5.75087 0.360016 6.76829 0.78144 7.51843 1.53159C8.26858 2.28173 8.69 3.29915 8.69 4.36002V35.36C8.69 36.4209 8.26858 37.4383 7.51843 38.1884C6.76829 38.9386 5.75087 39.36 4.69 39.36C3.62914 39.36 2.61172 38.9386 1.86157 38.1884C1.11143 37.4383 0.690002 36.4209 0.690002 35.36Z" - /> - - { - setUndeglowIndex(136, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(136)} - stroke={stroke(136)} - strokeWidth={getStrokeWidth(136)} - dataLedIndex={getLEDIndex(136)} - dataKeyIndex={keyIndex(136)} - dataLayer={layer} - path="M0.690002 35.36V4.36002C0.690002 3.29915 1.11143 2.28173 1.86157 1.53159C2.61172 0.78144 3.62914 0.360016 4.69 0.360016C5.75087 0.360016 6.76829 0.78144 7.51843 1.53159C8.26858 2.28173 8.69 3.29915 8.69 4.36002V35.36C8.69 36.4209 8.26858 37.4383 7.51843 38.1884C6.76829 38.9386 5.75087 39.36 4.69 39.36C3.62914 39.36 2.61172 38.9386 1.86157 38.1884C1.11143 37.4383 0.690002 36.4209 0.690002 35.36Z" - /> - - { - setUndeglowIndex(135, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(135)} - stroke={stroke(135)} - strokeWidth={getStrokeWidth(135)} - dataLedIndex={getLEDIndex(135)} - dataKeyIndex={keyIndex(135)} - dataLayer={layer} - path="M0.690002 35.36V4.36002C0.690002 3.29915 1.11143 2.28173 1.86157 1.53159C2.61172 0.78144 3.62914 0.360016 4.69 0.360016C5.75087 0.360016 6.76829 0.78144 7.51843 1.53159C8.26858 2.28173 8.69 3.29915 8.69 4.36002V35.36C8.69 36.4209 8.26858 37.4383 7.51843 38.1884C6.76829 38.9386 5.75087 39.36 4.69 39.36C3.62914 39.36 2.61172 38.9386 1.86157 38.1884C1.11143 37.4383 0.690002 36.4209 0.690002 35.36Z" - /> - { - setUndeglowIndex(134, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(134)} - stroke={stroke(134)} - strokeWidth={getStrokeWidth(134)} - dataLedIndex={getLEDIndex(134)} - dataKeyIndex={keyIndex(134)} - dataLayer={layer} - path="M4.48996 39.35C3.96457 39.3319 3.44793 39.2105 2.96951 38.9926C2.4911 38.7747 2.06031 38.4646 1.70181 38.0801C1.34332 37.6956 1.06413 37.2442 0.88022 36.7517C0.696306 36.2593 0.611266 35.7354 0.629976 35.21C0.629976 34.05 0.689973 32.88 0.689973 31.72V4.36002C0.689973 3.29915 1.1114 2.28173 1.86154 1.53159C2.61169 0.78144 3.62911 0.360016 4.68997 0.360016C5.75084 0.360016 6.76826 0.78144 7.5184 1.53159C8.26855 2.28173 8.68997 3.29915 8.68997 4.36002V31.72C8.68997 32.98 8.66998 34.24 8.62998 35.5C8.59368 36.5364 8.15631 37.5182 7.41007 38.2384C6.66382 38.9585 5.66703 39.3607 4.62998 39.36L4.48996 39.35Z" - /> - { - setUndeglowIndex(133, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(133)} - stroke={stroke(133)} - strokeWidth={getStrokeWidth(133)} - dataLedIndex={getLEDIndex(133)} - dataKeyIndex={keyIndex(133)} - dataLayer={layer} - path="M2.90004 38.16C1.88244 37.867 1.02256 37.1824 0.508925 36.2564C-0.00470662 35.3303 -0.130154 34.2384 0.160048 33.22L4.88002 16.82C6.11099 12.525 7.0498 8.15173 7.69002 3.72999C7.84252 2.67973 8.40601 1.73308 9.25648 1.09827C10.107 0.463464 11.1748 0.192479 12.225 0.344978C13.2753 0.497478 14.222 1.06097 14.8568 1.91145C15.4916 2.76192 15.7625 3.82969 15.61 4.87995C14.9303 9.65889 13.928 14.3864 12.61 19.03L7.89003 35.43C7.6495 36.2627 7.14501 36.9948 6.45247 37.516C5.75992 38.0372 4.91677 38.3193 4.05 38.32C3.6608 38.3248 3.27314 38.2708 2.90004 38.16Z" - /> - { - setUndeglowIndex(132, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(132)} - stroke={stroke(132)} - strokeWidth={getStrokeWidth(132)} - dataLedIndex={getLEDIndex(132)} - dataKeyIndex={keyIndex(132)} - dataLayer={layer} - path="M3.30002 38.53C2.7895 38.3853 2.3129 38.1405 1.89792 37.8098C1.48293 37.4792 1.13791 37.0692 0.882904 36.6038C0.6279 36.1385 0.467991 35.6271 0.412567 35.0994C0.357143 34.5717 0.407266 34.0382 0.560028 33.53L9.12003 3.74002C9.26514 3.23508 9.50831 2.76365 9.8356 2.35269C10.1629 1.94172 10.5679 1.59925 11.0276 1.34481C11.4872 1.09038 11.9925 0.929004 12.5145 0.869839C13.0365 0.810675 13.5651 0.854916 14.07 1.00003C14.575 1.14514 15.0464 1.38825 15.4574 1.71554C15.8683 2.04284 16.2108 2.44785 16.4652 2.9075C16.7197 3.36715 16.8811 3.87247 16.9402 4.3945C16.9994 4.91653 16.9551 5.44505 16.81 5.94998L8.25003 35.74C8.01132 36.5746 7.50762 37.3089 6.81491 37.832C6.1222 38.3551 5.27812 38.6387 4.41006 38.64C4.03669 38.6571 3.66277 38.6201 3.30002 38.53Z" - /> - { - setUndeglowIndex(131, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(131)} - stroke={stroke(131)} - strokeWidth={getStrokeWidth(131)} - dataLedIndex={getLEDIndex(131)} - dataKeyIndex={keyIndex(131)} - dataLayer={layer} - path="M1.85004 70.74C-0.540135 60.0598 -0.615183 48.9916 1.63001 38.28C1.85001 37.28 2.63002 33.95 2.96002 32.95L11.52 3.14999C11.6651 2.64506 11.9082 2.17369 12.2355 1.76272C12.5628 1.35176 12.9679 1.00928 13.4276 0.754849C13.8872 0.500416 14.3925 0.338977 14.9145 0.279812C15.4365 0.220648 15.9651 0.26489 16.47 0.41C16.975 0.555111 17.4463 0.798282 17.8573 1.12558C18.2683 1.45287 18.6107 1.85788 18.8652 2.31753C19.1196 2.77718 19.281 3.28244 19.3402 3.80447C19.3994 4.3265 19.3551 4.85508 19.21 5.36001L10.65 35.16C10.38 36.06 9.65002 39.01 9.46002 39.93C8.49144 44.5338 8.00214 49.2255 8 53.93C8.00451 58.9756 8.56119 64.0055 9.66004 68.93C9.89346 69.9615 9.70887 71.0435 9.14667 71.9392C8.58447 72.835 7.69042 73.4717 6.66003 73.71C6.37387 73.7696 6.08235 73.7998 5.79004 73.8C4.88377 73.8118 4.00036 73.5154 3.28455 72.9595C2.56873 72.4036 2.06295 71.621 1.85004 70.74Z" - /> - { - setUndeglowIndex(130, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(130)} - stroke={stroke(130)} - strokeWidth={getStrokeWidth(130)} - dataLedIndex={getLEDIndex(130)} - dataKeyIndex={keyIndex(130)} - dataLayer={layer} - path="M19.01 32.97C11.1997 25.304 5.12914 16.0481 1.21003 5.82996C1.00291 5.33661 0.896879 4.80674 0.898206 4.27167C0.899532 3.73661 1.00816 3.20723 1.21772 2.71491C1.42729 2.22259 1.73351 1.77732 2.11824 1.40546C2.50297 1.0336 2.95843 0.742698 3.45759 0.549993C3.95675 0.357287 4.4895 0.266706 5.0243 0.283574C5.55911 0.300443 6.08509 0.424419 6.57112 0.648198C7.05714 0.871978 7.4933 1.191 7.85383 1.58637C8.21436 1.98174 8.49193 2.44541 8.67006 2.94996C12.1986 12.1068 17.6553 20.3976 24.6701 27.26C25.4272 28.0039 25.8579 29.0181 25.8673 30.0796C25.8766 31.1411 25.464 32.1628 24.72 32.92C23.9761 33.6772 22.9619 34.1078 21.9004 34.1172C20.8389 34.1266 19.8172 33.7139 19.06 32.97H19.01Z" - /> - { - setUndeglowIndex(129, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(129)} - stroke={stroke(129)} - strokeWidth={getStrokeWidth(129)} - dataLedIndex={getLEDIndex(129)} - dataKeyIndex={keyIndex(129)} - dataLayer={layer} - path="M26.75 25.91L1.83003 7.45997C0.977354 6.82875 0.410324 5.88466 0.253731 4.8354C0.0971385 3.78613 0.363788 2.71767 0.995003 1.865C1.62622 1.01233 2.57031 0.445297 3.61958 0.288704C4.66884 0.132112 5.73736 0.398761 6.59003 1.02998L31.51 19.48C32.3627 20.1112 32.9297 21.0553 33.0863 22.1046C33.2429 23.1538 32.9763 24.2223 32.345 25.075C31.7138 25.9276 30.7697 26.4947 29.7205 26.6513C28.6712 26.8078 27.6027 26.5412 26.75 25.91Z" - /> - { - setUndeglowIndex(128, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(128)} - stroke={stroke(128)} - strokeWidth={getStrokeWidth(128)} - dataLedIndex={getLEDIndex(128)} - dataKeyIndex={keyIndex(128)} - dataLayer={layer} - path="M20.87 29.34C15.9182 20.8166 9.34845 13.3432 1.53003 7.33996C0.72352 6.68329 0.204462 5.73834 0.0829507 4.70543C-0.0385602 3.67252 0.246987 2.6329 0.879093 1.807C1.5112 0.981097 2.44015 0.433886 3.46894 0.281362C4.49773 0.128838 5.54548 0.383002 6.39002 0.98998C15.0349 7.60727 22.3014 15.8521 27.78 25.2599C28.2335 26.1707 28.3228 27.2201 28.0299 28.1944C27.737 29.1688 27.0838 29.9949 26.2033 30.5046C25.3227 31.0143 24.281 31.1693 23.2902 30.9381C22.2994 30.7069 21.434 30.1068 20.87 29.2599V29.34Z" - /> - { - setUndeglowIndex(127, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(127)} - stroke={stroke(127)} - strokeWidth={getStrokeWidth(127)} - dataLedIndex={getLEDIndex(127)} - dataKeyIndex={keyIndex(127)} - dataLayer={layer} - path="M8.49002 35.98L4.06002 17.66C3.15528 13.908 1.96515 10.2306 0.500027 6.65998C0.253419 6.16666 0.111481 5.62765 0.0831571 5.07685C0.0548333 4.52605 0.140772 3.97538 0.335476 3.45936C0.530181 2.94334 0.829446 2.47312 1.21457 2.07832C1.59969 1.68351 2.0623 1.37262 2.57333 1.16517C3.08436 0.957715 3.63277 0.858227 4.18411 0.872871C4.73544 0.887514 5.27777 1.01603 5.77707 1.25031C6.27636 1.4846 6.72186 1.81957 7.08548 2.23426C7.4491 2.64895 7.723 3.13435 7.89004 3.65998C9.51426 7.59564 10.8315 11.6511 11.83 15.79L16.27 34.11C16.393 34.6242 16.4129 35.1577 16.3283 35.6797C16.2438 36.2016 16.0566 36.7017 15.7776 37.1508C15.4986 37.6 15.1334 37.9894 14.703 38.2965C14.2725 38.6036 13.7855 38.8223 13.27 38.94C12.9583 39.0111 12.6398 39.048 12.32 39.05C11.4313 39.0366 10.5723 38.7274 9.87875 38.1715C9.1852 37.6156 8.69658 36.8445 8.49002 35.98Z" - /> - - { - setUndeglowIndex(126, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(126)} - stroke={stroke(126)} - strokeWidth={getStrokeWidth(126)} - dataLedIndex={getLEDIndex(126)} - dataKeyIndex={keyIndex(126)} - dataLayer={layer} - path="M8.39 35.8L1.10002 5.66999C0.953663 5.15217 0.913284 4.61015 0.981309 4.07636C1.04933 3.54258 1.22435 3.02798 1.4959 2.56342C1.76745 2.09886 2.12996 1.69387 2.56169 1.37269C2.99343 1.0515 3.48552 0.820767 4.00853 0.694221C4.53154 0.567675 5.0747 0.547947 5.60552 0.636237C6.13633 0.724528 6.64388 0.91898 7.09776 1.20801C7.55165 1.49705 7.94254 1.87472 8.24706 2.31837C8.55158 2.76201 8.76343 3.26254 8.86998 3.78998L16.14 33.91C16.3902 34.9403 16.221 36.0278 15.6697 36.9335C15.1184 37.8392 14.2301 38.489 13.2 38.74C12.8882 38.8105 12.5697 38.8474 12.25 38.85C11.3588 38.8443 10.495 38.5411 9.7957 37.9885C9.09641 37.436 8.60165 36.6657 8.39 35.8Z" - /> - - { - setUndeglowIndex(125, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(125)} - stroke={stroke(125)} - strokeWidth={getStrokeWidth(125)} - dataLedIndex={getLEDIndex(125)} - dataKeyIndex={keyIndex(125)} - dataLayer={layer} - path="M8.24999 35.62L0.960007 5.49C0.813648 4.97218 0.77327 4.43015 0.841294 3.89637C0.909319 3.36258 1.08433 2.84799 1.35588 2.38343C1.62743 1.91887 1.98994 1.51388 2.42168 1.1927C2.85341 0.871511 3.3455 0.640774 3.86852 0.514228C4.39153 0.387682 4.93469 0.367955 5.4655 0.456245C5.99631 0.544535 6.50386 0.738988 6.95775 1.02802C7.41164 1.31706 7.80252 1.69473 8.10704 2.13837C8.41156 2.58202 8.62348 3.08254 8.73003 3.60999L16.02 33.74C16.143 34.2542 16.1628 34.7878 16.0783 35.3097C15.9938 35.8316 15.8066 36.3317 15.5276 36.7808C15.2486 37.23 14.8833 37.6194 14.4529 37.9265C14.0225 38.2336 13.5355 38.4523 13.02 38.57C12.7125 38.646 12.3967 38.683 12.08 38.68C11.1926 38.6671 10.3347 38.3595 9.64128 37.8055C8.94791 37.2515 8.45845 36.4827 8.24999 35.62Z" - /> - { - setUndeglowIndex(124, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(124)} - stroke={stroke(124)} - strokeWidth={getStrokeWidth(124)} - dataLedIndex={getLEDIndex(124)} - dataKeyIndex={keyIndex(124)} - dataLayer={layer} - path="M9.00999 35.9699C7.94544 33.6531 7.10819 31.2385 6.50999 28.7599L0.829993 5.30997C0.58069 4.27828 0.751431 3.18977 1.30466 2.28397C1.8579 1.37817 2.74831 0.72926 3.78001 0.479957C4.8117 0.230653 5.90014 0.401395 6.80595 0.954627C7.71175 1.50786 8.36066 2.39828 8.60996 3.42997L14.28 26.8799C14.7583 28.8602 15.4281 30.7893 16.28 32.6399C16.5176 33.1198 16.6563 33.6425 16.6881 34.177C16.72 34.7115 16.6441 35.2469 16.4652 35.7516C16.2862 36.2562 16.0078 36.7197 15.6463 37.1148C15.2849 37.5098 14.8478 37.8283 14.361 38.0512C13.8742 38.2742 13.3476 38.3972 12.8124 38.4129C12.2771 38.4286 11.7442 38.3367 11.2452 38.1426C10.7462 37.9485 10.2912 37.6561 9.90726 37.2829C9.52331 36.9097 9.21818 36.4633 9.00999 35.9699Z" - /> - - { - setUndeglowIndex(123, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(123)} - stroke={stroke(123)} - strokeWidth={getStrokeWidth(123)} - dataLedIndex={getLEDIndex(123)} - dataKeyIndex={keyIndex(123)} - dataLayer={layer} - path="M1.75002 7.12992C1.06076 6.3433 0.707007 5.318 0.764548 4.27372C0.822088 3.22943 1.28637 2.24925 2.05788 1.54313C2.82939 0.837 3.84677 0.46115 4.89205 0.496068C5.93733 0.530986 6.92738 0.973854 7.65005 1.72989C10.5904 4.91751 14.1592 7.46155 18.1314 9.20157C22.1037 10.9416 26.3934 11.84 30.7301 11.84H32.4701C33.5309 11.84 34.5483 12.2614 35.2985 13.0115C36.0486 13.7617 36.4701 14.7791 36.4701 15.84C36.4701 16.9009 36.0486 17.9182 35.2985 18.6684C34.5483 19.4185 33.5309 19.84 32.4701 19.84H30.7301C25.2833 19.8402 19.8957 18.7108 14.9076 16.5231C9.91945 14.3354 5.43927 11.137 1.75002 7.12992Z" - /> - - { - setUndeglowIndex(175, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(175)} - stroke={stroke(175)} - strokeWidth={getStrokeWidth(175)} - dataLedIndex={getLEDIndex(175)} - dataKeyIndex={keyIndex(175)} - dataLayer={layer} - path="M0.470032 4.84003C0.470032 3.77916 0.891456 2.76168 1.6416 2.01154C2.39175 1.26139 3.40917 0.840027 4.47003 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2985 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2985 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003H4.47003C3.40917 8.84003 2.39175 8.41854 1.6416 7.6684C0.891456 6.91825 0.470032 5.90089 0.470032 4.84003Z" - /> - - { - setUndeglowIndex(174, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(174)} - stroke={stroke(174)} - strokeWidth={getStrokeWidth(174)} - dataLedIndex={getLEDIndex(174)} - dataKeyIndex={keyIndex(174)} - dataLayer={layer} - path="M0.470032 4.84003C0.470032 3.77916 0.891456 2.76168 1.6416 2.01154C2.39175 1.26139 3.40917 0.840027 4.47003 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2985 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2985 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003H4.47003C3.40917 8.84003 2.39175 8.41854 1.6416 7.6684C0.891456 6.91825 0.470032 5.90089 0.470032 4.84003Z" - /> - - { - setUndeglowIndex(173, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(173)} - stroke={stroke(173)} - strokeWidth={getStrokeWidth(173)} - dataLedIndex={getLEDIndex(173)} - dataKeyIndex={keyIndex(173)} - dataLayer={layer} - path="M0.470032 4.84003C0.470032 3.77916 0.891456 2.76168 1.6416 2.01154C2.39175 1.26139 3.40917 0.840027 4.47003 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2985 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2985 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003H4.47003C3.40917 8.84003 2.39175 8.41854 1.6416 7.6684C0.891456 6.91825 0.470032 5.90089 0.470032 4.84003Z" - /> - - { - setUndeglowIndex(172, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(172)} - stroke={stroke(172)} - strokeWidth={getStrokeWidth(172)} - dataLedIndex={getLEDIndex(172)} - dataKeyIndex={keyIndex(172)} - dataLayer={layer} - path="M0.470032 4.84003C0.470032 3.77916 0.891456 2.76168 1.6416 2.01154C2.39175 1.26139 3.40917 0.840027 4.47003 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2985 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2985 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003H4.47003C3.40917 8.84003 2.39175 8.41854 1.6416 7.6684C0.891456 6.91825 0.470032 5.90089 0.470032 4.84003Z" - /> - { - setUndeglowIndex(171, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(171)} - stroke={stroke(171)} - strokeWidth={getStrokeWidth(171)} - dataLedIndex={getLEDIndex(171)} - dataKeyIndex={keyIndex(171)} - dataLayer={layer} - path="M0.470032 4.84003C0.470032 3.77916 0.891456 2.76168 1.6416 2.01154C2.39175 1.26139 3.40917 0.840027 4.47003 0.840027H35.47C36.5309 0.840027 37.5483 1.26139 38.2985 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2985 7.6684C37.5483 8.41854 36.5309 8.84003 35.47 8.84003H4.47003C3.40917 8.84003 2.39175 8.41854 1.6416 7.6684C0.891456 6.91825 0.470032 5.90089 0.470032 4.84003Z" - /> - { - setUndeglowIndex(170, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(170)} - stroke={stroke(170)} - strokeWidth={getStrokeWidth(170)} - dataLedIndex={getLEDIndex(170)} - dataKeyIndex={keyIndex(170)} - dataLayer={layer} - path="M0.469971 4.84003C0.469971 3.77916 0.891395 2.76168 1.64154 2.01154C2.39169 1.26139 3.4091 0.840027 4.46997 0.840027H35.47C36.5308 0.840027 37.5483 1.26139 38.2984 2.01154C39.0485 2.76168 39.4699 3.77916 39.4699 4.84003C39.4699 5.90089 39.0485 6.91825 38.2984 7.6684C37.5483 8.41854 36.5308 8.84003 35.47 8.84003H4.46997C3.4091 8.84003 2.39169 8.41854 1.64154 7.6684C0.891395 6.91825 0.469971 5.90089 0.469971 4.84003Z" - /> - { - setUndeglowIndex(169, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(169)} - stroke={stroke(169)} - strokeWidth={getStrokeWidth(169)} - dataLedIndex={getLEDIndex(169)} - dataKeyIndex={keyIndex(169)} - dataLayer={layer} - path="M0.469971 4.84003C0.469971 3.77916 0.891456 2.76168 1.6416 2.01154C2.39175 1.26139 3.4091 0.840027 4.46997 0.840027H35.47C36.5308 0.840027 37.5483 1.26139 38.2985 2.01154C39.0486 2.76168 39.47 3.77916 39.47 4.84003C39.47 5.90089 39.0486 6.91825 38.2985 7.6684C37.5483 8.41854 36.5308 8.84003 35.47 8.84003H4.46997C3.4091 8.84003 2.39175 8.41854 1.6416 7.6684C0.891456 6.91825 0.469971 5.90089 0.469971 4.84003Z" - /> - { - setUndeglowIndex(168, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(168)} - stroke={stroke(168)} - strokeWidth={getStrokeWidth(168)} - dataLedIndex={getLEDIndex(168)} - dataKeyIndex={keyIndex(168)} - dataLayer={layer} - path="M0.469917 4.84006C0.469917 3.77919 0.891402 2.76171 1.64155 2.01157C2.39169 1.26142 3.40905 0.840058 4.46992 0.840058H31.53C32.6961 0.838229 33.8612 0.771386 35.02 0.639985C36.0808 0.521964 37.1451 0.830227 37.9787 1.49692C38.8123 2.16361 39.3469 3.13417 39.4649 4.19504C39.5829 5.2559 39.2748 6.32018 38.6081 7.15378C37.9414 7.98738 36.9708 8.52196 35.91 8.63999C34.4556 8.80328 32.9934 8.88674 31.53 8.88999H4.46992C3.9404 8.89003 3.41615 8.78492 2.92756 8.58078C2.43897 8.37664 1.99582 8.07752 1.62373 7.70078C1.25163 7.32403 0.958009 6.87717 0.759956 6.38608C0.561903 5.89499 0.463298 5.36954 0.469917 4.84006Z" - /> - - {/* End Right side */} - - - + {/* End Right side */} + + ); } } diff --git a/src/api/hardware-dygma-defy-wireless/index.js b/src/api/hardware-dygma-defy-wireless/index.js index a901bf251..2f49d30c0 100644 --- a/src/api/hardware-dygma-defy-wireless/index.js +++ b/src/api/hardware-dygma-defy-wireless/index.js @@ -27,31 +27,31 @@ const Defy_wireless = { urls: [ { name: "Homepage", - url: "https://www.dygma.com/defy/" - } - ] + url: "https://www.dygma.com/defy/", + }, + ], }, usb: { vendorId: 0x35ef, - productId: 0x0012 + productId: 0x0012, }, keyboard: { rows: 5, - columns: 16 + columns: 16, }, keyboardUnderglow: { rows: 2, - columns: 89 + columns: 89, }, RGBWMode: true, components: { - keymap: KeymapDEFY + keymap: KeymapDEFY, }, instructions: { en: { - updateInstructions: `To update the firmware, the keyboard needs a special reset. When the countdown starts, press and hold the Escape key. Soon after the countdown finished, the Neuron's light should start a blue pulsing pattern, and the flashing will proceed. At this point, you should release the Escape key.` - } + updateInstructions: `To update the firmware, the keyboard needs a special reset. When the countdown starts, press and hold the Escape key. Soon after the countdown finished, the Neuron's light should start a blue pulsing pattern, and the flashing will proceed. At this point, you should release the Escape key.`, + }, }, flash: async (_, filename, bootloader, flashDefyWireless, stateUpdate) => { @@ -65,21 +65,15 @@ const Defy_wireless = { flashDefyWireless.saveBackupFile(); }); }, - isDeviceSupported: async port => { - // let focus = new Focus(); - // let layout = localStorage.getItem(port.serialNumber); - // if (!layout) { - // focus._port && focus._port.path === port.path - // ? await focus.open(focus._port, port.device, null) - // : await focus.open(port.path, port.device, null); - // layout = await focus.command("hardware.layout"); - // focus.close(); - // localStorage.setItem(port.serialNumber, layout); - // } - // return layout.trim() === "ANSI"; - return 1; - } + // const focus = new Focus(); + // focus._port && focus._port.path === port.path + // ? await focus.open(focus._port, port.device, null) + // : await focus.open(port.path, port.device, null); + // port.serialNumber = await focus.command("hardware.chip_id"); + // let result = await focus.close(); + return true; + }, }; const Defy_wirelessBootloader = { @@ -91,19 +85,19 @@ const Defy_wirelessBootloader = { urls: [ { name: "Homepage", - url: "https://www.dygma.com/defy/" - } - ] + url: "https://www.dygma.com/defy/", + }, + ], }, usb: { vendorId: 0x35ef, - productId: 0x0013 + productId: 0x0013, }, bootloader: true, instructions: { en: { - updateInstructions: `To update the firmware, press the button at the bottom. You must not hold any key on the keyboard while the countdown is in progress, nor afterwards, until the flashing is finished. When the countdown reaches zero, the Neuron's light should start a blue pulsing pattern, and flashing will then proceed. ` - } + updateInstructions: `To update the firmware, press the button at the bottom. You must not hold any key on the keyboard while the countdown is in progress, nor afterwards, until the flashing is finished. When the countdown reaches zero, the Neuron's light should start a blue pulsing pattern, and flashing will then proceed. `, + }, }, flash: async (_, filename, bootloader, flashDefyWireless, stateUpdate) => { return new Promise(async (resolve, reject) => { @@ -114,7 +108,7 @@ const Defy_wirelessBootloader = { reject(e); } }); - } + }, }; export { Defy_wireless, Defy_wirelessBootloader }; diff --git a/src/api/hardware-dygma-raise-ansi/components/Keymap-ANSI.js b/src/api/hardware-dygma-raise-ansi/components/Keymap-ANSI.js index 45d6ef1ec..a7ce10fa7 100644 --- a/src/api/hardware-dygma-raise-ansi/components/Keymap-ANSI.js +++ b/src/api/hardware-dygma-raise-ansi/components/Keymap-ANSI.js @@ -42,7 +42,7 @@ const led_map = [ 3 + LEDS_LEFT_KEYS, 2 + LEDS_LEFT_KEYS, 1 + LEDS_LEFT_KEYS, - 0 + LEDS_LEFT_KEYS + 0 + LEDS_LEFT_KEYS, ], [ 7, @@ -60,7 +60,7 @@ const led_map = [ 10 + LEDS_LEFT_KEYS, 9 + LEDS_LEFT_KEYS, 8 + LEDS_LEFT_KEYS, - 7 + LEDS_LEFT_KEYS + 7 + LEDS_LEFT_KEYS, ], [ 13, @@ -78,7 +78,7 @@ const led_map = [ 18 + LEDS_LEFT_KEYS, 17 + LEDS_LEFT_KEYS, 16 + LEDS_LEFT_KEYS, - 15 + LEDS_LEFT_KEYS + 15 + LEDS_LEFT_KEYS, ], [ 19, @@ -96,7 +96,7 @@ const led_map = [ 25 + LEDS_LEFT_KEYS, 24 + LEDS_LEFT_KEYS, 23 + LEDS_LEFT_KEYS, - 22 + LEDS_LEFT_KEYS + 22 + LEDS_LEFT_KEYS, ], [ 26, @@ -114,8 +114,8 @@ const led_map = [ 31 + LEDS_LEFT_KEYS, 30 + LEDS_LEFT_KEYS, 29 + LEDS_LEFT_KEYS, - 28 + LEDS_LEFT_KEYS - ] + 28 + LEDS_LEFT_KEYS, + ], ]; const no_key_led_map = [...Array.apply(0, Array(63)).map((_, i) => i + UNDERGLOW)]; @@ -126,14 +126,14 @@ const keysRowsPosition = { row3: 169, row4: 236, row5: 303, - row6: 370 + row6: 370, }; class KeymapANSI extends React.Component { constructor(props) { super(props); this.state = { - underglowIndex: null + underglowIndex: null, }; } @@ -159,22 +159,18 @@ class KeymapANSI extends React.Component { } return aux; }; - let keyIndex = (row, col) => { - return col !== undefined ? row * 16 + col : row + 11; - }; + const keyIndex = (row, col) => (col !== undefined ? row * 16 + col : row + 11); - let getLabel = (row, col) => { - return keymap[keyIndex(row, col)]; - }; + const getLabel = (row, col) => keymap[keyIndex(row, col)]; - let isSelected = (row, col) => { + const isSelected = (row, col) => { const selectIndex = keyIndex(row, col); return underglowIndex ? underglowIndex == selectIndex : this.props.selectedKey == selectIndex; }; - let stroke = (row, col) => (isSelected(row, col) ? (this.props.darkMode ? "#fff" : "#000") : "#b3b3b3"); + const stroke = (row, col) => (isSelected(row, col) ? (this.props.darkMode ? "#fff" : "#000") : "#b3b3b3"); - let getStrokeWidth = (row, col) => (isSelected(row, col) ? "3.0" : "1.5"); + const getStrokeWidth = (row, col) => (isSelected(row, col) ? "3.0" : "1.5"); const colormap = this.props.colormap || @@ -187,19 +183,18 @@ class KeymapANSI extends React.Component { : Array(16) .fill() .map(() => ({ - rgb: "#ffffff" + rgb: "#ffffff", })); - let getColor = (row, col) => { - let ledIndex = col !== undefined ? led_map[parseInt(row)][parseInt(col)] : no_key_led_map[row - UNDERGLOW], - colorIndex = colormap[ledIndex], - color = palette[colorIndex].rgb; + const getColor = (row, col) => { + const ledIndex = col !== undefined ? led_map[parseInt(row)][parseInt(col)] : no_key_led_map[row - UNDERGLOW]; + const colorIndex = colormap[ledIndex]; + const color = palette[colorIndex].rgb; return color; }; - let getLEDIndex = (row, col) => { - return col !== undefined ? led_map[parseInt(row)][parseInt(col)] : no_key_led_map[row - UNDERGLOW]; - }; + const getLEDIndex = (row, col) => + col !== undefined ? led_map[parseInt(row)][parseInt(col)] : no_key_led_map[row - UNDERGLOW]; const onClick = e => { this.setState({ underglowIndex: null }); @@ -220,15 +215,13 @@ class KeymapANSI extends React.Component { * @props {string} class - className of the button * @props {string} textLength length of the text if the button is small and additional text is longer then button */ - const GetCurrentKeyElement = props => { + function GetCurrentKeyElement(props) { return ( - <> - - {props.word}{" "} - - + + {props.word}{" "} + ); - }; + } /** * getDivideKeys - divides words on keyboard keys * @param {string} str Name of key @@ -248,24 +241,24 @@ class KeymapANSI extends React.Component { return ( ); - } else if (str.length === 1) { + } + if (str.length === 1) { return shortWords.map((word, index) => ( )); - } else if (str.toLowerCase().endsWith("to")) { + } + if (str.toLowerCase().endsWith("to")) { return longWords.map((word, index) => ( )); - } else if ( - str.length > 8 && - smallKey === true && - (str.startsWith("C+") || str.startsWith("A+") || str.startsWith("AGr+")) - ) { + } + if (str.length > 8 && smallKey === true && (str.startsWith("C+") || str.startsWith("A+") || str.startsWith("AGr+"))) { return ; - } else if ( + } + if ( longWords.length === 1 && shortWords.length > 7 && !str.startsWith("C+") && @@ -275,22 +268,24 @@ class KeymapANSI extends React.Component { ) { return longWords.map((word, index) => ( - + {` `} )); - } else if (longWords.length === 1) { + } + if (longWords.length === 1) { return longWords.map((word, index) => ); - } else if (longWords.length > 1 && smallKey === true) { + } + if (longWords.length > 1 && smallKey === true) { return longWords.map((word, index) => ( )); - } else if (longWords.length > 1) { - return ; - } else { + } + if (longWords.length > 1) { return ; } + return ; }; const topsArr = ["LEDEFF.", "SCadet", "Steno", "M.Btn", "Leader", "Numpad", "Media", "OSL", "Mouse", "M.Wheel", "M.Warp"]; const topsArrTransfer = ["SHIFTTO", "LockTo"]; @@ -319,2465 +314,2463 @@ class KeymapANSI extends React.Component { // console.log("Selected Key: ", this.props.selectedKey); // console.log("Selected LED: ", this.props.selectedLED); return ( - <> - - { - setUndeglowIndex(131, e); - }} + + { + setUndeglowIndex(131, e); + }} + className="key" + fill={getColor(131)} + stroke={stroke(131)} + strokeWidth={getStrokeWidth(131)} + dataLedIndex={getLEDIndex(131)} + dataKeyIndex={keyIndex(131)} + dataLayer={layer} + /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {/* Left side */} - { - setUndeglowIndex(71, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(71)} - stroke={stroke(71)} - strokeWidth={getStrokeWidth(71)} - dataLedIndex={getLEDIndex(71)} - dataKeyIndex={keyIndex(71)} - dataLayer={layer} - path="M3 33C4.7 33 6 31.7 6 30V17C6 10.9 10.9 6 17 6H82.7C84.4 6 85.7 4.7 85.7 3C85.7 1.3 84.4 0 82.7 0H17C7.6 0 0 7.6 0 17V30C0 31.6 1.4 33 3 33Z" - /> - { - setUndeglowIndex(72, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(72)} - stroke={stroke(72)} - strokeWidth={getStrokeWidth(72)} - dataLedIndex={getLEDIndex(72)} - dataKeyIndex={keyIndex(72)} - dataLayer={layer} - path="M3.26816 6H74.7318C76.5838 6 78 4.7 78 3C78 1.3 76.5838 0 74.7318 0H3.26816C1.4162 0 -1.48937e-06 1.3 -1.48937e-06 3C-1.48937e-06 4.7 1.4162 6 3.26816 6Z" - /> - { - setUndeglowIndex(73, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(73)} - stroke={stroke(73)} - strokeWidth={getStrokeWidth(73)} - dataLedIndex={getLEDIndex(73)} - dataKeyIndex={keyIndex(73)} - dataLayer={layer} - path="M3.15921 6H74.7318C76.5838 6 78 4.7 78 3C78 1.3 76.5838 0 74.7318 0H3.26816C1.4162 0 -5.93249e-07 1.3 -5.93249e-07 3C-5.93249e-07 4.7 1.41619 6 3.15921 6Z" - /> - { - setUndeglowIndex(74, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(74)} - stroke={stroke(74)} - strokeWidth={getStrokeWidth(74)} - dataLedIndex={getLEDIndex(74)} - dataKeyIndex={keyIndex(74)} - dataLayer={layer} - path="M3.26816 6H74.7318C76.5838 6 78 4.7 78 3C78 1.3 76.5838 0 74.7318 0H3.26816C1.4162 0 -5.93249e-07 1.3 -5.93249e-07 3C-5.93249e-07 4.7 1.4162 6 3.26816 6Z" - /> - { - setUndeglowIndex(75, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(75)} - stroke={stroke(75)} - strokeWidth={getStrokeWidth(75)} - dataLedIndex={getLEDIndex(75)} - dataKeyIndex={keyIndex(75)} - dataLayer={layer} - path="M3.05882 6H74.9412C76.6745 6 78 4.7 78 3C78 1.3 76.6745 0 74.9412 0H3.05882C1.32549 0 -4.47035e-06 1.3 -4.47035e-06 3C-4.47035e-06 4.7 1.42745 6 3.05882 6Z" - /> - { - setUndeglowIndex(76, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(76)} - stroke={stroke(76)} - strokeWidth={getStrokeWidth(76)} - dataLedIndex={getLEDIndex(76)} - dataKeyIndex={keyIndex(76)} - dataLayer={layer} - path="M3.63919 6H84.3608C86.423 6 88 4.7 88 3C88 1.3 86.423 0 84.3608 0H3.63919C1.57698 0 0 1.3 0 3C0 4.7 1.69829 6 3.63919 6Z" - /> - { - setUndeglowIndex(77, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(77)} - stroke={stroke(77)} - strokeWidth={getStrokeWidth(77)} - dataLedIndex={getLEDIndex(77)} - dataKeyIndex={keyIndex(77)} - dataLayer={layer} - path="M3 72C4.7 72 6 70.6817 6 68.9577V3.04225C6 1.31831 4.7 0 3 0C1.3 0 0 1.31831 0 3.04225V69.0592C0 70.6817 1.3 72 3 72Z" - /> - { - setUndeglowIndex(78, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(78)} - stroke={stroke(78)} - strokeWidth={getStrokeWidth(78)} - dataLedIndex={getLEDIndex(78)} - dataKeyIndex={keyIndex(78)} - dataLayer={layer} - path="M3.90002 44.1469C2.20002 44.1469 0.900024 42.8469 0.900024 41.1469V12C0.900024 9.8 2.70002 8 4.90002 8H20V3C20 1.3 21.3 0 23 0C24.7 0 26 1.3 26 3V10C26 12.2 24.2 14 22 14H6.90002V41.0469C6.90002 42.7469 5.60002 44.1469 3.90002 44.1469Z" - /> - { - setUndeglowIndex(79, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(79)} - stroke={stroke(79)} - strokeWidth={getStrokeWidth(79)} - dataLedIndex={getLEDIndex(79)} - dataKeyIndex={keyIndex(79)} - dataLayer={layer} - path="M24 100H17C14.8 100 13 98.2 13 96V29H4C1.8 29 0 27.2 0 25V3.00001C0 1.30001 1.3 0 3 0C4.7 0 6 1.30001 6 3.00001V23H15C17.2 23 19 24.8 19 27V94H24C25.7 94 27 95.3 27 97C27 98.7 25.6 100 24 100Z" - /> - { - setUndeglowIndex(80, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(80)} - stroke={stroke(80)} - strokeWidth={getStrokeWidth(80)} - dataLedIndex={getLEDIndex(80)} - dataKeyIndex={keyIndex(80)} - dataLayer={layer} - path="M11 54C9.3 54 8 52.7 8 51V6H3C1.3 6 0 4.7 0 3C0 1.3 1.3 0 3 0H10C12.2 0 14 1.8 14 4V51C14 52.7 12.7 54 11 54Z" - /> - { - setUndeglowIndex(81, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(81)} - stroke={stroke(81)} - strokeWidth={getStrokeWidth(81)} - dataLedIndex={getLEDIndex(81)} - dataKeyIndex={keyIndex(81)} - dataLayer={layer} - path="M3 57C1.3 57 0 55.7 0 54V17C0 14.8 1.8 13 4 13H14V3C14 1.3 15.3 0 17 0C18.7 0 20 1.3 20 3V15C20 17.2 18.2 19 16 19H6V54C6 55.6 4.6 57 3 57Z" - /> - { - setUndeglowIndex(82, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(82)} - stroke={stroke(82)} - strokeWidth={getStrokeWidth(82)} - dataLedIndex={getLEDIndex(82)} - dataKeyIndex={keyIndex(82)} - dataLayer={layer} - path="M3 64C4.7 64 6 62.6271 6 60.8317V3.16832C6 1.37294 4.7 0 3 0C1.3 0 0 1.37294 0 3.16832V60.9373C0 62.6271 1.4 64 3 64Z" - /> - { - setUndeglowIndex(83, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(83)} - stroke={stroke(83)} - strokeWidth={getStrokeWidth(83)} - dataLedIndex={getLEDIndex(83)} - dataKeyIndex={keyIndex(83)} - dataLayer={layer} - path="M3 30.2H70V3C70 1.3 68.7 0 67 0C65.3 0 64 1.3 64 3V24.2H3C1.3 24.2 0 25.5 0 27.2C0 28.9 1.3 30.2 3 30.2Z" - /> - { - setUndeglowIndex(84, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(84)} - stroke={stroke(84)} - strokeWidth={getStrokeWidth(84)} - dataLedIndex={getLEDIndex(84)} - dataKeyIndex={keyIndex(84)} - dataLayer={layer} - path="M17.3 12.9999L6.0062 60.528C5.61846 62.1598 3.9664 63.155 2.34265 62.7351C0.763683 62.3268 -0.198242 60.73 0.178802 59.1433L11.5 11.4999C13.2 4.79994 19.1 0.199951 26 0.199951H43C44.7 0.199951 46 1.49995 46 3.19995C46 4.89995 44.7 6.19995 43 6.19995H26C21.9 6.19995 18.3 8.99994 17.3 12.9999Z" - /> - { - setUndeglowIndex(85, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(85)} - stroke={stroke(85)} - strokeWidth={getStrokeWidth(85)} - dataLedIndex={getLEDIndex(85)} - dataKeyIndex={keyIndex(85)} - dataLayer={layer} - path="M2.98818 67.9882C4.28818 67.9882 5.58819 67.0882 5.88819 65.6882L21.5882 3.68821C21.9882 2.08821 20.9882 0.488203 19.3882 0.0882035C17.7882 -0.311797 16.1882 0.688185 15.7882 2.28819L0.0881882 64.2882C-0.311811 65.8882 0.688185 67.4882 2.28819 67.8882C2.48819 67.9882 2.68818 67.9882 2.98818 67.9882Z" - /> - { - setUndeglowIndex(86, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(86)} - stroke={stroke(86)} - strokeWidth={getStrokeWidth(86)} - dataLedIndex={getLEDIndex(86)} - dataKeyIndex={keyIndex(86)} - dataLayer={layer} - path="M3.2 69.2C4.5 69.2 5.80001 68.3 6.10001 66.9L21.8 3.9C22.2 2.3 21.2 0.699995 19.6 0.299995C18 -0.100005 16.4 0.899977 16 2.49998L0.300011 65.5C-0.0999889 67.1 0.900007 68.7 2.50001 69.1C2.70001 69.2 2.90001 69.2 3.2 69.2Z" - /> - - { - setUndeglowIndex(87, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(87)} - stroke={stroke(87)} - strokeWidth={getStrokeWidth(87)} - dataLedIndex={getLEDIndex(87)} - dataKeyIndex={keyIndex(87)} - dataLayer={layer} - path="M3.1 40.0999H18.4C26.2 40.0999 32.9 34.7999 34.9 27.2999L40.9 3.69996C41.3 2.09996 40.3 0.49992 38.7 0.0999204C37.1 -0.30008 35.5 0.699932 35.1 2.29993L29.1 25.9C27.9 30.8 23.5 34.2 18.4 34.2H3.1C1.4 34.2 0.0999985 35.5 0.0999985 37.2C0.0999985 38.9 1.5 40.0999 3.1 40.0999Z" - /> - { - setUndeglowIndex(88, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(88)} - stroke={stroke(88)} - strokeWidth={getStrokeWidth(88)} - dataLedIndex={getLEDIndex(88)} - dataKeyIndex={keyIndex(88)} - dataLayer={layer} - path="M3.49929 6.09998H78.5007C80.4836 6.09998 82 4.79998 82 3.09998C82 1.39998 80.4836 0.0999756 78.5007 0.0999756H3.49929C1.51636 0.0999756 2.24619e-06 1.39998 2.24619e-06 3.09998C2.24619e-06 4.79998 1.633 6.09998 3.49929 6.09998Z" - /> - { - setUndeglowIndex(89, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(89)} - stroke={stroke(89)} - strokeWidth={getStrokeWidth(89)} - dataLedIndex={getLEDIndex(89)} - dataKeyIndex={keyIndex(89)} - dataLayer={layer} - path="M3.21568 6.09998H78.7843C80.6065 6.09998 82 4.79998 82 3.09998C82 1.39998 80.6065 0.0999756 78.7843 0.0999756H3.21568C1.39346 0.0999756 -4.23193e-06 1.39998 -4.23193e-06 3.09998C-4.23193e-06 4.79998 1.39346 6.09998 3.21568 6.09998Z" - /> - - { - setUndeglowIndex(90, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(90)} - stroke={stroke(90)} - strokeWidth={getStrokeWidth(90)} - dataLedIndex={getLEDIndex(90)} - dataKeyIndex={keyIndex(90)} - dataLayer={layer} - path="M3.34235 6.09998H78.6576C80.5516 6.09998 82 4.79998 82 3.09998C82 1.39998 80.5516 0.0999756 78.6576 0.0999756H3.34235C1.44833 0.0999756 -4.05312e-06 1.39998 -4.05312e-06 3.09998C-4.05312e-06 4.79998 1.55974 6.09998 3.34235 6.09998Z" - /> - { - setUndeglowIndex(91, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(91)} - stroke={stroke(91)} - strokeWidth={getStrokeWidth(91)} - dataLedIndex={getLEDIndex(91)} - dataKeyIndex={keyIndex(91)} - dataLayer={layer} - path="M7.90002 7.10002H83C84.7 7.10002 86 5.80002 86 4.10002C86 2.40002 84.7 1.10002 83 1.10002H7.90002C6.70002 1.10002 5.49999 0.900048 4.29999 0.500048C2.69999 4.825e-05 1 0.800073 0.5 2.40007C0 4.00007 0.800024 5.70006 2.40002 6.20006C4.10002 6.80006 6.00002 7.10002 7.90002 7.10002Z" - /> - { - setUndeglowIndex(92, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(92)} - stroke={stroke(92)} - strokeWidth={getStrokeWidth(92)} - dataLedIndex={getLEDIndex(92)} - dataKeyIndex={keyIndex(92)} - dataLayer={layer} - path="M7.59999 68.7001C8.09999 68.7001 8.60001 68.6 9.00001 68.3C10.5 67.5 11 65.7001 10.2 64.2001C9.40002 62.7001 8.90003 61.1001 8.90003 59.4001L6.8 3.20007C6.7 1.50007 5.40002 0.300049 3.70002 0.300049C2.00002 0.400049 0.799998 1.80009 0.799998 3.40009L2.90003 59.6C3.00003 62.2 3.70003 64.8 4.90003 67.1C5.50003 68.2 6.49999 68.7001 7.59999 68.7001Z" - /> - { - setUndeglowIndex(93, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(93)} - stroke={stroke(93)} - strokeWidth={getStrokeWidth(93)} - dataLedIndex={getLEDIndex(93)} - dataKeyIndex={keyIndex(93)} - dataLayer={layer} - path="M4.40002 60.4H4.5C6.2 60.3 7.40002 58.9 7.40002 57.3L6 2.89999C5.9 1.19999 4.60002 0 2.90002 0C1.20002 0.1 0 1.50001 0 3.10001L1.40002 57.5C1.50002 59.1 2.80002 60.4 4.40002 60.4Z" - /> - { - setUndeglowIndex(94, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(94)} - stroke={stroke(94)} - strokeWidth={getStrokeWidth(94)} - dataLedIndex={getLEDIndex(94)} - dataKeyIndex={keyIndex(94)} - dataLayer={layer} - path="M4.59998 67H4.70001C6.40001 66.9 7.59998 65.5 7.59998 63.9L6 2.99997C5.9 1.29997 4.60002 0.0999756 2.90002 0.0999756C1.20002 0.199976 0 1.59998 0 3.19998L1.59998 64.1C1.59998 65.7 2.99998 67 4.59998 67Z" - /> - { - setUndeglowIndex(95, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(95)} - stroke={stroke(95)} - strokeWidth={getStrokeWidth(95)} - dataLedIndex={getLEDIndex(95)} - dataKeyIndex={keyIndex(95)} - dataLayer={layer} - path="M4.59998 66.9H4.70001C6.40001 66.8 7.59998 65.4 7.59998 63.8L6 2.89999C5.9 1.19999 4.60002 0 2.90002 0C1.20002 0.1 0 1.50001 0 3.10001L1.59998 64C1.59998 65.6 2.99998 66.9 4.59998 66.9Z" - /> - - { - setUndeglowIndex(96, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(96)} - stroke={stroke(96)} - strokeWidth={getStrokeWidth(96)} - dataLedIndex={getLEDIndex(96)} - dataKeyIndex={keyIndex(96)} - dataLayer={layer} - path="M5.90747 68H6.00744C7.70744 67.9 8.90747 66.5 8.90747 64.9L6.60748 3.10001C6.50748 1.40001 5.10744 0.100012 3.50744 0.200012C1.80744 0.300012 0.60748 1.70002 0.60748 3.30002L2.90747 65.1C2.90747 66.8 4.30747 68 5.90747 68Z" - /> - { - setUndeglowIndex(97, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(97)} - stroke={stroke(97)} - strokeWidth={getStrokeWidth(97)} - dataLedIndex={getLEDIndex(97)} - dataKeyIndex={keyIndex(97)} - dataLayer={layer} - path="M3.39996 112H3.5C5.2 111.9 6.39996 110.5 6.39996 108.9L6.20001 104.5C5.90001 96.1 8.39998 87.7 13.1 80.8L41 40.6C46.3 33 49 24.1 49 14.9V3C49 1.3 47.7 0 46 0C44.3 0 43 1.3 43 3V15C43 23 40.6 30.7 36 37.2L8.09998 77.4C2.59998 85.3 -0.300024 95 0.0999756 104.7L0.299988 109.1C0.399988 110.7 1.79996 112 3.39996 112Z" - /> - { - setUndeglowIndex(98, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(98)} - stroke={stroke(98)} - strokeWidth={getStrokeWidth(98)} - dataLedIndex={getLEDIndex(98)} - dataKeyIndex={keyIndex(98)} - dataLayer={layer} - path="M3 52C4.7 52 6 50.6693 6 48.9291V3.07087C6 1.33071 4.7 0 3 0C1.3 0 0 1.33071 0 3.07087V48.9291C0 50.6693 1.4 52 3 52Z" - /> - { - setUndeglowIndex(69, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(69)} - stroke={stroke(69)} - strokeWidth={getStrokeWidth(69)} - dataLedIndex={getLEDIndex(69)} - dataKeyIndex={keyIndex(69)} - dataLayer={layer} - path="M3 52C4.7 52 6 50.5556 6 48.6667V3.33333C6 1.44444 4.7 0 3 0C1.3 0 0 1.44444 0 3.33333V48.6667C0 50.5556 1.4 52 3 52Z" - /> - { - setUndeglowIndex(70, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(70)} - stroke={stroke(70)} - strokeWidth={getStrokeWidth(70)} - dataLedIndex={getLEDIndex(70)} - dataKeyIndex={keyIndex(70)} - dataLayer={layer} - path="M3 52C4.7 52 6 50.5556 6 48.6667V3.33333C6 1.44444 4.7 0 3 0C1.3 0 0 1.44444 0 3.33333V48.6667C0 50.4444 1.4 52 3 52Z" - /> - {/* End Left side */} - {/* Right side */} - { - setUndeglowIndex(107, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(107)} - stroke={stroke(107)} - strokeWidth={getStrokeWidth(107)} - dataLedIndex={getLEDIndex(107)} - dataKeyIndex={keyIndex(107)} - dataLayer={layer} - path="M77.967 6H3.033C1.314 6 0 4.7 0 3s1.314-3 3.033-3h74.934C79.686 0 81 1.3 81 3s-1.415 3-3.033 3z" - /> - { - setUndeglowIndex(106, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(106)} - stroke={stroke(106)} - strokeWidth={getStrokeWidth(106)} - dataLedIndex={getLEDIndex(106)} - dataKeyIndex={keyIndex(106)} - dataLayer={layer} - path="M70.8908 6H3.10924C1.34734 6 0 4.7 0 3C0 1.3 1.34734 0 3.10924 0H70.8908C72.6527 0 74 1.3 74 3C74 4.7 72.6527 6 70.8908 6Z" - /> - { - setUndeglowIndex(105, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(105)} - stroke={stroke(105)} - strokeWidth={getStrokeWidth(105)} - dataLedIndex={getLEDIndex(105)} - dataKeyIndex={keyIndex(105)} - dataLayer={layer} - path="M82.6275 6H3.37255C1.46144 6 0 4.7 0 3C0 1.3 1.46144 0 3.37255 0H82.6275C84.5386 0 86 1.3 86 3C86 4.7 84.4261 6 82.6275 6Z" - /> - { - setUndeglowIndex(104, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(104)} - stroke={stroke(104)} - strokeWidth={getStrokeWidth(104)} - dataLedIndex={getLEDIndex(104)} - dataKeyIndex={keyIndex(104)} - dataLayer={layer} - path="M68.9832 6H3.01676C1.30726 6 0 4.7 0 3C0 1.3 1.30726 0 3.01676 0H68.9832C70.6927 0 72 1.3 72 3C72 4.7 70.6927 6 68.9832 6Z" - /> - { - setUndeglowIndex(103, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(103)} - stroke={stroke(103)} - strokeWidth={getStrokeWidth(103)} - dataLedIndex={getLEDIndex(103)} - dataKeyIndex={keyIndex(103)} - dataLayer={layer} - path="M71.0028 6H3.10056C1.34358 6 0 4.7 0 3C0 1.3 1.34358 0 3.10056 0H70.8994C72.6564 0 74 1.3 74 3C74 4.7 72.6564 6 71.0028 6Z" - /> - { - setUndeglowIndex(102, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(102)} - stroke={stroke(102)} - strokeWidth={getStrokeWidth(102)} - dataLedIndex={getLEDIndex(102)} - dataKeyIndex={keyIndex(102)} - dataLayer={layer} - path="M70.8994 6H3.10056C1.34358 6 0 4.7 0 3C0 1.3 1.34358 0 3.10056 0H70.8994C72.6564 0 74 1.3 74 3C74 4.7 72.6564 6 70.8994 6Z" - /> - { - setUndeglowIndex(101, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(101)} - stroke={stroke(101)} - strokeWidth={getStrokeWidth(101)} - dataLedIndex={getLEDIndex(101)} - dataKeyIndex={keyIndex(101)} - dataLayer={layer} - path="M85.0001 33C83.3001 33 82.0001 31.7 82.0001 30V17C82.0001 10.9 77.1001 6 71.0001 6H3.30005C1.60005 6 0.300049 4.7 0.300049 3C0.300049 1.3 1.60005 0 3.30005 0H71.0001C80.4001 0 88.0001 7.6 88.0001 17V30C88.0001 31.6 86.6001 33 85.0001 33Z" - /> - { - setUndeglowIndex(100, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(100)} - stroke={stroke(100)} - strokeWidth={getStrokeWidth(100)} - dataLedIndex={getLEDIndex(100)} - dataKeyIndex={keyIndex(100)} - dataLayer={layer} - path="M3 52C1.3 52 0 50.5556 0 48.6667V3.33333C0 1.44444 1.3 0 3 0C4.7 0 6 1.44444 6 3.33333V48.6667C6 50.4444 4.6 52 3 52Z" - /> - { - setUndeglowIndex(99, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(99)} - stroke={stroke(99)} - strokeWidth={getStrokeWidth(99)} - dataLedIndex={getLEDIndex(99)} - dataKeyIndex={keyIndex(99)} - dataLayer={layer} - path="M3 52C1.3 52 0 50.5556 0 48.6667V3.33333C0 1.44444 1.3 0 3 0C4.7 0 6 1.44444 6 3.33333V48.6667C6 50.5556 4.6 52 3 52Z" - /> - { - setUndeglowIndex(130, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(130)} - stroke={stroke(130)} - strokeWidth={getStrokeWidth(130)} - dataLedIndex={getLEDIndex(130)} - dataKeyIndex={keyIndex(130)} - dataLayer={layer} - path="M3 52C1.3 52 0 50.6693 0 48.9291V3.07087C0 1.33071 1.3 0 3 0C4.7 0 6 1.33071 6 3.07087V48.9291C6 50.6693 4.6 52 3 52Z" - /> - { - setUndeglowIndex(129, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(129)} - stroke={stroke(129)} - strokeWidth={getStrokeWidth(129)} - dataLedIndex={getLEDIndex(129)} - dataKeyIndex={keyIndex(129)} - dataLayer={layer} - path="M45.6 112H45.5C43.8 111.9 42.6 110.5 42.6 108.9L42.8 104.5C43.1 96.1 40.6 87.7 35.9 80.8L8 40.6C2.7 33 0 24.1 0 14.9V3C0 1.3 1.3 0 3 0C4.7 0 6 1.3 6 3V15C6 23 8.4 30.7 13 37.2L40.9 77.4C46.4 85.3 49.3 95 48.9 104.7L48.7 109.1C48.6 110.7 47.2 112 45.6 112Z" - /> - { - setUndeglowIndex(128, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(128)} - stroke={stroke(128)} - strokeWidth={getStrokeWidth(128)} - dataLedIndex={getLEDIndex(128)} - dataKeyIndex={keyIndex(128)} - dataLayer={layer} - path="M3.67102 67.8054H3.57105C1.87105 67.7054 0.671023 66.3054 0.671023 64.7054L2.97101 2.90543C3.07101 1.20543 4.47105 -0.0945679 6.07105 0.00543213C7.77105 0.105432 8.97101 1.50544 8.97101 3.10544L6.67102 64.9054C6.67102 66.6054 5.27102 67.8054 3.67102 67.8054Z" - /> - { - setUndeglowIndex(127, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(127)} - stroke={stroke(127)} - strokeWidth={getStrokeWidth(127)} - dataLedIndex={getLEDIndex(127)} - dataKeyIndex={keyIndex(127)} - dataLayer={layer} - path="M3.67102 67.8054H3.57105C1.87105 67.7054 0.671023 66.3054 0.671023 64.7054L2.97101 2.90543C3.07101 1.20543 4.47105 -0.0945679 6.07105 0.00543213C7.77105 0.105432 8.97101 1.50544 8.97101 3.10544L6.67102 64.9054C6.67102 66.6054 5.27102 67.8054 3.67102 67.8054Z" - /> - { - setUndeglowIndex(126, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(126)} - stroke={stroke(126)} - strokeWidth={getStrokeWidth(126)} - dataLedIndex={getLEDIndex(126)} - dataKeyIndex={keyIndex(126)} - dataLayer={layer} - path="M3.97852 67.8054H3.87848C2.17848 67.7054 0.978516 66.3054 0.978516 64.7054L2.57849 3.80539C2.67849 2.10539 3.97847 0.905396 5.67847 0.905396C7.37847 1.0054 8.57849 2.4054 8.57849 4.0054L6.97852 64.9054C6.97852 66.5054 5.57852 67.8054 3.97852 67.8054Z" - /> - { - setUndeglowIndex(125, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(125)} - stroke={stroke(125)} - strokeWidth={getStrokeWidth(125)} - dataLedIndex={getLEDIndex(125)} - dataKeyIndex={keyIndex(125)} - dataLayer={layer} - path="M3.17847 61.2054H3.07849C1.37849 61.1054 0.178467 59.7054 0.178467 58.1054L1.57849 3.70541C1.67849 2.00541 2.97847 0.80542 4.67847 0.80542C6.37847 0.90542 7.57849 2.30543 7.57849 3.90543L6.17847 58.3054C6.07847 59.9054 4.77847 61.2054 3.17847 61.2054Z" - /> - { - setUndeglowIndex(124, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(124)} - stroke={stroke(124)} - strokeWidth={getStrokeWidth(124)} - dataLedIndex={getLEDIndex(124)} - dataKeyIndex={keyIndex(124)} - dataLayer={layer} - path="M2.97851 68.5055C2.47851 68.5055 1.97848 68.4055 1.57848 68.1055C0.0784807 67.3055 -0.421532 65.5055 0.378468 64.0055C1.17847 62.5055 1.67846 60.9055 1.67846 59.2055L3.77849 3.00549C3.87849 1.30549 5.17847 0.105469 6.87847 0.105469C8.57847 0.205469 9.77849 1.60551 9.77849 3.20551L7.67846 59.4055C7.57846 62.0055 6.87846 64.6055 5.67846 66.9055C5.07846 68.0055 4.07851 68.5055 2.97851 68.5055Z" - /> - { - setUndeglowIndex(123, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(123)} - stroke={stroke(123)} - strokeWidth={getStrokeWidth(123)} - dataLedIndex={getLEDIndex(123)} - dataKeyIndex={keyIndex(123)} - dataLayer={layer} - path="M72.1 7.10002H3C1.3 7.10002 0 5.80002 0 4.10002C0 2.40002 1.3 1.10002 3 1.10002H72.1C73.3 1.10002 74.5 0.900048 75.7 0.500048C77.3 4.825e-05 79 0.800073 79.5 2.40007C80 4.00007 79.2 5.70006 77.6 6.20006C75.9 6.80006 74 7.10002 72.1 7.10002Z" - /> - { - setUndeglowIndex(122, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(122)} - stroke={stroke(122)} - strokeWidth={getStrokeWidth(122)} - dataLedIndex={getLEDIndex(122)} - dataKeyIndex={keyIndex(122)} - dataLayer={layer} - path="M74.9412 6.09998H3.05882C1.32549 6.09998 0 4.79998 0 3.09998C0 1.39998 1.32549 0.0999756 3.05882 0.0999756H74.9412C76.6745 0.0999756 78 1.39998 78 3.09998C78 4.79998 76.6745 6.09998 74.9412 6.09998Z" - /> - { - setUndeglowIndex(121, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(121)} - stroke={stroke(121)} - strokeWidth={getStrokeWidth(121)} - dataLedIndex={getLEDIndex(121)} - dataKeyIndex={keyIndex(121)} - dataLayer={layer} - path="M74.9412 6.09998H3.05882C1.32549 6.09998 0 4.79998 0 3.09998C0 1.39998 1.32549 0.0999756 3.05882 0.0999756H74.9412C76.6745 0.0999756 78 1.39998 78 3.09998C78 4.79998 76.6745 6.09998 74.9412 6.09998Z" - /> + - { - setUndeglowIndex(120, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(120)} - stroke={stroke(120)} - strokeWidth={getStrokeWidth(120)} - dataLedIndex={getLEDIndex(120)} - dataKeyIndex={keyIndex(120)} - dataLayer={layer} - path="M74.6714 6.09998H3.32859C1.44239 6.09998 0 4.79998 0 3.09998C0 1.39998 1.44239 0.0999756 3.32859 0.0999756H74.6714C76.5576 0.0999756 78 1.39998 78 3.09998C78 4.79998 76.4467 6.09998 74.6714 6.09998Z" - /> - { - setUndeglowIndex(119, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(119)} - stroke={stroke(119)} - strokeWidth={getStrokeWidth(119)} - dataLedIndex={getLEDIndex(119)} - dataKeyIndex={keyIndex(119)} - dataLayer={layer} - path="M74.6761 6.09998H3.32386C1.44034 6.09998 0 4.79998 0 3.09998C0 1.39998 1.44034 0.0999756 3.32386 0.0999756H74.6761C76.5597 0.0999756 78 1.39998 78 3.09998C78 4.79998 76.5597 6.09998 74.6761 6.09998Z" - /> - { - setUndeglowIndex(118, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(118)} - stroke={stroke(118)} - strokeWidth={getStrokeWidth(118)} - dataLedIndex={getLEDIndex(118)} - dataKeyIndex={keyIndex(118)} - dataLayer={layer} - path="M29.9 40.0999H22.6C14.8 40.0999 8.10001 34.7999 6.10001 27.2999L0.100013 3.69996C-0.299987 2.09996 0.70001 0.49992 2.30001 0.0999204C3.90001 -0.30008 5.5 0.699932 5.9 2.29993L11.9 25.9C13.1 30.8 17.5 34.2 22.6 34.2H29.9C31.6 34.2 32.9 35.5 32.9 37.2C32.9 38.9 31.5 40.0999 29.9 40.0999Z" - /> - { - setUndeglowIndex(117, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(117)} - stroke={stroke(117)} - strokeWidth={getStrokeWidth(117)} - dataLedIndex={getLEDIndex(117)} - dataKeyIndex={keyIndex(117)} - dataLayer={layer} - path="M19.4764 69.2C18.1764 69.2 16.8764 68.3 16.5764 66.9L0.87641 3.9C0.47641 2.3 1.47641 0.699995 3.07641 0.299995C4.67641 -0.100005 6.27641 0.899977 6.67641 2.49998L22.3764 65.5C22.7764 67.1 21.7764 68.7 20.1764 69.1C19.9764 69.2 19.7764 69.2 19.4764 69.2Z" - /> - { - setUndeglowIndex(116, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(116)} - stroke={stroke(116)} - strokeWidth={getStrokeWidth(116)} - dataLedIndex={getLEDIndex(116)} - dataKeyIndex={keyIndex(116)} - dataLayer={layer} - path="M18.6882 67.9882C17.3882 67.9882 16.0882 67.0882 15.7882 65.6882L0.0882021 3.68821C-0.311798 2.08821 0.688207 0.488203 2.28821 0.0882035C3.88821 -0.311797 5.48821 0.688185 5.88821 2.28819L21.5882 64.2882C21.9882 65.8882 20.9882 67.4882 19.3882 67.8882C19.1882 67.9882 18.9882 67.9882 18.6882 67.9882Z" - /> - { - setUndeglowIndex(115, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(115)} - stroke={stroke(115)} - strokeWidth={getStrokeWidth(115)} - dataLedIndex={getLEDIndex(115)} - dataKeyIndex={keyIndex(115)} - dataLayer={layer} - path="M25.7 12.9999L36.9835 59.5445C37.3774 61.1694 39.0255 62.1571 40.6442 61.7385C42.2284 61.3288 43.1906 59.7235 42.805 58.1332L31.5 11.4999C29.8 4.79994 23.9 0.199951 17 0.199951H3C1.3 0.199951 0 1.49995 0 3.19995C0 4.89995 1.3 6.19995 3 6.19995H17C21.1 6.19995 24.7 8.99994 25.7 12.9999Z" - /> - { - setUndeglowIndex(114, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(114)} - stroke={stroke(114)} - strokeWidth={getStrokeWidth(114)} - dataLedIndex={getLEDIndex(114)} - dataKeyIndex={keyIndex(114)} - dataLayer={layer} - path="M70 30.2H0V3c0-1.7 1.3-3 3-3s3 1.3 3 3v21.2h64c1.7 0 3 1.3 3 3s-1.3 3-3 3z" - /> - { - setUndeglowIndex(113, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(113)} - stroke={stroke(113)} - strokeWidth={getStrokeWidth(113)} - dataLedIndex={getLEDIndex(113)} - dataKeyIndex={keyIndex(113)} - dataLayer={layer} - path="M3 64C1.3 64 0 62.6271 0 60.8317V3.16832C0 1.37294 1.3 0 3 0C4.7 0 6 1.37294 6 3.16832V60.9373C6 62.6271 4.6 64 3 64Z" - /> - { - setUndeglowIndex(112, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(112)} - stroke={stroke(112)} - strokeWidth={getStrokeWidth(112)} - dataLedIndex={getLEDIndex(112)} - dataKeyIndex={keyIndex(112)} - dataLayer={layer} - path="M3 57C1.3 57 0 55.7 0 54V27C0 24.8 1.8 23 4 23H14V3C14 1.3 15.3 0 17 0C18.7 0 20 1.3 20 3V25C20 27.2 18.2 29 16 29H6V54C6 55.6 4.6 57 3 57Z" - /> - { - setUndeglowIndex(111, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(111)} - stroke={stroke(111)} - strokeWidth={getStrokeWidth(111)} - dataLedIndex={getLEDIndex(111)} - dataKeyIndex={keyIndex(111)} - dataLayer={layer} - path="M11 74C9.3 74 8 72.7 8 71V6H3C1.3 6 0 4.7 0 3C0 1.3 1.3 0 3 0H10C12.2 0 14 1.8 14 4V71C14 72.7 12.7 74 11 74Z" - /> - { - setUndeglowIndex(110, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(110)} - stroke={stroke(110)} - strokeWidth={getStrokeWidth(110)} - dataLedIndex={getLEDIndex(110)} - dataKeyIndex={keyIndex(110)} - dataLayer={layer} - path="M24 80H17C14.8 80 13 78.2 13 76V19H4C1.8 19 0 17.2 0 15V3.00001C0 1.30001 1.3 0 3 0C4.7 0 6 1.30001 6 3.00001V13H15C17.2 13 19 14.8 19 17V74H24C25.7 74 27 75.3 27 77C27 78.7 25.6 80 24 80Z" - /> - { - setUndeglowIndex(109, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(109)} - stroke={stroke(109)} - strokeWidth={getStrokeWidth(109)} - dataLedIndex={getLEDIndex(109)} - dataKeyIndex={keyIndex(109)} - dataLayer={layer} - path="M3 52.147c-1.7 0-3-1.3-3-3V30c0-2.2 1.8-4 4-4h15.1V3c0-1.7 1.3-3 3-3s3 1.3 3 3v25c0 2.2-1.8 4-4 4H6v17.047c0 1.7-1.3 3.1-3 3.1z" - /> - { - setUndeglowIndex(108, e); - }} - selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} - fill={getColor(108)} - stroke={stroke(108)} - strokeWidth={getStrokeWidth(108)} - dataLedIndex={getLEDIndex(108)} - dataKeyIndex={keyIndex(108)} - dataLayer={layer} - path="M3 64c-1.7 0-3-1.318-3-3.042V3.042C0 1.318 1.3 0 3 0s3 1.318 3 3.042V61.06C6 62.682 4.7 64 3 64z" - /> - {/* End Right side */} - - - + + + + + + {/* Left side */} + { + setUndeglowIndex(71, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(71)} + stroke={stroke(71)} + strokeWidth={getStrokeWidth(71)} + dataLedIndex={getLEDIndex(71)} + dataKeyIndex={keyIndex(71)} + dataLayer={layer} + path="M3 33C4.7 33 6 31.7 6 30V17C6 10.9 10.9 6 17 6H82.7C84.4 6 85.7 4.7 85.7 3C85.7 1.3 84.4 0 82.7 0H17C7.6 0 0 7.6 0 17V30C0 31.6 1.4 33 3 33Z" + /> + { + setUndeglowIndex(72, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(72)} + stroke={stroke(72)} + strokeWidth={getStrokeWidth(72)} + dataLedIndex={getLEDIndex(72)} + dataKeyIndex={keyIndex(72)} + dataLayer={layer} + path="M3.26816 6H74.7318C76.5838 6 78 4.7 78 3C78 1.3 76.5838 0 74.7318 0H3.26816C1.4162 0 -1.48937e-06 1.3 -1.48937e-06 3C-1.48937e-06 4.7 1.4162 6 3.26816 6Z" + /> + { + setUndeglowIndex(73, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(73)} + stroke={stroke(73)} + strokeWidth={getStrokeWidth(73)} + dataLedIndex={getLEDIndex(73)} + dataKeyIndex={keyIndex(73)} + dataLayer={layer} + path="M3.15921 6H74.7318C76.5838 6 78 4.7 78 3C78 1.3 76.5838 0 74.7318 0H3.26816C1.4162 0 -5.93249e-07 1.3 -5.93249e-07 3C-5.93249e-07 4.7 1.41619 6 3.15921 6Z" + /> + { + setUndeglowIndex(74, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(74)} + stroke={stroke(74)} + strokeWidth={getStrokeWidth(74)} + dataLedIndex={getLEDIndex(74)} + dataKeyIndex={keyIndex(74)} + dataLayer={layer} + path="M3.26816 6H74.7318C76.5838 6 78 4.7 78 3C78 1.3 76.5838 0 74.7318 0H3.26816C1.4162 0 -5.93249e-07 1.3 -5.93249e-07 3C-5.93249e-07 4.7 1.4162 6 3.26816 6Z" + /> + { + setUndeglowIndex(75, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(75)} + stroke={stroke(75)} + strokeWidth={getStrokeWidth(75)} + dataLedIndex={getLEDIndex(75)} + dataKeyIndex={keyIndex(75)} + dataLayer={layer} + path="M3.05882 6H74.9412C76.6745 6 78 4.7 78 3C78 1.3 76.6745 0 74.9412 0H3.05882C1.32549 0 -4.47035e-06 1.3 -4.47035e-06 3C-4.47035e-06 4.7 1.42745 6 3.05882 6Z" + /> + { + setUndeglowIndex(76, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(76)} + stroke={stroke(76)} + strokeWidth={getStrokeWidth(76)} + dataLedIndex={getLEDIndex(76)} + dataKeyIndex={keyIndex(76)} + dataLayer={layer} + path="M3.63919 6H84.3608C86.423 6 88 4.7 88 3C88 1.3 86.423 0 84.3608 0H3.63919C1.57698 0 0 1.3 0 3C0 4.7 1.69829 6 3.63919 6Z" + /> + { + setUndeglowIndex(77, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(77)} + stroke={stroke(77)} + strokeWidth={getStrokeWidth(77)} + dataLedIndex={getLEDIndex(77)} + dataKeyIndex={keyIndex(77)} + dataLayer={layer} + path="M3 72C4.7 72 6 70.6817 6 68.9577V3.04225C6 1.31831 4.7 0 3 0C1.3 0 0 1.31831 0 3.04225V69.0592C0 70.6817 1.3 72 3 72Z" + /> + { + setUndeglowIndex(78, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(78)} + stroke={stroke(78)} + strokeWidth={getStrokeWidth(78)} + dataLedIndex={getLEDIndex(78)} + dataKeyIndex={keyIndex(78)} + dataLayer={layer} + path="M3.90002 44.1469C2.20002 44.1469 0.900024 42.8469 0.900024 41.1469V12C0.900024 9.8 2.70002 8 4.90002 8H20V3C20 1.3 21.3 0 23 0C24.7 0 26 1.3 26 3V10C26 12.2 24.2 14 22 14H6.90002V41.0469C6.90002 42.7469 5.60002 44.1469 3.90002 44.1469Z" + /> + { + setUndeglowIndex(79, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(79)} + stroke={stroke(79)} + strokeWidth={getStrokeWidth(79)} + dataLedIndex={getLEDIndex(79)} + dataKeyIndex={keyIndex(79)} + dataLayer={layer} + path="M24 100H17C14.8 100 13 98.2 13 96V29H4C1.8 29 0 27.2 0 25V3.00001C0 1.30001 1.3 0 3 0C4.7 0 6 1.30001 6 3.00001V23H15C17.2 23 19 24.8 19 27V94H24C25.7 94 27 95.3 27 97C27 98.7 25.6 100 24 100Z" + /> + { + setUndeglowIndex(80, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(80)} + stroke={stroke(80)} + strokeWidth={getStrokeWidth(80)} + dataLedIndex={getLEDIndex(80)} + dataKeyIndex={keyIndex(80)} + dataLayer={layer} + path="M11 54C9.3 54 8 52.7 8 51V6H3C1.3 6 0 4.7 0 3C0 1.3 1.3 0 3 0H10C12.2 0 14 1.8 14 4V51C14 52.7 12.7 54 11 54Z" + /> + { + setUndeglowIndex(81, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(81)} + stroke={stroke(81)} + strokeWidth={getStrokeWidth(81)} + dataLedIndex={getLEDIndex(81)} + dataKeyIndex={keyIndex(81)} + dataLayer={layer} + path="M3 57C1.3 57 0 55.7 0 54V17C0 14.8 1.8 13 4 13H14V3C14 1.3 15.3 0 17 0C18.7 0 20 1.3 20 3V15C20 17.2 18.2 19 16 19H6V54C6 55.6 4.6 57 3 57Z" + /> + { + setUndeglowIndex(82, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(82)} + stroke={stroke(82)} + strokeWidth={getStrokeWidth(82)} + dataLedIndex={getLEDIndex(82)} + dataKeyIndex={keyIndex(82)} + dataLayer={layer} + path="M3 64C4.7 64 6 62.6271 6 60.8317V3.16832C6 1.37294 4.7 0 3 0C1.3 0 0 1.37294 0 3.16832V60.9373C0 62.6271 1.4 64 3 64Z" + /> + { + setUndeglowIndex(83, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(83)} + stroke={stroke(83)} + strokeWidth={getStrokeWidth(83)} + dataLedIndex={getLEDIndex(83)} + dataKeyIndex={keyIndex(83)} + dataLayer={layer} + path="M3 30.2H70V3C70 1.3 68.7 0 67 0C65.3 0 64 1.3 64 3V24.2H3C1.3 24.2 0 25.5 0 27.2C0 28.9 1.3 30.2 3 30.2Z" + /> + { + setUndeglowIndex(84, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(84)} + stroke={stroke(84)} + strokeWidth={getStrokeWidth(84)} + dataLedIndex={getLEDIndex(84)} + dataKeyIndex={keyIndex(84)} + dataLayer={layer} + path="M17.3 12.9999L6.0062 60.528C5.61846 62.1598 3.9664 63.155 2.34265 62.7351C0.763683 62.3268 -0.198242 60.73 0.178802 59.1433L11.5 11.4999C13.2 4.79994 19.1 0.199951 26 0.199951H43C44.7 0.199951 46 1.49995 46 3.19995C46 4.89995 44.7 6.19995 43 6.19995H26C21.9 6.19995 18.3 8.99994 17.3 12.9999Z" + /> + { + setUndeglowIndex(85, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(85)} + stroke={stroke(85)} + strokeWidth={getStrokeWidth(85)} + dataLedIndex={getLEDIndex(85)} + dataKeyIndex={keyIndex(85)} + dataLayer={layer} + path="M2.98818 67.9882C4.28818 67.9882 5.58819 67.0882 5.88819 65.6882L21.5882 3.68821C21.9882 2.08821 20.9882 0.488203 19.3882 0.0882035C17.7882 -0.311797 16.1882 0.688185 15.7882 2.28819L0.0881882 64.2882C-0.311811 65.8882 0.688185 67.4882 2.28819 67.8882C2.48819 67.9882 2.68818 67.9882 2.98818 67.9882Z" + /> + { + setUndeglowIndex(86, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(86)} + stroke={stroke(86)} + strokeWidth={getStrokeWidth(86)} + dataLedIndex={getLEDIndex(86)} + dataKeyIndex={keyIndex(86)} + dataLayer={layer} + path="M3.2 69.2C4.5 69.2 5.80001 68.3 6.10001 66.9L21.8 3.9C22.2 2.3 21.2 0.699995 19.6 0.299995C18 -0.100005 16.4 0.899977 16 2.49998L0.300011 65.5C-0.0999889 67.1 0.900007 68.7 2.50001 69.1C2.70001 69.2 2.90001 69.2 3.2 69.2Z" + /> + + { + setUndeglowIndex(87, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(87)} + stroke={stroke(87)} + strokeWidth={getStrokeWidth(87)} + dataLedIndex={getLEDIndex(87)} + dataKeyIndex={keyIndex(87)} + dataLayer={layer} + path="M3.1 40.0999H18.4C26.2 40.0999 32.9 34.7999 34.9 27.2999L40.9 3.69996C41.3 2.09996 40.3 0.49992 38.7 0.0999204C37.1 -0.30008 35.5 0.699932 35.1 2.29993L29.1 25.9C27.9 30.8 23.5 34.2 18.4 34.2H3.1C1.4 34.2 0.0999985 35.5 0.0999985 37.2C0.0999985 38.9 1.5 40.0999 3.1 40.0999Z" + /> + { + setUndeglowIndex(88, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(88)} + stroke={stroke(88)} + strokeWidth={getStrokeWidth(88)} + dataLedIndex={getLEDIndex(88)} + dataKeyIndex={keyIndex(88)} + dataLayer={layer} + path="M3.49929 6.09998H78.5007C80.4836 6.09998 82 4.79998 82 3.09998C82 1.39998 80.4836 0.0999756 78.5007 0.0999756H3.49929C1.51636 0.0999756 2.24619e-06 1.39998 2.24619e-06 3.09998C2.24619e-06 4.79998 1.633 6.09998 3.49929 6.09998Z" + /> + { + setUndeglowIndex(89, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(89)} + stroke={stroke(89)} + strokeWidth={getStrokeWidth(89)} + dataLedIndex={getLEDIndex(89)} + dataKeyIndex={keyIndex(89)} + dataLayer={layer} + path="M3.21568 6.09998H78.7843C80.6065 6.09998 82 4.79998 82 3.09998C82 1.39998 80.6065 0.0999756 78.7843 0.0999756H3.21568C1.39346 0.0999756 -4.23193e-06 1.39998 -4.23193e-06 3.09998C-4.23193e-06 4.79998 1.39346 6.09998 3.21568 6.09998Z" + /> + + { + setUndeglowIndex(90, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(90)} + stroke={stroke(90)} + strokeWidth={getStrokeWidth(90)} + dataLedIndex={getLEDIndex(90)} + dataKeyIndex={keyIndex(90)} + dataLayer={layer} + path="M3.34235 6.09998H78.6576C80.5516 6.09998 82 4.79998 82 3.09998C82 1.39998 80.5516 0.0999756 78.6576 0.0999756H3.34235C1.44833 0.0999756 -4.05312e-06 1.39998 -4.05312e-06 3.09998C-4.05312e-06 4.79998 1.55974 6.09998 3.34235 6.09998Z" + /> + { + setUndeglowIndex(91, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(91)} + stroke={stroke(91)} + strokeWidth={getStrokeWidth(91)} + dataLedIndex={getLEDIndex(91)} + dataKeyIndex={keyIndex(91)} + dataLayer={layer} + path="M7.90002 7.10002H83C84.7 7.10002 86 5.80002 86 4.10002C86 2.40002 84.7 1.10002 83 1.10002H7.90002C6.70002 1.10002 5.49999 0.900048 4.29999 0.500048C2.69999 4.825e-05 1 0.800073 0.5 2.40007C0 4.00007 0.800024 5.70006 2.40002 6.20006C4.10002 6.80006 6.00002 7.10002 7.90002 7.10002Z" + /> + { + setUndeglowIndex(92, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(92)} + stroke={stroke(92)} + strokeWidth={getStrokeWidth(92)} + dataLedIndex={getLEDIndex(92)} + dataKeyIndex={keyIndex(92)} + dataLayer={layer} + path="M7.59999 68.7001C8.09999 68.7001 8.60001 68.6 9.00001 68.3C10.5 67.5 11 65.7001 10.2 64.2001C9.40002 62.7001 8.90003 61.1001 8.90003 59.4001L6.8 3.20007C6.7 1.50007 5.40002 0.300049 3.70002 0.300049C2.00002 0.400049 0.799998 1.80009 0.799998 3.40009L2.90003 59.6C3.00003 62.2 3.70003 64.8 4.90003 67.1C5.50003 68.2 6.49999 68.7001 7.59999 68.7001Z" + /> + { + setUndeglowIndex(93, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(93)} + stroke={stroke(93)} + strokeWidth={getStrokeWidth(93)} + dataLedIndex={getLEDIndex(93)} + dataKeyIndex={keyIndex(93)} + dataLayer={layer} + path="M4.40002 60.4H4.5C6.2 60.3 7.40002 58.9 7.40002 57.3L6 2.89999C5.9 1.19999 4.60002 0 2.90002 0C1.20002 0.1 0 1.50001 0 3.10001L1.40002 57.5C1.50002 59.1 2.80002 60.4 4.40002 60.4Z" + /> + { + setUndeglowIndex(94, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(94)} + stroke={stroke(94)} + strokeWidth={getStrokeWidth(94)} + dataLedIndex={getLEDIndex(94)} + dataKeyIndex={keyIndex(94)} + dataLayer={layer} + path="M4.59998 67H4.70001C6.40001 66.9 7.59998 65.5 7.59998 63.9L6 2.99997C5.9 1.29997 4.60002 0.0999756 2.90002 0.0999756C1.20002 0.199976 0 1.59998 0 3.19998L1.59998 64.1C1.59998 65.7 2.99998 67 4.59998 67Z" + /> + { + setUndeglowIndex(95, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(95)} + stroke={stroke(95)} + strokeWidth={getStrokeWidth(95)} + dataLedIndex={getLEDIndex(95)} + dataKeyIndex={keyIndex(95)} + dataLayer={layer} + path="M4.59998 66.9H4.70001C6.40001 66.8 7.59998 65.4 7.59998 63.8L6 2.89999C5.9 1.19999 4.60002 0 2.90002 0C1.20002 0.1 0 1.50001 0 3.10001L1.59998 64C1.59998 65.6 2.99998 66.9 4.59998 66.9Z" + /> + + { + setUndeglowIndex(96, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(96)} + stroke={stroke(96)} + strokeWidth={getStrokeWidth(96)} + dataLedIndex={getLEDIndex(96)} + dataKeyIndex={keyIndex(96)} + dataLayer={layer} + path="M5.90747 68H6.00744C7.70744 67.9 8.90747 66.5 8.90747 64.9L6.60748 3.10001C6.50748 1.40001 5.10744 0.100012 3.50744 0.200012C1.80744 0.300012 0.60748 1.70002 0.60748 3.30002L2.90747 65.1C2.90747 66.8 4.30747 68 5.90747 68Z" + /> + { + setUndeglowIndex(97, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(97)} + stroke={stroke(97)} + strokeWidth={getStrokeWidth(97)} + dataLedIndex={getLEDIndex(97)} + dataKeyIndex={keyIndex(97)} + dataLayer={layer} + path="M3.39996 112H3.5C5.2 111.9 6.39996 110.5 6.39996 108.9L6.20001 104.5C5.90001 96.1 8.39998 87.7 13.1 80.8L41 40.6C46.3 33 49 24.1 49 14.9V3C49 1.3 47.7 0 46 0C44.3 0 43 1.3 43 3V15C43 23 40.6 30.7 36 37.2L8.09998 77.4C2.59998 85.3 -0.300024 95 0.0999756 104.7L0.299988 109.1C0.399988 110.7 1.79996 112 3.39996 112Z" + /> + { + setUndeglowIndex(98, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(98)} + stroke={stroke(98)} + strokeWidth={getStrokeWidth(98)} + dataLedIndex={getLEDIndex(98)} + dataKeyIndex={keyIndex(98)} + dataLayer={layer} + path="M3 52C4.7 52 6 50.6693 6 48.9291V3.07087C6 1.33071 4.7 0 3 0C1.3 0 0 1.33071 0 3.07087V48.9291C0 50.6693 1.4 52 3 52Z" + /> + { + setUndeglowIndex(69, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(69)} + stroke={stroke(69)} + strokeWidth={getStrokeWidth(69)} + dataLedIndex={getLEDIndex(69)} + dataKeyIndex={keyIndex(69)} + dataLayer={layer} + path="M3 52C4.7 52 6 50.5556 6 48.6667V3.33333C6 1.44444 4.7 0 3 0C1.3 0 0 1.44444 0 3.33333V48.6667C0 50.5556 1.4 52 3 52Z" + /> + { + setUndeglowIndex(70, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(70)} + stroke={stroke(70)} + strokeWidth={getStrokeWidth(70)} + dataLedIndex={getLEDIndex(70)} + dataKeyIndex={keyIndex(70)} + dataLayer={layer} + path="M3 52C4.7 52 6 50.5556 6 48.6667V3.33333C6 1.44444 4.7 0 3 0C1.3 0 0 1.44444 0 3.33333V48.6667C0 50.4444 1.4 52 3 52Z" + /> + {/* End Left side */} + {/* Right side */} + { + setUndeglowIndex(107, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(107)} + stroke={stroke(107)} + strokeWidth={getStrokeWidth(107)} + dataLedIndex={getLEDIndex(107)} + dataKeyIndex={keyIndex(107)} + dataLayer={layer} + path="M77.967 6H3.033C1.314 6 0 4.7 0 3s1.314-3 3.033-3h74.934C79.686 0 81 1.3 81 3s-1.415 3-3.033 3z" + /> + { + setUndeglowIndex(106, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(106)} + stroke={stroke(106)} + strokeWidth={getStrokeWidth(106)} + dataLedIndex={getLEDIndex(106)} + dataKeyIndex={keyIndex(106)} + dataLayer={layer} + path="M70.8908 6H3.10924C1.34734 6 0 4.7 0 3C0 1.3 1.34734 0 3.10924 0H70.8908C72.6527 0 74 1.3 74 3C74 4.7 72.6527 6 70.8908 6Z" + /> + { + setUndeglowIndex(105, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(105)} + stroke={stroke(105)} + strokeWidth={getStrokeWidth(105)} + dataLedIndex={getLEDIndex(105)} + dataKeyIndex={keyIndex(105)} + dataLayer={layer} + path="M82.6275 6H3.37255C1.46144 6 0 4.7 0 3C0 1.3 1.46144 0 3.37255 0H82.6275C84.5386 0 86 1.3 86 3C86 4.7 84.4261 6 82.6275 6Z" + /> + { + setUndeglowIndex(104, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(104)} + stroke={stroke(104)} + strokeWidth={getStrokeWidth(104)} + dataLedIndex={getLEDIndex(104)} + dataKeyIndex={keyIndex(104)} + dataLayer={layer} + path="M68.9832 6H3.01676C1.30726 6 0 4.7 0 3C0 1.3 1.30726 0 3.01676 0H68.9832C70.6927 0 72 1.3 72 3C72 4.7 70.6927 6 68.9832 6Z" + /> + { + setUndeglowIndex(103, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(103)} + stroke={stroke(103)} + strokeWidth={getStrokeWidth(103)} + dataLedIndex={getLEDIndex(103)} + dataKeyIndex={keyIndex(103)} + dataLayer={layer} + path="M71.0028 6H3.10056C1.34358 6 0 4.7 0 3C0 1.3 1.34358 0 3.10056 0H70.8994C72.6564 0 74 1.3 74 3C74 4.7 72.6564 6 71.0028 6Z" + /> + { + setUndeglowIndex(102, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(102)} + stroke={stroke(102)} + strokeWidth={getStrokeWidth(102)} + dataLedIndex={getLEDIndex(102)} + dataKeyIndex={keyIndex(102)} + dataLayer={layer} + path="M70.8994 6H3.10056C1.34358 6 0 4.7 0 3C0 1.3 1.34358 0 3.10056 0H70.8994C72.6564 0 74 1.3 74 3C74 4.7 72.6564 6 70.8994 6Z" + /> + { + setUndeglowIndex(101, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(101)} + stroke={stroke(101)} + strokeWidth={getStrokeWidth(101)} + dataLedIndex={getLEDIndex(101)} + dataKeyIndex={keyIndex(101)} + dataLayer={layer} + path="M85.0001 33C83.3001 33 82.0001 31.7 82.0001 30V17C82.0001 10.9 77.1001 6 71.0001 6H3.30005C1.60005 6 0.300049 4.7 0.300049 3C0.300049 1.3 1.60005 0 3.30005 0H71.0001C80.4001 0 88.0001 7.6 88.0001 17V30C88.0001 31.6 86.6001 33 85.0001 33Z" + /> + { + setUndeglowIndex(100, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(100)} + stroke={stroke(100)} + strokeWidth={getStrokeWidth(100)} + dataLedIndex={getLEDIndex(100)} + dataKeyIndex={keyIndex(100)} + dataLayer={layer} + path="M3 52C1.3 52 0 50.5556 0 48.6667V3.33333C0 1.44444 1.3 0 3 0C4.7 0 6 1.44444 6 3.33333V48.6667C6 50.4444 4.6 52 3 52Z" + /> + { + setUndeglowIndex(99, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(99)} + stroke={stroke(99)} + strokeWidth={getStrokeWidth(99)} + dataLedIndex={getLEDIndex(99)} + dataKeyIndex={keyIndex(99)} + dataLayer={layer} + path="M3 52C1.3 52 0 50.5556 0 48.6667V3.33333C0 1.44444 1.3 0 3 0C4.7 0 6 1.44444 6 3.33333V48.6667C6 50.5556 4.6 52 3 52Z" + /> + { + setUndeglowIndex(130, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(130)} + stroke={stroke(130)} + strokeWidth={getStrokeWidth(130)} + dataLedIndex={getLEDIndex(130)} + dataKeyIndex={keyIndex(130)} + dataLayer={layer} + path="M3 52C1.3 52 0 50.6693 0 48.9291V3.07087C0 1.33071 1.3 0 3 0C4.7 0 6 1.33071 6 3.07087V48.9291C6 50.6693 4.6 52 3 52Z" + /> + { + setUndeglowIndex(129, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(129)} + stroke={stroke(129)} + strokeWidth={getStrokeWidth(129)} + dataLedIndex={getLEDIndex(129)} + dataKeyIndex={keyIndex(129)} + dataLayer={layer} + path="M45.6 112H45.5C43.8 111.9 42.6 110.5 42.6 108.9L42.8 104.5C43.1 96.1 40.6 87.7 35.9 80.8L8 40.6C2.7 33 0 24.1 0 14.9V3C0 1.3 1.3 0 3 0C4.7 0 6 1.3 6 3V15C6 23 8.4 30.7 13 37.2L40.9 77.4C46.4 85.3 49.3 95 48.9 104.7L48.7 109.1C48.6 110.7 47.2 112 45.6 112Z" + /> + { + setUndeglowIndex(128, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(128)} + stroke={stroke(128)} + strokeWidth={getStrokeWidth(128)} + dataLedIndex={getLEDIndex(128)} + dataKeyIndex={keyIndex(128)} + dataLayer={layer} + path="M3.67102 67.8054H3.57105C1.87105 67.7054 0.671023 66.3054 0.671023 64.7054L2.97101 2.90543C3.07101 1.20543 4.47105 -0.0945679 6.07105 0.00543213C7.77105 0.105432 8.97101 1.50544 8.97101 3.10544L6.67102 64.9054C6.67102 66.6054 5.27102 67.8054 3.67102 67.8054Z" + /> + { + setUndeglowIndex(127, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(127)} + stroke={stroke(127)} + strokeWidth={getStrokeWidth(127)} + dataLedIndex={getLEDIndex(127)} + dataKeyIndex={keyIndex(127)} + dataLayer={layer} + path="M3.67102 67.8054H3.57105C1.87105 67.7054 0.671023 66.3054 0.671023 64.7054L2.97101 2.90543C3.07101 1.20543 4.47105 -0.0945679 6.07105 0.00543213C7.77105 0.105432 8.97101 1.50544 8.97101 3.10544L6.67102 64.9054C6.67102 66.6054 5.27102 67.8054 3.67102 67.8054Z" + /> + { + setUndeglowIndex(126, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(126)} + stroke={stroke(126)} + strokeWidth={getStrokeWidth(126)} + dataLedIndex={getLEDIndex(126)} + dataKeyIndex={keyIndex(126)} + dataLayer={layer} + path="M3.97852 67.8054H3.87848C2.17848 67.7054 0.978516 66.3054 0.978516 64.7054L2.57849 3.80539C2.67849 2.10539 3.97847 0.905396 5.67847 0.905396C7.37847 1.0054 8.57849 2.4054 8.57849 4.0054L6.97852 64.9054C6.97852 66.5054 5.57852 67.8054 3.97852 67.8054Z" + /> + { + setUndeglowIndex(125, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(125)} + stroke={stroke(125)} + strokeWidth={getStrokeWidth(125)} + dataLedIndex={getLEDIndex(125)} + dataKeyIndex={keyIndex(125)} + dataLayer={layer} + path="M3.17847 61.2054H3.07849C1.37849 61.1054 0.178467 59.7054 0.178467 58.1054L1.57849 3.70541C1.67849 2.00541 2.97847 0.80542 4.67847 0.80542C6.37847 0.90542 7.57849 2.30543 7.57849 3.90543L6.17847 58.3054C6.07847 59.9054 4.77847 61.2054 3.17847 61.2054Z" + /> + { + setUndeglowIndex(124, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(124)} + stroke={stroke(124)} + strokeWidth={getStrokeWidth(124)} + dataLedIndex={getLEDIndex(124)} + dataKeyIndex={keyIndex(124)} + dataLayer={layer} + path="M2.97851 68.5055C2.47851 68.5055 1.97848 68.4055 1.57848 68.1055C0.0784807 67.3055 -0.421532 65.5055 0.378468 64.0055C1.17847 62.5055 1.67846 60.9055 1.67846 59.2055L3.77849 3.00549C3.87849 1.30549 5.17847 0.105469 6.87847 0.105469C8.57847 0.205469 9.77849 1.60551 9.77849 3.20551L7.67846 59.4055C7.57846 62.0055 6.87846 64.6055 5.67846 66.9055C5.07846 68.0055 4.07851 68.5055 2.97851 68.5055Z" + /> + { + setUndeglowIndex(123, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(123)} + stroke={stroke(123)} + strokeWidth={getStrokeWidth(123)} + dataLedIndex={getLEDIndex(123)} + dataKeyIndex={keyIndex(123)} + dataLayer={layer} + path="M72.1 7.10002H3C1.3 7.10002 0 5.80002 0 4.10002C0 2.40002 1.3 1.10002 3 1.10002H72.1C73.3 1.10002 74.5 0.900048 75.7 0.500048C77.3 4.825e-05 79 0.800073 79.5 2.40007C80 4.00007 79.2 5.70006 77.6 6.20006C75.9 6.80006 74 7.10002 72.1 7.10002Z" + /> + { + setUndeglowIndex(122, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(122)} + stroke={stroke(122)} + strokeWidth={getStrokeWidth(122)} + dataLedIndex={getLEDIndex(122)} + dataKeyIndex={keyIndex(122)} + dataLayer={layer} + path="M74.9412 6.09998H3.05882C1.32549 6.09998 0 4.79998 0 3.09998C0 1.39998 1.32549 0.0999756 3.05882 0.0999756H74.9412C76.6745 0.0999756 78 1.39998 78 3.09998C78 4.79998 76.6745 6.09998 74.9412 6.09998Z" + /> + { + setUndeglowIndex(121, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(121)} + stroke={stroke(121)} + strokeWidth={getStrokeWidth(121)} + dataLedIndex={getLEDIndex(121)} + dataKeyIndex={keyIndex(121)} + dataLayer={layer} + path="M74.9412 6.09998H3.05882C1.32549 6.09998 0 4.79998 0 3.09998C0 1.39998 1.32549 0.0999756 3.05882 0.0999756H74.9412C76.6745 0.0999756 78 1.39998 78 3.09998C78 4.79998 76.6745 6.09998 74.9412 6.09998Z" + /> + + { + setUndeglowIndex(120, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(120)} + stroke={stroke(120)} + strokeWidth={getStrokeWidth(120)} + dataLedIndex={getLEDIndex(120)} + dataKeyIndex={keyIndex(120)} + dataLayer={layer} + path="M74.6714 6.09998H3.32859C1.44239 6.09998 0 4.79998 0 3.09998C0 1.39998 1.44239 0.0999756 3.32859 0.0999756H74.6714C76.5576 0.0999756 78 1.39998 78 3.09998C78 4.79998 76.4467 6.09998 74.6714 6.09998Z" + /> + { + setUndeglowIndex(119, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(119)} + stroke={stroke(119)} + strokeWidth={getStrokeWidth(119)} + dataLedIndex={getLEDIndex(119)} + dataKeyIndex={keyIndex(119)} + dataLayer={layer} + path="M74.6761 6.09998H3.32386C1.44034 6.09998 0 4.79998 0 3.09998C0 1.39998 1.44034 0.0999756 3.32386 0.0999756H74.6761C76.5597 0.0999756 78 1.39998 78 3.09998C78 4.79998 76.5597 6.09998 74.6761 6.09998Z" + /> + { + setUndeglowIndex(118, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(118)} + stroke={stroke(118)} + strokeWidth={getStrokeWidth(118)} + dataLedIndex={getLEDIndex(118)} + dataKeyIndex={keyIndex(118)} + dataLayer={layer} + path="M29.9 40.0999H22.6C14.8 40.0999 8.10001 34.7999 6.10001 27.2999L0.100013 3.69996C-0.299987 2.09996 0.70001 0.49992 2.30001 0.0999204C3.90001 -0.30008 5.5 0.699932 5.9 2.29993L11.9 25.9C13.1 30.8 17.5 34.2 22.6 34.2H29.9C31.6 34.2 32.9 35.5 32.9 37.2C32.9 38.9 31.5 40.0999 29.9 40.0999Z" + /> + { + setUndeglowIndex(117, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(117)} + stroke={stroke(117)} + strokeWidth={getStrokeWidth(117)} + dataLedIndex={getLEDIndex(117)} + dataKeyIndex={keyIndex(117)} + dataLayer={layer} + path="M19.4764 69.2C18.1764 69.2 16.8764 68.3 16.5764 66.9L0.87641 3.9C0.47641 2.3 1.47641 0.699995 3.07641 0.299995C4.67641 -0.100005 6.27641 0.899977 6.67641 2.49998L22.3764 65.5C22.7764 67.1 21.7764 68.7 20.1764 69.1C19.9764 69.2 19.7764 69.2 19.4764 69.2Z" + /> + { + setUndeglowIndex(116, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(116)} + stroke={stroke(116)} + strokeWidth={getStrokeWidth(116)} + dataLedIndex={getLEDIndex(116)} + dataKeyIndex={keyIndex(116)} + dataLayer={layer} + path="M18.6882 67.9882C17.3882 67.9882 16.0882 67.0882 15.7882 65.6882L0.0882021 3.68821C-0.311798 2.08821 0.688207 0.488203 2.28821 0.0882035C3.88821 -0.311797 5.48821 0.688185 5.88821 2.28819L21.5882 64.2882C21.9882 65.8882 20.9882 67.4882 19.3882 67.8882C19.1882 67.9882 18.9882 67.9882 18.6882 67.9882Z" + /> + { + setUndeglowIndex(115, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(115)} + stroke={stroke(115)} + strokeWidth={getStrokeWidth(115)} + dataLedIndex={getLEDIndex(115)} + dataKeyIndex={keyIndex(115)} + dataLayer={layer} + path="M25.7 12.9999L36.9835 59.5445C37.3774 61.1694 39.0255 62.1571 40.6442 61.7385C42.2284 61.3288 43.1906 59.7235 42.805 58.1332L31.5 11.4999C29.8 4.79994 23.9 0.199951 17 0.199951H3C1.3 0.199951 0 1.49995 0 3.19995C0 4.89995 1.3 6.19995 3 6.19995H17C21.1 6.19995 24.7 8.99994 25.7 12.9999Z" + /> + { + setUndeglowIndex(114, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(114)} + stroke={stroke(114)} + strokeWidth={getStrokeWidth(114)} + dataLedIndex={getLEDIndex(114)} + dataKeyIndex={keyIndex(114)} + dataLayer={layer} + path="M70 30.2H0V3c0-1.7 1.3-3 3-3s3 1.3 3 3v21.2h64c1.7 0 3 1.3 3 3s-1.3 3-3 3z" + /> + { + setUndeglowIndex(113, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(113)} + stroke={stroke(113)} + strokeWidth={getStrokeWidth(113)} + dataLedIndex={getLEDIndex(113)} + dataKeyIndex={keyIndex(113)} + dataLayer={layer} + path="M3 64C1.3 64 0 62.6271 0 60.8317V3.16832C0 1.37294 1.3 0 3 0C4.7 0 6 1.37294 6 3.16832V60.9373C6 62.6271 4.6 64 3 64Z" + /> + { + setUndeglowIndex(112, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(112)} + stroke={stroke(112)} + strokeWidth={getStrokeWidth(112)} + dataLedIndex={getLEDIndex(112)} + dataKeyIndex={keyIndex(112)} + dataLayer={layer} + path="M3 57C1.3 57 0 55.7 0 54V27C0 24.8 1.8 23 4 23H14V3C14 1.3 15.3 0 17 0C18.7 0 20 1.3 20 3V25C20 27.2 18.2 29 16 29H6V54C6 55.6 4.6 57 3 57Z" + /> + { + setUndeglowIndex(111, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(111)} + stroke={stroke(111)} + strokeWidth={getStrokeWidth(111)} + dataLedIndex={getLEDIndex(111)} + dataKeyIndex={keyIndex(111)} + dataLayer={layer} + path="M11 74C9.3 74 8 72.7 8 71V6H3C1.3 6 0 4.7 0 3C0 1.3 1.3 0 3 0H10C12.2 0 14 1.8 14 4V71C14 72.7 12.7 74 11 74Z" + /> + { + setUndeglowIndex(110, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(110)} + stroke={stroke(110)} + strokeWidth={getStrokeWidth(110)} + dataLedIndex={getLEDIndex(110)} + dataKeyIndex={keyIndex(110)} + dataLayer={layer} + path="M24 80H17C14.8 80 13 78.2 13 76V19H4C1.8 19 0 17.2 0 15V3.00001C0 1.30001 1.3 0 3 0C4.7 0 6 1.30001 6 3.00001V13H15C17.2 13 19 14.8 19 17V74H24C25.7 74 27 75.3 27 77C27 78.7 25.6 80 24 80Z" + /> + { + setUndeglowIndex(109, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(109)} + stroke={stroke(109)} + strokeWidth={getStrokeWidth(109)} + dataLedIndex={getLEDIndex(109)} + dataKeyIndex={keyIndex(109)} + dataLayer={layer} + path="M3 52.147c-1.7 0-3-1.3-3-3V30c0-2.2 1.8-4 4-4h15.1V3c0-1.7 1.3-3 3-3s3 1.3 3 3v25c0 2.2-1.8 4-4 4H6v17.047c0 1.7-1.3 3.1-3 3.1z" + /> + { + setUndeglowIndex(108, e); + }} + selectedLED={this.props.selectedLED} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} + fill={getColor(108)} + stroke={stroke(108)} + strokeWidth={getStrokeWidth(108)} + dataLedIndex={getLEDIndex(108)} + dataKeyIndex={keyIndex(108)} + dataLayer={layer} + path="M3 64c-1.7 0-3-1.318-3-3.042V3.042C0 1.318 1.3 0 3 0s3 1.318 3 3.042V61.06C6 62.682 4.7 64 3 64z" + /> + {/* End Right side */} + + ); } } diff --git a/src/api/hardware-dygma-raise-ansi/index.js b/src/api/hardware-dygma-raise-ansi/index.js index 5ec94ad08..4989db82e 100644 --- a/src/api/hardware-dygma-raise-ansi/index.js +++ b/src/api/hardware-dygma-raise-ansi/index.js @@ -27,30 +27,30 @@ const Raise_ANSI = { urls: [ { name: "Homepage", - url: "https://www.dygma.com/raise/" - } - ] + url: "https://www.dygma.com/raise/", + }, + ], }, usb: { vendorId: 0x1209, - productId: 0x2201 + productId: 0x2201, }, keyboard: { rows: 5, - columns: 16 + columns: 16, }, keyboardUnderglow: { rows: 6, - columns: 22 + columns: 22, }, components: { - keymap: KeymapANSI + keymap: KeymapANSI, }, instructions: { en: { - updateInstructions: `To update the firmware, the keyboard needs a special reset. When the countdown starts, press and hold the Escape key. Soon after the countdown finished, the Neuron's light should start a blue pulsing pattern, and the flashing will proceed. At this point, you should release the Escape key.` - } + updateInstructions: `To update the firmware, the keyboard needs a special reset. When the countdown starts, press and hold the Escape key. Soon after the countdown finished, the Neuron's light should start a blue pulsing pattern, and the flashing will proceed. At this point, you should release the Escape key.`, + }, }, flash: async (_, filename, flashRaise, stateUpdate) => { @@ -66,7 +66,7 @@ const Raise_ANSI = { }, isDeviceSupported: async port => { - let focus = new Focus(); + const focus = new Focus(); let layout = localStorage.getItem(port.serialNumber); if (!layout) { focus._port && focus._port.path === port.path @@ -77,7 +77,7 @@ const Raise_ANSI = { localStorage.setItem(port.serialNumber, layout); } return layout.trim() === "ANSI"; - } + }, }; const Raise_ANSIBootloader = { @@ -89,19 +89,19 @@ const Raise_ANSIBootloader = { urls: [ { name: "Homepage", - url: "https://www.dygma.com/raise/" - } - ] + url: "https://www.dygma.com/raise/", + }, + ], }, usb: { vendorId: 0x1209, - productId: 0x2200 + productId: 0x2200, }, bootloader: true, instructions: { en: { - updateInstructions: `To update the firmware, press the button at the bottom. You must not hold any key on the keyboard while the countdown is in progress, nor afterwards, until the flashing is finished. When the countdown reaches zero, the Neuron's light should start a blue pulsing pattern, and flashing will then proceed. ` - } + updateInstructions: `To update the firmware, press the button at the bottom. You must not hold any key on the keyboard while the countdown is in progress, nor afterwards, until the flashing is finished. When the countdown reaches zero, the Neuron's light should start a blue pulsing pattern, and flashing will then proceed. `, + }, }, flash: async (_, filename, flashRaise, stateUpdate) => { return new Promise(async (resolve, reject) => { @@ -112,7 +112,7 @@ const Raise_ANSIBootloader = { reject(e); } }); - } + }, }; export { Raise_ANSI, Raise_ANSIBootloader }; diff --git a/src/api/hardware-dygma-raise-iso/components/Keymap-ISO.js b/src/api/hardware-dygma-raise-iso/components/Keymap-ISO.js index cc2bb3a09..a7821c70d 100644 --- a/src/api/hardware-dygma-raise-iso/components/Keymap-ISO.js +++ b/src/api/hardware-dygma-raise-iso/components/Keymap-ISO.js @@ -42,7 +42,7 @@ const led_map = [ 3 + LEDS_LEFT_KEYS, 2 + LEDS_LEFT_KEYS, 1 + LEDS_LEFT_KEYS, - 0 + LEDS_LEFT_KEYS + 0 + LEDS_LEFT_KEYS, ], [ 7, @@ -60,7 +60,7 @@ const led_map = [ 10 + LEDS_LEFT_KEYS, 9 + LEDS_LEFT_KEYS, 8 + LEDS_LEFT_KEYS, - 7 + LEDS_LEFT_KEYS + 7 + LEDS_LEFT_KEYS, ], [ 13, @@ -78,7 +78,7 @@ const led_map = [ 18 + LEDS_LEFT_KEYS, 17 + LEDS_LEFT_KEYS, 16 + LEDS_LEFT_KEYS, - 15 + LEDS_LEFT_KEYS + 15 + LEDS_LEFT_KEYS, ], [ 19, @@ -96,7 +96,7 @@ const led_map = [ 25 + LEDS_LEFT_KEYS, 24 + LEDS_LEFT_KEYS, 23 + LEDS_LEFT_KEYS, - 22 + LEDS_LEFT_KEYS + 22 + LEDS_LEFT_KEYS, ], [ 26, @@ -114,8 +114,8 @@ const led_map = [ 31 + LEDS_LEFT_KEYS, 30 + LEDS_LEFT_KEYS, 29 + LEDS_LEFT_KEYS, - 28 + LEDS_LEFT_KEYS - ] + 28 + LEDS_LEFT_KEYS, + ], ]; const no_key_led_map = [...Array.apply(0, Array(63)).map((_, i) => i + UNDERGLOW)]; @@ -126,14 +126,14 @@ const keysRowsPosition = { row3: 169, row4: 236, row5: 303, - row6: 370 + row6: 370, }; class KeymapISO extends React.Component { constructor(props) { super(props); this.state = { - underglowIndex: null + underglowIndex: null, }; } @@ -159,22 +159,18 @@ class KeymapISO extends React.Component { } return aux; }; - let keyIndex = (row, col) => { - return col !== undefined ? row * 16 + col : row + 11; - }; + const keyIndex = (row, col) => (col !== undefined ? row * 16 + col : row + 11); - let getLabel = (row, col) => { - return keymap[keyIndex(row, col)]; - }; + const getLabel = (row, col) => keymap[keyIndex(row, col)]; - let isSelected = (row, col) => { + const isSelected = (row, col) => { const selectIndex = keyIndex(row, col); return underglowIndex ? underglowIndex == selectIndex : this.props.selectedKey == selectIndex; }; - let stroke = (row, col) => (isSelected(row, col) ? (this.props.darkMode ? "#fff" : "#000") : "#b3b3b3"); + const stroke = (row, col) => (isSelected(row, col) ? (this.props.darkMode ? "#fff" : "#000") : "#b3b3b3"); - let getStrokeWidth = (row, col) => (isSelected(row, col) ? "3.0" : "1.5"); + const getStrokeWidth = (row, col) => (isSelected(row, col) ? "3.0" : "1.5"); const colormap = this.props.colormap || @@ -187,21 +183,20 @@ class KeymapISO extends React.Component { : Array(16) .fill() .map(() => ({ - rgb: "#ffffff" + rgb: "#ffffff", })); // console.log("showing BARS", colormap, palette, led_map, no_key_led_map); - let getColor = (row, col) => { - let ledIndex = col !== undefined ? led_map[parseInt(row)][parseInt(col)] : no_key_led_map[row - UNDERGLOW]; - let colorIndex = colormap[ledIndex]; + const getColor = (row, col) => { + const ledIndex = col !== undefined ? led_map[parseInt(row)][parseInt(col)] : no_key_led_map[row - UNDERGLOW]; + const colorIndex = colormap[ledIndex]; // console.log("testing colors", row, col, ledIndex, colorIndex, row - UNDERGLOW); - let color = palette[colorIndex].rgb; + const color = palette[colorIndex].rgb; return color; }; - let getLEDIndex = (row, col) => { - return col !== undefined ? led_map[parseInt(row)][parseInt(col)] : no_key_led_map[row - UNDERGLOW]; - }; + const getLEDIndex = (row, col) => + col !== undefined ? led_map[parseInt(row)][parseInt(col)] : no_key_led_map[row - UNDERGLOW]; const onClick = e => { this.setState({ underglowIndex: null }); @@ -222,7 +217,7 @@ class KeymapISO extends React.Component { * @props {string} class - className of the button * @props {string} textLength length of the text if the button is small and additional text is longer then button */ - const GetCurrentKeyElement = props => { + function GetCurrentKeyElement(props) { return ( ); - }; + } /** * getDivideKeys - divides words on keyboard keys * @param {string} str Name of key @@ -256,24 +251,24 @@ class KeymapISO extends React.Component { return ( ); - } else if (str.length === 1) { + } + if (str.length === 1) { return shortWords.map((word, index) => ( )); - } else if (str.toLowerCase().endsWith("to")) { + } + if (str.toLowerCase().endsWith("to")) { return longWords.map((word, index) => ( )); - } else if ( - str.length > 8 && - smallKey === true && - (str.startsWith("C+") || str.startsWith("A+") || str.startsWith("AGr+")) - ) { + } + if (str.length > 8 && smallKey === true && (str.startsWith("C+") || str.startsWith("A+") || str.startsWith("AGr+"))) { return ; - } else if ( + } + if ( longWords.length === 1 && shortWords.length > 7 && !str.startsWith("C+") && @@ -283,21 +278,23 @@ class KeymapISO extends React.Component { ) { return longWords.map((word, index) => ( - + )); - } else if (longWords.length === 1) { + } + if (longWords.length === 1) { return longWords.map((word, index) => ); - } else if (longWords.length > 1 && smallKey === true) { + } + if (longWords.length > 1 && smallKey === true) { return longWords.map((word, index) => ( )); - } else if (longWords.length > 1) { - return ; - } else { + } + if (longWords.length > 1) { return ; } + return ; }; const topsArr = ["LEDEFF.", "SCadet", "Steno", "M.Btn", "Leader", "Numpad", "Media", "OSL", "Mouse", "M.Wheel", "M.Warp"]; const topsArrTransfer = ["SHIFTTO", "LockTo"]; @@ -338,8 +335,8 @@ class KeymapISO extends React.Component { > { @@ -1678,8 +1675,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(71, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(71)} stroke={stroke(71)} strokeWidth={getStrokeWidth(71)} @@ -1696,8 +1693,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(72, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(72)} stroke={stroke(72)} strokeWidth={getStrokeWidth(72)} @@ -1714,8 +1711,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(73, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(73)} stroke={stroke(73)} strokeWidth={getStrokeWidth(73)} @@ -1732,8 +1729,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(74, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(74)} stroke={stroke(74)} strokeWidth={getStrokeWidth(74)} @@ -1750,8 +1747,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(75, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(75)} stroke={stroke(75)} strokeWidth={getStrokeWidth(75)} @@ -1768,8 +1765,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(76, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(76)} stroke={stroke(76)} strokeWidth={getStrokeWidth(76)} @@ -1786,8 +1783,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(77, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(77)} stroke={stroke(77)} strokeWidth={getStrokeWidth(77)} @@ -1804,8 +1801,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(78, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(78)} stroke={stroke(78)} strokeWidth={getStrokeWidth(78)} @@ -1822,8 +1819,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(79, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(79)} stroke={stroke(79)} strokeWidth={getStrokeWidth(79)} @@ -1840,8 +1837,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(80, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(80)} stroke={stroke(80)} strokeWidth={getStrokeWidth(80)} @@ -1858,8 +1855,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(81, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(81)} stroke={stroke(81)} strokeWidth={getStrokeWidth(81)} @@ -1876,8 +1873,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(82, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(82)} stroke={stroke(82)} strokeWidth={getStrokeWidth(82)} @@ -1894,8 +1891,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(83, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(83)} stroke={stroke(83)} strokeWidth={getStrokeWidth(83)} @@ -1912,8 +1909,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(84, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(84)} stroke={stroke(84)} strokeWidth={getStrokeWidth(84)} @@ -1930,8 +1927,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(85, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(85)} stroke={stroke(85)} strokeWidth={getStrokeWidth(85)} @@ -1948,8 +1945,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(86, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(86)} stroke={stroke(86)} strokeWidth={getStrokeWidth(86)} @@ -1967,8 +1964,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(87, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(87)} stroke={stroke(87)} strokeWidth={getStrokeWidth(87)} @@ -1985,8 +1982,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(88, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(88)} stroke={stroke(88)} strokeWidth={getStrokeWidth(88)} @@ -2003,8 +2000,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(89, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(89)} stroke={stroke(89)} strokeWidth={getStrokeWidth(89)} @@ -2022,8 +2019,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(90, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(90)} stroke={stroke(90)} strokeWidth={getStrokeWidth(90)} @@ -2040,8 +2037,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(91, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(91)} stroke={stroke(91)} strokeWidth={getStrokeWidth(91)} @@ -2058,8 +2055,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(92, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(92)} stroke={stroke(92)} strokeWidth={getStrokeWidth(92)} @@ -2076,8 +2073,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(93, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(93)} stroke={stroke(93)} strokeWidth={getStrokeWidth(93)} @@ -2094,8 +2091,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(94, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(94)} stroke={stroke(94)} strokeWidth={getStrokeWidth(94)} @@ -2112,8 +2109,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(95, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(95)} stroke={stroke(95)} strokeWidth={getStrokeWidth(95)} @@ -2131,8 +2128,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(96, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(96)} stroke={stroke(96)} strokeWidth={getStrokeWidth(96)} @@ -2149,8 +2146,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(97, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(97)} stroke={stroke(97)} strokeWidth={getStrokeWidth(97)} @@ -2167,8 +2164,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(98, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(98)} stroke={stroke(98)} strokeWidth={getStrokeWidth(98)} @@ -2185,8 +2182,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(69, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(69)} stroke={stroke(69)} strokeWidth={getStrokeWidth(69)} @@ -2203,8 +2200,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(70, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(70)} stroke={stroke(70)} strokeWidth={getStrokeWidth(70)} @@ -2223,8 +2220,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(107, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(107)} stroke={stroke(107)} strokeWidth={getStrokeWidth(107)} @@ -2241,8 +2238,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(106, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(106)} stroke={stroke(106)} strokeWidth={getStrokeWidth(106)} @@ -2259,8 +2256,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(105, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(105)} stroke={stroke(105)} strokeWidth={getStrokeWidth(105)} @@ -2277,8 +2274,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(104, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(104)} stroke={stroke(104)} strokeWidth={getStrokeWidth(104)} @@ -2295,8 +2292,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(103, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(103)} stroke={stroke(103)} strokeWidth={getStrokeWidth(103)} @@ -2313,8 +2310,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(102, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(102)} stroke={stroke(102)} strokeWidth={getStrokeWidth(102)} @@ -2331,8 +2328,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(101, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(101)} stroke={stroke(101)} strokeWidth={getStrokeWidth(101)} @@ -2349,8 +2346,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(100, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(100)} stroke={stroke(100)} strokeWidth={getStrokeWidth(100)} @@ -2367,8 +2364,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(99, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(99)} stroke={stroke(99)} strokeWidth={getStrokeWidth(99)} @@ -2385,8 +2382,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(130, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(130)} stroke={stroke(130)} strokeWidth={getStrokeWidth(130)} @@ -2403,8 +2400,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(129, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(129)} stroke={stroke(129)} strokeWidth={getStrokeWidth(129)} @@ -2421,8 +2418,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(128, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(128)} stroke={stroke(128)} strokeWidth={getStrokeWidth(128)} @@ -2439,8 +2436,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(127, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(127)} stroke={stroke(127)} strokeWidth={getStrokeWidth(127)} @@ -2457,8 +2454,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(126, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(126)} stroke={stroke(126)} strokeWidth={getStrokeWidth(126)} @@ -2475,8 +2472,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(125, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(125)} stroke={stroke(125)} strokeWidth={getStrokeWidth(125)} @@ -2493,8 +2490,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(124, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(124)} stroke={stroke(124)} strokeWidth={getStrokeWidth(124)} @@ -2511,8 +2508,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(123, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(123)} stroke={stroke(123)} strokeWidth={getStrokeWidth(123)} @@ -2529,8 +2526,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(122, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(122)} stroke={stroke(122)} strokeWidth={getStrokeWidth(122)} @@ -2547,8 +2544,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(121, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(121)} stroke={stroke(121)} strokeWidth={getStrokeWidth(121)} @@ -2566,8 +2563,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(120, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(120)} stroke={stroke(120)} strokeWidth={getStrokeWidth(120)} @@ -2584,8 +2581,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(119, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(119)} stroke={stroke(119)} strokeWidth={getStrokeWidth(119)} @@ -2602,8 +2599,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(118, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(118)} stroke={stroke(118)} strokeWidth={getStrokeWidth(118)} @@ -2620,8 +2617,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(117, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(117)} stroke={stroke(117)} strokeWidth={getStrokeWidth(117)} @@ -2638,8 +2635,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(116, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(116)} stroke={stroke(116)} strokeWidth={getStrokeWidth(116)} @@ -2656,8 +2653,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(115, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(115)} stroke={stroke(115)} strokeWidth={getStrokeWidth(115)} @@ -2674,8 +2671,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(114, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(114)} stroke={stroke(114)} strokeWidth={getStrokeWidth(114)} @@ -2692,8 +2689,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(113, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(113)} stroke={stroke(113)} strokeWidth={getStrokeWidth(113)} @@ -2710,8 +2707,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(112, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(112)} stroke={stroke(112)} strokeWidth={getStrokeWidth(112)} @@ -2728,8 +2725,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(111, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(111)} stroke={stroke(111)} strokeWidth={getStrokeWidth(111)} @@ -2746,8 +2743,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(110, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(110)} stroke={stroke(110)} strokeWidth={getStrokeWidth(110)} @@ -2764,8 +2761,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(109, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(109)} stroke={stroke(109)} strokeWidth={getStrokeWidth(109)} @@ -2782,8 +2779,8 @@ class KeymapISO extends React.Component { setUndeglowIndex(108, e); }} selectedLED={this.props.selectedLED} - visibility={this.props.showUnderglow || this.props.isStandardView ? true : false} - clickAble={this.props.isStandardView && !this.props.showUnderglow ? false : true} + visibility={!!(this.props.showUnderglow || this.props.isStandardView)} + clickAble={!(this.props.isStandardView && !this.props.showUnderglow)} fill={getColor(108)} stroke={stroke(108)} strokeWidth={getStrokeWidth(108)} diff --git a/src/api/hardware-dygma-raise-iso/index.js b/src/api/hardware-dygma-raise-iso/index.js index 138abac47..c4592d9df 100644 --- a/src/api/hardware-dygma-raise-iso/index.js +++ b/src/api/hardware-dygma-raise-iso/index.js @@ -27,30 +27,30 @@ const Raise_ISO = { urls: [ { name: "Homepage", - url: "https://www.dygma.com/raise/" - } - ] + url: "https://www.dygma.com/raise/", + }, + ], }, usb: { vendorId: 0x1209, - productId: 0x2201 + productId: 0x2201, }, keyboard: { rows: 5, - columns: 16 + columns: 16, }, keyboardUnderglow: { rows: 6, - columns: 22 + columns: 22, }, components: { - keymap: KeymapISO + keymap: KeymapISO, }, instructions: { en: { - updateInstructions: `To update the firmware, the keyboard needs a special reset. When the countdown starts, press and hold the Escape key. Soon after the countdown finished, the Neuron's light should start a blue pulsing pattern, and the flashing will proceed. At this point, you should release the Escape key.` - } + updateInstructions: `To update the firmware, the keyboard needs a special reset. When the countdown starts, press and hold the Escape key. Soon after the countdown finished, the Neuron's light should start a blue pulsing pattern, and the flashing will proceed. At this point, you should release the Escape key.`, + }, }, flash: async (_, filename, flashRaise, stateUpdate) => { @@ -66,7 +66,7 @@ const Raise_ISO = { }, isDeviceSupported: async port => { - let focus = new Focus(); + const focus = new Focus(); let layout = localStorage.getItem(port.serialNumber); if (!layout) { focus._port && focus._port.path === port.path @@ -77,7 +77,7 @@ const Raise_ISO = { localStorage.setItem(port.serialNumber, layout); } return layout.trim() === "ISO"; - } + }, }; const Raise_ISOBootloader = { @@ -89,19 +89,19 @@ const Raise_ISOBootloader = { urls: [ { name: "Homepage", - url: "https://www.dygma.com/raise/" - } - ] + url: "https://www.dygma.com/raise/", + }, + ], }, usb: { vendorId: 0x1209, - productId: 0x2200 + productId: 0x2200, }, bootloader: true, instructions: { en: { - updateInstructions: `To update the firmware, press the button at the bottom. You must not hold any key on the keyboard while the countdown is in progress, nor afterwards, until the flashing is finished. When the countdown reaches zero, the Neuron's light should start a blue pulsing pattern, and flashing will then proceed. ` - } + updateInstructions: `To update the firmware, press the button at the bottom. You must not hold any key on the keyboard while the countdown is in progress, nor afterwards, until the flashing is finished. When the countdown reaches zero, the Neuron's light should start a blue pulsing pattern, and flashing will then proceed. `, + }, }, flash: async (_, filename, flashRaise, stateUpdate) => { return new Promise(async (resolve, reject) => { @@ -112,7 +112,7 @@ const Raise_ISOBootloader = { reject(e); } }); - } + }, }; export { Raise_ISO, Raise_ISOBootloader }; diff --git a/src/api/hardware-virtual/DefyWired.js b/src/api/hardware-virtual/DefyWired.js new file mode 100644 index 000000000..f9dd5b8fc --- /dev/null +++ b/src/api/hardware-virtual/DefyWired.js @@ -0,0 +1,263 @@ +const DefyWired = { + device: { + info: { + vendor: "Dygma", + product: "Defy", + keyboardType: "wired", + displayName: "Dygma Defy wired", + urls: [ + { + name: "Homepage", + url: "https://www.dygma.com/defy/", + }, + ], + }, + usb: { + vendorId: 13807, + productId: 16, + }, + keyboard: { + rows: 5, + columns: 16, + }, + keyboardUnderglow: { + rows: 2, + columns: 89, + }, + RGBWMode: true, + components: {}, + instructions: { + en: { + updateInstructions: + "To update the firmware, the keyboard needs a special reset. When the countdown starts, press and hold the Escape key. Soon after the countdown finished, the Neuron's light should start a blue pulsing pattern, and the flashing will proceed. At this point, you should release the Escape key.", + }, + }, + }, + virtual: { + version: { + data: "v1.0.9beta 7622bb53 c9d9b7b-dirty", + eraseable: false, + }, + "keymap.custom": { + data: + "41 30 31 32 33 34 23785 0 0 22709 35 36 37 38 39 48 2091 20 26 8 21 23 23786 0 0 22733 28 24 12 18 19 47 43 4 22 7 9 10 2096 0 0 17152 11 13 14 15 45 52 0 29 27 6 25 5 0 0 0 0 17 16 54 55 56 49 49210 50013 49467 51514 52286 847 848 226 17494 228 41 42 49977 52030 230 231 100 4638 4639 4640 4641 4642 65535 0 0 65535 4643 4644 4645 4646 4647 65535 6678 6177 74 82 77 4144 65535 0 0 65535 65535 75 594 78 2096 65535 65535 1055 80 81 79 4182 65535 0 0 65535 2084 592 593 591 51 65535 65535 65535 65535 65535 6169 53863 0 0 0 0 65535 4396 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 335 336 65535 65535 65535 65535 65535 17492 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 2087 84 85 86 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 95 96 97 87 65535 65535 65535 65535 82 65535 65535 65535 65535 65535 65535 65535 92 93 94 54 65535 65535 65535 80 81 79 65535 65535 65535 65535 65535 65535 89 90 91 88 65535 49162 17451 65535 65535 65535 65535 65535 17492 65535 65535 65535 65535 65535 65535 98 99 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 2078 1055 1032 1057 2080 65535 65535 65535 65535 2083 1071 1072 2087 48 65535 65535 2078 2079 1056 2081 2082 65535 65535 65535 65535 2084 2085 2086 46 2096 65535 65535 65535 53 2084 2101 65535 65535 65535 65535 65535 1059 1076 1073 2094 1080 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 53862 53861 53856 53860 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 53853 53854 53857 53858 53859 53855 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 41 30 31 32 33 34 23785 0 0 22709 35 36 37 38 39 48 2091 20 26 8 21 23 23786 0 0 22733 28 24 12 18 19 47 43 4 22 7 49434 10 2096 0 0 17152 11 49438 14 15 45 52 225 29 27 6 25 5 0 0 0 0 17 16 54 55 56 229 226 224 44 42 17451 40 76 227 101 41 42 17452 40 44 228 230 17492 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 2087 84 85 86 65535 65535 65535 74 82 77 75 65535 65535 65535 65535 65535 95 96 97 87 65535 65535 70 80 81 79 78 65535 65535 65535 65535 65535 92 93 94 54 65535 65535 22710 22709 23786 23785 22733 65535 65535 65535 65535 65535 89 90 91 88 65535 65535 65535 65535 65535 17450 65535 65535 65535 65535 65535 65535 17452 65535 65535 98 99 65535 58 59 60 61 62 65535 65535 65535 65535 63 64 65 66 67 65535 65535 65535 65535 47 100 2148 65535 65535 65535 65535 1054 1077 1076 1073 1071 1072 65535 2078 1055 1056 2081 2082 65535 65535 65535 65535 2095 2083 2096 2085 2086 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 17450 65535 65535 65535 65535 65535 65535 17451 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 41 30 31 32 33 34 53 0 0 46 35 36 37 38 39 45 43 20 26 8 21 23 0 0 0 48 28 24 12 18 19 47 57 4 22 7 9 10 2096 0 0 49 11 13 14 15 51 52 225 29 27 6 25 5 0 0 0 0 17 16 54 55 56 229 224 227 49979 51514 51806 44 226 17494 0 847 848 42 52026 49469 231 230", + eraseable: true, + }, + "keymap.default": { + data: + "41 30 31 32 33 34 35 0 0 51518 37 38 39 45 46 42 43 20 26 8 21 23 128 0 0 28 24 12 18 19 47 48 57 4 22 7 9 10 129 0 0 11 13 14 15 51 52 229 49 29 27 6 25 5 0 0 0 0 17 16 54 55 56 229 224 227 42 76 44 40 226 225 79 81 80 40 17152 74 82 77 41 58 59 60 61 62 63 0 0 64 65 66 67 68 69 42 43 0 82 0 0 0 0 0 0 86 36 37 38 84 0 40 57 80 81 79 0 0 0 0 0 87 33 34 35 85 0 49 225 49 0 0 0 0 0 0 0 0 99 30 31 32 82 229 224 227 226 44 76 40 42 44 79 228 76 17492 39 44 80 81", + eraseable: false, + }, + "keymap.onlyCustom": { + data: "1", + eraseable: true, + }, + "settings.defaultLayer": { + data: "0", + eraseable: true, + }, + "settings.valid?": { + data: "true", + eraseable: false, + }, + "settings.version": { + data: "1", + eraseable: false, + }, + "settings.crc": { + data: "18462/18462", + eraseable: false, + }, + "eeprom.contents": { + data: "", + eraseable: false, + }, + "eeprom.free": { + data: "", + eraseable: false, + }, + "led.at": { + data: "", + eraseable: false, + }, + "led.setAll": { + data: "", + eraseable: false, + }, + "led.mode": { + data: "0", + eraseable: true, + }, + "led.brightness": { + data: "153", + eraseable: true, + }, + "led.brightnessUG": { + data: "153", + eraseable: true, + }, + "led.theme": { + data: "", + eraseable: false, + }, + palette: { + data: + "10 0 0 245 166 0 145 0 210 131 0 35 93 178 0 33 206 0 25 2 0 147 114 80 0 0 0 0 125 0 235 19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0", + eraseable: true, + }, + "colormap.map": { + data: + "2 0 0 0 0 0 2 2 0 0 0 0 0 2 2 0 0 0 2 0 1 6 0 0 0 0 0 1 1 5 1 1 2 2 1 2 0 0 0 0 0 2 2 0 0 0 0 0 2 2 0 0 0 2 0 1 2 0 0 0 0 0 2 2 5 1 1 2 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 4 4 4 4 0 0 6 6 1 5 2 5 1 6 6 1 2 2 2 1 7 7 7 6 7 0 5 1 1 0 1 1 1 1 1 6 4 4 4 0 0 6 6 1 1 2 1 7 6 6 1 2 2 2 1 7 6 6 6 7 1 6 1 1 0 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 7 7 7 7 7 7 7 7 7 7 7 7 7 6 7 7 7 2 7 6 6 6 7 2 2 2 7 7 7 7 6 7 6 6 0 6 1 1 1 1 6 6 6 1 0 0 0 6 6 6 1 0 1 0 6 6 6 1 0 0 0 6 0 0 1 1 1 2 2 1 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 7 7 6 6 6 6 6 6 7 2 2 2 2 2 6 7 1 1 1 1 1 7 7 7 4 5 4 7 0 0 0 0 4 4 0 4 7 7 6 6 6 6 6 7 2 2 2 2 2 6 7 1 1 1 1 1 6 7 4 4 5 5 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 15 15 15 15 15 15 15 15 15 5 4 2 3 15 15 15 1 1 1 1 1 1 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 15 2 0 0 0 0 0 2 2 0 0 0 0 0 2 2 0 0 0 0 0 1 7 0 0 0 0 0 7 7 7 7 4 7 7 7 2 0 0 0 0 0 2 2 0 0 0 0 0 2 2 0 0 0 0 0 1 7 0 0 0 0 0 7 7 7 7 2 7 7 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 6 6 6 6 6 6 6 6 6 3 2 3 1 6 6 7 2 2 2 1 6 6 5 5 5 5 5 6 6 6 6 7 6 6 6 6 1 1 1 1 6 6 6 1 0 0 0 6 6 6 1 0 1 0 6 6 6 1 0 0 0 6 0 0 6 6 2 6 6 6 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 7 6 3 3 3 3 3 8 6 6 6 1 1 1 6 6 1 1 1 1 1 6 6 6 6 6 6 6 6 6 6 8 7 6 6 6 6 3 3 3 3 3 6 7 7 1 1 1 1 6 6 1 1 1 1 1 6 6 6 6 6 6 6 6 6 6 6 4 6 6 6 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 3 6 6 6 6 6 3 3 6 6 6 6 6 3 3 6 6 6 6 6 3 3 6 6 6 6 6 3 3 4 3 3 3 3 1 3 6 6 6 6 6 3 3 6 6 6 6 6 3 3 6 6 6 6 6 3 3 6 6 6 6 6 3 3 4 3 3 5 5 7 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15", + eraseable: true, + }, + "idleleds.time_limit": { + data: "300", + eraseable: true, + }, + "hardware.version": { + data: "Dygma Defy", + eraseable: false, + }, + "hardware.side_power": { + data: "1", + eraseable: false, + }, + "hardware.side_ver": { + data: "left: 5\r\nright: 5 ", + eraseable: false, + }, + "hardware.sled_ver": { + data: "left: 115\r\nright: 115 ", + eraseable: false, + }, + "hardware.sled_current": { + data: "left: 63\r\nright: 63 ", + eraseable: false, + }, + "hardware.layout": { + data: "ISO", + eraseable: false, + }, + "hardware.joint": { + data: "127", + eraseable: false, + }, + "hardware.keyscan": { + data: "50", + eraseable: false, + }, + "hardware.crc_errors": { + data: "left: 0 right: 0 ", + eraseable: false, + }, + "hardware.firmware": { + data: "c9d9b7b", + eraseable: false, + }, + "hardware.chip_id": { + data: "VirtualDefyWiredVirtualDefyWired", + eraseable: false, + }, + "qukeys.holdTimeout": { + data: "250", + eraseable: true, + }, + "qukeys.overlapThreshold": { + data: "80", + eraseable: true, + }, + "superkeys.map": { + data: + "65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535", + eraseable: true, + }, + "superkeys.waitfor": { + data: "500", + eraseable: true, + }, + "superkeys.timeout": { + data: "250", + eraseable: true, + }, + "superkeys.repeat": { + data: "20", + eraseable: true, + }, + "superkeys.holdstart": { + data: "200", + eraseable: true, + }, + "superkeys.overlap": { + data: "20", + eraseable: true, + }, + "macros.map": { + data: + "6 225 8 5 7 225 8 8 8 22 8 23 8 54 8 40 8 40 6 225 8 15 7 225 8 24 8 12 8 22 0 6 227 8 80 7 227 8 84 8 11 8 30 8 40 6 227 8 79 7 227 0 6 227 8 80 7 227 8 84 8 11 8 31 8 40 6 227 8 79 7 227 0 6 227 8 80 7 227 8 84 8 5 8 24 8 15 8 15 8 8 8 23 8 8 8 7 8 44 8 15 8 12 8 22 8 23 8 40 0 6 227 8 80 7 227 8 84 8 5 8 4 8 17 8 17 8 8 8 21 8 44 8 28 8 8 8 15 8 15 8 18 8 26 8 40 0 6 227 8 80 7 227 8 84 8 11 8 32 8 40 6 227 8 79 7 227 0 6 227 8 80 7 227 8 84 8 11 8 33 8 40 6 227 8 79 7 227 0 6 227 8 80 7 227 8 84 8 6 8 11 8 8 8 6 8 14 8 15 8 12 8 22 8 23 8 40 0 6 227 8 80 7 227 8 84 8 5 8 4 8 17 8 17 8 8 8 21 8 44 8 10 8 21 8 8 8 8 8 17 8 40 6 227 8 79 7 227 0 6 227 8 80 7 227 8 84 8 5 8 4 8 17 8 17 8 8 8 21 8 44 8 21 8 8 8 7 8 40 6 227 8 79 7 227 0 6 227 8 80 7 227 8 84 8 5 8 4 8 17 8 17 8 8 8 21 8 44 8 5 8 15 8 24 8 8 8 40 6 227 8 79 7 227 0 8 84 8 10 8 12 8 19 8 11 8 28 2 0 200 8 40 0 0 8 10 8 21 8 8 8 8 8 17 8 40 0 8 84 8 5 8 4 8 17 8 17 8 8 8 21 8 44 8 21 8 8 8 7 8 40 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255", + eraseable: true, + }, + "macros.trigger": { + data: "false", + eraseable: false, + }, + "macros.memory": { + data: "2048", + eraseable: false, + }, + help: { + data: + "version\r\nkeymap.custom\r\nkeymap.default\r\nkeymap.onlyCustom\r\nsettings.defaultLayer\r\nsettings.valid?\r\nsettings.version\r\nsettings.crc\r\neeprom.contents\r\neeprom.free\r\nled.at\r\nled.setAll\r\nled.mode\r\nled.brightness\r\nled.theme\r\npalette\r\ncolormap.map\r\nidleleds.time_limit\r\nhardware.version\r\nhardware.side_power\r\nhardware.side_ver\r\nhardware.sled_ver\r\nhardware.sled_current\r\nhardware.layout\r\nhardware.joint\r\nhardware.keyscan\r\nhardware.crc_errors\r\nhardware.firmware\r\nhardware.chip_id\r\nqukeys.holdTimeout\r\nqukeys.overlapThreshold\r\nsuperkeys.map\r\nsuperkeys.waitfor\r\nsuperkeys.timeout\r\nsuperkeys.repeat\r\nsuperkeys.holdstart\r\nsuperkeys.overlap\r\nmacros.map\r\nmacros.trigger\r\nhelp\r\nmouse.speed\r\nmouse.speedDelay\r\nmouse.accelSpeed\r\nmouse.accelDelay\r\nmouse.wheelSpeed\r\nmouse.wheelDelay\r\nmouse.speedLimit\r\nlayer.activate\r\nlayer.deactivate\r\nlayer.isActive\r\nlayer.moveTo\r\nlayer.state", + eraseable: false, + }, + "mouse.speed": { + data: "20", + eraseable: true, + }, + "mouse.speedDelay": { + data: "2", + eraseable: true, + }, + "mouse.accelSpeed": { + data: "20", + eraseable: true, + }, + "mouse.accelDelay": { + data: "2", + eraseable: true, + }, + "mouse.wheelSpeed": { + data: "2", + eraseable: true, + }, + "mouse.wheelDelay": { + data: "100", + eraseable: true, + }, + "mouse.speedLimit": { + data: "127", + eraseable: true, + }, + "layer.activate": { + data: "false", + eraseable: false, + }, + "layer.deactivate": { + data: "false", + eraseable: false, + }, + "layer.isActive": { + data: "0", + eraseable: false, + }, + "layer.moveTo": { + data: "false", + eraseable: false, + }, + "layer.state": { + data: "1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0", + eraseable: false, + }, + }, +}; + +export default DefyWired; diff --git a/src/api/hardware-virtual/DefyWireless.js b/src/api/hardware-virtual/DefyWireless.js new file mode 100644 index 000000000..b50c8b876 --- /dev/null +++ b/src/api/hardware-virtual/DefyWireless.js @@ -0,0 +1,327 @@ +const DefyWireless = { + device: { + info: { + vendor: "Dygma", + product: "Defy", + keyboardType: "wireless", + displayName: "Dygma Defy", + urls: [ + { + name: "Homepage", + url: "https://www.dygma.com/defy/", + }, + ], + }, + usb: { + vendorId: 13807, + productId: 18, + }, + keyboard: { + rows: 5, + columns: 16, + }, + keyboardUnderglow: { + rows: 2, + columns: 89, + }, + RGBWMode: true, + components: {}, + instructions: { + en: { + updateInstructions: + "To update the firmware, the keyboard needs a special reset. When the countdown starts, press and hold the Escape key. Soon after the countdown finished, the Neuron's light should start a blue pulsing pattern, and the flashing will proceed. At this point, you should release the Escape key.", + }, + }, + }, + virtual: { + version: { + data: "v1.0.9beta 7622bb53 c9d9b7b-dirty", + eraseable: false, + }, + "keymap.custom": { + data: + "41 30 31 32 33 34 0 0 0 0 35 36 37 38 39 0 43 20 26 8 21 23 0 0 0 0 28 24 12 18 19 0 57 4 22 7 9 10 17152 0 0 0 11 13 14 15 51 52 53980 29 27 6 25 5 0 0 0 0 17 16 54 55 56 0 53853 17452 44 49467 49209 226 227 0 0 231 76 49209 52028 44 49162 230 41 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 43 85 95 96 97 87 0 0 0 0 75 74 82 77 0 0 0 84 92 93 94 86 83 0 0 0 78 80 81 79 70 0 0 46 89 90 91 99 0 0 0 0 0 0 0 0 0 0 0 0 98 65535 65535 65535 0 0 0 0 0 65535 65535 65535 65535 0 0 58 59 60 61 62 63 65535 65535 64 65 66 67 68 69 0 0 0 0 22710 22709 23785 0 65535 65535 0 0 23663 0 0 65535 0 0 0 22713 22711 22733 23785 0 65535 65535 0 0 23664 20866 20865 0 0 0 0 0 0 0 19682 65535 65535 65535 65535 0 0 0 0 0 0 0 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 0 0 53 2079 2080 2081 2101 0 65535 65535 0 2083 2095 2096 2093 2094 0 0 2078 56 2102 2103 2082 0 65535 65535 0 2084 2086 2087 45 46 0 0 0 0 49 2097 0 65535 65535 65535 65535 0 47 48 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 ", + eraseable: true, + }, + "keymap.default": { + data: + "41 30 31 32 33 34 35 0 0 51518 37 38 39 45 46 42 43 20 26 8 21 23 128 0 0 28 24 12 18 19 47 48 57 4 22 7 9 10 129 0 0 11 13 14 15 51 52 229 49 29 27 6 25 5 0 0 0 0 17 16 54 55 56 229 224 227 42 76 44 40 226 225 79 81 80 40 17152 74 82 77 41 58 59 60 61 62 63 0 0 64 65 66 67 68 69 42 43 0 82 0 0 0 0 0 0 86 36 37 38 84 0 40 57 80 81 79 0 0 0 0 0 87 33 34 35 85 0 49 225 49 0 0 0 0 0 0 0 0 99 30 31 32 82 229 224 227 226 44 76 40 42 44 79 228 76 17492 39 44 80 81 ", + eraseable: false, + }, + "keymap.onlyCustom": { + data: "1 ", + eraseable: true, + }, + "settings.defaultLayer": { + data: "0 ", + eraseable: true, + }, + "settings.valid?": { + data: "true", + eraseable: false, + }, + "settings.version": { + data: "1", + eraseable: false, + }, + "settings.crc": { + data: "18462/18462", + eraseable: false, + }, + "eeprom.contents": { + data: "", + eraseable: false, + }, + "eeprom.free": { + data: "", + eraseable: false, + }, + "led.at": { + data: "", + eraseable: false, + }, + "led.setAll": { + data: "", + eraseable: false, + }, + "led.mode": { + data: "0", + eraseable: true, + }, + "led.brightness": { + data: "153 ", + eraseable: true, + }, + "led.brightnessUG": { + data: "153 ", + eraseable: true, + }, + "led.theme": { + data: "", + eraseable: false, + }, + palette: { + data: + "255 196 0 0 0 254 24 0 0 0 0 255 231 255 0 0 0 254 234 0 0 52 255 0 255 0 232 0 0 77 168 87 125 0 235 19 20 0 36 219 85 0 126 129 255 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ", + eraseable: true, + }, + "colormap.map": { + data: + "10 4 4 4 4 4 12 10 4 4 4 4 4 12 2 4 4 4 4 4 8 10 4 4 4 4 4 10 8 1 5 6 2 2 12 12 4 4 4 4 4 12 12 4 4 4 4 4 12 7 7 4 4 4 4 12 12 7 7 7 4 4 9 3 1 5 6 7 2 12 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 10 12 12 12 12 12 12 10 0 3 3 3 0 12 12 0 3 0 3 0 11 12 0 3 3 3 0 12 12 3 5 6 9 12 12 12 12 12 12 12 12 12 12 12 9 3 9 10 12 12 1 3 3 3 10 12 12 12 12 12 12 12 12 3 1 5 6 12 12 12 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 7 12 8 8 8 8 8 8 15 12 15 7 7 9 15 15 12 3 0 1 9 15 15 15 15 15 15 9 15 8 15 12 15 15 15 15 15 8 8 8 8 8 8 15 15 15 12 3 15 15 15 12 11 0 3 12 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 15 12 12 12 12 12 12 12 12 7 7 7 7 7 12 12 4 4 5 5 4 12 12 12 12 7 7 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 7 7 5 5 7 12 12 4 4 5 5 4 12 12 12 12 5 5 12 12 12 12 5 12 12 12 12 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 ", + eraseable: true, + }, + "idleleds.time_limit": { + data: "300 ", + eraseable: true, + }, + "hardware.version": { + data: "Dygma Defy", + eraseable: false, + }, + "hardware.side_power": { + data: "1", + eraseable: false, + }, + "hardware.side_ver": { + data: "left: 5\r\nright: 5 ", + eraseable: false, + }, + "hardware.sled_ver": { + data: "left: 115\r\nright: 115 ", + eraseable: false, + }, + "hardware.sled_current": { + data: "left: 63\r\nright: 63 ", + eraseable: false, + }, + "hardware.layout": { + data: "ISO", + eraseable: false, + }, + "hardware.joint": { + data: "127", + eraseable: false, + }, + "hardware.keyscan": { + data: "50", + eraseable: false, + }, + "hardware.crc_errors": { + data: "left: 0 right: 0 ", + eraseable: false, + }, + "hardware.firmware": { + data: "c9d9b7b", + eraseable: false, + }, + "hardware.chip_id": { + data: "VirtualDefyWirelessVirtualDefyWireless", + eraseable: false, + }, + "qukeys.holdTimeout": { + data: "250", + eraseable: true, + }, + "qukeys.overlapThreshold": { + data: "80", + eraseable: true, + }, + "superkeys.map": { + data: + "262 281 1 1 1 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 ", + eraseable: true, + }, + "superkeys.waitfor": { + data: "500 ", + eraseable: true, + }, + "superkeys.timeout": { + data: "250 ", + eraseable: true, + }, + "superkeys.repeat": { + data: "20 ", + eraseable: true, + }, + "superkeys.holdstart": { + data: "200 ", + eraseable: true, + }, + "superkeys.overlap": { + data: "20 ", + eraseable: true, + }, + "macros.map": { + data: + "8 44 6 225 8 11 7 225 8 8 8 28 8 54 8 44 6 225 8 7 7 225 8 28 8 10 8 16 8 4 8 23 8 8 8 22 0 0 225 8 8 8 28 8 54 8 44 6 225 8 7 7 225 8 28 8 10 8 16 8 4 8 23 8 8 8 22 0 0 79 7 227 0 6 227 8 80 7 227 8 84 8 5 8 24 8 15 8 15 8 8 8 23 8 8 8 7 8 44 8 15 8 12 8 22 8 23 8 40 0 6 227 8 80 7 227 8 84 8 5 8 4 8 17 8 17 8 8 8 21 8 44 8 28 8 8 8 15 8 15 8 18 8 26 8 40 0 6 227 8 80 7 227 8 84 8 11 8 32 8 40 6 227 8 79 7 227 0 6 227 8 80 7 227 8 84 8 11 8 33 8 40 6 227 8 79 7 227 0 6 227 8 80 7 227 8 84 8 6 8 11 8 8 8 6 8 14 8 15 8 12 8 22 8 23 8 40 0 6 227 8 80 7 227 8 84 8 5 8 4 8 17 8 17 8 8 8 21 8 44 8 10 8 21 8 8 8 8 8 17 8 40 6 227 8 79 7 227 0 6 227 8 80 7 227 8 84 8 5 8 4 8 17 8 17 8 8 8 21 8 44 8 21 8 8 8 7 8 40 6 227 8 79 7 227 0 6 227 8 80 7 227 8 84 8 5 8 4 8 17 8 17 8 8 8 21 8 44 8 5 8 15 8 24 8 8 8 40 6 227 8 79 7 227 0 8 84 8 10 8 12 8 19 8 11 8 28 2 0 200 8 40 0 0 8 10 8 21 8 8 8 8 8 17 8 40 0 8 84 8 5 8 4 8 17 8 17 8 8 8 21 8 44 8 21 8 8 8 7 8 40 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 ", + eraseable: true, + }, + "macros.trigger": { + data: "false", + eraseable: false, + }, + "macros.memory": { + data: "2048", + eraseable: false, + }, + help: { + data: + "version\r\nkeymap.custom\r\nkeymap.default\r\nkeymap.onlyCustom\r\nsettings.defaultLayer\r\nsettings.valid?\r\nsettings.version\r\nsettings.crc\r\neeprom.contents\r\neeprom.free\r\nled.at\r\nled.setAll\r\nled.mode\r\nled.brightness\r\nled.theme\r\npalette\r\ncolormap.map\r\nidleleds.time_limit\r\nhardware.version\r\nhardware.side_power\r\nhardware.side_ver\r\nhardware.sled_ver\r\nhardware.sled_current\r\nhardware.layout\r\nhardware.joint\r\nhardware.keyscan\r\nhardware.crc_errors\r\nhardware.firmware\r\nhardware.chip_id\r\nqukeys.holdTimeout\r\nqukeys.overlapThreshold\r\nsuperkeys.map\r\nsuperkeys.waitfor\r\nsuperkeys.timeout\r\nsuperkeys.repeat\r\nsuperkeys.holdstart\r\nsuperkeys.overlap\r\nmacros.map\r\nmacros.trigger\r\nhelp\r\nmouse.speed\r\nmouse.speedDelay\r\nmouse.accelSpeed\r\nmouse.accelDelay\r\nmouse.wheelSpeed\r\nmouse.wheelDelay\r\nmouse.speedLimit\r\nlayer.activate\r\nlayer.deactivate\r\nlayer.isActive\r\nlayer.moveTo\r\nlayer.state", + eraseable: false, + }, + "mouse.speed": { + data: "20 ", + eraseable: true, + }, + "mouse.speedDelay": { + data: "2 ", + eraseable: true, + }, + "mouse.accelSpeed": { + data: "20 ", + eraseable: true, + }, + "mouse.accelDelay": { + data: "2 ", + eraseable: true, + }, + "mouse.wheelSpeed": { + data: "2 ", + eraseable: true, + }, + "mouse.wheelDelay": { + data: "100 ", + eraseable: true, + }, + "mouse.speedLimit": { + data: "127 ", + eraseable: true, + }, + "layer.activate": { + data: "false", + eraseable: false, + }, + "layer.deactivate": { + data: "false", + eraseable: false, + }, + "layer.isActive": { + data: "0", + eraseable: false, + }, + "layer.moveTo": { + data: "false", + eraseable: false, + }, + "layer.state": { + data: "1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0", + eraseable: false, + }, + "wireless.battery.left.level": { + data: "80", + eraseable: false, + }, + "wireless.battery.right.level": { + data: "80", + eraseable: false, + }, + "wireless.battery.left.status": { + data: "1", + eraseable: false, + }, + "wireless.battery.right.status": { + data: "1", + eraseable: false, + }, + "wireless.battery.savingMode": { + data: "0", + eraseable: true, + }, + "wireless.energy.modes": { + data: "0 0 0 0 0 0 0 0 0 0 0", + eraseable: true, + }, + "wireless.energy.disable": { + data: "true", + eraseable: false, + }, + "wireless.energy.currentMode": { + data: "0", + eraseable: true, + }, + "wireless.bluetooth.state": { + data: "connected", + eraseable: false, + }, + "wireless.bluetooth.devices": { + data: "0 0 0 0 0 0 0 0 0 0 0", + eraseable: true, + }, + "wireless.bluetooth.connectTo": { + data: "", + eraseable: true, + }, + "wireless.bluetooth.stability": { + data: "80 305", + eraseable: false, + }, + "wireless.rf.state": { + data: "disconnected", + eraseable: false, + }, + "wireless.rf.stability": { + data: "0", + eraseable: false, + }, + "wireless.rf.channelHop": { + data: "false", + eraseable: true, + }, + "wireless.rf.syncPairing": { + data: "", + eraseable: false, + }, + }, +}; + +export default DefyWireless; diff --git a/src/api/hardware-virtual/RaiseANSI.js b/src/api/hardware-virtual/RaiseANSI.js new file mode 100644 index 000000000..a1c3f785a --- /dev/null +++ b/src/api/hardware-virtual/RaiseANSI.js @@ -0,0 +1,262 @@ +const RaiseANSI = { + device: { + info: { + vendor: "Dygma", + product: "Raise", + keyboardType: "ANSI", + displayName: "Dygma Raise ANSI", + urls: [ + { + name: "Homepage", + url: "https://www.dygma.com/raise/", + }, + ], + }, + usb: { + vendorId: 4617, + productId: 8705, + }, + keyboard: { + rows: 5, + columns: 16, + }, + keyboardUnderglow: { + rows: 6, + columns: 22, + }, + components: {}, + instructions: { + en: { + updateInstructions: + "To update the firmware, the keyboard needs a special reset. When the countdown starts, press and hold the Escape key. Soon after the countdown finished, the Neuron's light should start a blue pulsing pattern, and the flashing will proceed. At this point, you should release the Escape key.", + }, + }, + }, + virtual: { + version: { + data: "v1.0.9beta 7622bb53 c9d9b7b-dirty", + eraseable: false, + }, + "keymap.custom": { + data: + "41 30 31 32 33 34 35 0 0 36 37 38 39 45 46 42 43 20 26 8 21 23 0 0 28 24 12 18 19 47 48 40 57 4 22 7 9 10 0 0 0 11 13 14 15 51 52 49 225 100 29 27 6 25 5 0 0 0 17 16 54 55 56 229 224 227 226 44 44 0 42 51514 49162 76 44 44 230 231 101 228 53 58 59 60 61 62 63 0 0 64 65 66 67 68 69 65535 43 53980 74 82 77 75 0 0 86 95 96 97 84 83 0 65535 49226 70 80 81 79 78 0 0 0 87 92 93 94 85 53852 0 225 0 22710 22709 23786 23785 22733 0 0 0 98 89 90 91 99 82 224 227 226 44 44 0 42 51514 65535 17152 44 44 230 80 81 79 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535", + eraseable: true, + }, + "keymap.default": { + data: + "41 30 31 32 33 34 35 0 0 36 37 38 39 45 46 42 43 20 26 8 21 23 0 0 28 24 12 18 19 47 48 40 57 4 22 7 9 10 0 0 0 11 13 14 15 51 52 49 225 49 29 27 6 25 5 0 0 0 17 16 54 55 56 229 224 227 226 44 44 0 42 40 17493 76 44 44 230 231 17152 228 41 58 59 60 61 62 63 0 0 64 65 66 67 68 69 42 43 0 82 0 0 0 0 0 86 36 37 38 84 0 0 40 57 80 81 79 0 0 0 0 0 87 33 34 35 85 0 49 225 49 0 0 0 0 0 0 0 0 99 30 31 32 82 229 224 227 226 44 44 0 42 40 17492 76 39 44 80 81 79 228", + eraseable: false, + }, + "keymap.onlyCustom": { + data: "1", + eraseable: true, + }, + "settings.defaultLayer": { + data: "0", + eraseable: true, + }, + "settings.valid?": { + data: "true", + eraseable: false, + }, + "settings.version": { + data: "1", + eraseable: false, + }, + "settings.crc": { + data: "18462/18462", + eraseable: false, + }, + "eeprom.contents": { + data: "", + eraseable: false, + }, + "eeprom.free": { + data: "", + eraseable: false, + }, + "led.at": { + data: "", + eraseable: false, + }, + "led.setAll": { + data: "", + eraseable: false, + }, + "led.mode": { + data: "0", + eraseable: true, + }, + "led.brightness": { + data: "255", + eraseable: true, + }, + "led.brightnessUG": { + data: "255", + eraseable: true, + }, + "led.theme": { + data: "", + eraseable: false, + }, + palette: { + data: + "255 196 0 0 254 24 255 255 255 231 255 0 0 254 234 0 52 255 255 0 232 87 164 255 144 19 254 239 219 255 214 129 255 255 9 0 0 0 0 0 0 0 0 0 0 0 0 0", + eraseable: true, + }, + "colormap.map": { + data: + "4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 1 1 5 6 5 4 4 4 4 4 4 6 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 1 1 10 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 8 8 8 8 8 8 4 3 9 0 9 10 7 8 0 0 0 10 4 15 7 7 4 4 1 4 4 4 1 1 5 6 5 8 8 8 8 8 8 6 15 11 10 9 9 9 10 15 3 10 9 9 9 10 0 10 9 9 9 9 0 0 0 4 1 1 11 3 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15", + eraseable: true, + }, + "idleleds.time_limit": { + data: "600", + eraseable: true, + }, + "hardware.version": { + data: "Dygma Raise", + eraseable: false, + }, + "hardware.side_power": { + data: "1", + eraseable: false, + }, + "hardware.side_ver": { + data: "left: 5\r\nright: 5 ", + eraseable: false, + }, + "hardware.sled_ver": { + data: "left: 115\r\nright: 115 ", + eraseable: false, + }, + "hardware.sled_current": { + data: "left: 63\r\nright: 63 ", + eraseable: false, + }, + "hardware.layout": { + data: "ANSI", + eraseable: false, + }, + "hardware.joint": { + data: "127", + eraseable: false, + }, + "hardware.keyscan": { + data: "50", + eraseable: false, + }, + "hardware.crc_errors": { + data: "left: 0 right: 0 ", + eraseable: false, + }, + "hardware.firmware": { + data: "c9d9b7b", + eraseable: false, + }, + "hardware.chip_id": { + data: "virtualRaiseANSIvirtualRaiseANSI", + eraseable: false, + }, + "qukeys.holdTimeout": { + data: "250", + eraseable: true, + }, + "qukeys.overlapThreshold": { + data: "80", + eraseable: true, + }, + "superkeys.map": { + data: + "262 281 1 1 1 0 0 4102 0 41 1 1 1 1 0 54 1 1 2102 1 0 1 23785 23786 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 ", + eraseable: true, + }, + "superkeys.waitfor": { + data: "500 ", + eraseable: true, + }, + "superkeys.timeout": { + data: "250 ", + eraseable: true, + }, + "superkeys.repeat": { + data: "20 ", + eraseable: true, + }, + "superkeys.holdstart": { + data: "200 ", + eraseable: true, + }, + "superkeys.overlap": { + data: "20 ", + eraseable: true, + }, + "macros.map": { + data: + "6 225 8 11 7 225 8 8 8 28 8 54 8 44 6 225 8 7 7 225 8 28 8 10 8 16 8 4 8 23 8 8 8 22 0 0 8 15 8 18 8 24 8 23 8 40 0 8 84 8 7 8 8 8 9 8 4 8 24 8 15 8 23 8 40 0 8 84 8 18 8 21 8 4 8 17 8 10 8 8 8 40 0 8 84 8 10 8 21 8 8 8 8 8 17 8 40 0 8 84 8 10 8 21 8 8 8 8 8 17 8 44 8 5 8 4 8 6 8 14 8 10 8 21 8 18 8 24 8 17 8 7 8 40 0 8 84 8 28 8 8 8 15 8 15 8 18 8 26 8 81 8 40 0 8 84 8 21 8 8 8 7 8 81 8 40 0 8 224 8 226 0 6 225 8 5 7 225 8 8 8 22 8 23 8 54 8 40 8 40 6 225 8 15 7 225 8 24 8 12 8 22 0 8 84 8 11 8 30 8 40 0 6 227 8 80 7 227 8 84 8 11 8 31 8 40 6 227 8 79 7 227 0 8 44 8 84 8 5 8 24 8 15 8 15 8 8 8 23 8 8 8 7 8 44 8 15 8 12 8 22 8 23 8 40 0 8 84 8 5 8 4 8 17 8 17 8 8 8 21 8 44 8 28 8 8 8 15 8 15 8 18 8 26 8 40 0 8 84 8 11 8 32 8 40 0 8 84 8 11 8 33 8 40 0 8 84 8 6 8 11 8 8 8 6 8 14 8 15 8 12 8 22 8 23 8 40 0 8 84 8 5 8 4 8 17 8 17 8 8 8 21 8 44 8 10 8 21 8 8 8 8 8 17 8 40 0 8 84 8 5 8 4 8 17 8 17 8 8 8 21 8 44 8 21 8 8 8 7 8 40 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 ", + eraseable: true, + }, + "macros.trigger": { + data: "false", + eraseable: false, + }, + "macros.memory": { + data: "2048", + eraseable: false, + }, + help: { + data: + "version\r\nkeymap.custom\r\nkeymap.default\r\nkeymap.onlyCustom\r\nsettings.defaultLayer\r\nsettings.valid?\r\nsettings.version\r\nsettings.crc\r\neeprom.contents\r\neeprom.free\r\nled.at\r\nled.setAll\r\nled.mode\r\nled.brightness\r\nled.theme\r\npalette\r\ncolormap.map\r\nidleleds.time_limit\r\nhardware.version\r\nhardware.side_power\r\nhardware.side_ver\r\nhardware.sled_ver\r\nhardware.sled_current\r\nhardware.layout\r\nhardware.joint\r\nhardware.keyscan\r\nhardware.crc_errors\r\nhardware.firmware\r\nhardware.chip_id\r\nqukeys.holdTimeout\r\nqukeys.overlapThreshold\r\nsuperkeys.map\r\nsuperkeys.waitfor\r\nsuperkeys.timeout\r\nsuperkeys.repeat\r\nsuperkeys.holdstart\r\nsuperkeys.overlap\r\nmacros.map\r\nmacros.trigger\r\nhelp\r\nmouse.speed\r\nmouse.speedDelay\r\nmouse.accelSpeed\r\nmouse.accelDelay\r\nmouse.wheelSpeed\r\nmouse.wheelDelay\r\nmouse.speedLimit\r\nlayer.activate\r\nlayer.deactivate\r\nlayer.isActive\r\nlayer.moveTo\r\nlayer.state", + eraseable: false, + }, + "mouse.speed": { + data: "20", + eraseable: true, + }, + "mouse.speedDelay": { + data: "2", + eraseable: true, + }, + "mouse.accelSpeed": { + data: "20", + eraseable: true, + }, + "mouse.accelDelay": { + data: "2", + eraseable: true, + }, + "mouse.wheelSpeed": { + data: "2", + eraseable: true, + }, + "mouse.wheelDelay": { + data: "100", + eraseable: true, + }, + "mouse.speedLimit": { + data: "127", + eraseable: true, + }, + "layer.activate": { + data: "false", + eraseable: false, + }, + "layer.deactivate": { + data: "false", + eraseable: false, + }, + "layer.isActive": { + data: "0", + eraseable: false, + }, + "layer.moveTo": { + data: "false", + eraseable: false, + }, + "layer.state": { + data: "1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0", + eraseable: false, + }, + }, +}; + +export default RaiseANSI; diff --git a/src/api/hardware-virtual/RaiseISO.js b/src/api/hardware-virtual/RaiseISO.js new file mode 100644 index 000000000..1075da610 --- /dev/null +++ b/src/api/hardware-virtual/RaiseISO.js @@ -0,0 +1,262 @@ +const RaiseISO = { + device: { + info: { + vendor: "Dygma", + product: "Raise", + keyboardType: "ISO", + displayName: "Dygma Raise ISO", + urls: [ + { + name: "Homepage", + url: "https://www.dygma.com/raise/", + }, + ], + }, + usb: { + vendorId: 4617, + productId: 8705, + }, + keyboard: { + rows: 5, + columns: 16, + }, + keyboardUnderglow: { + rows: 6, + columns: 22, + }, + components: {}, + instructions: { + en: { + updateInstructions: + "To update the firmware, the keyboard needs a special reset. When the countdown starts, press and hold the Escape key. Soon after the countdown finished, the Neuron's light should start a blue pulsing pattern, and the flashing will proceed. At this point, you should release the Escape key.", + }, + }, + }, + virtual: { + version: { + data: "v1.0.9beta 7622bb53 c9d9b7b-dirty", + eraseable: false, + }, + "keymap.custom": { + data: + "41 30 31 32 33 34 35 0 0 36 37 38 39 45 46 42 43 20 26 8 21 23 0 0 28 24 12 18 19 47 48 40 57 4 22 7 9 10 0 0 0 11 13 14 15 51 52 49 225 100 29 27 6 25 5 0 0 0 17 16 54 55 56 229 224 227 226 44 44 0 42 51514 49162 76 44 44 230 231 101 228 53 58 59 60 61 62 63 0 0 64 65 66 67 68 69 65535 43 53852 74 82 77 75 0 0 86 95 96 97 84 83 0 65535 49226 70 80 81 79 78 0 0 0 87 92 93 94 85 0 0 225 53980 22710 22709 23786 23785 22733 0 0 0 98 89 90 91 99 82 224 227 226 44 44 0 42 51514 65535 17152 44 44 230 80 81 79 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 ", + eraseable: true, + }, + "keymap.default": { + data: + "41 30 31 32 33 34 35 0 0 36 37 38 39 45 46 42 43 20 26 8 21 23 0 0 28 24 12 18 19 47 48 40 57 4 22 7 9 10 0 0 0 11 13 14 15 51 52 49 225 49 29 27 6 25 5 0 0 0 17 16 54 55 56 229 224 227 226 44 44 0 42 40 17493 76 44 44 230 231 17152 228 41 58 59 60 61 62 63 0 0 64 65 66 67 68 69 42 43 0 82 0 0 0 0 0 86 36 37 38 84 0 0 40 57 80 81 79 0 0 0 0 0 87 33 34 35 85 0 49 225 49 0 0 0 0 0 0 0 0 99 30 31 32 82 229 224 227 226 44 44 0 42 40 17492 76 39 44 80 81 79 228 ", + eraseable: false, + }, + "keymap.onlyCustom": { + data: "1 ", + eraseable: true, + }, + "settings.defaultLayer": { + data: "0 ", + eraseable: true, + }, + "settings.valid?": { + data: "true", + eraseable: false, + }, + "settings.version": { + data: "1", + eraseable: false, + }, + "settings.crc": { + data: "18462/18462", + eraseable: false, + }, + "eeprom.contents": { + data: "", + eraseable: false, + }, + "eeprom.free": { + data: "", + eraseable: false, + }, + "led.at": { + data: "", + eraseable: false, + }, + "led.setAll": { + data: "", + eraseable: false, + }, + "led.mode": { + data: "0", + eraseable: true, + }, + "led.brightness": { + data: "255 ", + eraseable: true, + }, + "led.brightnessUG": { + data: "255 ", + eraseable: true, + }, + "led.theme": { + data: "", + eraseable: false, + }, + palette: { + data: + "255 196 0 0 254 24 255 255 255 231 255 0 0 254 234 0 52 255 255 0 232 87 164 255 144 19 254 239 219 255 214 129 255 255 9 0 0 0 0 0 0 0 0 0 0 0 0 0 ", + eraseable: true, + }, + "colormap.map": { + data: + "4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 1 1 5 6 5 4 4 4 4 4 4 6 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 1 1 10 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 8 8 8 8 8 8 4 6 9 0 9 10 7 8 0 0 0 10 4 6 7 7 4 4 1 4 4 4 1 1 5 6 5 8 8 8 8 8 8 6 15 11 10 9 9 9 10 15 15 10 9 9 9 10 0 10 9 9 9 9 0 0 0 4 1 1 11 3 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 ", + eraseable: true, + }, + "idleleds.time_limit": { + data: "600 ", + eraseable: true, + }, + "hardware.version": { + data: "Dygma Raise", + eraseable: false, + }, + "hardware.side_power": { + data: "1", + eraseable: false, + }, + "hardware.side_ver": { + data: "left: 5\r\nright: 5 ", + eraseable: false, + }, + "hardware.sled_ver": { + data: "left: 115\r\nright: 115 ", + eraseable: false, + }, + "hardware.sled_current": { + data: "left: 63\r\nright: 63 ", + eraseable: false, + }, + "hardware.layout": { + data: "ISO", + eraseable: false, + }, + "hardware.joint": { + data: "127", + eraseable: false, + }, + "hardware.keyscan": { + data: "50", + eraseable: false, + }, + "hardware.crc_errors": { + data: "left: 0 right: 0 ", + eraseable: false, + }, + "hardware.firmware": { + data: "c9d9b7b", + eraseable: false, + }, + "hardware.chip_id": { + data: "virtualRaiseISOvirtualRaiseISOvi", + eraseable: false, + }, + "qukeys.holdTimeout": { + data: "250", + eraseable: true, + }, + "qukeys.overlapThreshold": { + data: "80", + eraseable: true, + }, + "superkeys.map": { + data: + "262 281 1 1 1 0 0 4102 0 41 1 1 1 1 0 54 1 1 2102 1 0 1 23785 23786 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 ", + eraseable: true, + }, + "superkeys.waitfor": { + data: "500 ", + eraseable: true, + }, + "superkeys.timeout": { + data: "250 ", + eraseable: true, + }, + "superkeys.repeat": { + data: "20 ", + eraseable: true, + }, + "superkeys.holdstart": { + data: "200 ", + eraseable: true, + }, + "superkeys.overlap": { + data: "20 ", + eraseable: true, + }, + "macros.map": { + data: + "6 225 8 11 7 225 8 8 8 28 8 54 8 44 6 225 8 7 7 225 8 28 8 10 8 16 8 4 8 23 8 8 8 22 0 0 8 15 8 18 8 24 8 23 8 40 0 8 84 8 7 8 8 8 9 8 4 8 24 8 15 8 23 8 40 0 8 84 8 18 8 21 8 4 8 17 8 10 8 8 8 40 0 8 84 8 10 8 21 8 8 8 8 8 17 8 40 0 8 84 8 10 8 21 8 8 8 8 8 17 8 44 8 5 8 4 8 6 8 14 8 10 8 21 8 18 8 24 8 17 8 7 8 40 0 8 84 8 28 8 8 8 15 8 15 8 18 8 26 8 81 8 40 0 8 84 8 21 8 8 8 7 8 81 8 40 0 8 224 8 226 0 6 225 8 5 7 225 8 8 8 22 8 23 8 54 8 40 8 40 6 225 8 15 7 225 8 24 8 12 8 22 0 8 84 8 11 8 30 8 40 0 6 227 8 80 7 227 8 84 8 11 8 31 8 40 6 227 8 79 7 227 0 8 44 8 84 8 5 8 24 8 15 8 15 8 8 8 23 8 8 8 7 8 44 8 15 8 12 8 22 8 23 8 40 0 8 84 8 5 8 4 8 17 8 17 8 8 8 21 8 44 8 28 8 8 8 15 8 15 8 18 8 26 8 40 0 8 84 8 11 8 32 8 40 0 8 84 8 11 8 33 8 40 0 8 84 8 6 8 11 8 8 8 6 8 14 8 15 8 12 8 22 8 23 8 40 0 8 84 8 5 8 4 8 17 8 17 8 8 8 21 8 44 8 10 8 21 8 8 8 8 8 17 8 40 0 8 84 8 5 8 4 8 17 8 17 8 8 8 21 8 44 8 21 8 8 8 7 8 40 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 ", + eraseable: true, + }, + "macros.trigger": { + data: "false", + eraseable: false, + }, + "macros.memory": { + data: "2048", + eraseable: false, + }, + help: { + data: + "version\r\nkeymap.custom\r\nkeymap.default\r\nkeymap.onlyCustom\r\nsettings.defaultLayer\r\nsettings.valid?\r\nsettings.version\r\nsettings.crc\r\neeprom.contents\r\neeprom.free\r\nled.at\r\nled.setAll\r\nled.mode\r\nled.brightness\r\nled.theme\r\npalette\r\ncolormap.map\r\nidleleds.time_limit\r\nhardware.version\r\nhardware.side_power\r\nhardware.side_ver\r\nhardware.sled_ver\r\nhardware.sled_current\r\nhardware.layout\r\nhardware.joint\r\nhardware.keyscan\r\nhardware.crc_errors\r\nhardware.firmware\r\nhardware.chip_id\r\nqukeys.holdTimeout\r\nqukeys.overlapThreshold\r\nsuperkeys.map\r\nsuperkeys.waitfor\r\nsuperkeys.timeout\r\nsuperkeys.repeat\r\nsuperkeys.holdstart\r\nsuperkeys.overlap\r\nmacros.map\r\nmacros.trigger\r\nhelp\r\nmouse.speed\r\nmouse.speedDelay\r\nmouse.accelSpeed\r\nmouse.accelDelay\r\nmouse.wheelSpeed\r\nmouse.wheelDelay\r\nmouse.speedLimit\r\nlayer.activate\r\nlayer.deactivate\r\nlayer.isActive\r\nlayer.moveTo\r\nlayer.state", + eraseable: false, + }, + "mouse.speed": { + data: "20 ", + eraseable: true, + }, + "mouse.speedDelay": { + data: "2 ", + eraseable: true, + }, + "mouse.accelSpeed": { + data: "20 ", + eraseable: true, + }, + "mouse.accelDelay": { + data: "2 ", + eraseable: true, + }, + "mouse.wheelSpeed": { + data: "2 ", + eraseable: true, + }, + "mouse.wheelDelay": { + data: "100 ", + eraseable: true, + }, + "mouse.speedLimit": { + data: "127 ", + eraseable: true, + }, + "layer.activate": { + data: "false", + eraseable: false, + }, + "layer.deactivate": { + data: "false", + eraseable: false, + }, + "layer.isActive": { + data: "0", + eraseable: false, + }, + "layer.moveTo": { + data: "false", + eraseable: false, + }, + "layer.state": { + data: "1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0", + eraseable: false, + }, + }, +}; + +export default RaiseISO; diff --git a/src/api/hardware-virtual/index.js b/src/api/hardware-virtual/index.js new file mode 100644 index 000000000..5dd04cc26 --- /dev/null +++ b/src/api/hardware-virtual/index.js @@ -0,0 +1,8 @@ +import RaiseANSI from "./RaiseANSI"; +import RaiseISO from "./RaiseISO"; +import DefyWired from "./DefyWired"; +import DefyWireless from "./DefyWireless"; + +const enumerator = [RaiseANSI, RaiseISO, DefyWireless]; + +export { RaiseISO, RaiseANSI, DefyWired, DefyWireless, enumerator }; diff --git a/src/api/hardware/Key.js b/src/api/hardware/Key.js index 79f66975f..76cd877fd 100644 --- a/src/api/hardware/Key.js +++ b/src/api/hardware/Key.js @@ -18,7 +18,7 @@ import React from "react"; import ListModifiersKey from "../../renderer/component/ListModifiers/ListModifiersKey"; -const Key = ({ +function Key({ keyType, id, onClick, @@ -34,8 +34,8 @@ const Key = ({ selectedKey, contrastText, centerPrimary, - centerExtra -}) => { + centerExtra, +}) { const [color, setColor] = React.useState("rgb(255,255,255)"); const xShape2 = x + 4; const yShape2 = y; @@ -107,7 +107,7 @@ const Key = ({ - + -
+
  • -
    +
    • -
      +
      • -
        +
        • -
          +
          • -
            +
            • -
              +
              • -
                +
                • -
                  +
                  • -
                    +
                    • -
                      +
                      • -
                        +
                        • -
                          +
                          • -
                            +
                            • -
                              +
                              • -
                                +
                                • -
                                  +
                                  • -
                                    +
                                    • -
                                      +
                                      • -
                                        +
                                        • ); -}; +} export default Key; diff --git a/src/api/hardware/Neuron.js b/src/api/hardware/Neuron.js index af99dbb66..234274e5a 100644 --- a/src/api/hardware/Neuron.js +++ b/src/api/hardware/Neuron.js @@ -19,19 +19,7 @@ import React from "react"; import colorMatrixCalc from "../../renderer/utils/colorMatrixCalculation"; -const Neuron = ({ - visibility, - onClick, - clickAble, - fill, - stroke, - strokeWidth, - dataLedIndex, - dataKeyIndex, - dataLayer, - translateX, - translateY -}) => { +function Neuron({ visibility, onClick, clickAble, fill, stroke, dataLedIndex, dataKeyIndex, dataLayer, translateX, translateY }) { const [color, setColor] = React.useState("rgb(255,255,255)"); const [colorMatrix, setColorMatrix] = React.useState(colorMatrixCalc("rgb(255,255,255)", 0.65)); @@ -45,7 +33,7 @@ const Neuron = ({ ); -}; +} export default Neuron; diff --git a/src/api/hardware/UnderGlowStrip.js b/src/api/hardware/UnderGlowStrip.js index cda4d15b3..0818872ed 100644 --- a/src/api/hardware/UnderGlowStrip.js +++ b/src/api/hardware/UnderGlowStrip.js @@ -17,7 +17,8 @@ import React from "react"; import colorDarkerCalculation from "../../renderer/utils/colorDarkerCalculation"; -const UnderGlowStrip = ({ + +function UnderGlowStrip({ id, onClick, fill, @@ -30,8 +31,8 @@ const UnderGlowStrip = ({ dataLedIndex, dataKeyIndex, dataLayer, - path -}) => { + path, +}) { const [color, setColor] = React.useState("rgb(255,255,255)"); const [strokeColor, setStrokeColor] = React.useState(colorDarkerCalculation("rgb(255,255,255)")); @@ -59,5 +60,5 @@ const UnderGlowStrip = ({ ); -}; +} export default UnderGlowStrip; diff --git a/src/api/hardware/index.js b/src/api/hardware/index.js index fadff3982..20780cdfb 100644 --- a/src/api/hardware/index.js +++ b/src/api/hardware/index.js @@ -29,7 +29,7 @@ import { Defy_wireless, Defy_wirelessBootloader } from "../hardware-dygma-defy-w const Hardware = { serial: [Raise_ISO, Raise_ANSI, Defy_wired, Defy_wireless, Raise_ANSIBootloader, Raise_ISOBootloader, Defy_wirelessBootloader], nonSerial: [Defy_wiredBootloader], - bootloader: [Raise_ANSIBootloader, Raise_ISOBootloader, Defy_wiredBootloader, Defy_wirelessBootloader] + bootloader: [Raise_ANSIBootloader, Raise_ISOBootloader, Defy_wiredBootloader, Defy_wirelessBootloader], }; export { Hardware as default }; diff --git a/src/api/hardware/virtual.js b/src/api/hardware/virtual.js deleted file mode 100644 index 2ffaa193d..000000000 --- a/src/api/hardware/virtual.js +++ /dev/null @@ -1,1077 +0,0 @@ -const RaiseANSI = { - device: { - info: { - vendor: "Dygma", - product: "Raise", - keyboardType: "ANSI", - displayName: "Dygma Raise ANSI", - urls: [ - { - name: "Homepage", - url: "https://www.dygma.com/raise/" - } - ] - }, - usb: { - vendorId: 4617, - productId: 8705 - }, - keyboard: { - rows: 5, - columns: 16 - }, - keyboardUnderglow: { - rows: 6, - columns: 22 - }, - components: {}, - instructions: { - en: { - updateInstructions: - "To update the firmware, the keyboard needs a special reset. When the countdown starts, press and hold the Escape key. Soon after the countdown finished, the Neuron's light should start a blue pulsing pattern, and the flashing will proceed. At this point, you should release the Escape key." - } - } - }, - virtual: { - version: { - data: "v1.0.9beta 7622bb53 c9d9b7b-dirty", - eraseable: false - }, - "keymap.custom": { - data: - "41 30 31 32 33 34 35 0 0 36 37 38 39 45 46 42 43 20 26 8 21 23 0 0 28 24 12 18 19 47 48 40 57 4 22 7 9 10 0 0 0 11 13 14 15 51 52 49 225 100 29 27 6 25 5 0 0 0 17 16 54 55 56 229 224 227 226 44 44 0 42 51514 49162 76 44 44 230 231 101 228 53 58 59 60 61 62 63 0 0 64 65 66 67 68 69 65535 43 53980 74 82 77 75 0 0 86 95 96 97 84 83 0 65535 49226 70 80 81 79 78 0 0 0 87 92 93 94 85 53852 0 225 0 22710 22709 23786 23785 22733 0 0 0 98 89 90 91 99 82 224 227 226 44 44 0 42 51514 65535 17152 44 44 230 80 81 79 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535", - eraseable: true - }, - "keymap.default": { - data: - "41 30 31 32 33 34 35 0 0 36 37 38 39 45 46 42 43 20 26 8 21 23 0 0 28 24 12 18 19 47 48 40 57 4 22 7 9 10 0 0 0 11 13 14 15 51 52 49 225 49 29 27 6 25 5 0 0 0 17 16 54 55 56 229 224 227 226 44 44 0 42 40 17493 76 44 44 230 231 17152 228 41 58 59 60 61 62 63 0 0 64 65 66 67 68 69 42 43 0 82 0 0 0 0 0 86 36 37 38 84 0 0 40 57 80 81 79 0 0 0 0 0 87 33 34 35 85 0 49 225 49 0 0 0 0 0 0 0 0 99 30 31 32 82 229 224 227 226 44 44 0 42 40 17492 76 39 44 80 81 79 228", - eraseable: false - }, - "keymap.onlyCustom": { - data: "1", - eraseable: true - }, - "settings.defaultLayer": { - data: "0", - eraseable: true - }, - "settings.valid?": { - data: "true", - eraseable: false - }, - "settings.version": { - data: "1", - eraseable: false - }, - "settings.crc": { - data: "18462/18462", - eraseable: false - }, - "eeprom.contents": { - data: "", - eraseable: false - }, - "eeprom.free": { - data: "", - eraseable: false - }, - "led.at": { - data: "", - eraseable: false - }, - "led.setAll": { - data: "", - eraseable: false - }, - "led.mode": { - data: "0", - eraseable: true - }, - "led.brightness": { - data: "255", - eraseable: true - }, - "led.theme": { - data: "", - eraseable: false - }, - palette: { - data: - "255 196 0 0 254 24 255 255 255 231 255 0 0 254 234 0 52 255 255 0 232 87 164 255 144 19 254 239 219 255 214 129 255 255 9 0 0 0 0 0 0 0 0 0 0 0 0 0", - eraseable: true - }, - "colormap.map": { - data: - "4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 1 1 5 6 5 4 4 4 4 4 4 6 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 1 1 10 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 8 8 8 8 8 8 4 3 9 0 9 10 7 8 0 0 0 10 4 15 7 7 4 4 1 4 4 4 1 1 5 6 5 8 8 8 8 8 8 6 15 11 10 9 9 9 10 15 3 10 9 9 9 10 0 10 9 9 9 9 0 0 0 4 1 1 11 3 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15", - eraseable: true - }, - "idleleds.time_limit": { - data: "600", - eraseable: true - }, - "hardware.version": { - data: "Dygma Raise", - eraseable: false - }, - "hardware.side_power": { - data: "1", - eraseable: false - }, - "hardware.side_ver": { - data: "left: 5\r\nright: 5 ", - eraseable: false - }, - "hardware.sled_ver": { - data: "left: 115\r\nright: 115 ", - eraseable: false - }, - "hardware.sled_current": { - data: "left: 63\r\nright: 63 ", - eraseable: false - }, - "hardware.layout": { - data: "ANSI", - eraseable: false - }, - "hardware.joint": { - data: "127", - eraseable: false - }, - "hardware.keyscan": { - data: "50", - eraseable: false - }, - "hardware.crc_errors": { - data: "left: 0 right: 0 ", - eraseable: false - }, - "hardware.firmware": { - data: "c9d9b7b", - eraseable: false - }, - "hardware.chip_id": { - data: "virtualRaiseANSIvirtualRaiseANSI", - eraseable: false - }, - "qukeys.holdTimeout": { - data: "250", - eraseable: true - }, - "qukeys.overlapThreshold": { - data: "80", - eraseable: true - }, - "superkeys.map": { - data: - "262 281 1 1 1 0 0 4102 0 41 1 1 1 1 0 54 1 1 2102 1 0 1 23785 23786 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 ", - eraseable: true - }, - "superkeys.waitfor": { - data: "500 ", - eraseable: true - }, - "superkeys.timeout": { - data: "250 ", - eraseable: true - }, - "superkeys.repeat": { - data: "20 ", - eraseable: true - }, - "superkeys.holdstart": { - data: "200 ", - eraseable: true - }, - "superkeys.overlap": { - data: "20 ", - eraseable: true - }, - "macros.map": { - data: - "6 225 8 11 7 225 8 8 8 28 8 54 8 44 6 225 8 7 7 225 8 28 8 10 8 16 8 4 8 23 8 8 8 22 0 0 8 15 8 18 8 24 8 23 8 40 0 8 84 8 7 8 8 8 9 8 4 8 24 8 15 8 23 8 40 0 8 84 8 18 8 21 8 4 8 17 8 10 8 8 8 40 0 8 84 8 10 8 21 8 8 8 8 8 17 8 40 0 8 84 8 10 8 21 8 8 8 8 8 17 8 44 8 5 8 4 8 6 8 14 8 10 8 21 8 18 8 24 8 17 8 7 8 40 0 8 84 8 28 8 8 8 15 8 15 8 18 8 26 8 81 8 40 0 8 84 8 21 8 8 8 7 8 81 8 40 0 8 224 8 226 0 6 225 8 5 7 225 8 8 8 22 8 23 8 54 8 40 8 40 6 225 8 15 7 225 8 24 8 12 8 22 0 8 84 8 11 8 30 8 40 0 6 227 8 80 7 227 8 84 8 11 8 31 8 40 6 227 8 79 7 227 0 8 44 8 84 8 5 8 24 8 15 8 15 8 8 8 23 8 8 8 7 8 44 8 15 8 12 8 22 8 23 8 40 0 8 84 8 5 8 4 8 17 8 17 8 8 8 21 8 44 8 28 8 8 8 15 8 15 8 18 8 26 8 40 0 8 84 8 11 8 32 8 40 0 8 84 8 11 8 33 8 40 0 8 84 8 6 8 11 8 8 8 6 8 14 8 15 8 12 8 22 8 23 8 40 0 8 84 8 5 8 4 8 17 8 17 8 8 8 21 8 44 8 10 8 21 8 8 8 8 8 17 8 40 0 8 84 8 5 8 4 8 17 8 17 8 8 8 21 8 44 8 21 8 8 8 7 8 40 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 ", - eraseable: true - }, - "macros.trigger": { - data: "false", - eraseable: false - }, - help: { - data: - "version\r\nkeymap.custom\r\nkeymap.default\r\nkeymap.onlyCustom\r\nsettings.defaultLayer\r\nsettings.valid?\r\nsettings.version\r\nsettings.crc\r\neeprom.contents\r\neeprom.free\r\nled.at\r\nled.setAll\r\nled.mode\r\nled.brightness\r\nled.theme\r\npalette\r\ncolormap.map\r\nidleleds.time_limit\r\nhardware.version\r\nhardware.side_power\r\nhardware.side_ver\r\nhardware.sled_ver\r\nhardware.sled_current\r\nhardware.layout\r\nhardware.joint\r\nhardware.keyscan\r\nhardware.crc_errors\r\nhardware.firmware\r\nhardware.chip_id\r\nqukeys.holdTimeout\r\nqukeys.overlapThreshold\r\nsuperkeys.map\r\nsuperkeys.waitfor\r\nsuperkeys.timeout\r\nsuperkeys.repeat\r\nsuperkeys.holdstart\r\nsuperkeys.overlap\r\nmacros.map\r\nmacros.trigger\r\nhelp\r\nmouse.speed\r\nmouse.speedDelay\r\nmouse.accelSpeed\r\nmouse.accelDelay\r\nmouse.wheelSpeed\r\nmouse.wheelDelay\r\nmouse.speedLimit\r\nlayer.activate\r\nlayer.deactivate\r\nlayer.isActive\r\nlayer.moveTo\r\nlayer.state", - eraseable: false - }, - "mouse.speed": { - data: "20", - eraseable: true - }, - "mouse.speedDelay": { - data: "2", - eraseable: true - }, - "mouse.accelSpeed": { - data: "20", - eraseable: true - }, - "mouse.accelDelay": { - data: "2", - eraseable: true - }, - "mouse.wheelSpeed": { - data: "2", - eraseable: true - }, - "mouse.wheelDelay": { - data: "100", - eraseable: true - }, - "mouse.speedLimit": { - data: "127", - eraseable: true - }, - "layer.activate": { - data: "false", - eraseable: false - }, - "layer.deactivate": { - data: "false", - eraseable: false - }, - "layer.isActive": { - data: "0", - eraseable: false - }, - "layer.moveTo": { - data: "false", - eraseable: false - }, - "layer.state": { - data: "1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0", - eraseable: false - } - } -}; - -const RaiseISO = { - device: { - info: { - vendor: "Dygma", - product: "Raise", - keyboardType: "ISO", - displayName: "Dygma Raise ISO", - urls: [ - { - name: "Homepage", - url: "https://www.dygma.com/raise/" - } - ] - }, - usb: { - vendorId: 4617, - productId: 8705 - }, - keyboard: { - rows: 5, - columns: 16 - }, - keyboardUnderglow: { - rows: 6, - columns: 22 - }, - components: {}, - instructions: { - en: { - updateInstructions: - "To update the firmware, the keyboard needs a special reset. When the countdown starts, press and hold the Escape key. Soon after the countdown finished, the Neuron's light should start a blue pulsing pattern, and the flashing will proceed. At this point, you should release the Escape key." - } - } - }, - virtual: { - version: { - data: "v1.0.9beta 7622bb53 c9d9b7b-dirty", - eraseable: false - }, - "keymap.custom": { - data: - "41 30 31 32 33 34 35 0 0 36 37 38 39 45 46 42 43 20 26 8 21 23 0 0 28 24 12 18 19 47 48 40 57 4 22 7 9 10 0 0 0 11 13 14 15 51 52 49 225 100 29 27 6 25 5 0 0 0 17 16 54 55 56 229 224 227 226 44 44 0 42 51514 49162 76 44 44 230 231 101 228 53 58 59 60 61 62 63 0 0 64 65 66 67 68 69 65535 43 53852 74 82 77 75 0 0 86 95 96 97 84 83 0 65535 49226 70 80 81 79 78 0 0 0 87 92 93 94 85 0 0 225 53980 22710 22709 23786 23785 22733 0 0 0 98 89 90 91 99 82 224 227 226 44 44 0 42 51514 65535 17152 44 44 230 80 81 79 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 ", - eraseable: true - }, - "keymap.default": { - data: - "41 30 31 32 33 34 35 0 0 36 37 38 39 45 46 42 43 20 26 8 21 23 0 0 28 24 12 18 19 47 48 40 57 4 22 7 9 10 0 0 0 11 13 14 15 51 52 49 225 49 29 27 6 25 5 0 0 0 17 16 54 55 56 229 224 227 226 44 44 0 42 40 17493 76 44 44 230 231 17152 228 41 58 59 60 61 62 63 0 0 64 65 66 67 68 69 42 43 0 82 0 0 0 0 0 86 36 37 38 84 0 0 40 57 80 81 79 0 0 0 0 0 87 33 34 35 85 0 49 225 49 0 0 0 0 0 0 0 0 99 30 31 32 82 229 224 227 226 44 44 0 42 40 17492 76 39 44 80 81 79 228 ", - eraseable: false - }, - "keymap.onlyCustom": { - data: "1 ", - eraseable: true - }, - "settings.defaultLayer": { - data: "0 ", - eraseable: true - }, - "settings.valid?": { - data: "true", - eraseable: false - }, - "settings.version": { - data: "1", - eraseable: false - }, - "settings.crc": { - data: "18462/18462", - eraseable: false - }, - "eeprom.contents": { - data: "", - eraseable: false - }, - "eeprom.free": { - data: "", - eraseable: false - }, - "led.at": { - data: "", - eraseable: false - }, - "led.setAll": { - data: "", - eraseable: false - }, - "led.mode": { - data: "0", - eraseable: true - }, - "led.brightness": { - data: "255 ", - eraseable: true - }, - "led.theme": { - data: "", - eraseable: false - }, - palette: { - data: - "255 196 0 0 254 24 255 255 255 231 255 0 0 254 234 0 52 255 255 0 232 87 164 255 144 19 254 239 219 255 214 129 255 255 9 0 0 0 0 0 0 0 0 0 0 0 0 0 ", - eraseable: true - }, - "colormap.map": { - data: - "4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 1 1 5 6 5 4 4 4 4 4 4 6 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 1 1 10 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 8 8 8 8 8 8 4 6 9 0 9 10 7 8 0 0 0 10 4 6 7 7 4 4 1 4 4 4 1 1 5 6 5 8 8 8 8 8 8 6 15 11 10 9 9 9 10 15 15 10 9 9 9 10 0 10 9 9 9 9 0 0 0 4 1 1 11 3 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 ", - eraseable: true - }, - "idleleds.time_limit": { - data: "600 ", - eraseable: true - }, - "hardware.version": { - data: "Dygma Raise", - eraseable: false - }, - "hardware.side_power": { - data: "1", - eraseable: false - }, - "hardware.side_ver": { - data: "left: 5\r\nright: 5 ", - eraseable: false - }, - "hardware.sled_ver": { - data: "left: 115\r\nright: 115 ", - eraseable: false - }, - "hardware.sled_current": { - data: "left: 63\r\nright: 63 ", - eraseable: false - }, - "hardware.layout": { - data: "ISO", - eraseable: false - }, - "hardware.joint": { - data: "127", - eraseable: false - }, - "hardware.keyscan": { - data: "50", - eraseable: false - }, - "hardware.crc_errors": { - data: "left: 0 right: 0 ", - eraseable: false - }, - "hardware.firmware": { - data: "c9d9b7b", - eraseable: false - }, - "hardware.chip_id": { - data: "virtualRaiseISOvirtualRaiseISOvi", - eraseable: false - }, - "qukeys.holdTimeout": { - data: "250", - eraseable: true - }, - "qukeys.overlapThreshold": { - data: "80", - eraseable: true - }, - "superkeys.map": { - data: - "262 281 1 1 1 0 0 4102 0 41 1 1 1 1 0 54 1 1 2102 1 0 1 23785 23786 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 ", - eraseable: true - }, - "superkeys.waitfor": { - data: "500 ", - eraseable: true - }, - "superkeys.timeout": { - data: "250 ", - eraseable: true - }, - "superkeys.repeat": { - data: "20 ", - eraseable: true - }, - "superkeys.holdstart": { - data: "200 ", - eraseable: true - }, - "superkeys.overlap": { - data: "20 ", - eraseable: true - }, - "macros.map": { - data: - "6 225 8 11 7 225 8 8 8 28 8 54 8 44 6 225 8 7 7 225 8 28 8 10 8 16 8 4 8 23 8 8 8 22 0 0 8 15 8 18 8 24 8 23 8 40 0 8 84 8 7 8 8 8 9 8 4 8 24 8 15 8 23 8 40 0 8 84 8 18 8 21 8 4 8 17 8 10 8 8 8 40 0 8 84 8 10 8 21 8 8 8 8 8 17 8 40 0 8 84 8 10 8 21 8 8 8 8 8 17 8 44 8 5 8 4 8 6 8 14 8 10 8 21 8 18 8 24 8 17 8 7 8 40 0 8 84 8 28 8 8 8 15 8 15 8 18 8 26 8 81 8 40 0 8 84 8 21 8 8 8 7 8 81 8 40 0 8 224 8 226 0 6 225 8 5 7 225 8 8 8 22 8 23 8 54 8 40 8 40 6 225 8 15 7 225 8 24 8 12 8 22 0 8 84 8 11 8 30 8 40 0 6 227 8 80 7 227 8 84 8 11 8 31 8 40 6 227 8 79 7 227 0 8 44 8 84 8 5 8 24 8 15 8 15 8 8 8 23 8 8 8 7 8 44 8 15 8 12 8 22 8 23 8 40 0 8 84 8 5 8 4 8 17 8 17 8 8 8 21 8 44 8 28 8 8 8 15 8 15 8 18 8 26 8 40 0 8 84 8 11 8 32 8 40 0 8 84 8 11 8 33 8 40 0 8 84 8 6 8 11 8 8 8 6 8 14 8 15 8 12 8 22 8 23 8 40 0 8 84 8 5 8 4 8 17 8 17 8 8 8 21 8 44 8 10 8 21 8 8 8 8 8 17 8 40 0 8 84 8 5 8 4 8 17 8 17 8 8 8 21 8 44 8 21 8 8 8 7 8 40 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 ", - eraseable: true - }, - "macros.trigger": { - data: "false", - eraseable: false - }, - help: { - data: - "version\r\nkeymap.custom\r\nkeymap.default\r\nkeymap.onlyCustom\r\nsettings.defaultLayer\r\nsettings.valid?\r\nsettings.version\r\nsettings.crc\r\neeprom.contents\r\neeprom.free\r\nled.at\r\nled.setAll\r\nled.mode\r\nled.brightness\r\nled.theme\r\npalette\r\ncolormap.map\r\nidleleds.time_limit\r\nhardware.version\r\nhardware.side_power\r\nhardware.side_ver\r\nhardware.sled_ver\r\nhardware.sled_current\r\nhardware.layout\r\nhardware.joint\r\nhardware.keyscan\r\nhardware.crc_errors\r\nhardware.firmware\r\nhardware.chip_id\r\nqukeys.holdTimeout\r\nqukeys.overlapThreshold\r\nsuperkeys.map\r\nsuperkeys.waitfor\r\nsuperkeys.timeout\r\nsuperkeys.repeat\r\nsuperkeys.holdstart\r\nsuperkeys.overlap\r\nmacros.map\r\nmacros.trigger\r\nhelp\r\nmouse.speed\r\nmouse.speedDelay\r\nmouse.accelSpeed\r\nmouse.accelDelay\r\nmouse.wheelSpeed\r\nmouse.wheelDelay\r\nmouse.speedLimit\r\nlayer.activate\r\nlayer.deactivate\r\nlayer.isActive\r\nlayer.moveTo\r\nlayer.state", - eraseable: false - }, - "mouse.speed": { - data: "20 ", - eraseable: true - }, - "mouse.speedDelay": { - data: "2 ", - eraseable: true - }, - "mouse.accelSpeed": { - data: "20 ", - eraseable: true - }, - "mouse.accelDelay": { - data: "2 ", - eraseable: true - }, - "mouse.wheelSpeed": { - data: "2 ", - eraseable: true - }, - "mouse.wheelDelay": { - data: "100 ", - eraseable: true - }, - "mouse.speedLimit": { - data: "127 ", - eraseable: true - }, - "layer.activate": { - data: "false", - eraseable: false - }, - "layer.deactivate": { - data: "false", - eraseable: false - }, - "layer.isActive": { - data: "0", - eraseable: false - }, - "layer.moveTo": { - data: "false", - eraseable: false - }, - "layer.state": { - data: "1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0", - eraseable: false - } - } -}; - -const DefyWired = { - device: { - info: { - vendor: "Dygma", - product: "Defy", - keyboardType: "wired", - displayName: "Dygma Defy wired", - urls: [ - { - name: "Homepage", - url: "https://www.dygma.com/defy/" - } - ] - }, - usb: { - vendorId: 13807, - productId: 16 - }, - keyboard: { - rows: 5, - columns: 16 - }, - keyboardUnderglow: { - rows: 2, - columns: 89 - }, - RGBWMode: true, - components: {}, - instructions: { - en: { - updateInstructions: - "To update the firmware, the keyboard needs a special reset. When the countdown starts, press and hold the Escape key. Soon after the countdown finished, the Neuron's light should start a blue pulsing pattern, and the flashing will proceed. At this point, you should release the Escape key." - } - } - }, - virtual: { - version: { - data: "v1.0.9beta 7622bb53 c9d9b7b-dirty", - eraseable: false - }, - "keymap.custom": { - data: - "41 30 31 32 33 34 23785 0 0 22709 35 36 37 38 39 48 2091 20 26 8 21 23 23786 0 0 22733 28 24 12 18 19 47 43 4 22 7 9 10 2096 0 0 17152 11 13 14 15 45 52 0 29 27 6 25 5 0 0 0 0 17 16 54 55 56 49 49210 50013 49467 51514 52286 847 848 226 17494 228 41 42 49977 52030 230 231 100 4638 4639 4640 4641 4642 65535 0 0 65535 4643 4644 4645 4646 4647 65535 6678 6177 74 82 77 4144 65535 0 0 65535 65535 75 594 78 2096 65535 65535 1055 80 81 79 4182 65535 0 0 65535 2084 592 593 591 51 65535 65535 65535 65535 65535 6169 53863 0 0 0 0 65535 4396 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 335 336 65535 65535 65535 65535 65535 17492 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 2087 84 85 86 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 95 96 97 87 65535 65535 65535 65535 82 65535 65535 65535 65535 65535 65535 65535 92 93 94 54 65535 65535 65535 80 81 79 65535 65535 65535 65535 65535 65535 89 90 91 88 65535 49162 17451 65535 65535 65535 65535 65535 17492 65535 65535 65535 65535 65535 65535 98 99 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 2078 1055 1032 1057 2080 65535 65535 65535 65535 2083 1071 1072 2087 48 65535 65535 2078 2079 1056 2081 2082 65535 65535 65535 65535 2084 2085 2086 46 2096 65535 65535 65535 53 2084 2101 65535 65535 65535 65535 65535 1059 1076 1073 2094 1080 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 53862 53861 53856 53860 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 53853 53854 53857 53858 53859 53855 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 41 30 31 32 33 34 23785 0 0 22709 35 36 37 38 39 48 2091 20 26 8 21 23 23786 0 0 22733 28 24 12 18 19 47 43 4 22 7 49434 10 2096 0 0 17152 11 49438 14 15 45 52 225 29 27 6 25 5 0 0 0 0 17 16 54 55 56 229 226 224 44 42 17451 40 76 227 101 41 42 17452 40 44 228 230 17492 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 2087 84 85 86 65535 65535 65535 74 82 77 75 65535 65535 65535 65535 65535 95 96 97 87 65535 65535 70 80 81 79 78 65535 65535 65535 65535 65535 92 93 94 54 65535 65535 22710 22709 23786 23785 22733 65535 65535 65535 65535 65535 89 90 91 88 65535 65535 65535 65535 65535 17450 65535 65535 65535 65535 65535 65535 17452 65535 65535 98 99 65535 58 59 60 61 62 65535 65535 65535 65535 63 64 65 66 67 65535 65535 65535 65535 47 100 2148 65535 65535 65535 65535 1054 1077 1076 1073 1071 1072 65535 2078 1055 1056 2081 2082 65535 65535 65535 65535 2095 2083 2096 2085 2086 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 17450 65535 65535 65535 65535 65535 65535 17451 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 41 30 31 32 33 34 53 0 0 46 35 36 37 38 39 45 43 20 26 8 21 23 0 0 0 48 28 24 12 18 19 47 57 4 22 7 9 10 2096 0 0 49 11 13 14 15 51 52 225 29 27 6 25 5 0 0 0 0 17 16 54 55 56 229 224 227 49979 51514 51806 44 226 17494 0 847 848 42 52026 49469 231 230", - eraseable: true - }, - "keymap.default": { - data: - "41 30 31 32 33 34 35 0 0 51518 37 38 39 45 46 42 43 20 26 8 21 23 128 0 0 28 24 12 18 19 47 48 57 4 22 7 9 10 129 0 0 11 13 14 15 51 52 229 49 29 27 6 25 5 0 0 0 0 17 16 54 55 56 229 224 227 42 76 44 40 226 225 79 81 80 40 17152 74 82 77 41 58 59 60 61 62 63 0 0 64 65 66 67 68 69 42 43 0 82 0 0 0 0 0 0 86 36 37 38 84 0 40 57 80 81 79 0 0 0 0 0 87 33 34 35 85 0 49 225 49 0 0 0 0 0 0 0 0 99 30 31 32 82 229 224 227 226 44 76 40 42 44 79 228 76 17492 39 44 80 81", - eraseable: false - }, - "keymap.onlyCustom": { - data: "1", - eraseable: true - }, - "settings.defaultLayer": { - data: "0", - eraseable: true - }, - "settings.valid?": { - data: "true", - eraseable: false - }, - "settings.version": { - data: "1", - eraseable: false - }, - "settings.crc": { - data: "18462/18462", - eraseable: false - }, - "eeprom.contents": { - data: "", - eraseable: false - }, - "eeprom.free": { - data: "", - eraseable: false - }, - "led.at": { - data: "", - eraseable: false - }, - "led.setAll": { - data: "", - eraseable: false - }, - "led.mode": { - data: "0", - eraseable: true - }, - "led.brightness": { - data: "153", - eraseable: true - }, - "led.theme": { - data: "", - eraseable: false - }, - palette: { - data: - "10 0 0 245 166 0 145 0 210 131 0 35 93 178 0 33 206 0 25 2 0 147 114 80 0 0 0 0 125 0 235 19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0", - eraseable: true - }, - "colormap.map": { - data: - "2 0 0 0 0 0 2 2 0 0 0 0 0 2 2 0 0 0 2 0 1 6 0 0 0 0 0 1 1 5 1 1 2 2 1 2 0 0 0 0 0 2 2 0 0 0 0 0 2 2 0 0 0 2 0 1 2 0 0 0 0 0 2 2 5 1 1 2 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 4 4 4 4 0 0 6 6 1 5 2 5 1 6 6 1 2 2 2 1 7 7 7 6 7 0 5 1 1 0 1 1 1 1 1 6 4 4 4 0 0 6 6 1 1 2 1 7 6 6 1 2 2 2 1 7 6 6 6 7 1 6 1 1 0 1 1 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 7 7 7 7 7 7 7 7 7 7 7 7 7 7 6 7 7 7 2 7 6 6 6 7 2 2 2 7 7 7 7 6 7 6 6 0 6 1 1 1 1 6 6 6 1 0 0 0 6 6 6 1 0 1 0 6 6 6 1 0 0 0 6 0 0 1 1 1 2 2 1 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 7 7 6 6 6 6 6 6 7 2 2 2 2 2 6 7 1 1 1 1 1 7 7 7 4 5 4 7 0 0 0 0 4 4 0 4 7 7 6 6 6 6 6 7 2 2 2 2 2 6 7 1 1 1 1 1 6 7 4 4 5 5 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 15 15 15 15 15 15 15 15 15 5 4 2 3 15 15 15 1 1 1 1 1 1 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 15 2 0 0 0 0 0 2 2 0 0 0 0 0 2 2 0 0 0 0 0 1 7 0 0 0 0 0 7 7 7 7 4 7 7 7 2 0 0 0 0 0 2 2 0 0 0 0 0 2 2 0 0 0 0 0 1 7 0 0 0 0 0 7 7 7 7 2 7 7 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 6 6 6 6 6 6 6 6 6 3 2 3 1 6 6 7 2 2 2 1 6 6 5 5 5 5 5 6 6 6 6 7 6 6 6 6 1 1 1 1 6 6 6 1 0 0 0 6 6 6 1 0 1 0 6 6 6 1 0 0 0 6 0 0 6 6 2 6 6 6 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 7 6 3 3 3 3 3 8 6 6 6 1 1 1 6 6 1 1 1 1 1 6 6 6 6 6 6 6 6 6 6 8 7 6 6 6 6 3 3 3 3 3 6 7 7 1 1 1 1 6 6 1 1 1 1 1 6 6 6 6 6 6 6 6 6 6 6 4 6 6 6 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 3 6 6 6 6 6 3 3 6 6 6 6 6 3 3 6 6 6 6 6 3 3 6 6 6 6 6 3 3 4 3 3 3 3 1 3 6 6 6 6 6 3 3 6 6 6 6 6 3 3 6 6 6 6 6 3 3 6 6 6 6 6 3 3 4 3 3 5 5 7 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15", - eraseable: true - }, - "idleleds.time_limit": { - data: "300", - eraseable: true - }, - "hardware.version": { - data: "Dygma Defy", - eraseable: false - }, - "hardware.side_power": { - data: "1", - eraseable: false - }, - "hardware.side_ver": { - data: "left: 5\r\nright: 5 ", - eraseable: false - }, - "hardware.sled_ver": { - data: "left: 115\r\nright: 115 ", - eraseable: false - }, - "hardware.sled_current": { - data: "left: 63\r\nright: 63 ", - eraseable: false - }, - "hardware.layout": { - data: "ISO", - eraseable: false - }, - "hardware.joint": { - data: "127", - eraseable: false - }, - "hardware.keyscan": { - data: "50", - eraseable: false - }, - "hardware.crc_errors": { - data: "left: 0 right: 0 ", - eraseable: false - }, - "hardware.firmware": { - data: "c9d9b7b", - eraseable: false - }, - "hardware.chip_id": { - data: "VirtualDefyWiredVirtualDefyWired", - eraseable: false - }, - "qukeys.holdTimeout": { - data: "250", - eraseable: true - }, - "qukeys.overlapThreshold": { - data: "80", - eraseable: true - }, - "superkeys.map": { - data: - "65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535", - eraseable: true - }, - "superkeys.waitfor": { - data: "500", - eraseable: true - }, - "superkeys.timeout": { - data: "250", - eraseable: true - }, - "superkeys.repeat": { - data: "20", - eraseable: true - }, - "superkeys.holdstart": { - data: "200", - eraseable: true - }, - "superkeys.overlap": { - data: "20", - eraseable: true - }, - "macros.map": { - data: - "6 225 8 5 7 225 8 8 8 22 8 23 8 54 8 40 8 40 6 225 8 15 7 225 8 24 8 12 8 22 0 6 227 8 80 7 227 8 84 8 11 8 30 8 40 6 227 8 79 7 227 0 6 227 8 80 7 227 8 84 8 11 8 31 8 40 6 227 8 79 7 227 0 6 227 8 80 7 227 8 84 8 5 8 24 8 15 8 15 8 8 8 23 8 8 8 7 8 44 8 15 8 12 8 22 8 23 8 40 0 6 227 8 80 7 227 8 84 8 5 8 4 8 17 8 17 8 8 8 21 8 44 8 28 8 8 8 15 8 15 8 18 8 26 8 40 0 6 227 8 80 7 227 8 84 8 11 8 32 8 40 6 227 8 79 7 227 0 6 227 8 80 7 227 8 84 8 11 8 33 8 40 6 227 8 79 7 227 0 6 227 8 80 7 227 8 84 8 6 8 11 8 8 8 6 8 14 8 15 8 12 8 22 8 23 8 40 0 6 227 8 80 7 227 8 84 8 5 8 4 8 17 8 17 8 8 8 21 8 44 8 10 8 21 8 8 8 8 8 17 8 40 6 227 8 79 7 227 0 6 227 8 80 7 227 8 84 8 5 8 4 8 17 8 17 8 8 8 21 8 44 8 21 8 8 8 7 8 40 6 227 8 79 7 227 0 6 227 8 80 7 227 8 84 8 5 8 4 8 17 8 17 8 8 8 21 8 44 8 5 8 15 8 24 8 8 8 40 6 227 8 79 7 227 0 8 84 8 10 8 12 8 19 8 11 8 28 2 0 200 8 40 0 0 8 10 8 21 8 8 8 8 8 17 8 40 0 8 84 8 5 8 4 8 17 8 17 8 8 8 21 8 44 8 21 8 8 8 7 8 40 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255", - eraseable: true - }, - "macros.trigger": { - data: "false", - eraseable: false - }, - help: { - data: - "version\r\nkeymap.custom\r\nkeymap.default\r\nkeymap.onlyCustom\r\nsettings.defaultLayer\r\nsettings.valid?\r\nsettings.version\r\nsettings.crc\r\neeprom.contents\r\neeprom.free\r\nled.at\r\nled.setAll\r\nled.mode\r\nled.brightness\r\nled.theme\r\npalette\r\ncolormap.map\r\nidleleds.time_limit\r\nhardware.version\r\nhardware.side_power\r\nhardware.side_ver\r\nhardware.sled_ver\r\nhardware.sled_current\r\nhardware.layout\r\nhardware.joint\r\nhardware.keyscan\r\nhardware.crc_errors\r\nhardware.firmware\r\nhardware.chip_id\r\nqukeys.holdTimeout\r\nqukeys.overlapThreshold\r\nsuperkeys.map\r\nsuperkeys.waitfor\r\nsuperkeys.timeout\r\nsuperkeys.repeat\r\nsuperkeys.holdstart\r\nsuperkeys.overlap\r\nmacros.map\r\nmacros.trigger\r\nhelp\r\nmouse.speed\r\nmouse.speedDelay\r\nmouse.accelSpeed\r\nmouse.accelDelay\r\nmouse.wheelSpeed\r\nmouse.wheelDelay\r\nmouse.speedLimit\r\nlayer.activate\r\nlayer.deactivate\r\nlayer.isActive\r\nlayer.moveTo\r\nlayer.state", - eraseable: false - }, - "mouse.speed": { - data: "20", - eraseable: true - }, - "mouse.speedDelay": { - data: "2", - eraseable: true - }, - "mouse.accelSpeed": { - data: "20", - eraseable: true - }, - "mouse.accelDelay": { - data: "2", - eraseable: true - }, - "mouse.wheelSpeed": { - data: "2", - eraseable: true - }, - "mouse.wheelDelay": { - data: "100", - eraseable: true - }, - "mouse.speedLimit": { - data: "127", - eraseable: true - }, - "layer.activate": { - data: "false", - eraseable: false - }, - "layer.deactivate": { - data: "false", - eraseable: false - }, - "layer.isActive": { - data: "0", - eraseable: false - }, - "layer.moveTo": { - data: "false", - eraseable: false - }, - "layer.state": { - data: "1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0", - eraseable: false - } - } -}; - -const DefyWireless = { - device: { - info: { - vendor: "Dygma", - product: "Defy", - keyboardType: "wireless", - displayName: "Dygma Defy", - urls: [ - { - name: "Homepage", - url: "https://www.dygma.com/defy/" - } - ] - }, - usb: { - vendorId: 13807, - productId: 18 - }, - keyboard: { - rows: 5, - columns: 16 - }, - keyboardUnderglow: { - rows: 2, - columns: 89 - }, - RGBWMode: true, - components: {}, - instructions: { - en: { - updateInstructions: - "To update the firmware, the keyboard needs a special reset. When the countdown starts, press and hold the Escape key. Soon after the countdown finished, the Neuron's light should start a blue pulsing pattern, and the flashing will proceed. At this point, you should release the Escape key." - } - } - }, - virtual: { - version: { - data: "v1.0.9beta 7622bb53 c9d9b7b-dirty", - eraseable: false - }, - "keymap.custom": { - data: - "41 30 31 32 33 34 0 0 0 0 35 36 37 38 39 0 43 20 26 8 21 23 0 0 0 0 28 24 12 18 19 0 57 4 22 7 9 10 17152 0 0 0 11 13 14 15 51 52 53980 29 27 6 25 5 0 0 0 0 17 16 54 55 56 0 53853 17452 44 49467 49209 226 227 0 0 231 76 49209 52028 44 49162 230 41 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 43 85 95 96 97 87 0 0 0 0 75 74 82 77 0 0 0 84 92 93 94 86 83 0 0 0 78 80 81 79 70 0 0 46 89 90 91 99 0 0 0 0 0 0 0 0 0 0 0 0 98 65535 65535 65535 0 0 0 0 0 65535 65535 65535 65535 0 0 58 59 60 61 62 63 65535 65535 64 65 66 67 68 69 0 0 0 0 22710 22709 23785 0 65535 65535 0 0 23663 0 0 65535 0 0 0 22713 22711 22733 23785 0 65535 65535 0 0 23664 20866 20865 0 0 0 0 0 0 0 19682 65535 65535 65535 65535 0 0 0 0 0 0 0 65535 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 65535 0 0 0 0 0 0 0 0 53 2079 2080 2081 2101 0 65535 65535 0 2083 2095 2096 2093 2094 0 0 2078 56 2102 2103 2082 0 65535 65535 0 2084 2086 2087 45 46 0 0 0 0 49 2097 0 65535 65535 65535 65535 0 47 48 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65535 0 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 ", - eraseable: true - }, - "keymap.default": { - data: - "41 30 31 32 33 34 35 0 0 51518 37 38 39 45 46 42 43 20 26 8 21 23 128 0 0 28 24 12 18 19 47 48 57 4 22 7 9 10 129 0 0 11 13 14 15 51 52 229 49 29 27 6 25 5 0 0 0 0 17 16 54 55 56 229 224 227 42 76 44 40 226 225 79 81 80 40 17152 74 82 77 41 58 59 60 61 62 63 0 0 64 65 66 67 68 69 42 43 0 82 0 0 0 0 0 0 86 36 37 38 84 0 40 57 80 81 79 0 0 0 0 0 87 33 34 35 85 0 49 225 49 0 0 0 0 0 0 0 0 99 30 31 32 82 229 224 227 226 44 76 40 42 44 79 228 76 17492 39 44 80 81 ", - eraseable: false - }, - "keymap.onlyCustom": { - data: "1 ", - eraseable: true - }, - "settings.defaultLayer": { - data: "0 ", - eraseable: true - }, - "settings.valid?": { - data: "true", - eraseable: false - }, - "settings.version": { - data: "1", - eraseable: false - }, - "settings.crc": { - data: "18462/18462", - eraseable: false - }, - "eeprom.contents": { - data: "", - eraseable: false - }, - "eeprom.free": { - data: "", - eraseable: false - }, - "led.at": { - data: "", - eraseable: false - }, - "led.setAll": { - data: "", - eraseable: false - }, - "led.mode": { - data: "0", - eraseable: true - }, - "led.brightness": { - data: "153 ", - eraseable: true - }, - "led.brightness.underglow": { - data: "100 ", - eraseable: true - }, - "led.theme": { - data: "", - eraseable: false - }, - palette: { - data: - "255 196 0 0 0 254 24 0 0 0 0 255 231 255 0 0 0 254 234 0 0 52 255 0 255 0 232 0 0 77 168 87 125 0 235 19 20 0 36 219 85 0 126 129 255 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ", - eraseable: true - }, - "colormap.map": { - data: - "10 4 4 4 4 4 12 10 4 4 4 4 4 12 2 4 4 4 4 4 8 10 4 4 4 4 4 10 8 1 5 6 2 2 12 12 4 4 4 4 4 12 12 4 4 4 4 4 12 7 7 4 4 4 4 12 12 7 7 7 4 4 9 3 1 5 6 7 2 12 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 10 12 12 12 12 12 12 10 0 3 3 3 0 12 12 0 3 0 3 0 11 12 0 3 3 3 0 12 12 3 5 6 9 12 12 12 12 12 12 12 12 12 12 12 9 3 9 10 12 12 1 3 3 3 10 12 12 12 12 12 12 12 12 3 1 5 6 12 12 12 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 7 12 8 8 8 8 8 8 15 12 15 7 7 9 15 15 12 3 0 1 9 15 15 15 15 15 15 9 15 8 15 12 15 15 15 15 15 8 8 8 8 8 8 15 15 15 12 3 15 15 15 12 11 0 3 12 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 15 12 12 12 12 12 12 12 12 7 7 7 7 7 12 12 4 4 5 5 4 12 12 12 12 7 7 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 7 7 5 5 7 12 12 4 4 5 5 4 12 12 12 12 5 5 12 12 12 12 5 12 12 12 12 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 ", - eraseable: true - }, - "idleleds.time_limit": { - data: "300 ", - eraseable: true - }, - "hardware.version": { - data: "Dygma Defy", - eraseable: false - }, - "hardware.side_power": { - data: "1", - eraseable: false - }, - "hardware.side_ver": { - data: "left: 5\r\nright: 5 ", - eraseable: false - }, - "hardware.sled_ver": { - data: "left: 115\r\nright: 115 ", - eraseable: false - }, - "hardware.sled_current": { - data: "left: 63\r\nright: 63 ", - eraseable: false - }, - "hardware.layout": { - data: "ISO", - eraseable: false - }, - "hardware.joint": { - data: "127", - eraseable: false - }, - "hardware.keyscan": { - data: "50", - eraseable: false - }, - "hardware.crc_errors": { - data: "left: 0 right: 0 ", - eraseable: false - }, - "hardware.firmware": { - data: "c9d9b7b", - eraseable: false - }, - "hardware.chip_id": { - data: "VirtualDefyWirelessVirtualDefyWireless", - eraseable: false - }, - "qukeys.holdTimeout": { - data: "250", - eraseable: true - }, - "qukeys.overlapThreshold": { - data: "80", - eraseable: true - }, - "superkeys.map": { - data: - "262 281 1 1 1 0 0 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 ", - eraseable: true - }, - "superkeys.waitfor": { - data: "500 ", - eraseable: true - }, - "superkeys.timeout": { - data: "250 ", - eraseable: true - }, - "superkeys.repeat": { - data: "20 ", - eraseable: true - }, - "superkeys.holdstart": { - data: "200 ", - eraseable: true - }, - "superkeys.overlap": { - data: "20 ", - eraseable: true - }, - "macros.map": { - data: - "8 44 6 225 8 11 7 225 8 8 8 28 8 54 8 44 6 225 8 7 7 225 8 28 8 10 8 16 8 4 8 23 8 8 8 22 0 0 225 8 8 8 28 8 54 8 44 6 225 8 7 7 225 8 28 8 10 8 16 8 4 8 23 8 8 8 22 0 0 79 7 227 0 6 227 8 80 7 227 8 84 8 5 8 24 8 15 8 15 8 8 8 23 8 8 8 7 8 44 8 15 8 12 8 22 8 23 8 40 0 6 227 8 80 7 227 8 84 8 5 8 4 8 17 8 17 8 8 8 21 8 44 8 28 8 8 8 15 8 15 8 18 8 26 8 40 0 6 227 8 80 7 227 8 84 8 11 8 32 8 40 6 227 8 79 7 227 0 6 227 8 80 7 227 8 84 8 11 8 33 8 40 6 227 8 79 7 227 0 6 227 8 80 7 227 8 84 8 6 8 11 8 8 8 6 8 14 8 15 8 12 8 22 8 23 8 40 0 6 227 8 80 7 227 8 84 8 5 8 4 8 17 8 17 8 8 8 21 8 44 8 10 8 21 8 8 8 8 8 17 8 40 6 227 8 79 7 227 0 6 227 8 80 7 227 8 84 8 5 8 4 8 17 8 17 8 8 8 21 8 44 8 21 8 8 8 7 8 40 6 227 8 79 7 227 0 6 227 8 80 7 227 8 84 8 5 8 4 8 17 8 17 8 8 8 21 8 44 8 5 8 15 8 24 8 8 8 40 6 227 8 79 7 227 0 8 84 8 10 8 12 8 19 8 11 8 28 2 0 200 8 40 0 0 8 10 8 21 8 8 8 8 8 17 8 40 0 8 84 8 5 8 4 8 17 8 17 8 8 8 21 8 44 8 21 8 8 8 7 8 40 0 0 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 ", - eraseable: true - }, - "macros.trigger": { - data: "false", - eraseable: false - }, - help: { - data: - "version\r\nkeymap.custom\r\nkeymap.default\r\nkeymap.onlyCustom\r\nsettings.defaultLayer\r\nsettings.valid?\r\nsettings.version\r\nsettings.crc\r\neeprom.contents\r\neeprom.free\r\nled.at\r\nled.setAll\r\nled.mode\r\nled.brightness\r\nled.theme\r\npalette\r\ncolormap.map\r\nidleleds.time_limit\r\nhardware.version\r\nhardware.side_power\r\nhardware.side_ver\r\nhardware.sled_ver\r\nhardware.sled_current\r\nhardware.layout\r\nhardware.joint\r\nhardware.keyscan\r\nhardware.crc_errors\r\nhardware.firmware\r\nhardware.chip_id\r\nqukeys.holdTimeout\r\nqukeys.overlapThreshold\r\nsuperkeys.map\r\nsuperkeys.waitfor\r\nsuperkeys.timeout\r\nsuperkeys.repeat\r\nsuperkeys.holdstart\r\nsuperkeys.overlap\r\nmacros.map\r\nmacros.trigger\r\nhelp\r\nmouse.speed\r\nmouse.speedDelay\r\nmouse.accelSpeed\r\nmouse.accelDelay\r\nmouse.wheelSpeed\r\nmouse.wheelDelay\r\nmouse.speedLimit\r\nlayer.activate\r\nlayer.deactivate\r\nlayer.isActive\r\nlayer.moveTo\r\nlayer.state", - eraseable: false - }, - "mouse.speed": { - data: "20 ", - eraseable: true - }, - "mouse.speedDelay": { - data: "2 ", - eraseable: true - }, - "mouse.accelSpeed": { - data: "20 ", - eraseable: true - }, - "mouse.accelDelay": { - data: "2 ", - eraseable: true - }, - "mouse.wheelSpeed": { - data: "2 ", - eraseable: true - }, - "mouse.wheelDelay": { - data: "100 ", - eraseable: true - }, - "mouse.speedLimit": { - data: "127 ", - eraseable: true - }, - "layer.activate": { - data: "false", - eraseable: false - }, - "layer.deactivate": { - data: "false", - eraseable: false - }, - "layer.isActive": { - data: "0", - eraseable: false - }, - "layer.moveTo": { - data: "false", - eraseable: false - }, - "layer.state": { - data: "1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0", - eraseable: false - }, - "wireless.battery.level": { - data: "80", - eraseable: false - }, - "wireless.battery.state": { - data: "charge", - eraseable: false - }, - "wireless.battery.mode": { - data: "1", - eraseable: false - }, - "wireless.energy.modes": { - data: "0 0 0 0 0 0 0 0 0 0 0", - eraseable: true - }, - "wireless.energy.disable": { - data: "true", - eraseable: false - }, - "wireless.energy.currentMode": { - data: "0", - eraseable: true - }, - "wireless.bluetooth.state": { - data: "connected", - eraseable: false - }, - "wireless.bluetooth.devices": { - data: "0 0 0 0 0 0 0 0 0 0 0", - eraseable: true - }, - "wireless.bluetooth.connectTo": { - data: "", - eraseable: true - }, - "wireless.bluetooth.stability": { - data: "80 305", - eraseable: false - }, - "wireless.rf.state": { - data: "disconnected", - eraseable: false - }, - "wireless.rf.stability": { - data: "0", - eraseable: false - }, - "wireless.rf.channelHop": { - data: "false", - eraseable: true - }, - "wireless.rf.syncPairing": { - data: "", - eraseable: false - } - } -}; - -const enumerator = [RaiseANSI, RaiseISO, DefyWireless]; - -export { RaiseISO, RaiseANSI, DefyWired, DefyWireless, enumerator }; diff --git a/src/api/keymap/bazecor-keymap.js b/src/api/keymap/bazecor-keymap.js index f504884d0..e316f2128 100644 --- a/src/api/keymap/bazecor-keymap.js +++ b/src/api/keymap/bazecor-keymap.js @@ -23,7 +23,7 @@ global.keymap_instance = null; class Keymap { constructor(opts) { - //Add checking of language existing to call KeymapDB and change language from the local storage + // Add checking of language existing to call KeymapDB and change language from the local storage if (!global.keymap_instance || opts.language) { global.keymap_instance = this; this.db = new KeymapDB(); @@ -36,9 +36,9 @@ class Keymap { setLayerSize(opts) { if (!opts || opts == undefined) return; - if (typeof opts == "number") { + if (typeof opts === "number") { this._layerSize = opts; - } else if (typeof opts == "object") { + } else if (typeof opts === "object") { this._layerSize = opts.keyboard.rows * opts.keyboard.columns; } @@ -46,16 +46,14 @@ class Keymap { } _chunk(a, chunkSize) { - var R = []; - for (var i = 0; i < a.length; i += chunkSize) R.push(a.slice(i, i + chunkSize)); + const R = []; + for (let i = 0; i < a.length; i += chunkSize) R.push(a.slice(i, i + chunkSize)); return R; } async focus(s, keymap) { if (keymap && keymap.custom && keymap.custom.length > 0) { - const flatten = arr => { - return [].concat(...arr); - }; + const flatten = arr => [].concat(...arr); if (this.legacyInterface) { const args = flatten(keymap.default.concat(keymap.custom)).map(k => this.db.serialize(k)); @@ -67,44 +65,45 @@ class Keymap { await s.request("keymap.onlyCustom", keymap.onlyCustom ? "1" : "0"); return await s.request("keymap.custom", ...args); - } else { - let defaults, custom, onlyCustom; - - if (!this.legacyInterface) { - defaults = await s.request("keymap.default"); - custom = await s.request("keymap.custom"); - onlyCustom = Boolean(parseInt(await s.request("keymap.onlyCustom"))); - } + } + let defaults; + let custom; + let onlyCustom; + + if (!this.legacyInterface) { + defaults = await s.request("keymap.default"); + custom = await s.request("keymap.custom"); + onlyCustom = Boolean(parseInt(await s.request("keymap.onlyCustom"))); + } - if (!defaults && !custom) { - const keymap = (await s.request("keymap.map")).split(" ").filter(v => v.length > 0); - const roLayers = parseInt((await s.request("keymap.roLayers")) || "0"); + if (!defaults && !custom) { + const keymap = (await s.request("keymap.map")).split(" ").filter(v => v.length > 0); + const roLayers = parseInt((await s.request("keymap.roLayers")) || "0"); - defaults = keymap.slice(0, this._layerSize * roLayers).join(" "); - custom = keymap.slice(this._layerSize * roLayers, keymap.length).join(" "); + defaults = keymap.slice(0, this._layerSize * roLayers).join(" "); + custom = keymap.slice(this._layerSize * roLayers, keymap.length).join(" "); - onlyCustom = false; - this.legacyInterface = true; - } - const defaultKeymap = defaults - .split(" ") - .filter(v => v.length > 0) - .map(k => this.db.parse(parseInt(k))); - const customKeymap = custom - .split(" ") - .filter(v => v.length > 0) - .map(k => this.db.parse(parseInt(k))); - - if (customKeymap.length == 0) { - onlyCustom = false; - } - - return { - onlyCustom: onlyCustom, - custom: this._chunk(customKeymap, this._layerSize), - default: this._chunk(defaultKeymap, this._layerSize) - }; + onlyCustom = false; + this.legacyInterface = true; } + const defaultKeymap = defaults + .split(" ") + .filter(v => v.length > 0) + .map(k => this.db.parse(parseInt(k))); + const customKeymap = custom + .split(" ") + .filter(v => v.length > 0) + .map(k => this.db.parse(parseInt(k))); + + if (customKeymap.length == 0) { + onlyCustom = false; + } + + return { + onlyCustom, + custom: this._chunk(customKeymap, this._layerSize), + default: this._chunk(defaultKeymap, this._layerSize), + }; } } @@ -118,9 +117,9 @@ class Keymap { // } // } -let focus = new Focus(); +const focus = new Focus(); focus.addCommands({ - keymap: new Keymap() + keymap: new Keymap(), }); focus.addMethod("setLayerSize", "keymap"); diff --git a/src/api/keymap/db.js b/src/api/keymap/db.js index 2d46cf57a..20239176e 100644 --- a/src/api/keymap/db.js +++ b/src/api/keymap/db.js @@ -1,3 +1,4 @@ +/* eslint-disable no-bitwise */ /* bazecor-keymap -- Bazecor keymap library * Copyright (C) 2018, 2019 Keyboardio, Inc. * Copyright (C) 2019, 2020 DygmaLab SE @@ -26,6 +27,7 @@ import LEDEffectsTable from "./db/ledeffects"; import MacrosTable from "./db/macros"; import SuperKeyTable from "./db/superkeys"; import TapDanceTable from "./db/tapdance"; +import { Battery, Bluetooth, Energy, RF } from "./db/wireless"; import NumpadTable, { ModifiedNumpadTables } from "./db/numpad"; import FunctionKeyTable, { ModifiedFunctionKeyTables } from "./db/fxs"; @@ -48,6 +50,9 @@ import german, { germanModifiedTables } from "./languages/german/german"; // French - is an Array of objects of values that have to be modified import french, { frenchModifiedTables } from "./languages/french/french"; +// French - is an Array of objects of values that have to be modified +import frenchBepo, { frenchBepoModifiedTables } from "./languages/french/frenchBepo"; + // Norwegian - is an Array of objects of values that have to be modified import norwegian, { norwegianModifiedTables } from "./languages/norwegian/norwegian"; @@ -63,14 +68,21 @@ import icelandic, { icelandicModifiedTables } from "./languages/icelandic/icelan // Japanese - is an Array of objects of values that have to be modified import japanese, { japaneseModifiedTables } from "./languages/japanese/japanese"; +// Korean - is an Array of objects of values that have to be modified +import korean, { koreanModifiedTables } from "./languages/korean/korean"; + // Swiss German - is an Array of objects of values that have to be modified import swissGerman, { swissGermanModifiedTables } from "./languages/swissGerman/swissGerman"; +// EurKEY - is an Array of objects of values that have to be modified +import eurkey, { eurkeyModifiedTables } from "./languages/eurkey/eurkey"; + // newLanguageLayout - is a function that modify language layout import newLanguageLayout from "./languages/newLanguageLayout"; -const Store = require("electron-store"); -const store = new Store(); +import Store from "../../renderer/utils/Store"; + +const store = Store.getStore(); const defaultBaseKeyCodeTable = [ LetterTable, @@ -101,20 +113,27 @@ const defaultBaseKeyCodeTable = [ LeaderTable, StenoTable, SpaceCadetTable, + Battery, + Bluetooth, + Energy, + RF, - BlankTable + BlankTable, ]; const supportModifiedTables = { spanish: spanishModifiedTables, german: germanModifiedTables, french: frenchModifiedTables, + frenchBepo: frenchBepoModifiedTables, norwegian: norwegianModifiedTables, swedish: swedishModifiedTables, danish: danishModifiedTables, icelandic: icelandicModifiedTables, japanese: japaneseModifiedTables, - swissGerman: swissGermanModifiedTables + korean: koreanModifiedTables, + swissGerman: swissGermanModifiedTables, + eurkey: eurkeyModifiedTables, }; const defaultKeyCodeTable = defaultBaseKeyCodeTable @@ -137,44 +156,48 @@ const languagesDB = { spanish, german, french, + frenchBepo, norwegian, swedish, danish, icelandic, japanese, - swissGerman + korean, + swissGerman, + eurkey, }; // Create cache for language layout const map = new Map(); -let baseKeyCodeTable, keyCodeTable; +let baseKeyCodeTable; +let keyCodeTable; class KeymapDB { constructor() { this.keymapCodeTable = []; - //create variable that get language from the local storage + // create variable that get language from the local storage this.language = store.get("settings.language"); - if (this.language == "finnish") { + if (this.language === "finnish") { this.language = "swedish"; } - //Modify our baseKeyCodeTable, depending on the language selected by the static methods and by inside function newLanguageLayout + // Modify our baseKeyCodeTable, depending on the language selected by the static methods and by inside function newLanguageLayout baseKeyCodeTable = KeymapDB.updateBaseKeyCode(); const keyCodeTableWithModifiers = - this.language !== "english" && supportModifiedTables[this.language] + this.language !== "english" && this.language !== "british" && supportModifiedTables[this.language] ? defaultKeyCodeTable.concat(supportModifiedTables[this.language]) : defaultKeyCodeTable; - //Modify our baseKeyCodeTable, depending on the language selected through function newLanguageLayout + // Modify our baseKeyCodeTable, depending on the language selected through function newLanguageLayout keyCodeTable = baseKeyCodeTable.concat( newLanguageLayout( keyCodeTableWithModifiers.slice(defaultBaseKeyCodeTable.length), this.language, - languagesDB[this.language] - ) + languagesDB[this.language], + ), ); this.allCodes = keyCodeTable; - for (let group of keyCodeTable) { - for (let key of group.keys) { + for (const group of keyCodeTable) { + for (const key of group.keys) { let value; if (key.labels) { @@ -183,8 +206,8 @@ class KeymapDB { value = { code: key.code, labels: { - primary: "#" + key.code.toString() - } + primary: `#${key.code.toString()}`, + }, }; } @@ -239,7 +262,7 @@ class KeymapDB { break; case keyCode < 8192: // Reguar key with Modifier KeyCode - code = { base: keyCode - modified, modified: modified }; + code = { base: keyCode - modified, modified }; break; case keyCode < 17152: // Yet to review @@ -269,7 +292,7 @@ class KeymapDB { break; case keyCode < 53266: // Dual Function Keycode - code = { base: keyCode - modified, modified: modified }; + code = { base: keyCode - modified, modified }; break; case TapDanceTable.keys.map(r => r.code).includes(keyCode): case LeaderTable.keys.map(r => r.code).includes(keyCode): @@ -306,8 +329,8 @@ class KeymapDB { key = { code: keyCode, labels: { - primary: "#" + keyCode.toString() - } + primary: `#${keyCode.toString()}`, + }, }; } @@ -315,7 +338,7 @@ class KeymapDB { keyCode: key.code, label: key.labels.primary, extraLabel: key.labels.top, - verbose: key.labels.verbose + verbose: key.labels.verbose, }; } @@ -339,20 +362,19 @@ class KeymapDB { static updateBaseKeyCode() { this.language = store.get("settings.language") || "english"; - if (this.language == "finnish") { + if (this.language === "finnish") { this.language = "swedish"; } - //Checking language in the cache + // Checking language in the cache if (map.has(this.language)) { - //Return language layout from the cache + // Return language layout from the cache return map.get(this.language); - } else { - //Creating language layout and add it into cache - const newBase = newLanguageLayout(defaultBaseKeyCodeTable, this.language, languagesDB[this.language]); - map.set(this.language, newBase); - //Return new language layout - return newBase; } + // Creating language layout and add it into cache + const newBase = newLanguageLayout(defaultBaseKeyCodeTable, this.language, languagesDB[this.language]); + map.set(this.language, newBase); + // Return new language layout + return newBase; } } diff --git a/src/api/keymap/db/blanks.js b/src/api/keymap/db/blanks.js index 294f6af35..b34d9f326 100644 --- a/src/api/keymap/db/blanks.js +++ b/src/api/keymap/db/blanks.js @@ -24,8 +24,8 @@ const BlankTable = { labels: { top: "NO", primary: "KEY", - verbose: "Disabled" - } + verbose: "Disabled", + }, }, { // Transparent @@ -33,10 +33,10 @@ const BlankTable = { labels: { top: "TRANS", primary: "", - verbose: "Transparent" - } - } - ] + verbose: "Transparent", + }, + }, + ], }; export default BlankTable; diff --git a/src/api/keymap/db/digits.js b/src/api/keymap/db/digits.js index 7d427059e..33a771905 100644 --- a/src/api/keymap/db/digits.js +++ b/src/api/keymap/db/digits.js @@ -23,64 +23,64 @@ const DigitTable = { { code: 30, labels: { - primary: "1" - } + primary: "1", + }, }, { code: 31, labels: { - primary: "2" - } + primary: "2", + }, }, { code: 32, labels: { - primary: "3" - } + primary: "3", + }, }, { code: 33, labels: { - primary: "4" - } + primary: "4", + }, }, { code: 34, labels: { - primary: "5" - } + primary: "5", + }, }, { code: 35, labels: { - primary: "6" - } + primary: "6", + }, }, { code: 36, labels: { - primary: "7" - } + primary: "7", + }, }, { code: 37, labels: { - primary: "8" - } + primary: "8", + }, }, { code: 38, labels: { - primary: "9" - } + primary: "9", + }, }, { code: 39, labels: { - primary: "0" - } - } - ] + primary: "0", + }, + }, + ], }; const ShiftedDigitTable = { @@ -89,64 +89,64 @@ const ShiftedDigitTable = { { code: 2078, labels: { - primary: "!" - } + primary: "!", + }, }, { code: 2079, labels: { - primary: "@" - } + primary: "@", + }, }, { code: 2080, labels: { - primary: "#" - } + primary: "#", + }, }, { code: 2081, labels: { - primary: "$" - } + primary: "$", + }, }, { code: 2082, labels: { - primary: "%" - } + primary: "%", + }, }, { code: 2083, labels: { - primary: "^" - } + primary: "^", + }, }, { code: 2084, labels: { - primary: "&" - } + primary: "&", + }, }, { code: 2085, labels: { - primary: "*" - } + primary: "*", + }, }, { code: 2086, labels: { - primary: "(" - } + primary: "(", + }, }, { code: 2087, labels: { - primary: ")" - } - } - ] + primary: ")", + }, + }, + ], }; const ModifiedDigitTables = [ @@ -189,7 +189,7 @@ const ModifiedDigitTables = [ withModifiers(DigitTable, "Alt + AltGr + Shift + Os +", "A+AGr+S+O+", 7680), // All - withModifiers(DigitTable, "Hyper + AltGr +", "H+AGr", 7936) + withModifiers(DigitTable, "Hyper + AltGr +", "H+AGr", 7936), ]; export { DigitTable as default, ModifiedDigitTables }; diff --git a/src/api/keymap/db/dualuse.js b/src/api/keymap/db/dualuse.js index 1ddc6e950..fa5164ba9 100644 --- a/src/api/keymap/db/dualuse.js +++ b/src/api/keymap/db/dualuse.js @@ -70,7 +70,7 @@ const DualUseModifierTables = [ withModifiers(NavigationTable, "AltGr /", "ALTGR/", 50705), withModifiers(FunctionKeyTable, "AltGr /", "ALTGR/", 50705), withModifiers(NumpadTable, "AltGr /", "ALTGR/", 50705), - withModifiers(MiscellaneousTable, "AltGr /", "ALTGR/", 50705) + withModifiers(MiscellaneousTable, "AltGr /", "ALTGR/", 50705), ]; const DualUseLayerTables = [ @@ -144,7 +144,7 @@ const DualUseLayerTables = [ withModifiers(NavigationTable, "Layer #8 /", "L#8/", 53010), withModifiers(FunctionKeyTable, "Layer #8 /", "L#8/", 53010), withModifiers(NumpadTable, "Layer #8 /", "L#8/", 53010), - withModifiers(MiscellaneousTable, "Layer #8 /", "L#8/", 53010) + withModifiers(MiscellaneousTable, "Layer #8 /", "L#8/", 53010), ]; export { DualUseModifierTables, DualUseLayerTables }; diff --git a/src/api/keymap/db/fxs.js b/src/api/keymap/db/fxs.js index 954709978..a96581e45 100644 --- a/src/api/keymap/db/fxs.js +++ b/src/api/keymap/db/fxs.js @@ -23,148 +23,148 @@ const FunctionKeyTable = { { code: 58, labels: { - primary: "F1" - } + primary: "F1", + }, }, { code: 59, labels: { - primary: "F2" - } + primary: "F2", + }, }, { code: 60, labels: { - primary: "F3" - } + primary: "F3", + }, }, { code: 61, labels: { - primary: "F4" - } + primary: "F4", + }, }, { code: 62, labels: { - primary: "F5" - } + primary: "F5", + }, }, { code: 63, labels: { - primary: "F6" - } + primary: "F6", + }, }, { code: 64, labels: { - primary: "F7" - } + primary: "F7", + }, }, { code: 65, labels: { - primary: "F8" - } + primary: "F8", + }, }, { code: 66, labels: { - primary: "F9" - } + primary: "F9", + }, }, { code: 67, labels: { - primary: "F10" - } + primary: "F10", + }, }, { code: 68, labels: { - primary: "F11" - } + primary: "F11", + }, }, { code: 69, labels: { - primary: "F12" - } + primary: "F12", + }, }, { code: 104, labels: { - primary: "F13" - } + primary: "F13", + }, }, { code: 105, labels: { - primary: "F14" - } + primary: "F14", + }, }, { code: 106, labels: { - primary: "F15" - } + primary: "F15", + }, }, { code: 107, labels: { - primary: "F16" - } + primary: "F16", + }, }, { code: 108, labels: { - primary: "F17" - } + primary: "F17", + }, }, { code: 109, labels: { - primary: "F18" - } + primary: "F18", + }, }, { code: 110, labels: { - primary: "F19" - } + primary: "F19", + }, }, { code: 111, labels: { - primary: "F20" - } + primary: "F20", + }, }, { code: 112, labels: { - primary: "F21" - } + primary: "F21", + }, }, { code: 113, labels: { - primary: "F22" - } + primary: "F22", + }, }, { code: 114, labels: { - primary: "F23" - } + primary: "F23", + }, }, { code: 115, labels: { - primary: "F24" - } - } - ] + primary: "F24", + }, + }, + ], }; const ModifiedFunctionKeyTables = [ @@ -207,7 +207,7 @@ const ModifiedFunctionKeyTables = [ withModifiers(FunctionKeyTable, "Alt + AltGr + Shift + Os +", "A+AGr+S+O+", 7680), // All - withModifiers(FunctionKeyTable, "Hyper + AltGr +", "H+AGr+", 7936) + withModifiers(FunctionKeyTable, "Hyper + AltGr +", "H+AGr+", 7936), ]; export { FunctionKeyTable as default, ModifiedFunctionKeyTables }; diff --git a/src/api/keymap/db/layerswitch.js b/src/api/keymap/db/layerswitch.js index 40bc38efb..22fd6bc42 100644 --- a/src/api/keymap/db/layerswitch.js +++ b/src/api/keymap/db/layerswitch.js @@ -22,73 +22,73 @@ const LockLayerTable = { code: 17408, labels: { primary: "1", - top: "LockTo" - } + top: "LockTo", + }, }, { code: 17409, labels: { primary: "2", - top: "LockTo" - } + top: "LockTo", + }, }, { code: 17410, labels: { primary: "3", - top: "LockTo" - } + top: "LockTo", + }, }, { code: 17411, labels: { primary: "4", - top: "LockTo" - } + top: "LockTo", + }, }, { code: 17412, labels: { primary: "5", - top: "LockTo" - } + top: "LockTo", + }, }, { code: 17413, labels: { primary: "6", - top: "LockTo" - } + top: "LockTo", + }, }, { code: 17414, labels: { primary: "7", - top: "LockTo" - } + top: "LockTo", + }, }, { code: 17415, labels: { primary: "8", - top: "LockTo" - } + top: "LockTo", + }, }, { code: 17416, labels: { primary: "9", - top: "LockTo" - } + top: "LockTo", + }, }, { code: 17417, labels: { primary: "10", - top: "LockTo" - } - } - ] + top: "LockTo", + }, + }, + ], }; const ShiftToLayerTable = { @@ -98,73 +98,73 @@ const ShiftToLayerTable = { code: 17450, labels: { primary: "1", - top: "SHIFT" - } + top: "SHIFT", + }, }, { code: 17451, labels: { primary: "2", - top: "SHIFT" - } + top: "SHIFT", + }, }, { code: 17452, labels: { primary: "3", - top: "SHIFT" - } + top: "SHIFT", + }, }, { code: 17453, labels: { primary: "4", - top: "SHIFT" - } + top: "SHIFT", + }, }, { code: 17454, labels: { primary: "5", - top: "SHIFT" - } + top: "SHIFT", + }, }, { code: 17455, labels: { primary: "6", - top: "SHIFT" - } + top: "SHIFT", + }, }, { code: 17456, labels: { primary: "7", - top: "SHIFT" - } + top: "SHIFT", + }, }, { code: 17457, labels: { primary: "8", - top: "SHIFT" - } + top: "SHIFT", + }, }, { code: 17458, labels: { primary: "9", - top: "SHIFT" - } + top: "SHIFT", + }, }, { code: 17459, labels: { primary: "10", - top: "SHIFT" - } - } - ] + top: "SHIFT", + }, + }, + ], }; const MoveToLayerTable = { @@ -174,73 +174,73 @@ const MoveToLayerTable = { code: 17492, labels: { primary: "1", - top: "LOCK" - } + top: "LOCK", + }, }, { code: 17493, labels: { primary: "2", - top: "LOCK" - } + top: "LOCK", + }, }, { code: 17494, labels: { primary: "3", - top: "LOCK" - } + top: "LOCK", + }, }, { code: 17495, labels: { primary: "4", - top: "LOCK" - } + top: "LOCK", + }, }, { code: 17496, labels: { primary: "5", - top: "LOCK" - } + top: "LOCK", + }, }, { code: 17497, labels: { primary: "6", - top: "LOCK" - } + top: "LOCK", + }, }, { code: 17498, labels: { primary: "7", - top: "LOCK" - } + top: "LOCK", + }, }, { code: 17499, labels: { primary: "8", - top: "LOCK" - } + top: "LOCK", + }, }, { code: 17500, labels: { primary: "9", - top: "LOCK" - } + top: "LOCK", + }, }, { code: 17501, labels: { primary: "10", - top: "LOCK" - } - } - ] + top: "LOCK", + }, + }, + ], }; export { LockLayerTable, ShiftToLayerTable, MoveToLayerTable }; diff --git a/src/api/keymap/db/leader.js b/src/api/keymap/db/leader.js index e74940cb0..b3f8debf8 100644 --- a/src/api/keymap/db/leader.js +++ b/src/api/keymap/db/leader.js @@ -22,59 +22,59 @@ const LeaderTable = { code: 53283, labels: { top: "Leader", - primary: "#0" - } + primary: "#0", + }, }, { code: 53284, labels: { top: "Leader", - primary: "#1" - } + primary: "#1", + }, }, { code: 53285, labels: { top: "Leader", - primary: "#2" - } + primary: "#2", + }, }, { code: 53286, labels: { top: "Leader", - primary: "#3" - } + primary: "#3", + }, }, { code: 53287, labels: { top: "Leader", - primary: "#4" - } + primary: "#4", + }, }, { code: 53288, labels: { top: "Leader", - primary: "#5" - } + primary: "#5", + }, }, { code: 53289, labels: { top: "Leader", - primary: "#6" - } + primary: "#6", + }, }, { code: 53290, labels: { top: "Leader", - primary: "#7" - } - } - ] + primary: "#7", + }, + }, + ], }; export { LeaderTable as default }; diff --git a/src/api/keymap/db/ledeffects.js b/src/api/keymap/db/ledeffects.js index 1d3d3295d..7ea8f7089 100644 --- a/src/api/keymap/db/ledeffects.js +++ b/src/api/keymap/db/ledeffects.js @@ -22,25 +22,25 @@ const LEDEffectsTable = { code: 17152, labels: { primary: "NEXT", - top: "LED" - } + top: "LED", + }, }, { code: 17153, labels: { primary: "PREV", top: "LED", - verbose: "Previous" - } + verbose: "Previous", + }, }, { code: 17154, labels: { primary: "TOGGLE", - top: "LED" - } - } - ] + top: "LED", + }, + }, + ], }; export default LEDEffectsTable; diff --git a/src/api/keymap/db/letters.js b/src/api/keymap/db/letters.js index 9ea4857ad..35d47611d 100644 --- a/src/api/keymap/db/letters.js +++ b/src/api/keymap/db/letters.js @@ -23,160 +23,160 @@ const LetterTable = { { code: 4, labels: { - primary: "A" - } + primary: "A", + }, }, { code: 5, labels: { - primary: "B" - } + primary: "B", + }, }, { code: 6, labels: { - primary: "C" - } + primary: "C", + }, }, { code: 7, labels: { - primary: "D" - } + primary: "D", + }, }, { code: 8, labels: { - primary: "E" - } + primary: "E", + }, }, { code: 9, labels: { - primary: "F" - } + primary: "F", + }, }, { code: 10, labels: { - primary: "G" - } + primary: "G", + }, }, { code: 11, labels: { - primary: "H" - } + primary: "H", + }, }, { code: 12, labels: { - primary: "I" - } + primary: "I", + }, }, { code: 13, labels: { - primary: "J" - } + primary: "J", + }, }, { code: 14, labels: { - primary: "K" - } + primary: "K", + }, }, { code: 15, labels: { - primary: "L" - } + primary: "L", + }, }, { code: 16, labels: { - primary: "M" - } + primary: "M", + }, }, { code: 17, labels: { - primary: "N" - } + primary: "N", + }, }, { code: 18, labels: { - primary: "O" - } + primary: "O", + }, }, { code: 19, labels: { - primary: "P" - } + primary: "P", + }, }, { code: 20, labels: { - primary: "Q" - } + primary: "Q", + }, }, { code: 21, labels: { - primary: "R" - } + primary: "R", + }, }, { code: 22, labels: { - primary: "S" - } + primary: "S", + }, }, { code: 23, labels: { - primary: "T" - } + primary: "T", + }, }, { code: 24, labels: { - primary: "U" - } + primary: "U", + }, }, { code: 25, labels: { - primary: "V" - } + primary: "V", + }, }, { code: 26, labels: { - primary: "W" - } + primary: "W", + }, }, { code: 27, labels: { - primary: "X" - } + primary: "X", + }, }, { code: 28, labels: { - primary: "Y" - } + primary: "Y", + }, }, { code: 29, labels: { - primary: "Z" - } - } - ] + primary: "Z", + }, + }, + ], }; /* Modifier tables */ @@ -274,7 +274,7 @@ const ModifiedLetterTables = [ withModifiers(LetterTable, "Hyper +", "Hyper+", 6912), CAGrSGLetterTable, AAGrSGLetterTable, - AllModLetterTable + AllModLetterTable, ]; export { LetterTable as default, ModifiedLetterTables }; diff --git a/src/api/keymap/db/macros.js b/src/api/keymap/db/macros.js index 83016684e..9eda26aef 100644 --- a/src/api/keymap/db/macros.js +++ b/src/api/keymap/db/macros.js @@ -17,8 +17,8 @@ const macro = index => ({ code: 53852 + index, labels: { primary: index.toString(), - top: "MACRO" - } + top: "MACRO", + }, }); const macros = Array(128) @@ -27,7 +27,7 @@ const macros = Array(128) const MacrosTable = { groupName: "Macros", - keys: macros + keys: macros, }; export default MacrosTable; diff --git a/src/api/keymap/db/mediacontrols.js b/src/api/keymap/db/mediacontrols.js index f9ac1c6df..c19483fed 100644 --- a/src/api/keymap/db/mediacontrols.js +++ b/src/api/keymap/db/mediacontrols.js @@ -23,101 +23,101 @@ const MediaControlTable = { labels: { top: "", primary: "🔇", - verbose: "MUTE" - } + verbose: "MUTE", + }, }, { code: 22709, labels: { top: "", primary: "⏭", - verbose: "Next track" - } + verbose: "Next track", + }, }, { code: 22710, labels: { top: "", primary: "⏮", - verbose: "Prev. track" - } + verbose: "Prev. track", + }, }, { code: 22711, labels: { top: "", primary: "⏹", - verbose: "STOP" - } + verbose: "STOP", + }, }, { code: 22733, labels: { top: "", primary: "⏯", - verbose: "Play / pause" - } + verbose: "Play / pause", + }, }, { code: 23785, labels: { top: "", primary: "🔊", - verbose: "Volume up" - } + verbose: "Volume up", + }, }, { code: 23786, labels: { top: "", primary: "🔉", - verbose: "Volume down" - } + verbose: "Volume down", + }, }, { code: 22712, labels: { top: "", primary: "⏏", - verbose: "Eject" - } + verbose: "Eject", + }, }, { code: 18552, labels: { top: "", - primary: "Camera" - } + primary: "Camera", + }, }, { code: 23663, labels: { top: "Display", - primary: "Bright +" - } + primary: "Bright +", + }, }, { code: 23664, labels: { top: "Display", - primary: "Bright -" - } + primary: "Bright -", + }, }, { code: 18834, labels: { top: "Apps", - primary: "Calc" - } + primary: "Calc", + }, }, { code: 22713, labels: { top: "", - primary: "Shuff." - } - } - ] + primary: "Shuff.", + }, + }, + ], }; export default MediaControlTable; diff --git a/src/api/keymap/db/miscellaneous.js b/src/api/keymap/db/miscellaneous.js index f41a99538..dc76f0d29 100644 --- a/src/api/keymap/db/miscellaneous.js +++ b/src/api/keymap/db/miscellaneous.js @@ -24,36 +24,36 @@ const MiscellaneousTable = { code: 70, labels: { primary: "PRINT SCRN", - verbose: "Print Screen" - } + verbose: "Print Screen", + }, }, { code: 71, labels: { primary: "SCROLL LCK", - verbose: "Scroll Lock" - } + verbose: "Scroll Lock", + }, }, { code: 72, labels: { - primary: "PAUSE" - } + primary: "PAUSE", + }, }, { code: 20865, labels: { primary: "SHUT DWN", - verbose: "Shut Down" - } + verbose: "Shut Down", + }, }, { code: 20866, labels: { primary: "SLEEP", - verbose: "Sleep" - } - } + verbose: "Sleep", + }, + }, /* These are disabled for now, since we don't want to display them in * Bazecor. */ /* @@ -70,7 +70,7 @@ const MiscellaneousTable = { } } */ - ] + ], }; const ModifiedMiscellaneousTables = [ @@ -114,7 +114,7 @@ const ModifiedMiscellaneousTables = [ withModifiers(MiscellaneousTable, "Alt + AltGr + Shift + Os +", "A+AGr+S+O+", 7680), // All - withModifiers(MiscellaneousTable, "Hyper + AltGr +", "H+AGr+", 7936) + withModifiers(MiscellaneousTable, "Hyper + AltGr +", "H+AGr+", 7936), ]; export { MiscellaneousTable as default, ModifiedMiscellaneousTables }; diff --git a/src/api/keymap/db/modifiers.js b/src/api/keymap/db/modifiers.js index 37f8fa59b..c586182ee 100644 --- a/src/api/keymap/db/modifiers.js +++ b/src/api/keymap/db/modifiers.js @@ -20,25 +20,25 @@ import { withModifiers } from "./utils"; const GuiLabels = { linux: "LINUX", win32: "WIN", - darwin: "⌘" + darwin: "⌘", }; const GuiVerboses = { linux: "Linux", win32: "Windows", - darwin: "Command" + darwin: "Command", }; const AltLabels = { linux: "ALT", win32: "ALT", - darwin: "⌥" + darwin: "⌥", }; const AltVerboses = { linux: "Alt", win32: "Alt", - darwin: "Option" + darwin: "Option", }; const guiLabel = GuiLabels[process.platform] || "Gui"; @@ -54,63 +54,63 @@ const ModifiersTable = { labels: { top: "LEFT", primary: "CTRL", - verbose: "Left Control" - } + verbose: "Left Control", + }, }, { code: 225, labels: { top: "LEFT", primary: "SHIFT", - verbose: "Left Shift" - } + verbose: "Left Shift", + }, }, { code: 226, labels: { - primary: "LEFT " + AltLabel, - verbose: "Left " + AltVerbose - } + primary: `LEFT ${AltLabel}`, + verbose: `Left ${AltVerbose}`, + }, }, { code: 227, labels: { - primary: "LEFT " + guiLabel, - verbose: "Left " + guiVerbose - } + primary: `LEFT ${guiLabel}`, + verbose: `Left ${guiVerbose}`, + }, }, { code: 228, labels: { top: "RIGHT", primary: "CTRL", - verbose: "Right Control" - } + verbose: "Right Control", + }, }, { code: 229, labels: { top: "RIGHT", primary: "SHIFT", - verbose: "Right Shift" - } + verbose: "Right Shift", + }, }, { code: 230, labels: { top: "", - primary: "RIGHT " + AltLabel, - verbose: "AltGr" - } + primary: `RIGHT ${AltLabel}`, + verbose: "AltGr", + }, }, { code: 231, labels: { - primary: "RIGHT " + guiLabel, - verbose: "Right " + guiVerbose - } - } - ] + primary: `RIGHT ${guiLabel}`, + verbose: `Right ${guiVerbose}`, + }, + }, + ], }; const HyperMehTable = { @@ -119,16 +119,16 @@ const HyperMehTable = { { code: 2530, labels: { - primary: "Meh" - } + primary: "Meh", + }, }, { code: 3043, labels: { - primary: "Hyper" - } - } - ] + primary: "Hyper", + }, + }, + ], }; const ModifiedModifiersTables = [ @@ -171,7 +171,7 @@ const ModifiedModifiersTables = [ withModifiers(ModifiersTable, "Alt + AltGr + Shift + Os +", "A+AGr+S+O+", 7680), // All - withModifiers(ModifiersTable, "Hyper + AltGr +", "H+AGr+", 7936) + withModifiers(ModifiersTable, "Hyper + AltGr +", "H+AGr+", 7936), ]; export { ModifiersTable as default, ModifiedModifiersTables, HyperMehTable }; diff --git a/src/api/keymap/db/mousecontrols.js b/src/api/keymap/db/mousecontrols.js index 52e86669f..4344ca60d 100644 --- a/src/api/keymap/db/mousecontrols.js +++ b/src/api/keymap/db/mousecontrols.js @@ -22,31 +22,31 @@ const MouseMovementTable = { code: 20481, labels: { top: "Mouse", - primary: "UP" - } + primary: "UP", + }, }, { code: 20482, labels: { top: "Mouse", - primary: "DOWN" - } + primary: "DOWN", + }, }, { code: 20484, labels: { top: "Mouse", - primary: "LEFT" - } + primary: "LEFT", + }, }, { code: 20488, labels: { top: "Mouse", - primary: "RIGHT" - } - } - ] + primary: "RIGHT", + }, + }, + ], }; const MouseWheelTable = { @@ -56,31 +56,31 @@ const MouseWheelTable = { code: 20497, labels: { top: "M.Wheel", - primary: "UP" - } + primary: "UP", + }, }, { code: 20498, labels: { top: "M.Wheel", - primary: "DOWN" - } + primary: "DOWN", + }, }, { code: 20500, labels: { top: "M.Wheel", - primary: "LEFT" - } + primary: "LEFT", + }, }, { code: 20504, labels: { top: "M.Wheel", - primary: "RIGHT" - } - } - ] + primary: "RIGHT", + }, + }, + ], }; const MouseButtonTable = { @@ -90,38 +90,38 @@ const MouseButtonTable = { code: 20545, labels: { top: "M.Btn", - primary: "LEFT" - } + primary: "LEFT", + }, }, { code: 20546, labels: { top: "M.Btn", - primary: "RIGHT" - } + primary: "RIGHT", + }, }, { code: 20548, labels: { top: "M.Btn", - primary: "MIDDLE" - } + primary: "MIDDLE", + }, }, { code: 20552, labels: { top: "M.Btn", - primary: "BACK" - } + primary: "BACK", + }, }, { code: 20560, labels: { top: "M.Btn", - primary: "FORW." - } - } - ] + primary: "FORW.", + }, + }, + ], }; const MouseWarpTable = { @@ -131,42 +131,42 @@ const MouseWarpTable = { code: 20576, labels: { top: "M.Warp", - primary: "END" - } + primary: "END", + }, }, { code: 20517, labels: { top: "M.Warp", primary: "NW", - verbose: "North-West" - } + verbose: "North-West", + }, }, { code: 20518, labels: { top: "M.Warp", primary: "SW", - verbose: "South-West" - } + verbose: "South-West", + }, }, { code: 20521, labels: { top: "M.Warp", primary: "NE", - verbose: "North-East" - } + verbose: "North-East", + }, }, { code: 20522, labels: { top: "M.Warp", primary: "SE", - verbose: "South-East" - } - } - ] + verbose: "South-East", + }, + }, + ], }; export { MouseMovementTable, MouseWheelTable, MouseButtonTable, MouseWarpTable }; diff --git a/src/api/keymap/db/navigation.js b/src/api/keymap/db/navigation.js index bed8d5312..196861deb 100644 --- a/src/api/keymap/db/navigation.js +++ b/src/api/keymap/db/navigation.js @@ -24,59 +24,59 @@ const NavigationTable = { code: 75, labels: { primary: "PAGE UP", - verbose: "Page Up" - } + verbose: "Page Up", + }, }, { code: 78, labels: { primary: "PAGE DOWN", - verbose: "Page Down" - } + verbose: "Page Down", + }, }, { code: 74, labels: { - primary: "HOME" - } + primary: "HOME", + }, }, { code: 77, labels: { - primary: "END" - } + primary: "END", + }, }, { code: 80, labels: { - primary: "←" - } + primary: "←", + }, }, { code: 81, labels: { - primary: "↓" - } + primary: "↓", + }, }, { code: 82, labels: { - primary: "↑" - } + primary: "↑", + }, }, { code: 79, labels: { - primary: "→" - } + primary: "→", + }, }, { code: 101, labels: { - primary: "MENU" - } - } - ] + primary: "MENU", + }, + }, + ], }; const ModifiedNavigationTables = [ @@ -119,7 +119,7 @@ const ModifiedNavigationTables = [ withModifiers(NavigationTable, "Alt + AltGr + Shift + Os +", "A+AGr+S+O+", 7680), // All - withModifiers(NavigationTable, "Hyper + AltGr +", "H+AGr+", 7936) + withModifiers(NavigationTable, "Hyper + AltGr +", "H+AGr+", 7936), ]; export { NavigationTable as default, ModifiedNavigationTables }; diff --git a/src/api/keymap/db/numpad.js b/src/api/keymap/db/numpad.js index de63df13c..1a2e0f844 100644 --- a/src/api/keymap/db/numpad.js +++ b/src/api/keymap/db/numpad.js @@ -24,122 +24,122 @@ const NumpadTable = { code: 89, labels: { top: "Num", - primary: "1" - } + primary: "1", + }, }, { code: 90, labels: { top: "Num", - primary: "2" - } + primary: "2", + }, }, { code: 91, labels: { top: "Num", - primary: "3" - } + primary: "3", + }, }, { code: 92, labels: { top: "Num", - primary: "4" - } + primary: "4", + }, }, { code: 93, labels: { top: "Num", - primary: "5" - } + primary: "5", + }, }, { code: 94, labels: { top: "Num", - primary: "6" - } + primary: "6", + }, }, { code: 95, labels: { top: "Num", - primary: "7" - } + primary: "7", + }, }, { code: 96, labels: { top: "Num", - primary: "8" - } + primary: "8", + }, }, { code: 97, labels: { top: "Num", - primary: "9" - } + primary: "9", + }, }, { code: 98, labels: { top: "Num", - primary: "0" - } + primary: "0", + }, }, { code: 99, labels: { top: "Num", - primary: "." - } + primary: ".", + }, }, { code: 85, labels: { top: "Num", - primary: "*" - } + primary: "*", + }, }, { code: 86, labels: { top: "Num", - primary: "-" - } + primary: "-", + }, }, { code: 87, labels: { top: "Num", - primary: "+" - } + primary: "+", + }, }, { code: 88, labels: { top: "Num", - primary: "Enter" - } + primary: "Enter", + }, }, { code: 83, labels: { primary: "NUMLOCK", - verbose: "Num Lock" - } + verbose: "Num Lock", + }, }, { code: 84, labels: { top: "Num", - primary: "/" - } - } - ] + primary: "/", + }, + }, + ], }; const ModifiedNumpadTables = [ @@ -182,7 +182,7 @@ const ModifiedNumpadTables = [ withModifiers(NumpadTable, "Alt + AltGr + Shift + Os +", "A+AGr+S+O+", 7680), // All - withModifiers(NumpadTable, "Hyper + AltGr +", "H+AGr+", 7936) + withModifiers(NumpadTable, "Hyper + AltGr +", "H+AGr+", 7936), ]; export { NumpadTable as default, ModifiedNumpadTables }; diff --git a/src/api/keymap/db/oneshot.js b/src/api/keymap/db/oneshot.js index 57bdbe3a7..6ec65f31a 100644 --- a/src/api/keymap/db/oneshot.js +++ b/src/api/keymap/db/oneshot.js @@ -18,7 +18,7 @@ const GuiLabels = { linux: "Linux", win32: "Win", - darwin: "Cmd" + darwin: "Cmd", }; const guiLabel = GuiLabels[process.platform] || "Gui"; @@ -31,66 +31,66 @@ const OneShotModifierTable = { labels: { top: "OSM", primary: "LEFT CONTROL", - verbose: "Left Control" - } + verbose: "Left Control", + }, }, { code: 49154, labels: { top: "OSM", primary: "LEFT SHIFT", - verbose: "Left Shift" - } + verbose: "Left Shift", + }, }, { code: 49155, labels: { top: "OSM", primary: "LEFT ALT", - verbose: "Left Alt" - } + verbose: "Left Alt", + }, }, { code: 49156, labels: { top: "OSM", - primary: "LEFT " + guiLabel.toUpperCase(), - verbose: "Left " + guiLabel - } + primary: `LEFT ${guiLabel.toUpperCase()}`, + verbose: `Left ${guiLabel}`, + }, }, { code: 49157, labels: { top: "OSM", primary: "RIGHT CTRL", - verbose: "Right Control" - } + verbose: "Right Control", + }, }, { code: 49158, labels: { top: "OSM", primary: "RIGHT SHIFT", - verbose: "Right Shift" - } + verbose: "Right Shift", + }, }, { code: 49159, labels: { top: "OSM", primary: "RIGHT ALT", - verbose: "AltGr" - } + verbose: "AltGr", + }, }, { code: 49160, labels: { top: "OSM", - primary: "RIGHT " + guiLabel.toUpperCase(), - verbose: "Right " + guiLabel - } - } - ] + primary: `RIGHT ${guiLabel.toUpperCase()}`, + verbose: `Right ${guiLabel}`, + }, + }, + ], }; const OneShotLayerTable = { @@ -100,59 +100,59 @@ const OneShotLayerTable = { code: 49161, labels: { top: "OSL", - primary: "1" - } + primary: "1", + }, }, { code: 49162, labels: { top: "OSL", - primary: "2" - } + primary: "2", + }, }, { code: 49163, labels: { top: "OSL", - primary: "3" - } + primary: "3", + }, }, { code: 49164, labels: { top: "OSL", - primary: "4" - } + primary: "4", + }, }, { code: 49165, labels: { top: "OSL", - primary: "5" - } + primary: "5", + }, }, { code: 49166, labels: { top: "OSL", - primary: "6" - } + primary: "6", + }, }, { code: 49167, labels: { top: "OSL", - primary: "7" - } + primary: "7", + }, }, { code: 49168, labels: { top: "OSL", - primary: "8" - } - } - ] + primary: "8", + }, + }, + ], }; export { OneShotModifierTable, OneShotLayerTable }; diff --git a/src/api/keymap/db/punctuation.js b/src/api/keymap/db/punctuation.js index 2c62257fa..d5792fb67 100644 --- a/src/api/keymap/db/punctuation.js +++ b/src/api/keymap/db/punctuation.js @@ -23,84 +23,84 @@ const PunctuationTable = { { code: 45, labels: { - primary: "-" - } + primary: "-", + }, }, { code: 46, labels: { - primary: "=" - } + primary: "=", + }, }, { code: 47, labels: { - primary: "[" - } + primary: "[", + }, }, { code: 48, labels: { - primary: "]" - } + primary: "]", + }, }, { code: 49, labels: { - primary: "\\" - } + primary: "\\", + }, }, { code: 51, labels: { - primary: ";" - } + primary: ";", + }, }, { code: 52, labels: { - primary: "'" - } + primary: "'", + }, }, { code: 53, labels: { - primary: "`" - } + primary: "`", + }, }, { code: 54, labels: { - primary: "," - } + primary: ",", + }, }, { code: 55, labels: { - primary: "." - } + primary: ".", + }, }, { code: 56, labels: { - primary: "/" - } + primary: "/", + }, }, { code: 57, labels: { primary: "⇪", - verbose: "Caps Lock" - } + verbose: "Caps Lock", + }, }, { code: 100, labels: { primary: "<>", - verbose: "ISO <>" - } - } - ] + verbose: "ISO <>", + }, + }, + ], }; const ShiftedPunctuationTable = { @@ -109,77 +109,77 @@ const ShiftedPunctuationTable = { { code: 2093, labels: { - primary: "_" - } + primary: "_", + }, }, { code: 2094, labels: { - primary: "+" - } + primary: "+", + }, }, { code: 2095, labels: { - primary: "{" - } + primary: "{", + }, }, { code: 2096, labels: { - primary: "}" - } + primary: "}", + }, }, { code: 2097, labels: { - primary: "|" - } + primary: "|", + }, }, { code: 2099, labels: { - primary: ":" - } + primary: ":", + }, }, { code: 2100, labels: { - primary: '"' - } + primary: '"', + }, }, { code: 2101, labels: { - primary: "~" - } + primary: "~", + }, }, { code: 2102, labels: { - primary: "<" - } + primary: "<", + }, }, { code: 2103, labels: { - primary: ">" - } + primary: ">", + }, }, { code: 2104, labels: { - primary: "?" - } + primary: "?", + }, }, { code: 2148, labels: { primary: "Alt. |", - verbose: "Non-US |" - } - } - ] + verbose: "Non-US |", + }, + }, + ], }; const ModifiedPunctuationTables = [ @@ -222,7 +222,7 @@ const ModifiedPunctuationTables = [ withModifiers(PunctuationTable, "Alt + AltGr + Shift + Os +", "A+AGr+S+O+", 7680), // All - withModifiers(PunctuationTable, "Hyper + AltGr +", "H+AGr+", 7936) + withModifiers(PunctuationTable, "Hyper + AltGr +", "H+AGr+", 7936), ]; export { PunctuationTable as default, ModifiedPunctuationTables }; diff --git a/src/api/keymap/db/spacecadet.js b/src/api/keymap/db/spacecadet.js index 2f021b615..2e7113698 100644 --- a/src/api/keymap/db/spacecadet.js +++ b/src/api/keymap/db/spacecadet.js @@ -22,17 +22,17 @@ const SpaceCadetTable = { code: 53591, labels: { top: "SCadet", - primary: "ENABLE" - } + primary: "ENABLE", + }, }, { code: 53592, labels: { top: "SCadet", - primary: "DISABLE" - } - } - ] + primary: "DISABLE", + }, + }, + ], }; export default SpaceCadetTable; diff --git a/src/api/keymap/db/spacing.js b/src/api/keymap/db/spacing.js index cffe1a6d3..16f3828b3 100644 --- a/src/api/keymap/db/spacing.js +++ b/src/api/keymap/db/spacing.js @@ -23,47 +23,47 @@ const SpacingTable = { { code: 44, labels: { - primary: "SPACE" - } + primary: "SPACE", + }, }, { code: 40, labels: { - primary: "ENTER" - } + primary: "ENTER", + }, }, { code: 43, labels: { - primary: "TAB" - } + primary: "TAB", + }, }, { code: 41, labels: { - primary: "ESC" - } + primary: "ESC", + }, }, { code: 42, labels: { primary: "BACKSPACE", - verbose: "Backspace" - } + verbose: "Backspace", + }, }, { code: 76, labels: { - primary: "DEL" - } + primary: "DEL", + }, }, { code: 73, labels: { - primary: "INSERT" - } - } - ] + primary: "INSERT", + }, + }, + ], }; const ModifiedSpacingTables = [ @@ -106,7 +106,7 @@ const ModifiedSpacingTables = [ withModifiers(SpacingTable, "Alt + AltGr + Shift + Os +", "A+AGr+S+O+", 7680), // All - withModifiers(SpacingTable, "Hyper + AltGr +", "H+AGr+", 7936) + withModifiers(SpacingTable, "Hyper + AltGr +", "H+AGr+", 7936), ]; export { SpacingTable as default, ModifiedSpacingTables }; diff --git a/src/api/keymap/db/steno.js b/src/api/keymap/db/steno.js index cff9f842c..dc12e42e4 100644 --- a/src/api/keymap/db/steno.js +++ b/src/api/keymap/db/steno.js @@ -22,297 +22,297 @@ const StenoTable = { code: 53549, labels: { top: "Steno", - primary: "FN" - } + primary: "FN", + }, }, { code: 53550, labels: { top: "Steno", - primary: "N1" - } + primary: "N1", + }, }, { code: 53551, labels: { top: "Steno", - primary: "N2" - } + primary: "N2", + }, }, { code: 53552, labels: { top: "Steno", - primary: "N3" - } + primary: "N3", + }, }, { code: 53553, labels: { top: "Steno", - primary: "N4" - } + primary: "N4", + }, }, { code: 53554, labels: { top: "Steno", - primary: "N5" - } + primary: "N5", + }, }, { code: 53555, labels: { top: "Steno", - primary: "N6" - } + primary: "N6", + }, }, { code: 53556, labels: { top: "Steno", - primary: "S1" - } + primary: "S1", + }, }, { code: 53557, labels: { top: "Steno", - primary: "S2" - } + primary: "S2", + }, }, { code: 53558, labels: { top: "Steno", - primary: "TL" - } + primary: "TL", + }, }, { code: 53559, labels: { top: "Steno", - primary: "KL" - } + primary: "KL", + }, }, { code: 53560, labels: { top: "Steno", - primary: "PL" - } + primary: "PL", + }, }, { code: 53561, labels: { top: "Steno", - primary: "WL" - } + primary: "WL", + }, }, { code: 53562, labels: { top: "Steno", - primary: "HL" - } + primary: "HL", + }, }, { code: 53563, labels: { top: "Steno", - primary: "RL" - } + primary: "RL", + }, }, { code: 53564, labels: { top: "Steno", - primary: "A" - } + primary: "A", + }, }, { code: 53565, labels: { top: "Steno", - primary: "O" - } + primary: "O", + }, }, { code: 53566, labels: { top: "Steno", - primary: "ST1" - } + primary: "ST1", + }, }, { code: 53567, labels: { top: "Steno", - primary: "ST2" - } + primary: "ST2", + }, }, { code: 53568, labels: { top: "Steno", - primary: "RE1" - } + primary: "RE1", + }, }, { code: 53569, labels: { top: "Steno", - primary: "RE2" - } + primary: "RE2", + }, }, { code: 53570, labels: { top: "Steno", - primary: "PWR" - } + primary: "PWR", + }, }, { code: 53571, labels: { top: "Steno", - primary: "ST3" - } + primary: "ST3", + }, }, { code: 53572, labels: { top: "Steno", - primary: "ST4" - } + primary: "ST4", + }, }, { code: 53573, labels: { top: "Steno", - primary: "E" - } + primary: "E", + }, }, { code: 53574, labels: { top: "Steno", - primary: "U" - } + primary: "U", + }, }, { code: 53575, labels: { top: "Steno", - primary: "FR" - } + primary: "FR", + }, }, { code: 53576, labels: { top: "Steno", - primary: "RR" - } + primary: "RR", + }, }, { code: 53577, labels: { top: "Steno", - primary: "PR" - } + primary: "PR", + }, }, { code: 53578, labels: { top: "Steno", - primary: "BR" - } + primary: "BR", + }, }, { code: 53579, labels: { top: "Steno", - primary: "LR" - } + primary: "LR", + }, }, { code: 53580, labels: { top: "Steno", - primary: "GR" - } + primary: "GR", + }, }, { code: 53581, labels: { top: "Steno", - primary: "TR" - } + primary: "TR", + }, }, { code: 53582, labels: { top: "Steno", - primary: "SR" - } + primary: "SR", + }, }, { code: 53583, labels: { top: "Steno", - primary: "DR" - } + primary: "DR", + }, }, { code: 53584, labels: { top: "Steno", - primary: "N7" - } + primary: "N7", + }, }, { code: 53585, labels: { top: "Steno", - primary: "N8" - } + primary: "N8", + }, }, { code: 53586, labels: { top: "Steno", - primary: "N9" - } + primary: "N9", + }, }, { code: 53587, labels: { top: "Steno", - primary: "NA" - } + primary: "NA", + }, }, { code: 53588, labels: { top: "Steno", - primary: "NB" - } + primary: "NB", + }, }, { code: 53589, labels: { top: "Steno", - primary: "NC" - } + primary: "NC", + }, }, { code: 53590, labels: { top: "Steno", - primary: "ZR" - } - } - ] + primary: "ZR", + }, + }, + ], }; export default StenoTable; diff --git a/src/api/keymap/db/superkeys.js b/src/api/keymap/db/superkeys.js index 7e5e3d89e..4f8bf9aa1 100644 --- a/src/api/keymap/db/superkeys.js +++ b/src/api/keymap/db/superkeys.js @@ -17,8 +17,8 @@ const superkey = index => ({ code: 53980 + index, labels: { primary: (index + 1).toString(), - top: "SUPER" - } + top: "SUPER", + }, }); const superkeys = Array(128) @@ -27,7 +27,7 @@ const superkeys = Array(128) const SuperKeyTable = { groupName: "SuperKeys", - keys: superkeys + keys: superkeys, }; export default SuperKeyTable; diff --git a/src/api/keymap/db/tapdance.js b/src/api/keymap/db/tapdance.js index ca6fdf7cf..c5a5a2403 100644 --- a/src/api/keymap/db/tapdance.js +++ b/src/api/keymap/db/tapdance.js @@ -17,8 +17,8 @@ const tapdance = index => ({ code: 53267 + index, labels: { primary: index.toString(), - top: "TAPD" - } + top: "TAPD", + }, }); const tapdances = Array(64) @@ -27,7 +27,7 @@ const tapdances = Array(64) const TapDanceTable = { groupName: "TapDance", - keys: tapdances + keys: tapdances, }; export default TapDanceTable; diff --git a/src/api/keymap/db/utils.js b/src/api/keymap/db/utils.js index a2ebd1cd9..1b6add582 100644 --- a/src/api/keymap/db/utils.js +++ b/src/api/keymap/db/utils.js @@ -17,16 +17,14 @@ function withModifiers(table, groupName, top, base) { return { - groupName: groupName, - keys: table.keys.map(key => { - return { - code: key.code + base, - labels: { - top: top, - primary: key.labels.primary - } - }; - }) + groupName, + keys: table.keys.map(key => ({ + code: key.code + base, + labels: { + top, + primary: key.labels.primary, + }, + })), }; } diff --git a/src/api/keymap/db/wireless.js b/src/api/keymap/db/wireless.js new file mode 100644 index 000000000..43921cbd8 --- /dev/null +++ b/src/api/keymap/db/wireless.js @@ -0,0 +1,70 @@ +/* bazecor-keymap -- Bazecor keymap library + * Copyright (C) 2023 DygmaLab SE + * + * This program is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free Software + * Foundation, version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +import { BatteryCodes } from "../../../hw/battery"; +import { RFCodes } from "../../../hw/rf"; +import { BluetoothCodes } from "../../../hw/bluetooth"; +import { EnergyCodes } from "../../../hw/energy"; + +const Battery = { + groupName: "Battery", + keys: [ + { + code: BatteryCodes.STATUS, + labels: { + top: "BATT.", + primary: "LEVEL", + }, + }, + ], +}; +const Bluetooth = { + groupName: "Bluetooth", + keys: [ + { + code: BluetoothCodes.PAIRING, + labels: { + top: "BLUET.", + primary: "PAIR.", + }, + }, + ], +}; +const Energy = { + groupName: "Energy", + keys: [ + { + code: EnergyCodes.STATUS, + labels: { + top: "ENERGY", + primary: "STATUS", + }, + }, + ], +}; +const RF = { + groupName: "RF", + keys: [ + { + code: RFCodes.STATUS, + labels: { + top: "RF", + primary: "STATUS", + }, + }, + ], +}; + +export { Battery, Bluetooth, Energy, RF }; diff --git a/src/api/keymap/languages/danish/danish.js b/src/api/keymap/languages/danish/danish.js index 262e19d89..13617c3ba 100644 --- a/src/api/keymap/languages/danish/danish.js +++ b/src/api/keymap/languages/danish/danish.js @@ -24,24 +24,24 @@ const danishLetters = [ { code: 47, labels: { - primary: "Å" + primary: "Å", }, - newGroupName: "Letters" + newGroupName: "Letters", }, { code: 51, labels: { primary: "Æ" }, - newGroupName: "Letters" + newGroupName: "Letters", }, { code: 52, labels: { primary: "Ø" }, - newGroupName: "Letters" - } + newGroupName: "Letters", + }, ]; const danishModifierKeys = [ @@ -54,8 +54,8 @@ const danishModifierKeys = [ { code: 45, labels: { - primary: "+" - } + primary: "+", + }, }, { code: 46, @@ -66,27 +66,27 @@ const danishModifierKeys = [ { code: 48, labels: { - primary: "¨" - } + primary: "¨", + }, }, { code: 49, labels: { - primary: "'" - } + primary: "'", + }, }, { code: 56, labels: { - primary: "-" - } + primary: "-", + }, }, { code: 100, labels: { - primary: "<" - } - } + primary: "<", + }, + }, ]; const altCtrlDanish = { @@ -95,50 +95,50 @@ const altCtrlDanish = { { code: 799, labels: { - primary: "@" - } + primary: "@", + }, }, { code: 800, labels: { - primary: "£" - } + primary: "£", + }, }, { code: 801, labels: { - primary: "$" - } + primary: "$", + }, }, { code: 802, labels: { - primary: "€" - } + primary: "€", + }, }, { code: 804, labels: { - primary: "{" - } + primary: "{", + }, }, { code: 805, labels: { - primary: "[" - } + primary: "[", + }, }, { code: 806, labels: { - primary: "]" - } + primary: "]", + }, }, { code: 807, labels: { - primary: "}" - } + primary: "}", + }, }, { code: 814, @@ -149,14 +149,14 @@ const altCtrlDanish = { { code: 776, labels: { - primary: "€" - } + primary: "€", + }, }, { code: 816, labels: { - primary: "~" - } + primary: "~", + }, }, { code: 784, @@ -179,50 +179,50 @@ const altGRDanish = { { code: 1055, labels: { - primary: "@" - } + primary: "@", + }, }, { code: 1056, labels: { - primary: "£" - } + primary: "£", + }, }, { code: 1057, labels: { - primary: "$" - } + primary: "$", + }, }, { code: 1058, labels: { - primary: "€" - } + primary: "€", + }, }, { code: 1060, labels: { - primary: "{" - } + primary: "{", + }, }, { code: 1061, labels: { - primary: "[" - } + primary: "[", + }, }, { code: 1062, labels: { - primary: "]" - } + primary: "]", + }, }, { code: 1063, labels: { - primary: "}" - } + primary: "}", + }, }, { code: 1070, @@ -233,14 +233,14 @@ const altGRDanish = { { code: 1032, labels: { - primary: "€" - } + primary: "€", + }, }, { code: 1072, labels: { - primary: "~" - } + primary: "~", + }, }, { code: 1040, @@ -263,101 +263,101 @@ const shiftModifierDanish = { { code: 2101, labels: { - primary: "§" - } + primary: "§", + }, }, { code: 2079, labels: { - primary: '"' - } + primary: '"', + }, }, { code: 2081, labels: { - primary: "¤" - } + primary: "¤", + }, }, { code: 2083, labels: { - primary: "&" - } + primary: "&", + }, }, { code: 2084, labels: { - primary: "/" - } + primary: "/", + }, }, { code: 2085, labels: { - primary: "(" - } + primary: "(", + }, }, { code: 2086, labels: { - primary: ")" - } + primary: ")", + }, }, { code: 2087, labels: { - primary: "=" - } + primary: "=", + }, }, { code: 2093, labels: { - primary: "?" - } + primary: "?", + }, }, { code: 2094, labels: { - primary: "`" - } + primary: "`", + }, }, { code: 2096, labels: { - primary: "^" - } + primary: "^", + }, }, { code: 2097, labels: { - primary: "*" - } + primary: "*", + }, }, { code: 2102, labels: { - primary: ";" - } + primary: ";", + }, }, { code: 2103, labels: { - primary: ":" - } + primary: ":", + }, }, { code: 2104, labels: { - primary: "_" - } + primary: "_", + }, }, { code: 2148, labels: { - primary: ">" - } - } - ] + primary: ">", + }, + }, + ], }; const danish = danishLetters.concat(danishModifierKeys); @@ -487,7 +487,7 @@ const danishModifiedTables = [ DualUseLayer5Tables, DualUseLayer6Tables, DualUseLayer7Tables, - DualUseLayer8Tables + DualUseLayer8Tables, ]; export { danish as default, danishModifiedTables }; diff --git a/src/api/keymap/languages/eurkey/eurkey.js b/src/api/keymap/languages/eurkey/eurkey.js new file mode 100644 index 000000000..87d8f09c1 --- /dev/null +++ b/src/api/keymap/languages/eurkey/eurkey.js @@ -0,0 +1,876 @@ +/* Bazecor keymap library + * Copyright (C) 2019 DygmaLab SE + * + * This program is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free Software + * Foundation, version 3. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . + */ + +/** + * Is an Array of objects of values that have to be modified. + */ + +import { withModifiers } from "../../db/utils"; +import LetterTable from "../../db/letters"; + +const Letters = [ + { + code: 4, + labels: { + primary: "a", + }, + }, + { + code: 5, + labels: { + primary: "b", + }, + }, + { + code: 6, + labels: { + primary: "c", + }, + }, + { + code: 7, + labels: { + primary: "d", + }, + }, + { + code: 8, + labels: { + primary: "e", + }, + }, + { + code: 9, + labels: { + primary: "f", + }, + }, + { + code: 10, + labels: { + primary: "g", + }, + }, + { + code: 11, + labels: { + primary: "h", + }, + }, + { + code: 12, + labels: { + primary: "i", + }, + }, + { + code: 13, + labels: { + primary: "j", + }, + }, + { + code: 14, + labels: { + primary: "k", + }, + }, + { + code: 15, + labels: { + primary: "l", + }, + }, + { + code: 16, + labels: { + primary: "m", + }, + }, + { + code: 17, + labels: { + primary: "n", + }, + }, + { + code: 18, + labels: { + primary: "o", + }, + }, + { + code: 19, + labels: { + primary: "p", + }, + }, + { + code: 20, + labels: { + primary: "q", + }, + }, + { + code: 21, + labels: { + primary: "r", + }, + }, + { + code: 22, + labels: { + primary: "s", + }, + }, + { + code: 23, + labels: { + primary: "t", + }, + }, + { + code: 24, + labels: { + primary: "u", + }, + }, + { + code: 25, + labels: { + primary: "v", + }, + }, + { + code: 26, + labels: { + primary: "w", + }, + }, + { + code: 27, + labels: { + primary: "x", + }, + }, + { + code: 28, + labels: { + primary: "y", + }, + }, + { + code: 29, + labels: { + primary: "z", + }, + }, +]; + +const AGrLetters = [ + { + code: 4, + labels: { + primary: "ä", + }, + }, + { + code: 5, + labels: { + primary: "í", + }, + }, + { + code: 6, + labels: { + primary: "ç", + }, + }, + { + code: 7, + labels: { + primary: "đ", + }, + }, + { + code: 8, + labels: { + primary: "ë", + }, + }, + { + code: 9, + labels: { + primary: "è", + }, + }, + { + code: 10, + labels: { + primary: "é", + }, + }, + { + code: 11, + labels: { + primary: "ù", + }, + }, + { + code: 12, + labels: { + primary: "ï", + }, + }, + { + code: 13, + labels: { + primary: "ú", + }, + }, + { + code: 14, + labels: { + primary: "ij", + }, + }, + { + code: 15, + labels: { + primary: "ø", + }, + }, + { + code: 17, + labels: { + primary: "ñ", + }, + }, + { + code: 18, + labels: { + primary: "ö", + }, + }, + { + code: 19, + labels: { + primary: "œ", + }, + }, + { + code: 20, + labels: { + primary: "æ", + }, + }, + { + code: 21, + labels: { + primary: "ý", + }, + }, + { + code: 22, + labels: { + primary: "ß", + }, + }, + { + code: 23, + labels: { + primary: "þ", + }, + }, + { + code: 24, + labels: { + primary: "ü", + }, + }, + { + code: 25, + labels: { + primary: "ì", + }, + }, + { + code: 26, + labels: { + primary: "å", + }, + }, + { + code: 27, + labels: { + primary: "á", + }, + }, + { + code: 28, + labels: { + primary: "ÿ", + }, + }, + { + code: 29, + labels: { + primary: "à", + }, + }, +]; + +const AGrSLetters = [ + { + code: 4, + labels: { + primary: "Ä", + }, + }, + { + code: 5, + labels: { + primary: "Í", + }, + }, + { + code: 6, + labels: { + primary: "Ç", + }, + }, + { + code: 7, + labels: { + primary: "Đ", + }, + }, + { + code: 8, + labels: { + primary: "Ë", + }, + }, + { + code: 9, + labels: { + primary: "È", + }, + }, + { + code: 10, + labels: { + primary: "É", + }, + }, + { + code: 11, + labels: { + primary: "Ù", + }, + }, + { + code: 12, + labels: { + primary: "Ï", + }, + }, + { + code: 13, + labels: { + primary: "Ú", + }, + }, + { + code: 14, + labels: { + primary: "IJ", + }, + }, + { + code: 15, + labels: { + primary: "Ø", + }, + }, + { + code: 17, + labels: { + primary: "Ñ", + }, + }, + { + code: 18, + labels: { + primary: "Ö", + }, + }, + { + code: 19, + labels: { + primary: "Œ", + }, + }, + { + code: 20, + labels: { + primary: "Æ", + }, + }, + { + code: 21, + labels: { + primary: "Ý", + }, + }, + { + code: 22, + labels: { + primary: "ẞ", + }, + }, + { + code: 23, + labels: { + primary: "Þ", + }, + }, + { + code: 24, + labels: { + primary: "Ü", + }, + }, + { + code: 25, + labels: { + primary: "Ì", + }, + }, + { + code: 26, + labels: { + primary: "Å", + }, + }, + { + code: 27, + labels: { + primary: "Á", + }, + }, + { + code: 28, + labels: { + primary: "Ÿ", + }, + }, + { + code: 29, + labels: { + primary: "À", + }, + }, +]; + +const AGSymbols = [ + { + code: 53, + labels: { + primary: "`" + } + }, + { + code: 30, + labels: { + primary: "¡", + }, + }, + { + code: 31, + labels: { + primary: "ª", + }, + }, + { + code: 32, + labels: { + primary: "º", + }, + }, + { + code: 33, + labels: { + primary: "£", + }, + }, + { + code: 34, + labels: { + primary: "€", + }, + }, + { + code: 35, + labels: { + primary: "^", + }, + }, + { + code: 36, + labels: { + primary: "˚", + }, + }, + { + code: 37, + labels: { + primary: "„", + }, + }, + { + code: 38, + labels: { + primary: "“", + }, + }, + { + code: 39, + labels: { + primary: "”", + }, + }, + { + code: 45, + labels: { + primary: "✓" + } + }, + { + code: 46, + labels: { + primary: "×" + } + }, + { + code: 47, + labels: { + primary: "«" + } + }, + { + code: 48, + labels: { + primary: "»" + } + }, + { + code: 49, + labels: { + primary: "¬" + } + }, + { + code: 51, + labels: { + primary: "°" + } + }, + { + code: 52, + labels: { + primary: "´" + } + }, + { + code: 16, + labels: { + primary: "α", + }, + }, + { + code: 54, + labels: { + primary: "ò" + } + }, + { + code: 55, + labels: { + primary: "ó" + } + }, + { + code: 56, + labels: { + primary: "¿" + } + }, +]; + +const AGrSSymbols = [ + { + code: 53, + labels: { + primary: "~" + } + }, + { + code: 30, + labels: { + primary: "¹", + }, + }, + { + code: 31, + labels: { + primary: "²", + }, + }, + { + code: 32, + labels: { + primary: "³", + }, + }, + { + code: 33, + labels: { + primary: "¥", + }, + }, + { + code: 34, + labels: { + primary: "¢", + }, + }, + { + code: 35, + labels: { + primary: "ˇ", + }, + }, + { + code: 36, + labels: { + primary: "¯", + }, + }, + { + code: 37, + labels: { + primary: "‚", + }, + }, + { + code: 38, + labels: { + primary: "‘", + }, + }, + { + code: 39, + labels: { + primary: "’", + }, + }, + { + code: 45, + labels: { + primary: "✗" + } + }, + { + code: 46, + labels: { + primary: "÷" + } + }, + { + code: 47, + labels: { + primary: "‹" + } + }, + { + code: 48, + labels: { + primary: "›" + } + }, + { + code: 49, + labels: { + primary: "¦" + } + }, + { + code: 51, + labels: { + primary: "·" + } + }, + { + code: 52, + labels: { + primary: "¨" + } + }, + { + code: 16, + labels: { + primary: "√", + }, + }, + { + code: 54, + labels: { + primary: "Ò" + } + }, + { + code: 55, + labels: { + primary: "Ó" + } + }, + { + code: 56, + labels: { + primary: "…" + } + }, +]; + +const eurkey = Letters; + +const table = { keys: eurkey }; +const tableS = { keys: LetterTable.keys }; + +const tableAGr = { + groupName: "AltGr Eurkey", + keys: AGrLetters.concat(AGSymbols), +}; + +const tableAGrS = { + groupName: "AltGrShift Eurkey", + keys: AGrSLetters.concat(AGrSSymbols), +}; + +const eurkeyCtrlTable = withModifiers(table, "Control +", "C+", 256); +const eurkeyLAltTable = withModifiers(table, "Alt +", "A+", 512); +const eurkeyRAltTable = withModifiers(tableAGr, "AltGr +", "AGr+", 1024); +const eurkeyShiftTable = withModifiers(tableS, "Shift +", "S+", 2048); +const eurkeyGuiTable = withModifiers(table, "Os+", "O+", 4096); + +// Double + +const eurkeyCATable = withModifiers(tableAGr, "Control + Alt +", "C+A+", 768); +const eurkeyCAGrTable = withModifiers(tableAGr, "Control + AltGr +", "C+AGr+", 1280); +const eurkeyCSTable = withModifiers(tableS, "Control + Shift +", "C+S+", 2304); +const eurkeyCGTable = withModifiers(table, "Control + Os +", "C+O+", 4352); +const eurkeyAAGrTable = withModifiers(tableAGr, "Alt + AltGr +", "A+AGr+", 1536); +const eurkeyASTable = withModifiers(tableS, "Alt + Shift +", "A+S+", 2560); +const eurkeyAGTable = withModifiers(table, "Alt + Os +", "A+O+", 4608); +const eurkeyAGrSTable = withModifiers(tableAGrS, "AltGr + Shift +", "AGr+S+", 3072); +const eurkeyAGrGTable = withModifiers(tableAGr, "AltGr + Os +", "AGr+O+", 5120); +const eurkeySGTable = withModifiers(tableS, "Shift + Os +", "S+O+", 6144); + +// Triple + +const eurkeyCAAGTable = withModifiers(tableAGr, "Control + Alt + AltGr +", "C+A+AGr+", 1792); +const eurkeyCASTable = withModifiers(tableAGrS, "Meh +", "Meh+", 2816); +const eurkeyCAGTable = withModifiers(tableAGr, "Control + Alt + Os +", "C+A+O+", 4864); +const eurkeyCAGSTable = withModifiers(tableAGrS, "Control + AltGr + Shift +", "C+AGr+S+", 3328); +const eurkeyCAGGTable = withModifiers(tableAGr, "Control + AltGr + Os +", "C+AGr+O+", 5376); +const eurkeyCSGTable = withModifiers(tableS, "Control + Shift + Os +", "C+S+O+", 6400); +const eurkeyAAGSTable = withModifiers(tableAGrS, "Alt + AltGr + Shift +", "A+AGr+S+", 3584); +const eurkeyAAGGTable = withModifiers(tableAGr, "Alt + AltGr + Os +", "A+AGr+O+", 5632); +const eurkeyASGTable = withModifiers(tableS, "Alt + Shift + Os +", "A+S+O+", 6656); +const eurkeyAGSGTable = withModifiers(tableAGrS, "AltGr + Shift + Os +", "AGr+S+O+", 7168); + +// Quad + +const eurkeyCAAGrSTable = withModifiers(tableAGrS, "Meh + AltGr +", "M+AGr+", 3840); +const eurkeyCAAGrGTable = withModifiers(tableAGr, "Control + Alt + AltGr + Os +", "C+A+AGr+O+", 5888); +const eurkeyCAGrSGTable = withModifiers(tableAGrS, "Control + AltGr + Shift + Os +", "C+AGr+S+O+", 7424); +const eurkeyAAGrSGTable = withModifiers(tableAGrS, "Alt + AltGr + Shift + Os +", "A+AGr+S+O+", 7680); +const eurkeyAllModTable = withModifiers(tableAGrS, "Hyper + AltGr +", "H+AGr+", 7936); + +const DualUseCtrlTable = withModifiers(table, "Control /", "CTRL/", 49169); +const DualUseShiftTable = withModifiers(table, "Shift /", "SHIFT/", 49425); +const DualUseAltTable = withModifiers(table, "Alt /", "ALT/", 49681); +const DualUseGuiTable = withModifiers(table, "Os /", "OS/", 49937); +const DualUseAltGrTable = withModifiers(table, "AltGr /", "ALTGR/", 50705); +const DualUseLayer1Tables = withModifiers(table, "Layer #1 /", "L#1/", 51218); +const DualUseLayer2Tables = withModifiers(table, "Layer #2 /", "L#2/", 51474); +const DualUseLayer3Tables = withModifiers(table, "Layer #3 /", "L#3/", 51730); +const DualUseLayer4Tables = withModifiers(table, "Layer #4 /", "L#4/", 51986); +const DualUseLayer5Tables = withModifiers(table, "Layer #5 /", "L#5/", 52242); +const DualUseLayer6Tables = withModifiers(table, "Layer #6 /", "L#6/", 52498); +const DualUseLayer7Tables = withModifiers(table, "Layer #7 /", "L#7/", 52754); +const DualUseLayer8Tables = withModifiers(table, "Layer #8 /", "L#8/", 53010); + +const eurkeyModifiedTables = [ + eurkeyCtrlTable, + eurkeyLAltTable, + eurkeyRAltTable, + eurkeyShiftTable, + eurkeyGuiTable, + eurkeyCATable, + eurkeyCAGrTable, + eurkeyCSTable, + eurkeyCGTable, + eurkeyAAGrTable, + eurkeyASTable, + eurkeyAGTable, + eurkeyAGrSTable, + eurkeyAGrGTable, + eurkeySGTable, + eurkeyCAAGTable, + eurkeyCASTable, + eurkeyCAGTable, + eurkeyCAGSTable, + eurkeyCAGGTable, + eurkeyCSGTable, + eurkeyAAGSTable, + eurkeyAAGGTable, + eurkeyASGTable, + eurkeyAGSGTable, + eurkeyCAAGrSTable, + eurkeyCAAGrGTable, + withModifiers(tableAGrS, "Hyper +", "Hyper+", 6912), + eurkeyCAGrSGTable, + eurkeyAAGrSGTable, + eurkeyAllModTable, + DualUseCtrlTable, + DualUseShiftTable, + DualUseAltTable, + DualUseGuiTable, + DualUseAltGrTable, + DualUseLayer1Tables, + DualUseLayer2Tables, + DualUseLayer3Tables, + DualUseLayer4Tables, + DualUseLayer5Tables, + DualUseLayer6Tables, + DualUseLayer7Tables, + DualUseLayer8Tables +]; + +export { eurkey as default, eurkeyModifiedTables }; +// export default eurkey; diff --git a/src/api/keymap/languages/french/french.js b/src/api/keymap/languages/french/french.js index 02e048902..45b277803 100644 --- a/src/api/keymap/languages/french/french.js +++ b/src/api/keymap/languages/french/french.js @@ -23,177 +23,177 @@ const frenchLetters = [ { code: 20, labels: { - primary: "A" - } + primary: "A", + }, }, { code: 26, labels: { - primary: "Z" - } + primary: "Z", + }, }, { code: 4, labels: { - primary: "Q" - } + primary: "Q", + }, }, { code: 51, labels: { - primary: "M" + primary: "M", }, - newGroupName: "Letters" + newGroupName: "Letters", }, { code: 29, labels: { - primary: "W" - } + primary: "W", + }, }, { code: 53, labels: { - primary: "²" + primary: "²", }, - newGroupName: "Letters" - } + newGroupName: "Letters", + }, ]; const frenchModifierKeys = [ { code: 31, labels: { - primary: "é" + primary: "é", }, - newGroupName: "Letters" + newGroupName: "Letters", }, { code: 36, labels: { - primary: "è" + primary: "è", }, - newGroupName: "Letters" + newGroupName: "Letters", }, { code: 38, labels: { - primary: "ç" + primary: "ç", }, - newGroupName: "Letters" + newGroupName: "Letters", }, { code: 39, labels: { - primary: "à" + primary: "à", }, - newGroupName: "Letters" + newGroupName: "Letters", }, { code: 52, labels: { - primary: "ù" + primary: "ù", }, - newGroupName: "Letters" + newGroupName: "Letters", }, { code: 30, labels: { - primary: "&" + primary: "&", }, - newGroupName: "Punctuation" + newGroupName: "Punctuation", }, { code: 32, labels: { - primary: '"' + primary: '"', }, - newGroupName: "Punctuation" + newGroupName: "Punctuation", }, { code: 33, labels: { - primary: "'" + primary: "'", }, - newGroupName: "Punctuation" + newGroupName: "Punctuation", }, { code: 34, labels: { - primary: "(" + primary: "(", }, - newGroupName: "Punctuation" + newGroupName: "Punctuation", }, { code: 35, labels: { - primary: "-" + primary: "-", }, - newGroupName: "Punctuation" + newGroupName: "Punctuation", }, { code: 37, labels: { - primary: "_" + primary: "_", }, - newGroupName: "Punctuation" + newGroupName: "Punctuation", }, { code: 45, labels: { - primary: ")" - } + primary: ")", + }, }, { code: 47, labels: { - primary: "^" - } + primary: "^", + }, }, { code: 48, labels: { - primary: "$" - } + primary: "$", + }, }, { code: 49, labels: { - primary: "*" - } + primary: "*", + }, }, { code: 16, labels: { - primary: "," + primary: ",", }, - newGroupName: "Punctuation" + newGroupName: "Punctuation", }, { code: 54, labels: { - primary: ";" - } + primary: ";", + }, }, { code: 55, labels: { - primary: ":" - } + primary: ":", + }, }, { code: 56, labels: { - primary: "!" - } + primary: "!", + }, }, { code: 100, labels: { - primary: "<" - } - } + primary: "<", + }, + }, ]; const altCtrlFrench = { @@ -202,82 +202,82 @@ const altCtrlFrench = { { code: 799, labels: { - primary: "~" - } + primary: "~", + }, }, { code: 800, labels: { - primary: "#" - } + primary: "#", + }, }, { code: 801, labels: { - primary: "{" - } + primary: "{", + }, }, { code: 802, labels: { - primary: "[" - } + primary: "[", + }, }, { code: 803, labels: { - primary: "|" - } + primary: "|", + }, }, { code: 804, labels: { - primary: "`" - } + primary: "`", + }, }, { code: 805, labels: { - primary: "\\" - } + primary: "\\", + }, }, { code: 806, labels: { - primary: "^" - } + primary: "^", + }, }, { code: 807, labels: { - primary: "@" - } + primary: "@", + }, }, { code: 813, labels: { - primary: "]" - } + primary: "]", + }, }, { code: 814, labels: { - primary: "}" - } + primary: "}", + }, }, { code: 776, labels: { - primary: "€" - } + primary: "€", + }, }, { code: 816, labels: { - primary: "¤" - } - } - ] + primary: "¤", + }, + }, + ], }; const altGRFrench = { @@ -286,82 +286,82 @@ const altGRFrench = { { code: 1055, labels: { - primary: "~" - } + primary: "~", + }, }, { code: 1056, labels: { - primary: "#" - } + primary: "#", + }, }, { code: 1057, labels: { - primary: "{" - } + primary: "{", + }, }, { code: 1058, labels: { - primary: "[" - } + primary: "[", + }, }, { code: 1059, labels: { - primary: "|" - } + primary: "|", + }, }, { code: 1060, labels: { - primary: "`" - } + primary: "`", + }, }, { code: 1061, labels: { - primary: "\\" - } + primary: "\\", + }, }, { code: 1062, labels: { - primary: "^" - } + primary: "^", + }, }, { code: 1063, labels: { - primary: "@" - } + primary: "@", + }, }, { code: 1069, labels: { - primary: "]" - } + primary: "]", + }, }, { code: 1070, labels: { - primary: "}" - } + primary: "}", + }, }, { code: 1032, labels: { - primary: "€" - } + primary: "€", + }, }, { code: 1072, labels: { - primary: "¤" - } - } - ] + primary: "¤", + }, + }, + ], }; const shiftModifierFrench = { @@ -370,140 +370,140 @@ const shiftModifierFrench = { { code: 2078, labels: { - primary: "1" + primary: "1", }, - newGroupName: "Digits" + newGroupName: "Digits", }, { code: 2079, labels: { - primary: "2" + primary: "2", }, - newGroupName: "Digits" + newGroupName: "Digits", }, { code: 2080, labels: { - primary: "3" + primary: "3", }, - newGroupName: "Digits" + newGroupName: "Digits", }, { code: 2081, labels: { - primary: "4" + primary: "4", }, - newGroupName: "Digits" + newGroupName: "Digits", }, { code: 2082, labels: { - primary: "5" + primary: "5", }, - newGroupName: "Digits" + newGroupName: "Digits", }, { code: 2083, labels: { - primary: "6" + primary: "6", }, - newGroupName: "Digits" + newGroupName: "Digits", }, { code: 2084, labels: { - primary: "7" + primary: "7", }, - newGroupName: "Digits" + newGroupName: "Digits", }, { code: 2085, labels: { - primary: "8" + primary: "8", }, - newGroupName: "Digits" + newGroupName: "Digits", }, { code: 2086, labels: { - primary: "9" + primary: "9", }, - newGroupName: "Digits" + newGroupName: "Digits", }, { code: 2087, labels: { - primary: "0" + primary: "0", }, - newGroupName: "Digits" + newGroupName: "Digits", }, { code: 2093, labels: { - primary: "°" - } + primary: "°", + }, }, { code: 2095, labels: { - primary: "¨" - } + primary: "¨", + }, }, { code: 2096, labels: { - primary: "£" - } + primary: "£", + }, }, { code: 2097, labels: { - primary: "µ" - } + primary: "µ", + }, }, { code: 2099, labels: { - primary: "M" - } + primary: "M", + }, }, { code: 2100, labels: { - primary: "%" - } + primary: "%", + }, }, { code: 2064, labels: { - primary: "?" - } + primary: "?", + }, }, { code: 2102, labels: { - primary: "." - } + primary: ".", + }, }, { code: 2103, labels: { - primary: "/" - } + primary: "/", + }, }, { code: 2104, labels: { - primary: "§" - } + primary: "§", + }, }, { code: 2148, labels: { - primary: ">" - } - } - ] + primary: ">", + }, + }, + ], }; const french = frenchLetters.concat(frenchModifierKeys); @@ -633,7 +633,7 @@ const frenchModifiedTables = [ DualUseLayer5Tables, DualUseLayer6Tables, DualUseLayer7Tables, - DualUseLayer8Tables + DualUseLayer8Tables, ]; export { french as default, frenchModifiedTables }; diff --git a/src/api/keymap/languages/french/frenchBepo.js b/src/api/keymap/languages/french/frenchBepo.js new file mode 100644 index 000000000..fd0be045c --- /dev/null +++ b/src/api/keymap/languages/french/frenchBepo.js @@ -0,0 +1,1219 @@ +/* Bazecor keymap library + * Copyright (C) 2019 DygmaLab SE + * + * This program is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free Software + * Foundation, version 3. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . + */ + +/** + * Is an Array of objects of values that have to be modified. + */ +import { withModifiers } from "../../db/utils"; + +const OFFSET_CONTROL = 256; +const OFFSET_ALT = 512; +const OFFSET_CONTROL_ALT = 768; +const OFFSET_ALTGR = 1024; +const OFFSET_SHIFT = 2048; +const OFFSET_OS = 4096; +const OFFSET_SHIFT_ALTGR = 3072; + +const symbols = [ + { + code: 53, + labels: { + primary: "$", + }, + }, + { + code: 30, + labels: { + primary: '"', + }, + }, + { + code: 31, + labels: { + primary: "«", + }, + }, + { + code: 32, + labels: { + primary: "»", + }, + }, + { + code: 33, + labels: { + primary: "(", + }, + }, + { + code: 34, + labels: { + primary: ")", + }, + }, + { + code: 35, + labels: { + primary: "@", + }, + }, + { + code: 36, + labels: { + primary: "+", + }, + }, + { + code: 37, + labels: { + primary: "-", + }, + }, + { + code: 38, + labels: { + primary: "/", + }, + }, + { + code: 39, + labels: { + primary: "*", + }, + }, + { + code: 45, + labels: { + primary: "=", + }, + }, + { + code: 46, + labels: { + primary: "%", + }, + }, +]; + +const frenchLetters = [ + // First row + { + code: 20, + labels: { + primary: "b", + }, + }, + { + code: 26, + labels: { + primary: "é", + }, + }, + { + code: 8, + labels: { + primary: "p", + }, + }, + { + code: 21, + labels: { + primary: "o", + }, + }, + { + code: 23, + labels: { + primary: "è", + }, + }, + { + code: 28, + labels: { + primary: "^", + }, + newGroupName: "Punctuation", + }, + { + code: 24, + labels: { + primary: "v", + }, + }, + { + code: 12, + labels: { + primary: "d", + }, + }, + { + code: 18, + labels: { + primary: "l", + }, + }, + { + code: 19, + labels: { + primary: "j", + }, + }, + { + code: 47, + labels: { + primary: "z", + }, + newGroupName: "Letters", + }, + { + code: 48, + labels: { + primary: "w", + }, + newGroupName: "Letters", + }, + // Second row + { + code: 4, + labels: { + primary: "a", + }, + }, + { + code: 22, + labels: { + primary: "u", + }, + }, + { + code: 7, + labels: { + primary: "i", + }, + }, + { + code: 9, + labels: { + primary: "e", + }, + }, + { + code: 10, + labels: { + primary: ",", + }, + newGroupName: "Punctuation", + }, + { + code: 11, + labels: { + primary: "c", + }, + }, + { + code: 13, + labels: { + primary: "t", + }, + }, + { + code: 14, + labels: { + primary: "s", + }, + }, + { + code: 15, + labels: { + primary: "r", + }, + }, + { + code: 51, + labels: { + primary: "n", + }, + newGroupName: "Letters", + }, + { + code: 52, + labels: { + primary: "m", + }, + newGroupName: "Letters", + }, + { + code: 49, + labels: { + primary: "ç", + }, + newGroupName: "Letters", + }, + // Third row + { + code: 100, + labels: { + primary: "ê", + }, + newGroupName: "Letters", + }, + { + code: 29, + labels: { + primary: "à", + }, + }, + { + code: 27, + labels: { + primary: "y", + }, + }, + { + code: 6, + labels: { + primary: "x", + }, + }, + { + code: 25, + labels: { + primary: ".", + }, + newGroupName: "Punctuation", + }, + { + code: 5, + labels: { + primary: "k", + }, + }, + { + code: 17, + labels: { + primary: "’", + }, + newGroupName: "Punctuation", + }, + { + code: 16, + labels: { + primary: "q", + }, + }, + { + code: 54, + labels: { + primary: "g", + }, + newGroupName: "Letters", + }, + { + code: 55, + labels: { + primary: "h", + }, + newGroupName: "Letters", + }, + { + code: 56, + labels: { + primary: "f", + }, + newGroupName: "Letters", + }, +]; + +const altGRFrench = { + groupName: "AltCtrl French", + keys: [ + // Numbers row + AltGr + { + code: OFFSET_ALTGR + 53, + labels: { + primary: "–", + }, + }, + { + code: OFFSET_ALTGR + 30, + labels: { + primary: "—", + }, + }, + { + code: OFFSET_ALTGR + 31, + labels: { + primary: "<", + }, + }, + { + code: OFFSET_ALTGR + 32, + labels: { + primary: ">", + }, + }, + { + code: OFFSET_ALTGR + 33, + labels: { + primary: "[", + }, + }, + { + code: OFFSET_ALTGR + 34, + labels: { + primary: "]", + }, + }, + { + code: OFFSET_ALTGR + 35, + labels: { + primary: "^", + }, + }, + { + code: OFFSET_ALTGR + 36, + labels: { + primary: "±", + }, + }, + { + code: OFFSET_ALTGR + 37, + labels: { + primary: "−", + }, + }, + { + code: OFFSET_ALTGR + 38, + labels: { + primary: "÷", + }, + }, + { + code: OFFSET_ALTGR + 39, + labels: { + primary: "×", + }, + }, + { + code: OFFSET_ALTGR + 45, + labels: { + primary: "≠", + }, + }, + // First row + { + code: OFFSET_ALTGR + 20, + labels: { + primary: "|", + }, + }, + { + code: OFFSET_ALTGR + 26, + labels: { + primary: "´", + }, + }, + { + code: OFFSET_ALTGR + 8, + labels: { + primary: "&", + }, + }, + { + code: OFFSET_ALTGR + 21, + labels: { + primary: "œ", + }, + }, + { + code: OFFSET_ALTGR + 23, + labels: { + primary: "`", + }, + }, + { + code: OFFSET_ALTGR + 28, + labels: { + primary: "¡", + }, + }, + { + code: OFFSET_ALTGR + 24, + labels: { + primary: "ˇ", + }, + }, + { + code: OFFSET_ALTGR + 12, + labels: { + primary: "∞", + }, + }, + { + code: OFFSET_ALTGR + 18, + labels: { + primary: "/", + }, + }, + { + code: OFFSET_ALTGR + 19, + labels: { + primary: "☮", + }, + }, + { + code: OFFSET_ALTGR + 47, + labels: { + primary: "–", + }, + newGroupName: "Letters", + }, + { + code: OFFSET_ALTGR + 48, + labels: { + primary: "⚜", + }, + newGroupName: "Letters", + }, + // Second row + { + code: OFFSET_ALTGR + 4, + labels: { + primary: "æ", + }, + }, + { + code: OFFSET_ALTGR + 22, + labels: { + primary: "ù", + }, + }, + { + code: OFFSET_ALTGR + 7, + labels: { + primary: "¨", + }, + }, + { + code: OFFSET_ALTGR + 9, + labels: { + primary: "€", + }, + }, + { + code: OFFSET_ALTGR + 10, + labels: { + primary: "'", + }, + newGroupName: "Punctuation", + }, + { + code: OFFSET_ALTGR + 11, + labels: { + primary: "¸", + }, + }, + { + code: OFFSET_ALTGR + 13, + labels: { + primary: "ᵉ", + }, + }, + { + code: OFFSET_ALTGR + 14, + labels: { + primary: "ß", + }, + }, + { + code: OFFSET_ALTGR + 15, + labels: { + primary: "˘", + }, + }, + { + code: OFFSET_ALTGR + 51, + labels: { + primary: "~", + }, + newGroupName: "Letters", + }, + { + code: OFFSET_ALTGR + 52, + labels: { + primary: "¯", + }, + newGroupName: "Letters", + }, + { + code: OFFSET_ALTGR + 49, + labels: { + primary: "✈", + }, + newGroupName: "Letters", + }, + // Third row + { + code: OFFSET_ALTGR + 100, + labels: { + primary: "/", + }, + newGroupName: "Letters", + }, + { + code: OFFSET_ALTGR + 29, + labels: { + primary: "\\", + }, + }, + { + code: OFFSET_ALTGR + 27, + labels: { + primary: "{", + }, + }, + { + code: OFFSET_ALTGR + 6, + labels: { + primary: "}", + }, + }, + { + code: OFFSET_ALTGR + 25, + labels: { + primary: "…", + }, + }, + { + code: OFFSET_ALTGR + 5, + labels: { + primary: "~", + }, + }, + { + code: OFFSET_ALTGR + 17, + labels: { + primary: "¿", + }, + newGroupName: "Punctuation", + }, + { + code: OFFSET_ALTGR + 16, + labels: { + primary: "°", + }, + }, + { + code: OFFSET_ALTGR + 54, + labels: { + primary: "µ", + }, + newGroupName: "Letters", + }, + { + code: OFFSET_ALTGR + 55, + labels: { + primary: ".", + }, + newGroupName: "Letters", + }, + { + code: OFFSET_ALTGR + 56, + labels: { + primary: "˛", + }, + newGroupName: "Letters", + }, + ], +}; + +const shiftedSymbols = { + groupName: "Shifted French", + keys: [ + { + code: 2078, + labels: { + primary: "1", + }, + newGroupName: "Digits", + }, + { + code: 2079, + labels: { + primary: "2", + }, + newGroupName: "Digits", + }, + { + code: 2080, + labels: { + primary: "3", + }, + newGroupName: "Digits", + }, + { + code: 2081, + labels: { + primary: "4", + }, + newGroupName: "Digits", + }, + { + code: 2082, + labels: { + primary: "5", + }, + newGroupName: "Digits", + }, + { + code: 2083, + labels: { + primary: "6", + }, + newGroupName: "Digits", + }, + { + code: 2084, + labels: { + primary: "7", + }, + newGroupName: "Digits", + }, + { + code: 2085, + labels: { + primary: "8", + }, + newGroupName: "Digits", + }, + { + code: 2086, + labels: { + primary: "9", + }, + newGroupName: "Digits", + }, + { + code: 2087, + labels: { + primary: "0", + }, + newGroupName: "Digits", + }, + { + code: 2093, + labels: { + primary: "°", + }, + }, + { + code: 2095, + labels: { + primary: "¨", + }, + }, + { + code: 2096, + labels: { + primary: "£", + }, + }, + { + code: 2097, + labels: { + primary: "µ", + }, + }, + { + code: 2099, + labels: { + primary: "M", + }, + }, + { + code: 2100, + labels: { + primary: "%", + }, + }, + { + code: 2064, + labels: { + primary: "?", + }, + }, + { + code: 2102, + labels: { + primary: ".", + }, + }, + { + code: 2103, + labels: { + primary: "/", + }, + }, + { + code: 2104, + labels: { + primary: "§", + }, + }, + { + code: 2148, + labels: { + primary: ">", + }, + }, + ], +}; + +const altCtrlFrench = { + groupName: "AltCtrl French", + keys: [ + { + code: OFFSET_CONTROL_ALT + 31, + labels: { + primary: "~", + }, + }, + { + code: OFFSET_CONTROL_ALT + 32, + labels: { + primary: "#", + }, + }, + { + code: OFFSET_CONTROL_ALT + 33, + labels: { + primary: "{", + }, + }, + { + code: OFFSET_CONTROL_ALT + 34, + labels: { + primary: "[", + }, + }, + { + code: OFFSET_CONTROL_ALT + 35, + labels: { + primary: "|", + }, + }, + { + code: OFFSET_CONTROL_ALT + 36, + labels: { + primary: "`", + }, + }, + { + code: OFFSET_CONTROL_ALT + 37, + labels: { + primary: "\\", + }, + }, + { + code: OFFSET_CONTROL_ALT + 38, + labels: { + primary: "^", + }, + }, + { + code: OFFSET_CONTROL_ALT + 39, + labels: { + primary: "@", + }, + }, + { + code: OFFSET_CONTROL_ALT + 45, + labels: { + primary: "]", + }, + }, + { + code: 814, + labels: { + primary: "}", + }, + }, + { + code: 776, + labels: { + primary: "€", + }, + }, + { + code: 816, + labels: { + primary: "¤", + }, + }, + ], +}; + +const tableAGrS = { + groupName: "AltGrShift French", + keys: [ + { + code: OFFSET_SHIFT_ALTGR + 53, + labels: { + primary: "", + }, + }, + { + code: OFFSET_SHIFT_ALTGR + 30, + labels: { + primary: "„", + }, + }, + { + code: OFFSET_SHIFT_ALTGR + 31, + labels: { + primary: "“", + }, + }, + { + code: OFFSET_SHIFT_ALTGR + 32, + labels: { + primary: "”", + }, + }, + { + code: OFFSET_SHIFT_ALTGR + 33, + labels: { + primary: "⩽", + }, + }, + { + code: OFFSET_SHIFT_ALTGR + 34, + labels: { + primary: "⩾", + }, + }, + { + code: OFFSET_SHIFT_ALTGR + 36, + labels: { + primary: "¬", + }, + }, + { + code: OFFSET_SHIFT_ALTGR + 37, + labels: { + primary: "¼", + }, + }, + { + code: OFFSET_SHIFT_ALTGR + 38, + labels: { + primary: "½", + }, + }, + { + code: OFFSET_SHIFT_ALTGR + 39, + labels: { + primary: "¾", + }, + }, + { + code: OFFSET_SHIFT_ALTGR + 45, + labels: { + primary: "′", + }, + }, + { + code: OFFSET_SHIFT_ALTGR + 46, + labels: { + primary: "″", + }, + }, + // First row + { + code: OFFSET_SHIFT_ALTGR + 20, + labels: { + primary: "_", + }, + }, + { + code: OFFSET_SHIFT_ALTGR + 26, + labels: { + primary: "♥", + }, + }, + { + code: OFFSET_SHIFT_ALTGR + 8, + labels: { + primary: "§", + }, + }, + { + code: OFFSET_SHIFT_ALTGR + 21, + labels: { + primary: "Œ", + }, + }, + { + code: OFFSET_SHIFT_ALTGR + 23, + labels: { + primary: "`", + }, + }, + { + code: OFFSET_SHIFT_ALTGR + 18, + labels: { + primary: "£", + }, + }, + // Second row + { + code: OFFSET_SHIFT_ALTGR + 4, + labels: { + primary: "Æ", + }, + }, + { + code: OFFSET_SHIFT_ALTGR + 22, + labels: { + primary: "Ù", + }, + }, + { + code: OFFSET_SHIFT_ALTGR + 7, + labels: { + primary: "˙", + }, + }, + { + code: OFFSET_SHIFT_ALTGR + 9, + labels: { + primary: "¤", + }, + }, + { + code: OFFSET_SHIFT_ALTGR + 10, + labels: { + primary: ",", + }, + newGroupName: "Punctuation", + }, + { + code: OFFSET_SHIFT_ALTGR + 11, + labels: { + primary: "©", + }, + }, + { + code: OFFSET_SHIFT_ALTGR + 13, + labels: { + primary: "™", + }, + }, + { + code: OFFSET_SHIFT_ALTGR + 14, + labels: { + primary: "ſ", + }, + }, + { + code: OFFSET_SHIFT_ALTGR + 15, + labels: { + primary: "", + }, + }, + { + code: OFFSET_SHIFT_ALTGR + 51, + labels: { + primary: "⚓", + }, + newGroupName: "Letters", + }, + { + code: OFFSET_SHIFT_ALTGR + 49, + labels: { + primary: "🄯", + }, + newGroupName: "Letters", + }, + // Third row + { + code: OFFSET_SHIFT_ALTGR + 29, + labels: { + primary: "‚", + }, + }, + { + code: OFFSET_SHIFT_ALTGR + 27, + labels: { + primary: "‘", + }, + }, + { + code: OFFSET_SHIFT_ALTGR + 6, + labels: { + primary: "’", + }, + }, + { + code: OFFSET_SHIFT_ALTGR + 25, + labels: { + primary: "·", + }, + newGroupName: "Punctuation", + }, + { + code: OFFSET_SHIFT_ALTGR + 5, + labels: { + primary: "‑", + }, + }, + { + code: OFFSET_SHIFT_ALTGR + 17, + labels: { + primary: "̉", + }, + newGroupName: "Punctuation", + }, + { + code: OFFSET_SHIFT_ALTGR + 16, + labels: { + primary: "̛", + }, + }, + { + code: OFFSET_SHIFT_ALTGR + 54, + labels: { + primary: "†", + }, + newGroupName: "Letters", + }, + { + code: OFFSET_SHIFT_ALTGR + 55, + labels: { + primary: "‡", + }, + newGroupName: "Letters", + }, + ], +}; + +const frenchBepo = frenchLetters.concat(symbols); + +const table = { keys: frenchBepo }; +const tableWithoutModifier = { keys: frenchLetters }; + +const frenchCtrlTable = withModifiers(table, "Control +", "C+", OFFSET_CONTROL); +const frenchLAltTable = withModifiers(table, "Alt +", "A+", OFFSET_ALT); +const frenchRAltTable = withModifiers(table, "AltGr +", "AGr+", OFFSET_ALTGR); +const frenchShiftTable = withModifiers(tableWithoutModifier, "Shift +", "S+", OFFSET_SHIFT); +const frenchGuiTable = withModifiers(table, "Os+", "O+", OFFSET_OS); + +// Double +const frenchCATable = withModifiers(table, "Control + Alt +", "C+A+", OFFSET_CONTROL_ALT); +const frenchCAGrTable = withModifiers(table, "Control + AltGr +", "C+AGr+", 1280); +const frenchCSTable = withModifiers(table, "Control + Shift +", "C+S+", 2304); +const frenchCGTable = withModifiers(table, "Control + Os +", "C+O+", 4352); +const frenchAAGrTable = withModifiers(table, "Alt + AltGr +", "A+AGr+", 1536); +const frenchASTable = withModifiers(table, "Alt + Shift +", "A+S+", 2560); +const frenchAGTable = withModifiers(table, "Alt + Os +", "A+O+", 4608); +const frenchAGrSTable = withModifiers(tableAGrS, "AltGr + Shift +", "AGr+S+", 3072); +const frenchAGrGTable = withModifiers(table, "AltGr + Os +", "AGr+O+", 5120); +const frenchSGTable = withModifiers(table, "Shift + Os +", "S+O+", 6144); + +// Triple +const frenchCAAGTable = withModifiers(table, "Control + Alt + AltGr +", "C+A+AGr+", 1792); +const frenchCASTable = withModifiers(tableAGrS, "Meh +", "Meh+", 2816); +const frenchCAGTable = withModifiers(table, "Control + Alt + Os +", "C+A+O+", 4864); +const frenchCAGSTable = withModifiers(tableAGrS, "Control + AltGr + Shift +", "C+AGr+S+", 3328); +const frenchCAGGTable = withModifiers(table, "Control + AltGr + Os +", "C+AGr+O+", 5376); +const frenchCSGTable = withModifiers(table, "Control + Shift + Os +", "C+S+O+", 6400); +const frenchAAGSTable = withModifiers(tableAGrS, "Alt + AltGr + Shift +", "A+AGr+S+", 3584); +const frenchAAGGTable = withModifiers(table, "Alt + AltGr + Os +", "A+AGr+O+", 5632); +const frenchASGTable = withModifiers(table, "Alt + Shift + Os +", "A+S+O+", 6656); +const frenchAGSGTable = withModifiers(tableAGrS, "AltGr + Shift + Os +", "AGr+S+O+", 7168); + +// Quad +const frenchCAAGrSTable = withModifiers(tableAGrS, "Meh + AltGr +", "M+AGr+", 3840); +const frenchCAAGrGTable = withModifiers(table, "Control + Alt + AltGr + Os +", "C+A+AGr+O+", 5888); +const frenchCAGrSGTable = withModifiers(tableAGrS, "Control + AltGr + Shift + Os +", "C+AGr+S+O+", 7424); +const frenchAAGrSGTable = withModifiers(tableAGrS, "Alt + AltGr + Shift + Os +", "A+AGr+S+O+", 7680); +const frenchAllModTable = withModifiers(tableAGrS, "Hyper + AltGr +", "H+AGr+", 7936); + +const DualUseCtrlTable = withModifiers(table, "Control /", "CTRL/", 49169); +const DualUseShiftTable = withModifiers(table, "Shift /", "SHIFT/", 49425); +const DualUseAltTable = withModifiers(table, "Alt /", "ALT/", 49681); +const DualUseGuiTable = withModifiers(table, "Os /", "OS/", 49937); +const DualUseAltGrTable = withModifiers(table, "AltGr /", "ALTGR/", 50705); +const DualUseLayer1Tables = withModifiers(table, "Layer #1 /", "L#1/", 51218); +const DualUseLayer2Tables = withModifiers(table, "Layer #2 /", "L#2/", 51474); +const DualUseLayer3Tables = withModifiers(table, "Layer #3 /", "L#3/", 51730); +const DualUseLayer4Tables = withModifiers(table, "Layer #4 /", "L#4/", 51986); +const DualUseLayer5Tables = withModifiers(table, "Layer #5 /", "L#5/", 52242); +const DualUseLayer6Tables = withModifiers(table, "Layer #6 /", "L#6/", 52498); +const DualUseLayer7Tables = withModifiers(table, "Layer #7 /", "L#7/", 52754); +const DualUseLayer8Tables = withModifiers(table, "Layer #8 /", "L#8/", 53010); + +const frenchBepoModifiedTables = [ + shiftedSymbols, + frenchCtrlTable, + frenchLAltTable, + frenchRAltTable, + frenchShiftTable, + frenchGuiTable, + frenchCATable, + altCtrlFrench, + altGRFrench, + frenchCAGrTable, + frenchCSTable, + frenchCGTable, + frenchASTable, + frenchAGTable, + frenchAAGrTable, + frenchSGTable, + frenchAGrSTable, + frenchAGrGTable, + frenchCAAGTable, + frenchCASTable, + frenchCAGTable, + frenchCAGSTable, + frenchCAGGTable, + frenchCSGTable, + frenchAAGSTable, + frenchAAGGTable, + frenchASGTable, + frenchAGSGTable, + frenchCAAGrSTable, + frenchCAAGrGTable, + withModifiers(table, "Hyper +", "Hyper+", 6912), + frenchCAGrSGTable, + frenchAAGrSGTable, + frenchAllModTable, + DualUseCtrlTable, + DualUseShiftTable, + DualUseAltTable, + DualUseGuiTable, + DualUseAltGrTable, + DualUseLayer1Tables, + DualUseLayer2Tables, + DualUseLayer3Tables, + DualUseLayer4Tables, + DualUseLayer5Tables, + DualUseLayer6Tables, + DualUseLayer7Tables, + DualUseLayer8Tables, +]; + +export { frenchBepo as default, frenchBepoModifiedTables }; diff --git a/src/api/keymap/languages/german/german.js b/src/api/keymap/languages/german/german.js index 9a25a880d..bdbd7cbec 100644 --- a/src/api/keymap/languages/german/german.js +++ b/src/api/keymap/languages/german/german.js @@ -24,82 +24,82 @@ const germanLetters = [ { code: 28, labels: { - primary: "Z" - } + primary: "Z", + }, }, { code: 47, labels: { - primary: "Ü" + primary: "Ü", }, - newGroupName: "Letters" + newGroupName: "Letters", }, { code: 51, labels: { - primary: "Ö" + primary: "Ö", }, - newGroupName: "Letters" + newGroupName: "Letters", }, { code: 52, labels: { - primary: "Ä" + primary: "Ä", }, - newGroupName: "Letters" + newGroupName: "Letters", }, { code: 29, labels: { - primary: "Y" - } - } + primary: "Y", + }, + }, ]; const germanModifierKeys = [ { code: 53, labels: { - primary: "^" - } + primary: "^", + }, }, { code: 45, labels: { - primary: "ß" + primary: "ß", }, - newGroupName: "Letters" + newGroupName: "Letters", }, { code: 46, labels: { - primary: "´" - } + primary: "´", + }, }, { code: 48, labels: { - primary: "+" - } + primary: "+", + }, }, { code: 49, labels: { - primary: "#" - } + primary: "#", + }, }, { code: 56, labels: { - primary: "-" - } + primary: "-", + }, }, { code: 100, labels: { - primary: "<" - } - } + primary: "<", + }, + }, ]; const germanNumpad = [ @@ -107,9 +107,9 @@ const germanNumpad = [ code: 99, labels: { top: "Num", - primary: "," - } - } + primary: ",", + }, + }, ]; const altCtrlGerman = { @@ -118,82 +118,82 @@ const altCtrlGerman = { { code: 799, labels: { - primary: "²" - } + primary: "²", + }, }, { code: 800, labels: { - primary: "³" - } + primary: "³", + }, }, { code: 804, labels: { - primary: "{" - } + primary: "{", + }, }, { code: 805, labels: { - primary: "[" - } + primary: "[", + }, }, { code: 806, labels: { - primary: "]" - } + primary: "]", + }, }, { code: 807, labels: { - primary: "}" - } + primary: "}", + }, }, { code: 813, labels: { - primary: "\\" - } + primary: "\\", + }, }, { code: 788, labels: { - primary: "@" - } + primary: "@", + }, }, { code: 776, labels: { - primary: "€" - } + primary: "€", + }, }, { code: 816, labels: { - primary: "~" - } + primary: "~", + }, }, { code: 817, labels: { - primary: "|" - } + primary: "|", + }, }, { code: 784, labels: { - primary: "µ" - } + primary: "µ", + }, }, { code: 868, labels: { - primary: "|" - } - } - ] + primary: "|", + }, + }, + ], }; const altGrGerman = { @@ -202,82 +202,82 @@ const altGrGerman = { { code: 1055, labels: { - primary: "²" - } + primary: "²", + }, }, { code: 1056, labels: { - primary: "³" - } + primary: "³", + }, }, { code: 1060, labels: { - primary: "{" - } + primary: "{", + }, }, { code: 1061, labels: { - primary: "[" - } + primary: "[", + }, }, { code: 1062, labels: { - primary: "]" - } + primary: "]", + }, }, { code: 1063, labels: { - primary: "}" - } + primary: "}", + }, }, { code: 1069, labels: { - primary: "\\" - } + primary: "\\", + }, }, { code: 1044, labels: { - primary: "@" - } + primary: "@", + }, }, { code: 1032, labels: { - primary: "€" - } + primary: "€", + }, }, { code: 1072, labels: { - primary: "~" - } + primary: "~", + }, }, { code: 1073, labels: { - primary: "|" - } + primary: "|", + }, }, { code: 1040, labels: { - primary: "µ" - } + primary: "µ", + }, }, { code: 1124, labels: { - primary: "|" - } - } - ] + primary: "|", + }, + }, + ], }; const shiftModifierGerman = { @@ -286,100 +286,100 @@ const shiftModifierGerman = { { code: 2101, labels: { - primary: "°" - } + primary: "°", + }, }, { code: 2079, labels: { - primary: '"' - } + primary: '"', + }, }, { code: 2080, labels: { - primary: "§" - } + primary: "§", + }, }, { code: 2083, labels: { - primary: "&" - } + primary: "&", + }, }, { code: 2084, labels: { - primary: "/" - } + primary: "/", + }, }, { code: 2085, labels: { - primary: "(" - } + primary: "(", + }, }, { code: 2086, labels: { - primary: ")" - } + primary: ")", + }, }, { code: 2087, labels: { - primary: "=" - } + primary: "=", + }, }, { code: 2093, labels: { - primary: "?" - } + primary: "?", + }, }, { code: 2094, labels: { - primary: "`" - } + primary: "`", + }, }, { code: 2096, labels: { - primary: "*" - } + primary: "*", + }, }, { code: 2097, labels: { - primary: "'" - } + primary: "'", + }, }, { code: 2102, labels: { - primary: ";" - } + primary: ";", + }, }, { code: 2103, labels: { - primary: ":" - } + primary: ":", + }, }, { code: 2104, labels: { - primary: "_" - } + primary: "_", + }, }, { code: 2148, labels: { - primary: ">" - } - } - ] + primary: ">", + }, + }, + ], }; const german = germanLetters.concat(germanModifierKeys, germanNumpad); @@ -509,7 +509,7 @@ const germanModifiedTables = [ DualUseLayer5Tables, DualUseLayer6Tables, DualUseLayer7Tables, - DualUseLayer8Tables + DualUseLayer8Tables, ]; export { german as default, germanModifiedTables }; diff --git a/src/api/keymap/languages/japanese/japanese.js b/src/api/keymap/languages/japanese/japanese.js index 143d6bd72..70feda1c6 100644 --- a/src/api/keymap/languages/japanese/japanese.js +++ b/src/api/keymap/languages/japanese/japanese.js @@ -23,335 +23,335 @@ const japaneseLetters = [ { code: 53, labels: { - primary: "半角/全角 漢字" - } + primary: "半角/全角 漢字", + }, }, { code: 30, labels: { - primary: "ぬ" + primary: "ぬ", }, - newGroupName: "Letters" + newGroupName: "Letters", }, { code: 31, labels: { - primary: "ふ" + primary: "ふ", }, - newGroupName: "Letters" + newGroupName: "Letters", }, { code: 32, labels: { - primary: "あ" + primary: "あ", }, - newGroupName: "Letters" + newGroupName: "Letters", }, { code: 33, labels: { - primary: "う" + primary: "う", }, - newGroupName: "Letters" + newGroupName: "Letters", }, { code: 34, labels: { - primary: "え" + primary: "え", }, - newGroupName: "Letters" + newGroupName: "Letters", }, { code: 35, labels: { - primary: "お" + primary: "お", }, - newGroupName: "Letters" + newGroupName: "Letters", }, { code: 36, labels: { - primary: "や" + primary: "や", }, - newGroupName: "Letters" + newGroupName: "Letters", }, { code: 37, labels: { - primary: "ゆ" + primary: "ゆ", }, - newGroupName: "Letters" + newGroupName: "Letters", }, { code: 38, labels: { - primary: "よ" + primary: "よ", }, - newGroupName: "Letters" + newGroupName: "Letters", }, { code: 39, labels: { - primary: "わ" + primary: "わ", }, - newGroupName: "Letters" + newGroupName: "Letters", }, { code: 45, labels: { - primary: "ほ" - } + primary: "ほ", + }, }, { code: 46, labels: { - primary: "へ" - } + primary: "へ", + }, }, { code: 20, labels: { - primary: "た" - } + primary: "た", + }, }, { code: 26, labels: { - primary: "て" - } + primary: "て", + }, }, { code: 8, labels: { - primary: "い" - } + primary: "い", + }, }, { code: 21, labels: { - primary: "す" - } + primary: "す", + }, }, { code: 23, labels: { - primary: "か" - } + primary: "か", + }, }, { code: 28, labels: { - primary: "ん" - } + primary: "ん", + }, }, { code: 24, labels: { - primary: "な" - } + primary: "な", + }, }, { code: 12, labels: { - primary: "に" - } + primary: "に", + }, }, { code: 18, labels: { - primary: "ら" - } + primary: "ら", + }, }, { code: 19, labels: { - primary: "せ" - } + primary: "せ", + }, }, { code: 49, labels: { - primary: "む" + primary: "む", }, - newGroupName: "Letters" + newGroupName: "Letters", }, { code: 4, labels: { - primary: "ち" - } + primary: "ち", + }, }, { code: 22, labels: { - primary: "と" - } + primary: "と", + }, }, { code: 7, labels: { - primary: "し" - } + primary: "し", + }, }, { code: 9, labels: { - primary: "は" - } + primary: "は", + }, }, { code: 10, labels: { - primary: "き" - } + primary: "き", + }, }, { code: 11, labels: { - primary: "く" - } + primary: "く", + }, }, { code: 13, labels: { - primary: "ま" - } + primary: "ま", + }, }, { code: 14, labels: { - primary: "の" - } + primary: "の", + }, }, { code: 15, labels: { - primary: "り" - } + primary: "り", + }, }, { code: 51, labels: { - primary: "れ" - } + primary: "れ", + }, }, { code: 52, labels: { - primary: "け" - } + primary: "け", + }, }, { code: 29, labels: { - primary: "つ" - } + primary: "つ", + }, }, { code: 27, labels: { - primary: "さ" - } + primary: "さ", + }, }, { code: 6, labels: { - primary: "そ" - } + primary: "そ", + }, }, { code: 25, labels: { - primary: "ひ" - } + primary: "ひ", + }, }, { code: 5, labels: { - primary: "こ" - } + primary: "こ", + }, }, { code: 17, labels: { - primary: "み" - } + primary: "み", + }, }, { code: 16, labels: { - primary: "も" - } + primary: "も", + }, }, { code: 54, labels: { - primary: "ね" - } + primary: "ね", + }, }, { code: 55, labels: { - primary: "る" - } + primary: "る", + }, }, { code: 56, labels: { - primary: "め" - } + primary: "め", + }, }, { code: 135, labels: { - primary: "\\ろ" + primary: "\\ろ", }, - newGroupName: "Punctuation" + newGroupName: "Punctuation", }, { code: 136, labels: { primary: "Hiragana", - verbose: "カタカナ/ひらがな/ローマ字" + verbose: "カタカナ/ひらがな/ローマ字", }, - newGroupName: "Punctuation" + newGroupName: "Punctuation", }, { code: 137, labels: { - primary: "¥" + primary: "¥", }, - newGroupName: "Punctuation" + newGroupName: "Punctuation", }, { code: 138, labels: { - primary: "変換" + primary: "変換", }, - newGroupName: "Punctuation" + newGroupName: "Punctuation", }, { code: 139, labels: { - primary: "無変換" + primary: "無変換", }, - newGroupName: "Punctuation" - } + newGroupName: "Punctuation", + }, ]; const japaneseModifierKeys = [ { code: 47, labels: { - primary: "゛" - } + primary: "゛", + }, }, { code: 48, labels: { - primary: "゜" - } - } + primary: "゜", + }, + }, ]; const altCtrlJapanese = { @@ -360,275 +360,275 @@ const altCtrlJapanese = { { code: 821, labels: { - primary: "ロ" - } + primary: "ロ", + }, }, { code: 798, labels: { - primary: "ヌ" - } + primary: "ヌ", + }, }, { code: 799, labels: { - primary: "フ" - } + primary: "フ", + }, }, { code: 800, labels: { - primary: "ア" - } + primary: "ア", + }, }, { code: 801, labels: { - primary: "ウ" - } + primary: "ウ", + }, }, { code: 802, labels: { - primary: "エ" - } + primary: "エ", + }, }, { code: 803, labels: { - primary: "オ" - } + primary: "オ", + }, }, { code: 804, labels: { - primary: "ヤ" - } + primary: "ヤ", + }, }, { code: 805, labels: { - primary: "ユ" - } + primary: "ユ", + }, }, { code: 806, labels: { - primary: "ヨ" - } + primary: "ヨ", + }, }, { code: 807, labels: { - primary: "ワ" - } + primary: "ワ", + }, }, { code: 813, labels: { - primary: "ホ" - } + primary: "ホ", + }, }, { code: 814, labels: { - primary: "ヘ" - } + primary: "ヘ", + }, }, { code: 788, labels: { - primary: "タ" - } + primary: "タ", + }, }, { code: 794, labels: { - primary: "テ" - } + primary: "テ", + }, }, { code: 776, labels: { - primary: "イ" - } + primary: "イ", + }, }, { code: 789, labels: { - primary: "ス" - } + primary: "ス", + }, }, { code: 791, labels: { - primary: "カ" - } + primary: "カ", + }, }, { code: 796, labels: { - primary: "ン" - } + primary: "ン", + }, }, { code: 792, labels: { - primary: "ナ" - } + primary: "ナ", + }, }, { code: 780, labels: { - primary: "ニ" - } + primary: "ニ", + }, }, { code: 786, labels: { - primary: "ラ" - } + primary: "ラ", + }, }, { code: 787, labels: { - primary: "セ" - } + primary: "セ", + }, }, { code: 817, labels: { - primary: "ム" + primary: "ム", }, - newGroupName: "Letters" + newGroupName: "Letters", }, { code: 772, labels: { - primary: "チ" - } + primary: "チ", + }, }, { code: 790, labels: { - primary: "ト" - } + primary: "ト", + }, }, { code: 775, labels: { - primary: "シ" - } + primary: "シ", + }, }, { code: 777, labels: { - primary: "ハ" - } + primary: "ハ", + }, }, { code: 778, labels: { - primary: "キ" - } + primary: "キ", + }, }, { code: 779, labels: { - primary: "ク" - } + primary: "ク", + }, }, { code: 781, labels: { - primary: "マ" - } + primary: "マ", + }, }, { code: 782, labels: { - primary: "ノ" - } + primary: "ノ", + }, }, { code: 783, labels: { - primary: "リ" - } + primary: "リ", + }, }, { code: 819, labels: { - primary: "レ" - } + primary: "レ", + }, }, { code: 820, labels: { - primary: "ケ" - } + primary: "ケ", + }, }, { code: 797, labels: { - primary: "ツ" - } + primary: "ツ", + }, }, { code: 795, labels: { - primary: "サ" - } + primary: "サ", + }, }, { code: 774, labels: { - primary: "ソ" - } + primary: "ソ", + }, }, { code: 793, labels: { - primary: "ヒ" - } + primary: "ヒ", + }, }, { code: 773, labels: { - primary: "コ" - } + primary: "コ", + }, }, { code: 785, labels: { - primary: "ミ" - } + primary: "ミ", + }, }, { code: 784, labels: { - primary: "モ" - } + primary: "モ", + }, }, { code: 822, labels: { - primary: "ネ" - } + primary: "ネ", + }, }, { code: 823, labels: { - primary: "ル" - } + primary: "ル", + }, }, { code: 824, labels: { - primary: "メ" - } - } - ] + primary: "メ", + }, + }, + ], }; const altGRJapanese = { @@ -637,275 +637,275 @@ const altGRJapanese = { { code: 1077, labels: { - primary: "ロ" - } + primary: "ロ", + }, }, { code: 1054, labels: { - primary: "ヌ" - } + primary: "ヌ", + }, }, { code: 1055, labels: { - primary: "フ" - } + primary: "フ", + }, }, { code: 1056, labels: { - primary: "ア" - } + primary: "ア", + }, }, { code: 1057, labels: { - primary: "ウ" - } + primary: "ウ", + }, }, { code: 1058, labels: { - primary: "エ" - } + primary: "エ", + }, }, { code: 1059, labels: { - primary: "オ" - } + primary: "オ", + }, }, { code: 1060, labels: { - primary: "ヤ" - } + primary: "ヤ", + }, }, { code: 1061, labels: { - primary: "ユ" - } + primary: "ユ", + }, }, { code: 1062, labels: { - primary: "ヨ" - } + primary: "ヨ", + }, }, { code: 1063, labels: { - primary: "ワ" - } + primary: "ワ", + }, }, { code: 1069, labels: { - primary: "ホ" - } + primary: "ホ", + }, }, { code: 1070, labels: { - primary: "ヘ" - } + primary: "ヘ", + }, }, { code: 1044, labels: { - primary: "タ" - } + primary: "タ", + }, }, { code: 1050, labels: { - primary: "テ" - } + primary: "テ", + }, }, { code: 1032, labels: { - primary: "イ" - } + primary: "イ", + }, }, { code: 1045, labels: { - primary: "ス" - } + primary: "ス", + }, }, { code: 1047, labels: { - primary: "カ" - } + primary: "カ", + }, }, { code: 1052, labels: { - primary: "ン" - } + primary: "ン", + }, }, { code: 1048, labels: { - primary: "ナ" - } + primary: "ナ", + }, }, { code: 1036, labels: { - primary: "ニ" - } + primary: "ニ", + }, }, { code: 1042, labels: { - primary: "ラ" - } + primary: "ラ", + }, }, { code: 1043, labels: { - primary: "セ" - } + primary: "セ", + }, }, { code: 1073, labels: { - primary: "ム" + primary: "ム", }, - newGroupName: "Letters" + newGroupName: "Letters", }, { code: 1028, labels: { - primary: "チ" - } + primary: "チ", + }, }, { code: 1046, labels: { - primary: "ト" - } + primary: "ト", + }, }, { code: 1031, labels: { - primary: "シ" - } + primary: "シ", + }, }, { code: 1033, labels: { - primary: "ハ" - } + primary: "ハ", + }, }, { code: 1034, labels: { - primary: "キ" - } + primary: "キ", + }, }, { code: 1035, labels: { - primary: "ク" - } + primary: "ク", + }, }, { code: 1037, labels: { - primary: "マ" - } + primary: "マ", + }, }, { code: 1038, labels: { - primary: "ノ" - } + primary: "ノ", + }, }, { code: 1039, labels: { - primary: "リ" - } + primary: "リ", + }, }, { code: 1075, labels: { - primary: "レ" - } + primary: "レ", + }, }, { code: 1076, labels: { - primary: "ケ" - } + primary: "ケ", + }, }, { code: 1053, labels: { - primary: "ツ" - } + primary: "ツ", + }, }, { code: 1051, labels: { - primary: "サ" - } + primary: "サ", + }, }, { code: 1030, labels: { - primary: "ソ" - } + primary: "ソ", + }, }, { code: 1049, labels: { - primary: "ヒ" - } + primary: "ヒ", + }, }, { code: 1029, labels: { - primary: "コ" - } + primary: "コ", + }, }, { code: 1041, labels: { - primary: "ミ" - } + primary: "ミ", + }, }, { code: 1040, labels: { - primary: "モ" - } + primary: "モ", + }, }, { code: 1078, labels: { - primary: "ネ" - } + primary: "ネ", + }, }, { code: 1079, labels: { - primary: "ル" - } + primary: "ル", + }, }, { code: 1080, labels: { - primary: "メ" - } - } - ] + primary: "メ", + }, + }, + ], }; const shiftModifierJapanese = { @@ -914,100 +914,100 @@ const shiftModifierJapanese = { { code: 2080, labels: { - primary: "ぁ" - } + primary: "ぁ", + }, }, { code: 2081, labels: { - primary: "ぅ" - } + primary: "ぅ", + }, }, { code: 2082, labels: { - primary: "ぇ" - } + primary: "ぇ", + }, }, { code: 2083, labels: { - primary: "ぉ" - } + primary: "ぉ", + }, }, { code: 2084, labels: { - primary: "ゃ" - } + primary: "ゃ", + }, }, { code: 2085, labels: { - primary: "ゅ" - } + primary: "ゅ", + }, }, { code: 2086, labels: { - primary: "ょ" - } + primary: "ょ", + }, }, { code: 2087, labels: { - primary: "を" - } + primary: "を", + }, }, { code: 2093, labels: { - primary: "ー" - } + primary: "ー", + }, }, { code: 2056, labels: { - primary: "ぃ" - } + primary: "ぃ", + }, }, { code: 2095, labels: { - primary: "「" - } + primary: "「", + }, }, { code: 2096, labels: { - primary: "」" - } + primary: "」", + }, }, { code: 2077, labels: { - primary: "っ" - } + primary: "っ", + }, }, { code: 2102, labels: { - primary: "、" - } + primary: "、", + }, }, { code: 2103, labels: { - primary: "。" - } + primary: "。", + }, }, { code: 2104, labels: { - primary: "・" - } - } - ] + primary: "・", + }, + }, + ], }; const japanese = japaneseLetters.concat(japaneseModifierKeys); @@ -1137,7 +1137,7 @@ const japaneseModifiedTables = [ DualUseLayer5Tables, DualUseLayer6Tables, DualUseLayer7Tables, - DualUseLayer8Tables + DualUseLayer8Tables, ]; export { japanese as default, japaneseModifiedTables }; diff --git a/src/api/keymap/languages/korean/korean.js b/src/api/keymap/languages/korean/korean.js new file mode 100644 index 000000000..6830a2f29 --- /dev/null +++ b/src/api/keymap/languages/korean/korean.js @@ -0,0 +1,189 @@ +/* Bazecor keymap library + * Copyright (C) 2019 DygmaLab SE + * + * This program is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free Software + * Foundation, version 3. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see . + */ + +/** + * Is an Array of objects of values that have to be modified. + */ + +import { withModifiers } from "../../db/utils"; + +const koreanLetters = [ + { + code: 144, + labels: { + primary: "한/영", + verbose: "한/영", + }, + newGroupName: "Punctuation", + }, + { + code: 145, + labels: { + primary: "한자", + verbose: "한자", + }, + newGroupName: "Punctuation", + }, +]; + +const koreanModifierKeys = []; + +const altCtrlKorean = { + groupName: "AltCtrl Korean", + keys: [], +}; + +const altGRKorean = { + groupName: "AltCtrl Korean", + keys: [], +}; + +const shiftModifierKorean = { + groupName: "Shifted Korean", + keys: [], +}; + +const korean = koreanLetters.concat(koreanModifierKeys); + +const table = { keys: korean }; +const tableWithoutModifier = { keys: koreanLetters }; + +const koreanCtrlTable = withModifiers(table, "Control +", "C+", 256); +const koreanLAltTable = withModifiers(table, "Alt +", "A+", 512); +const koreanRAltTable = withModifiers(table, "AltGr +", "AGr+", 1024); +const koreanShiftTable = withModifiers(tableWithoutModifier, "Shift +", "S+", 2048); +const koreanGuiTable = withModifiers(table, "Gui +", "G+", 4096); +// Double + +const koreanCATable = withModifiers(table, "Control + Alt +", "C+A+", 768); + +const koreanCAGrTable = withModifiers(table, "Control + AltGr +", "C+AGr+", 1280); + +const koreanCSTable = withModifiers(table, "Control + Shift +", "C+S+", 2304); + +const koreanCGTable = withModifiers(table, "Control + Gui +", "C+G+", 4352); + +const koreanAAGrTable = withModifiers(table, "Alt + AltGr +", "A+AGr+", 1536); + +const koreanASTable = withModifiers(table, "Alt + Shift +", "A+S+", 2560); + +const koreanAGTable = withModifiers(table, "Alt + Gui +", "A+G+", 4608); + +const koreanAGrSTable = withModifiers(table, "AltGr + Shift +", "AGr+S+", 3072); + +const koreanAGrGTable = withModifiers(table, "AltGr + Gui +", "AGr+G+", 5120); + +const koreanSGTable = withModifiers(table, "Shift + Gui +", "S+G+", 6144); + +// Triple + +const koreanCAAGTable = withModifiers(table, "Control + Alt + AltGr +", "C+A+AGr+", 1792); + +const koreanCASTable = withModifiers(table, "Meh +", "Meh+", 2816); + +const koreanCAGTable = withModifiers(table, "Control + Alt + Gui +", "C+A+G+", 4864); + +const koreanCAGSTable = withModifiers(table, "Control + AltGr + Shift +", "C+AGr+S+", 3328); + +const koreanCAGGTable = withModifiers(table, "Control + AltGr + Gui +", "C+AGr+G+", 5376); + +const koreanCSGTable = withModifiers(table, "Control + Shift + Gui +", "C+S+G+", 6400); + +const koreanAAGSTable = withModifiers(table, "Alt + AltGr + Shift +", "A+AGr+S+", 3584); + +const koreanAAGGTable = withModifiers(table, "Alt + AltGr + Gui +", "A+AGr+G+", 5632); + +const koreanASGTable = withModifiers(table, "Alt + Shift + Gui +", "A+S+G+", 6656); + +const koreanAGSGTable = withModifiers(table, "AltGr + Shift + Gui +", "AGr+S+G+", 7168); + +// Quad + +const koreanCAAGrSTable = withModifiers(table, "Meh + AltGr +", "M+AGr+", 3840); + +const koreanCAAGrGTable = withModifiers(table, "Control + Alt + AltGr + Gui +", "C+A+AGr+G+", 5888); + +const koreanAAGrSGTable = withModifiers(table, "Control + AltGr + Shift + Gui +", "C+AGr+S+G+", 7424); + +const koreanCAGrSGTable = withModifiers(table, "Alt + AltGr + Shift + Gui +", "A+AGr+S+G+", 7680); + +const koreanAllModTable = withModifiers(table, "Hyper + AltGr +", "H+AGr+", 7936); + +const DualUseCtrlTable = withModifiers(table, "Control /", "CTRL/", 49169); +const DualUseShiftTable = withModifiers(table, "Shift /", "SHIFT/", 49425); +const DualUseAltTable = withModifiers(table, "Alt /", "ALT/", 49681); +const DualUseGuiTable = withModifiers(table, "Gui /", "GUI/", 49937); +const DualUseAltGrTable = withModifiers(table, "AltGr /", "ALTGR/", 50705); +const DualUseLayer1Tables = withModifiers(table, "Layer #1 /", "L#1/", 51218); +const DualUseLayer2Tables = withModifiers(table, "Layer #2 /", "L#2/", 51474); +const DualUseLayer3Tables = withModifiers(table, "Layer #3 /", "L#3/", 51730); +const DualUseLayer4Tables = withModifiers(table, "Layer #4 /", "L#4/", 51986); +const DualUseLayer5Tables = withModifiers(table, "Layer #5 /", "L#5/", 52242); +const DualUseLayer6Tables = withModifiers(table, "Layer #6 /", "L#6/", 52498); +const DualUseLayer7Tables = withModifiers(table, "Layer #7 /", "L#7/", 52754); +const DualUseLayer8Tables = withModifiers(table, "Layer #8 /", "L#8/", 53010); + +const koreanModifiedTables = [ + koreanCtrlTable, + koreanLAltTable, + koreanRAltTable, + koreanShiftTable, + koreanGuiTable, + koreanCATable, + shiftModifierKorean, + altCtrlKorean, + altGRKorean, + koreanCAGrTable, + koreanCSTable, + koreanCGTable, + koreanAAGrTable, + koreanASTable, + koreanAGTable, + koreanSGTable, + koreanAGrSTable, + koreanAGrGTable, + koreanCAAGTable, + koreanCASTable, + koreanCAGTable, + koreanCAGSTable, + koreanCAGGTable, + koreanCSGTable, + koreanAAGSTable, + koreanAAGGTable, + koreanASGTable, + koreanAGSGTable, + koreanCAAGrSTable, + koreanCAAGrGTable, + withModifiers(table, "Hyper +", "Hyper+", 6912), + koreanCAGrSGTable, + koreanAAGrSGTable, + koreanAllModTable, + DualUseCtrlTable, + DualUseShiftTable, + DualUseAltTable, + DualUseGuiTable, + DualUseAltGrTable, + DualUseLayer1Tables, + DualUseLayer2Tables, + DualUseLayer3Tables, + DualUseLayer4Tables, + DualUseLayer5Tables, + DualUseLayer6Tables, + DualUseLayer7Tables, + DualUseLayer8Tables, +]; + +export { korean as default, koreanModifiedTables }; diff --git a/src/api/keymap/languages/newLanguageLayout.js b/src/api/keymap/languages/newLanguageLayout.js index f0e16a7eb..a9949e236 100644 --- a/src/api/keymap/languages/newLanguageLayout.js +++ b/src/api/keymap/languages/newLanguageLayout.js @@ -22,26 +22,25 @@ * @param {newKeyCodeTable} newKeyCodeTable Key codes for new language */ function newLanguageLayout(baseKeyCodeTable, language = "english", newKeyCodeTable) { - if (language === "english") { + if (language === "english" || language === "british") { return baseKeyCodeTable; - } else { - return baseKeyCodeTable.map(group => { - const newArray = group.keys.reduce((acc, key) => { - const newKey = newKeyCodeTable.find(item => item.code === key.code); - const isDeleteNewKey = newKey && newKey.newGroupName && newKey.newGroupName !== group.groupName; - if (!isDeleteNewKey) { - newKey ? acc.push(newKey) : acc.push(key); - } - return acc; - }, []); - const arrayFromAnotherGroup = newKeyCodeTable.filter(keys => keys.newGroupName === group.groupName); - - return { - ...group, - keys: [...newArray, ...arrayFromAnotherGroup] - }; - }); } + return baseKeyCodeTable.map(group => { + const newArray = group.keys.reduce((acc, key) => { + const newKey = newKeyCodeTable.find(item => item.code === key.code); + const isDeleteNewKey = newKey && newKey.newGroupName && newKey.newGroupName !== group.groupName; + if (!isDeleteNewKey) { + newKey ? acc.push(newKey) : acc.push(key); + } + return acc; + }, []); + const arrayFromAnotherGroup = newKeyCodeTable.filter(keys => keys.newGroupName === group.groupName); + + return { + ...group, + keys: [...newArray, ...arrayFromAnotherGroup], + }; + }); } export default newLanguageLayout; diff --git a/src/api/keymap/languages/spanish/spanish.js b/src/api/keymap/languages/spanish/spanish.js index db97840f7..c1d802100 100644 --- a/src/api/keymap/languages/spanish/spanish.js +++ b/src/api/keymap/languages/spanish/spanish.js @@ -23,74 +23,74 @@ const spanishLetters = [ { code: 49, labels: { - primary: "Ç" + primary: "Ç", }, - newGroupName: "Letters" + newGroupName: "Letters", }, { code: 51, labels: { - primary: "Ñ" + primary: "Ñ", }, - newGroupName: "Letters" - } + newGroupName: "Letters", + }, ]; const spanishModifierKeys = [ { code: 45, labels: { - primary: "'" + primary: "'", }, - newGroupName: "Punctuation" + newGroupName: "Punctuation", }, { code: 46, labels: { - primary: "¡" + primary: "¡", }, - newGroupName: "Punctuation" + newGroupName: "Punctuation", }, { code: 47, labels: { - primary: "`" + primary: "`", }, - newGroupName: "Punctuation" + newGroupName: "Punctuation", }, { code: 48, labels: { - primary: "+" - } + primary: "+", + }, }, { code: 52, labels: { - primary: "´" + primary: "´", }, - newGroupName: "Punctuation" + newGroupName: "Punctuation", }, { code: 53, labels: { - primary: "º" + primary: "º", }, - newGroupName: "Punctuation" + newGroupName: "Punctuation", }, { code: 56, labels: { - primary: "-" + primary: "-", }, - newGroupName: "Punctuation" + newGroupName: "Punctuation", }, { code: 100, labels: { - primary: "<" - } - } + primary: "<", + }, + }, ]; const shiftModifierSpanish = { groupName: "AltCtrl Spanish", @@ -98,129 +98,129 @@ const shiftModifierSpanish = { { code: 2079, labels: { - primary: '"' + primary: '"', }, - newGroupName: "Shifted Digits" + newGroupName: "Shifted Digits", }, { code: 2080, labels: { - primary: "·" + primary: "·", }, - newGroupName: "Shifted Digits" + newGroupName: "Shifted Digits", }, { code: 2083, labels: { - primary: "&" + primary: "&", }, - newGroupName: "Shifted Digits" + newGroupName: "Shifted Digits", }, { code: 2084, labels: { - primary: "/" + primary: "/", }, - newGroupName: "Shifted Digits" + newGroupName: "Shifted Digits", }, { code: 2085, labels: { - primary: "(" + primary: "(", }, - newGroupName: "Shifted Digits" + newGroupName: "Shifted Digits", }, { code: 2086, labels: { - primary: ")" + primary: ")", }, - newGroupName: "Shifted Digits" + newGroupName: "Shifted Digits", }, { code: 2087, labels: { - primary: "=" + primary: "=", }, - newGroupName: "Shifted Digits" + newGroupName: "Shifted Digits", }, { code: 2093, labels: { - primary: "?" + primary: "?", }, - newGroupName: "Shifted Digits" + newGroupName: "Shifted Digits", }, { code: 2094, labels: { - primary: "¿" + primary: "¿", }, - newGroupName: "Shifted Digits" + newGroupName: "Shifted Digits", }, { code: 2095, labels: { - primary: "^" - } + primary: "^", + }, }, { code: 2096, labels: { - primary: "*" - } + primary: "*", + }, }, { code: 2097, labels: { primary: "Ç", - top: "S+" - } + top: "S+", + }, }, { code: 2099, labels: { primary: "Ñ", - top: "S+" - } + top: "S+", + }, }, { code: 2100, labels: { - primary: "¨" - } + primary: "¨", + }, }, { code: 2101, labels: { - primary: "ª" - } + primary: "ª", + }, }, { code: 2102, labels: { - primary: ";" - } + primary: ";", + }, }, { code: 2103, labels: { - primary: ":" - } + primary: ":", + }, }, { code: 2104, labels: { - primary: "_" - } + primary: "_", + }, }, { code: 2148, labels: { - primary: ">" - } - } - ] + primary: ">", + }, + }, + ], }; const altCtrlSpanish = { @@ -229,76 +229,76 @@ const altCtrlSpanish = { { code: 798, labels: { - primary: "|" - } + primary: "|", + }, }, { code: 799, labels: { - primary: "@" - } + primary: "@", + }, }, { code: 800, labels: { - primary: "#" - } + primary: "#", + }, }, { code: 801, labels: { - primary: "~" - } + primary: "~", + }, }, { code: 802, labels: { - primary: "€" - } + primary: "€", + }, }, { code: 803, labels: { - primary: "¬" - } + primary: "¬", + }, }, { code: 776, labels: { - primary: "€" - } + primary: "€", + }, }, { code: 815, labels: { - primary: "[" - } + primary: "[", + }, }, { code: 816, labels: { - primary: "]" - } + primary: "]", + }, }, { code: 817, labels: { - primary: "}" - } + primary: "}", + }, }, { code: 820, labels: { - primary: "{" - } + primary: "{", + }, }, { code: 821, labels: { - primary: "\\" - } - } - ] + primary: "\\", + }, + }, + ], }; const altGrSpanish = { @@ -307,76 +307,76 @@ const altGrSpanish = { { code: 1054, labels: { - primary: "|" - } + primary: "|", + }, }, { code: 1055, labels: { - primary: "@" - } + primary: "@", + }, }, { code: 1056, labels: { - primary: "#" - } + primary: "#", + }, }, { code: 1057, labels: { - primary: "~" - } + primary: "~", + }, }, { code: 1058, labels: { - primary: "€" - } + primary: "€", + }, }, { code: 1059, labels: { - primary: "¬" - } + primary: "¬", + }, }, { code: 1032, labels: { - primary: "€" - } + primary: "€", + }, }, { code: 1071, labels: { - primary: "[" - } + primary: "[", + }, }, { code: 1072, labels: { - primary: "]" - } + primary: "]", + }, }, { code: 1073, labels: { - primary: "}" - } + primary: "}", + }, }, { code: 1076, labels: { - primary: "{" - } + primary: "{", + }, }, { code: 1077, labels: { - primary: "\\" - } - } - ] + primary: "\\", + }, + }, + ], }; const spanish = spanishLetters.concat(spanishModifierKeys); @@ -506,7 +506,7 @@ const spanishModifiedTables = [ DualUseLayer5Tables, DualUseLayer6Tables, DualUseLayer7Tables, - DualUseLayer8Tables + DualUseLayer8Tables, ]; export { spanish as default, spanishModifiedTables }; diff --git a/src/api/keymap/languages/swissGerman/swissGerman.js b/src/api/keymap/languages/swissGerman/swissGerman.js index 878c28f00..2bee057e9 100644 --- a/src/api/keymap/languages/swissGerman/swissGerman.js +++ b/src/api/keymap/languages/swissGerman/swissGerman.js @@ -24,82 +24,82 @@ const swissGermanLetters = [ { code: 28, labels: { - primary: "Z" - } + primary: "Z", + }, }, { code: 29, labels: { - primary: "Y" - } - } + primary: "Y", + }, + }, ]; const swissGermanModifierKeys = [ { code: 53, labels: { - primary: "§" - } + primary: "§", + }, }, { code: 45, labels: { - primary: "'" - } + primary: "'", + }, }, { code: 46, labels: { - primary: "^" - } + primary: "^", + }, }, { code: 48, labels: { - primary: "¨" - } + primary: "¨", + }, }, { code: 49, labels: { - primary: "$" + primary: "$", }, - newGroupName: "Shifted Digits" + newGroupName: "Shifted Digits", }, { code: 47, labels: { - primary: "Ü" + primary: "Ü", }, - newGroupName: "Letters" + newGroupName: "Letters", }, { code: 51, labels: { - primary: "Ö" + primary: "Ö", }, - newGroupName: "Letters" + newGroupName: "Letters", }, { code: 52, labels: { - primary: "Ä" + primary: "Ä", }, - newGroupName: "Letters" + newGroupName: "Letters", }, { code: 56, labels: { - primary: "-" - } + primary: "-", + }, }, { code: 100, labels: { - primary: "<" - } - } + primary: "<", + }, + }, ]; const altCtrlSwissGerman = { @@ -108,88 +108,88 @@ const altCtrlSwissGerman = { { code: 798, labels: { - primary: "¦" - } + primary: "¦", + }, }, { code: 799, labels: { - primary: "@" - } + primary: "@", + }, }, { code: 800, labels: { - primary: "#" - } + primary: "#", + }, }, { code: 803, labels: { - primary: "¬" - } + primary: "¬", + }, }, { code: 804, labels: { - primary: "|" - } + primary: "|", + }, }, { code: 805, labels: { - primary: "¢" - } + primary: "¢", + }, }, { code: 813, labels: { - primary: "´" - } + primary: "´", + }, }, { code: 814, labels: { - primary: "~" - } + primary: "~", + }, }, { code: 776, labels: { - primary: "€" - } + primary: "€", + }, }, { code: 815, labels: { - primary: "[" - } + primary: "[", + }, }, { code: 816, labels: { - primary: "]" - } + primary: "]", + }, }, { code: 817, labels: { - primary: "}" - } + primary: "}", + }, }, { code: 820, labels: { - primary: "{" - } + primary: "{", + }, }, { code: 868, labels: { - primary: "\\" - } - } - ] + primary: "\\", + }, + }, + ], }; const altGrSwissGerman = { @@ -198,88 +198,88 @@ const altGrSwissGerman = { { code: 1054, labels: { - primary: "¦" - } + primary: "¦", + }, }, { code: 1055, labels: { - primary: "@" - } + primary: "@", + }, }, { code: 1056, labels: { - primary: "#" - } + primary: "#", + }, }, { code: 1059, labels: { - primary: "¬" - } + primary: "¬", + }, }, { code: 1060, labels: { - primary: "|" - } + primary: "|", + }, }, { code: 1061, labels: { - primary: "¢" - } + primary: "¢", + }, }, { code: 1069, labels: { - primary: "´" - } + primary: "´", + }, }, { code: 1070, labels: { - primary: "~" - } + primary: "~", + }, }, { code: 1032, labels: { - primary: "€" - } + primary: "€", + }, }, { code: 1071, labels: { - primary: "[" - } + primary: "[", + }, }, { code: 1072, labels: { - primary: "]" - } + primary: "]", + }, }, { code: 1073, labels: { - primary: "}" - } + primary: "}", + }, }, { code: 1076, labels: { - primary: "{" - } + primary: "{", + }, }, { code: 1124, labels: { - primary: "\\" - } - } - ] + primary: "\\", + }, + }, + ], }; const shiftModifierSwissGerman = { @@ -288,130 +288,130 @@ const shiftModifierSwissGerman = { { code: 2101, labels: { - primary: "°" - } + primary: "°", + }, }, { code: 2078, labels: { - primary: "+" - } + primary: "+", + }, }, { code: 2079, labels: { - primary: '"' - } + primary: '"', + }, }, { code: 2080, labels: { - primary: "*" - } + primary: "*", + }, }, { code: 2081, labels: { - primary: "ç" - } + primary: "ç", + }, }, { code: 2083, labels: { - primary: "&" - } + primary: "&", + }, }, { code: 2084, labels: { - primary: "/" - } + primary: "/", + }, }, { code: 2085, labels: { - primary: "(" - } + primary: "(", + }, }, { code: 2086, labels: { - primary: ")" - } + primary: ")", + }, }, { code: 2087, labels: { - primary: "=" - } + primary: "=", + }, }, { code: 2093, labels: { - primary: "?" - } + primary: "?", + }, }, { code: 2094, labels: { - primary: "`" - } + primary: "`", + }, }, { code: 2095, labels: { - primary: "È" - } + primary: "È", + }, }, { code: 2096, labels: { - primary: "!" - } + primary: "!", + }, }, { code: 2097, labels: { - primary: "£" - } + primary: "£", + }, }, { code: 2099, labels: { - primary: "É" - } + primary: "É", + }, }, { code: 2100, labels: { - primary: "À" - } + primary: "À", + }, }, { code: 2102, labels: { - primary: ";" - } + primary: ";", + }, }, { code: 2103, labels: { - primary: ":" - } + primary: ":", + }, }, { code: 2104, labels: { - primary: "_" - } + primary: "_", + }, }, { code: 2148, labels: { - primary: ">" - } - } - ] + primary: ">", + }, + }, + ], }; const swissGerman = swissGermanLetters.concat(swissGermanModifierKeys); @@ -541,7 +541,7 @@ const swissGermanModifiedTables = [ DualUseLayer5Tables, DualUseLayer6Tables, DualUseLayer7Tables, - DualUseLayer8Tables + DualUseLayer8Tables, ]; export { swissGerman as default, swissGermanModifiedTables }; diff --git a/src/declaration.d.ts b/src/declaration.d.ts new file mode 100644 index 000000000..1ec17c251 --- /dev/null +++ b/src/declaration.d.ts @@ -0,0 +1,6 @@ +declare module "*.gif"; +declare module "*.jpg"; +declare module "*.mp4"; +declare module "*.png"; +declare module "*.gif"; +declare module "*.svg"; diff --git a/src/hw/battery.ts b/src/hw/battery.ts new file mode 100644 index 000000000..2b6f83937 --- /dev/null +++ b/src/hw/battery.ts @@ -0,0 +1,3 @@ +export enum BatteryCodes { + STATUS = 54108, +} diff --git a/src/hw/bluetooth.ts b/src/hw/bluetooth.ts new file mode 100644 index 000000000..97beece99 --- /dev/null +++ b/src/hw/bluetooth.ts @@ -0,0 +1,3 @@ +export enum BluetoothCodes { + PAIRING = 54109, +} diff --git a/src/hw/energy.ts b/src/hw/energy.ts new file mode 100644 index 000000000..52573791e --- /dev/null +++ b/src/hw/energy.ts @@ -0,0 +1,3 @@ +export enum EnergyCodes { + STATUS = 54111, +} diff --git a/src/hw/rf.ts b/src/hw/rf.ts new file mode 100644 index 000000000..78bd1956a --- /dev/null +++ b/src/hw/rf.ts @@ -0,0 +1,3 @@ +export enum RFCodes { + STATUS = 54112, +} diff --git a/src/main/createWindow.ts b/src/main/createWindow.ts new file mode 100644 index 000000000..e9d4f5b47 --- /dev/null +++ b/src/main/createWindow.ts @@ -0,0 +1,67 @@ +import { BrowserWindow, app } from "electron"; +import windowStateKeeper from "electron-window-state"; +import path from "path"; +import { configureNativeTheme } from "./setup/theme"; +import { configureIPCs } from "./setup/configureIPCs"; +import configureRedirect from "./setup/configureRedirect"; +import onDevTools from "./setup/onDevTools"; +import onReadyToShow from "./setup/onReadyToShow"; +import onClose from "./setup/onClose"; +import Window from "./managers/Window"; +import { configureUSB } from "./setup/configureUSB"; + +// This allows TypeScript to pick up the magic constants that's auto-generated by Forge's Webpack +// plugin that tells the Electron app where to look for the Webpack-bundled app code (depending on +// whether you're running in development or production). +declare const MAIN_WINDOW_WEBPACK_ENTRY: string; +declare const MAIN_WINDOW_PRELOAD_WEBPACK_ENTRY: string; + +const createWindow = () => { + // Create the browser window. + const mainWindowState = windowStateKeeper({ + defaultWidth: 1200, + defaultHeight: 900, + }); + + const mainWindow = new BrowserWindow({ + x: mainWindowState.x, + y: mainWindowState.y, + width: mainWindowState.width, + height: mainWindowState.height, + minWidth: 650, + minHeight: 570, + resizable: true, + icon: path.join("../renderer/static", "/logo.png"), + show: false, + backgroundColor: "#2e2c29", + webPreferences: { + preload: MAIN_WINDOW_PRELOAD_WEBPACK_ENTRY, + sandbox: false, + nodeIntegration: true, + contextIsolation: false, + webSecurity: false, + }, + }); + + configureIPCs(); + mainWindowState.manage(mainWindow); + + // and load the index.html of the app. + mainWindow.loadURL(MAIN_WINDOW_WEBPACK_ENTRY); + + Window.getInstance(); // init Windows manager + Window.setWindow(mainWindow); + if (!app.isPackaged) { + // Open the DevTools if we are in development mode + mainWindow.webContents.openDevTools(); + } + + configureNativeTheme(); + configureRedirect(); + onReadyToShow(); + onDevTools(); + onClose(); + configureUSB(); +}; + +export default createWindow; diff --git a/src/main/dragons.js b/src/main/dragons.js deleted file mode 100644 index 1be960311..000000000 --- a/src/main/dragons.js +++ /dev/null @@ -1,29 +0,0 @@ -// -*- mode: js-jsx -*- -/* Bazecor -- Kaleidoscope Command Center - * Copyright (C) 2020 Keyboardio, Inc. - * Copyright (C) 2020 DygmaLab SE - * - * This program is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by the Free Software - * Foundation, version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -/* - * This is a file with workarounds, and as such, here be dragons. - */ - -// We set this up here, so we can set $NODE_ENV in the main process, see the -// comments there. -const Environment = { - name: process.env.NODE_ENV -}; - -export { Environment }; diff --git a/src/main/index.js b/src/main/index.js deleted file mode 100644 index 3d4fbcc8b..000000000 --- a/src/main/index.js +++ /dev/null @@ -1,389 +0,0 @@ -// -*- mode: js-jsx -*- -/* Bazecor -- Kaleidoscope Command Center - * Copyright (C) 2018, 2019, 2020 Keyboardio, Inc. - * Copyright (C) 2019, 2020 DygmaLab SE - * - * This program is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by the Free Software - * Foundation, version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -import { Environment } from "./dragons"; - -// This is a workaround for electron-webpack#275[1]. We need to use backticks -// for NODE_ENV, otherwise the code would fail to compile with webpack. We also -// grab the correct value of NODE_ENV from a separate module, to avoid webpack -// optimizing things out. -// -// [1]: https://github.com/electron-userland/electron-webpack/issues/275 -process.env[`NODE_ENV`] = Environment.name; - -app.disableHardwareAcceleration(); -if (process.platform !== "darwin") { - app.commandLine.appendSwitch("high-dpi-support", 1); - app.commandLine.appendSwitch("force-device-scale-factor", 1); -} - -import { app, BrowserWindow, Menu, nativeTheme, dialog, ipcMain, shell, systemPreferences } from "electron"; -import { format as formatUrl } from "url"; -import * as path from "path"; -import * as fs from "fs"; -import * as sudo from "sudo-prompt"; -import windowStateKeeper from "electron-window-state"; -import installExtension, { REACT_DEVELOPER_TOOLS } from "electron-devtools-installer"; -import { getStaticPath } from "../renderer/config"; -import { uIOhook, UiohookKey } from "uiohook-napi"; - -const Store = require("electron-store"); -const store = new Store(); -const drivelist = require("drivelist"); - -const isDevelopment = process.env.NODE_ENV !== "production"; -let mainWindow; -let globalRecording = false; - -function delay(time) { - return new Promise(resolve => setTimeout(resolve, time)); -} - -async function createMainWindow() { - let mainWindowState = windowStateKeeper({ - defaultWidth: 1200, - defaultHeight: 900 - }); - - const window = new BrowserWindow({ - x: mainWindowState.x, - y: mainWindowState.y, - width: mainWindowState.width, - height: mainWindowState.height, - minWidth: 650, - minHeight: 570, - resizable: true, - icon: path.join(getStaticPath(), "/logo.png"), - show: false, - backgroundColor: "#2e2c29", - webPreferences: { - sandbox: false, - nodeIntegration: true, - contextIsolation: false, - webSecurity: false - } - }); - - mainWindowState.manage(window); - - if (isDevelopment) { - window.loadURL(`http://localhost:${process.env.ELECTRON_WEBPACK_WDS_PORT}`); - } else { - window.loadURL( - formatUrl({ - pathname: path.join(__dirname, "index.html"), - protocol: "file", - slashes: true - }) - ); - } - - window.once("ready-to-show", () => { - window.show(); - }); - - const theThemeHasChanged = () => { - window.webContents.send("darkTheme-update", nativeTheme.shouldUseDarkColors); - }; - - nativeTheme.on("updated", theThemeHasChanged); - - const UiohookToName = Object.fromEntries(Object.entries(UiohookKey).map(([k, v]) => [v, k])); - - // function send webContents event for KeyDown - const sendkeyDown = async e => { - let data = { event: e, name: UiohookToName[e.keycode], time: Date.now() }; - await window.webContents.send("recorded-key-down", data); - }; - - // function send webContents event for keyUp - const sendKeyUp = async e => { - let data = { event: e, name: UiohookToName[e.keycode], time: Date.now() }; - await window.webContents.send("recorded-key-up", data); - }; - - // function send webContents event for keyUp - // const sendMouseMove = async e => { - // let data = { event: e, name: UiohookToName[e.keycode], time: Date.now() }; - // await window.webContents.send("recorded-mouse-move", data); - // }; - - // function send webContents event for KeyDown - const sendMouseClick = async e => { - let data = { event: e, name: UiohookToName[e.keycode], time: Date.now() }; - await window.webContents.send("recorded-mouse-click", data); - }; - - // function send webContents event for keyUp - const sendMouseWheel = async e => { - let data = { event: e, name: UiohookToName[e.keycode], time: Date.now() }; - await window.webContents.send("recorded-mouse-wheel", data); - }; - - ipcMain.on("start-recording", (event, arg) => { - console.log("start-recording"); - globalRecording = true; - uIOhook.on("keydown", sendkeyDown); - uIOhook.on("keyup", sendKeyUp); - // uIOhook.on("mousemove", sendMouseMove); - // uIOhook.on("click", sendMouseClick); - // uIOhook.on("wheel", sendMouseWheel); - uIOhook.start(); - }); - - ipcMain.on("stop-recording", (event, arg) => { - console.log("stop-recording"); - globalRecording = false; - uIOhook.off("keydown", sendkeyDown); - uIOhook.off("keyup", sendKeyUp); - // uIOhook.off("mousemove", sendMouseMove); - // uIOhook.off("click", sendMouseClick); - // uIOhook.off("wheel", sendMouseWheel); - uIOhook.stop(); - }); - - ipcMain.handle("list-drives", async (event, someArgument) => { - let drives = undefined; - let result = undefined; - while (result == undefined) { - drives = await drivelist.list(); - drives.forEach(async (drive, index) => { - console.log("drive info", drive.description, drive.mountpoints); - if (drive.description.includes("RPI RP2") || drive.description.includes("RPI-RP2")) { - while (drive.mountpoints[0] == undefined || drive.mountpoints.length == 0) { - delay(100); - drives = await drivelist.list(); - result = drives[index].mountpoints[0]; - console.log(result); - } - if (result == undefined) { - result = drive.mountpoints[0]; - } - } - }); - } - return result.path; - }); - - //const data = await ipcRenderer.invoke("open-dialog", options); - ipcMain.handle("open-dialog", async (event, options) => { - const data = await dialog.showOpenDialog(window, options); - return data; - }); - - //const newPath = await ipcRenderer.invoke("save-dialog", options); - ipcMain.handle("save-dialog", async (event, options) => { - const data = await dialog.showSaveDialogSync(window, options); - return data; - }); - - //const newPath = await ipcRenderer.invoke("is-devtools-opened", options); - ipcMain.handle("is-devtools-opened", async (event, someArgument) => { - const data = window.webContents.isDevToolsOpened(); - return data; - }); - - //await ipcRenderer.invoke("manage-devtools", action); - ipcMain.handle("manage-devtools", (event, action) => { - if (action === true) { - window.webContents.openDevTools(); - } else { - window.webContents.closeDevTools(); - } - return; - }); - - //await ipcRenderer.invoke("get-userPath","userData"); - ipcMain.handle("get-userPath", (event, path) => { - return app.getPath(path); - }); - - // ipcRenderer.invoke("openExternal", URI); - ipcMain.handle("openExternal", (event, URI) => { - return shell.openExternal(URI); - }); - - // ipcRenderer.invoke("get-Locale"); - ipcMain.handle("get-Locale", (event, someArgument) => { - return app.getLocale(); - }); - - // ipcRenderer.invoke("get-NativeTheme"); - ipcMain.handle("get-NativeTheme", (event, someArgument) => { - return nativeTheme.shouldUseDarkColors; - }); - - window.on("closed", () => { - nativeTheme.off("updated", theThemeHasChanged); - mainWindow = null; - }); - - window.webContents.on("devtools-opened", () => { - window.focus(); - setImmediate(() => { - window.focus(); - }); - window.webContents.send("opened-devtool", true); - }); - - window.webContents.on("devtools-closed", () => { - window.webContents.send("closed-devtool", false); - }); - - let handleRedirect = (e, url) => { - if (url != window.webContents.getURL()) { - e.preventDefault(); - require("electron").shell.openExternal(url); - } - }; - - window.webContents.on("will-navigate", handleRedirect); - window.webContents.on("new-window", handleRedirect); - - window.once("ready-to-show", () => { - window.show(); - if (process.platform === "darwin") { - systemPreferences.isTrustedAccessibilityClient(true); - } - if (process.platform === "linux") { - if (!checkUdev()) { - installUdev(window); - } - } - }); - - return window; -} - -function checkUdev() { - let filename = "/etc/udev/rules.d/10-dygma.rules"; - - try { - if (fs.existsSync(filename)) { - return true; - } - } catch (err) { - console.error(err); - return false; - } -} - -function installUdev(mainWindow) { - var options = { - name: "Install Udev rules", - icns: "./build/icon.icns" - }; - const dialogOpts = { - type: "question", - buttons: ["Cancel", "Install"], - cancelId: 0, - defaultId: 1, - title: "Udev rules Installation", - message: "Bazecor lacks write access to your Raise keyboard", - detail: "Press install to set up the required Udev Rules, then scan keyboards again." - }; - dialog.showMessageBox(mainWindow, dialogOpts).then(response => { - if (response.response === 1) { - sudo.exec( - `echo 'SUBSYSTEMS=="usb", ATTRS{idVendor}=="1209", ATTRS{idProduct}=="2201", GROUP="users", MODE="0666"\nSUBSYSTEMS=="usb", ATTRS{idVendor}=="1209", ATTRS{idProduct}=="2200", GROUP="users", MODE="0666"' > /etc/udev/rules.d/10-dygma.rules && udevadm control --reload-rules && udevadm trigger`, - options, - error => { - if (error !== null) { - console.log("stdout: " + error.message); - const errorOpts = { - type: "error", - buttons: ["Ok"], - defaultId: 0, - title: "Error when launching sudo prompt", - message: "An error happened when launching a sudo prompt window", - detail: - "Your linux distribution lacks a polkit agent, installing polkit-1-auth-agent, policykit-1-gnome, or polkit-kde-1 (depending on your desktop manager) will solve this problem\n\n" + - error.message - }; - dialog.showMessageBox(mainWindow, errorOpts, null); - } - } - ); - } - }); -} - -// quit application when all windows are closed -app.on("window-all-closed", () => { - // on macOS it is common for applications to stay open until the user explicitly quits - if (process.platform !== "darwin") { - app.quit(); - } -}); - -app.on("activate", () => { - // on macOS it is common to re-create a window even after all windows have been closed - if (mainWindow === null) { - mainWindow = createMainWindow(); - } -}); - -// create main BrowserWindow when electron is ready -app.on("ready", async () => { - let bfolder = store.get("settings.backupFolder"); - console.log("CHECKING BACKUP FOLDER VALUE", bfolder); - if (bfolder == "" || bfolder == undefined) { - const defaultPath = path.join(app.getPath("home"), "Dygma", "Backups"); - console.log(defaultPath); - store.set("settings.backupFolder", defaultPath); - fs.mkdir(defaultPath, { recursive: true }, err => { - if (err) { - console.error(err); - } - console.log("Directory created successfully!"); - }); - } - - let darkMode = store.get("settings.darkMode"); - if (typeof darkMode === "boolean" || darkMode === undefined) { - darkMode = "system"; - store.set("settings.darkMode", "system"); - } - // Setting nativeTheme currently only seems to work at this point in the code - nativeTheme.themeSource = darkMode; - - if (isDevelopment) { - await installExtension(REACT_DEVELOPER_TOOLS) - .then(name => console.log(`Added Extension: ${name}`)) - .catch(err => console.log("An error occurred: ", err)); - } - - Menu.setApplicationMenu(null); - mainWindow = createMainWindow(); -}); - -app.on("web-contents-created", (_, wc) => { - wc.on("before-input-event", (_, input) => { - if (!globalRecording && input.type == "keyDown" && input.control) { - if (input.shift && input.code == "KeyI") { - wc.openDevTools(); - } - if (input.code == "KeyR") { - wc.reload(); - } - if (input.code == "KeyQ") { - app.quit(); - } - } - }); -}); diff --git a/src/main/index.ts b/src/main/index.ts new file mode 100644 index 000000000..aa0abfa1e --- /dev/null +++ b/src/main/index.ts @@ -0,0 +1,71 @@ +import { app, BrowserWindow, Menu } from "electron"; +import electronUpdater from "update-electron-app"; +import createWindow from "./createWindow"; +import { setTheme } from "./setup/theme"; +import setBackup from "./setup/setBackup"; +import GlobalRecording from "./managers/GlobalRecording"; +import { addUSBListeners, removeUSBListeners } from "./setup/configureUSB"; +import { removeIPCs } from "./setup/configureIPCs"; + +electronUpdater(); + +// Handle creating/removing shortcuts on Windows when installing/uninstalling. +// eslint-disable-next-line global-require +if (require("electron-squirrel-startup")) { + app.quit(); +} + +if (process.platform === "linux") { + app.commandLine.appendSwitch("no-sandbox"); +} + +// This method will be called when Electron has finished +// initialization and is ready to create browser windows. +// Some APIs can only be used after this event occurs. +app.on("ready", async () => { + addUSBListeners(); + setBackup(); + setTheme(); + // await setDevTools(); devtools do not work with latest electron + createWindow(); + // we do not want a menu on top of the window + Menu.setApplicationMenu(null); +}); + +// Quit when all windows are closed, except on macOS. There, it's common +// for applications and their menu bar to stay active until the user quits +// explicitly with Cmd + Q. +app.on("window-all-closed", () => { + removeUSBListeners(); + if (process.platform !== "darwin") { + app.quit(); + } else { + removeIPCs(); + } +}); + +app.on("activate", async () => { + // On OS X it's common to re-create a window in the app when the + // dock icon is clicked and there are no other windows open. + if (BrowserWindow.getAllWindows().length === 0) { + addUSBListeners(); + createWindow(); + } +}); + +app.on("web-contents-created", (_, wc) => { + wc.on("before-input-event", (__, input) => { + const globalRecording = GlobalRecording.getInstance(); + if (!globalRecording.getRecording() && input.type === "keyDown" && input.control) { + if (input.shift && input.code === "KeyI") { + wc.openDevTools(); + } + if (input.code === "KeyR") { + wc.reload(); + } + if (input.code === "KeyQ") { + app.quit(); + } + } + }); +}); diff --git a/src/main/managers/GlobalRecording.ts b/src/main/managers/GlobalRecording.ts new file mode 100644 index 000000000..29a9c28e0 --- /dev/null +++ b/src/main/managers/GlobalRecording.ts @@ -0,0 +1,26 @@ +class GlobalRecording { + private static instance: GlobalRecording; + + private static value: boolean; + + private constructor() { + GlobalRecording.value = false; + } + + public static getInstance() { + if (!GlobalRecording.instance) { + GlobalRecording.instance = new GlobalRecording(); + } + return GlobalRecording.instance; + } + + public setRecording(newValue: boolean) { + GlobalRecording.value = newValue; + } + + public getRecording() { + return GlobalRecording.value; + } +} + +export default GlobalRecording; diff --git a/src/main/managers/Store.ts b/src/main/managers/Store.ts new file mode 100644 index 000000000..8cf356283 --- /dev/null +++ b/src/main/managers/Store.ts @@ -0,0 +1,18 @@ +import ElectronStore from "electron-store"; + +class Store { + private static instance: ElectronStore; + + private constructor() { + // this comment is here so TS stays quiet + } + + public static getStore() { + if (!Store.instance) { + Store.instance = new ElectronStore(); + } + return Store.instance; + } +} + +export default Store; diff --git a/src/main/managers/Window.ts b/src/main/managers/Window.ts new file mode 100644 index 000000000..19785c0fa --- /dev/null +++ b/src/main/managers/Window.ts @@ -0,0 +1,28 @@ +import { BrowserWindow } from "electron"; + +class Window { + private static instance: Window; + + private static window: BrowserWindow; + + private constructor() { + // this comment is here so TS stays quiet + } + + public static getInstance() { + if (!Window.instance) { + Window.instance = new Window(); + } + return Window.instance; + } + + public static setWindow(newWindow: BrowserWindow | null) { + Window.window = newWindow; + } + + public static getWindow(): BrowserWindow | null { + return Window.window; + } +} + +export default Window; diff --git a/src/main/setup/configureCaptureKeys.ts b/src/main/setup/configureCaptureKeys.ts new file mode 100644 index 000000000..08dd68888 --- /dev/null +++ b/src/main/setup/configureCaptureKeys.ts @@ -0,0 +1,17 @@ +import { UiohookKey } from "uiohook-napi"; +import sendToRenderer from "../utils/sendToRenderer"; + +const UiohookToName = Object.fromEntries(Object.entries(UiohookKey).map(([k, v]) => [v, k])); + +const sendkeyDown = (e: any) => { + const data = { event: e, name: UiohookToName[e.keycode], time: Date.now() }; + sendToRenderer("recorded-key-down", data); +}; + +// function send webContents event for keyUp +const sendKeyUp = (e: any) => { + const data = { event: e, name: UiohookToName[e.keycode], time: Date.now() }; + sendToRenderer("recorded-key-up", data); +}; + +export { sendKeyUp, sendkeyDown }; diff --git a/src/main/setup/configureIPCs.ts b/src/main/setup/configureIPCs.ts new file mode 100644 index 000000000..1d60f74c7 --- /dev/null +++ b/src/main/setup/configureIPCs.ts @@ -0,0 +1,85 @@ +import { ipcMain, app, dialog, shell, nativeTheme } from "electron"; +import { uIOhook } from "uiohook-napi"; +import { sendKeyUp, sendkeyDown } from "./configureCaptureKeys"; +import listDrivesHandler from "../utils/listDrivesHandler"; +import GlobalRecording from "../managers/GlobalRecording"; +import Window from "../managers/Window"; + +const removeIPCs = () => { + ipcMain.removeHandler("start-recording"); + ipcMain.removeHandler("stop-recording"); + ipcMain.removeHandler("list-drives"); + ipcMain.removeHandler("open-dialog"); + ipcMain.removeHandler("is-devtools-opened"); + ipcMain.removeHandler("save-dialog"); + ipcMain.removeHandler("manage-devtools"); + ipcMain.removeHandler("get-userPath"); + ipcMain.removeHandler("get-Locale"); + ipcMain.removeHandler("openExternal"); + ipcMain.removeHandler("get-NativeTheme"); +}; + +const configureIPCs = () => { + const globalRecording = GlobalRecording.getInstance(); + + ipcMain.on("start-recording", () => { + console.log("start-recording"); + globalRecording.setRecording(true); + uIOhook.on("keydown", sendkeyDown); + uIOhook.on("keyup", sendKeyUp); + uIOhook.start(); + }); + + ipcMain.on("stop-recording", () => { + console.log("stop-recording"); + globalRecording.setRecording(false); + uIOhook.off("keydown", sendkeyDown); + uIOhook.off("keyup", sendKeyUp); + uIOhook.stop(); + }); + + ipcMain.handle("list-drives", async (event, options) => { + const data = listDrivesHandler(event, options); + return data; + }); + + ipcMain.handle("open-dialog", async (event, options) => { + const window = Window.getWindow(); + const data = await dialog.showOpenDialog(window, options); + return data; + }); + + ipcMain.handle("save-dialog", async (event, options) => { + const window = Window.getWindow(); + const data = dialog.showSaveDialogSync(window, options); + return data; + }); + + ipcMain.handle("is-devtools-opened", async () => { + const window = Window.getWindow(); + const data = window.webContents.isDevToolsOpened(); + return data; + }); + + ipcMain.handle("manage-devtools", (event, action) => { + const window = Window.getWindow(); + if (action === true) { + window.webContents.openDevTools(); + } else { + window.webContents.closeDevTools(); + } + }); + + ipcMain.handle("get-userPath", (event, path) => app.getPath(path)); + + ipcMain.handle("openExternal", (event, URI) => shell.openExternal(URI)); + + ipcMain.handle("get-Locale", () => { + const locale = app.getLocale(); + return locale; + }); + + ipcMain.handle("get-NativeTheme", () => nativeTheme.shouldUseDarkColors); +}; + +export { configureIPCs, removeIPCs }; diff --git a/src/main/setup/configureRedirect.ts b/src/main/setup/configureRedirect.ts new file mode 100644 index 000000000..781fa96b4 --- /dev/null +++ b/src/main/setup/configureRedirect.ts @@ -0,0 +1,21 @@ +import { shell } from "electron"; +import Window from "../managers/Window"; + +const configureRedirect = () => { + const window = Window.getWindow(); + const handleRedirect = (e: any, url: string) => { + if (url !== window.webContents.getURL()) { + e.preventDefault(); + shell.openExternal(url); + } + }; + + window.webContents.on("will-navigate", handleRedirect); + + window.webContents.setWindowOpenHandler(() => + // new-window handler removed in Electron 22 + ({ action: "deny" }), + ); +}; + +export default configureRedirect; diff --git a/src/main/setup/configureUSB.ts b/src/main/setup/configureUSB.ts new file mode 100644 index 000000000..ea38ac8e7 --- /dev/null +++ b/src/main/setup/configureUSB.ts @@ -0,0 +1,86 @@ +// -*- mode: js-jsx -*- +/* Chrysalis -- Kaleidoscope Command Center + * Copyright (C) 2018-2022 Keyboardio, Inc. + * + * This program is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free Software + * Foundation, version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +import { ipcMain } from "electron"; +import { getDeviceList, WebUSB } from "usb"; +import sendToRenderer from "../utils/sendToRenderer"; +import Focus from "../../api/focus"; + +const dygmaVendorIDs = [0x35ef, 0x1209]; + +const webusb = new WebUSB({ + allowAllDevices: true, +}); + +export const onUSBDisconnect = async (event: USBConnectionEvent) => { + const { device } = event; + if (device) { + const vendorID = device.vendorId; + const productID = device.productId; + if (dygmaVendorIDs.includes(vendorID)) { + console.log("Dygma Device USB Disconnection detected"); + console.log("VendorID", vendorID); + console.log("ProductID", productID); + sendToRenderer("usb-disconnected", device); + const focus = new Focus(); + if (focus.device?.usb?.productId === productID) { + await focus.close(); + } + } + } +}; +export const onUSBConnect = (event: USBConnectionEvent) => { + const { device } = event; + if (device) { + const vendorID = device.vendorId; + const productID = device.productId; + if (dygmaVendorIDs.includes(vendorID)) { + console.log("Dygma Device USB Connection detected"); + console.log("VendorID", vendorID); + console.log("ProductID", productID); + sendToRenderer("usb-connected", vendorID, productID); + } + } +}; + +export const addUSBListeners = () => { + webusb.addEventListener("connect", onUSBConnect); + webusb.addEventListener("disconnect", onUSBDisconnect); +}; + +export const removeUSBListeners = () => { + webusb.removeEventListener("connect", onUSBConnect); + webusb.removeEventListener("disconnect", onUSBDisconnect); + ipcMain.removeHandler("usb-devices"); +}; + +export const getDevices = () => { + const devices = getDeviceList(); + return devices; +}; + +export const configureUSB = () => { + ipcMain.handle("usb-devices", () => { + const devices = getDeviceList(); + return devices; + }); + // We're relying on webusb to send us notifications about device + // connect/disconnect events, but it only sends disconnect events for devices + // it knows. If there are devices connected when we start up, we need to scan + // them first to notice disconnects. We do that here. + webusb.getDevices(); +}; diff --git a/src/main/setup/onClose.ts b/src/main/setup/onClose.ts new file mode 100644 index 000000000..cfb0f7fd3 --- /dev/null +++ b/src/main/setup/onClose.ts @@ -0,0 +1,13 @@ +import { nativeTheme } from "electron"; +import { onThemeChange } from "./theme"; +import Window from "../managers/Window"; + +const onClose = () => { + const window = Window.getWindow(); + window.on("closed", () => { + nativeTheme.off("updated", onThemeChange); + Window.setWindow(null); + }); +}; + +export default onClose; diff --git a/src/main/setup/onDevTools.ts b/src/main/setup/onDevTools.ts new file mode 100644 index 000000000..8f941884e --- /dev/null +++ b/src/main/setup/onDevTools.ts @@ -0,0 +1,19 @@ +import Window from "../managers/Window"; +import sendToRenderer from "../utils/sendToRenderer"; + +const onDevTools = () => { + const window = Window.getWindow(); + window.webContents.on("devtools-opened", () => { + window.focus(); + setImmediate(() => { + window.focus(); + }); + sendToRenderer("opened-devtool", true); + }); + + window.webContents.on("devtools-closed", () => { + sendToRenderer("closed-devtool", false); + }); +}; + +export default onDevTools; diff --git a/src/main/setup/onReadyToShow.ts b/src/main/setup/onReadyToShow.ts new file mode 100644 index 000000000..9fdc5747a --- /dev/null +++ b/src/main/setup/onReadyToShow.ts @@ -0,0 +1,20 @@ +import { systemPreferences } from "electron"; +import { checkUdev, installUdev } from "../utils/udev"; +import Window from "../managers/Window"; + +const onReadyToShow = () => { + const window = Window.getWindow(); + window.once("ready-to-show", () => { + window.show(); + if (process.platform === "darwin") { + systemPreferences.isTrustedAccessibilityClient(true); + } + if (process.platform === "linux") { + if (!checkUdev()) { + installUdev(window); + } + } + }); +}; + +export default onReadyToShow; diff --git a/src/main/setup/setBackup.ts b/src/main/setup/setBackup.ts new file mode 100644 index 000000000..e48420a3e --- /dev/null +++ b/src/main/setup/setBackup.ts @@ -0,0 +1,23 @@ +import { app } from "electron"; +import path from "path"; +import fs from "fs"; +import Store from "../managers/Store"; + +const setBackup = () => { + const store = Store.getStore(); + const bfolder = store.get("settings.backupFolder"); + console.log("CHECKING BACKUP FOLDER VALUE", bfolder); + if (bfolder == "" || bfolder == undefined) { + const defaultPath = path.join(app.getPath("home"), "Dygma", "Backups"); + console.log(defaultPath); + store.set("settings.backupFolder", defaultPath); + fs.mkdir(defaultPath, { recursive: true }, err => { + if (err) { + console.error(err); + } + console.log("Directory created successfully!"); + }); + } +}; + +export default setBackup; diff --git a/src/main/setup/setDevTools.ts b/src/main/setup/setDevTools.ts new file mode 100644 index 000000000..039a23d4e --- /dev/null +++ b/src/main/setup/setDevTools.ts @@ -0,0 +1,13 @@ +const setDevTools = async () => { + if (process.env.NODE_ENV !== "production") { + try { + const devTools = await import("electron-devtools-installer"); + const extensionLoaded = await devTools.default(devTools.REACT_DEVELOPER_TOOLS); + console.log(`Extension loaded ${extensionLoaded}`); + } catch (err) { + console.log("Error while loading dev tools: ", err); + } + } +}; + +export default setDevTools; diff --git a/src/main/setup/theme.ts b/src/main/setup/theme.ts new file mode 100644 index 000000000..1a9e87c92 --- /dev/null +++ b/src/main/setup/theme.ts @@ -0,0 +1,24 @@ +import { nativeTheme, NativeTheme } from "electron"; +import Store from "../managers/Store"; +import sendToRenderer from "../utils/sendToRenderer"; + +const onThemeChange = () => () => { + sendToRenderer("darkTheme-update", nativeTheme.shouldUseDarkColors); +}; + +const configureNativeTheme = () => { + nativeTheme.on("updated", onThemeChange()); +}; + +const setTheme = () => { + const store = Store.getStore(); + let darkMode = store.get("settings.darkMode"); + if (typeof darkMode === "boolean" || darkMode === undefined) { + darkMode = "system"; + store.set("settings.darkMode", "system"); + } + // Setting nativeTheme currently only seems to work at this point in the code + nativeTheme.themeSource = darkMode as NativeTheme["themeSource"]; +}; + +export { configureNativeTheme, setTheme, onThemeChange }; diff --git a/src/main/tests/main.test.ts b/src/main/tests/main.test.ts new file mode 100644 index 000000000..70d481647 --- /dev/null +++ b/src/main/tests/main.test.ts @@ -0,0 +1,5 @@ +import { expect, test } from "vitest"; + +test("Main core test", () => { + expect(true).toBe(true); +}); diff --git a/src/main/tests/usb.test.ts b/src/main/tests/usb.test.ts new file mode 100644 index 000000000..755a71b8e --- /dev/null +++ b/src/main/tests/usb.test.ts @@ -0,0 +1,18 @@ +import { test, vi, expect } from "vitest"; +import { configureUSB, getDevices } from "../setup/configureUSB"; + +test("get list of USB devices", async () => { + vi.mock("electron", async () => { + const mockIpcMain = { + handle: vi.fn().mockReturnThis(), + }; + return { + ipcMain: mockIpcMain, + }; + }); + await configureUSB(); + const devices = getDevices(); + if (!process.env.GITHUB_ACTIONS) { + expect(devices.length).toBeGreaterThan(0); + } +}); diff --git a/src/main/utils/delay.ts b/src/main/utils/delay.ts new file mode 100644 index 000000000..df252dadc --- /dev/null +++ b/src/main/utils/delay.ts @@ -0,0 +1,5 @@ +function delay(timeInMs: number) { + return new Promise(resolve => setTimeout(resolve, timeInMs)); +} + +export default delay; diff --git a/src/main/utils/listDrivesHandler.ts b/src/main/utils/listDrivesHandler.ts new file mode 100644 index 000000000..1fb14fcd5 --- /dev/null +++ b/src/main/utils/listDrivesHandler.ts @@ -0,0 +1,30 @@ +import delay from "./delay"; + +// eslint-disable-next-line @typescript-eslint/no-var-requires +const drivelist = require("drivelist"); + +const listDrivesHandler = async (_event: any, _someArgument: any) => { + let drives; + let result: undefined | any; + while (result === undefined) { + drives = await drivelist.list(); + drives.forEach(async (drive: { description: string | string[]; mountpoints: string | any[] }, index: string | number) => { + console.log("drive info", drive.description, drive.mountpoints); + if (drive.description.includes("RPI RP2") || drive.description.includes("RPI-RP2")) { + while (drive.mountpoints[0] === undefined || drive.mountpoints.length === 0) { + await delay(100); + drives = await drivelist.list(); + result = drives[index].mountpoints[0]; + console.log(result); + if (result !== undefined) break; + } + if (result === undefined) { + result = drive.mountpoints[0]; + } + } + }); + } + return result.path; +}; + +export default listDrivesHandler; diff --git a/src/main/utils/sendToRenderer.ts b/src/main/utils/sendToRenderer.ts new file mode 100644 index 000000000..e522fd75f --- /dev/null +++ b/src/main/utils/sendToRenderer.ts @@ -0,0 +1,8 @@ +import Window from "../managers/Window"; + +const sendToRenderer = (channel: string, ...args: unknown[]) => { + const window = Window.getWindow(); + window.webContents.send(channel, ...args); +}; + +export default sendToRenderer; diff --git a/src/main/utils/udev.ts b/src/main/utils/udev.ts new file mode 100644 index 000000000..bcac81108 --- /dev/null +++ b/src/main/utils/udev.ts @@ -0,0 +1,63 @@ +import { BrowserWindow, dialog, MessageBoxOptions } from "electron"; +import fs from "fs"; +import * as sudo from "sudo-prompt"; + +const udevRulesToWrite = + 'SUBSYSTEMS=="usb", ATTRS{idVendor}=="1209", ATTRS{idProduct}=="2201", GROUP="users", MODE="0666"\nSUBSYSTEMS=="usb", ATTRS{idVendor}=="1209", ATTRS{idProduct}=="2200", GROUP="users", MODE="0666"\nSUBSYSTEMS=="usb", ATTRS{idVendor}=="35EF", MODE="0666"'; + +const filename = "/etc/udev/rules.d/10-dygma.rules"; + +const checkUdev = () => { + try { + if (fs.existsSync(filename)) { + const currentUdevRules = fs.readFileSync(filename, "utf-8"); + if (currentUdevRules.trim() !== udevRulesToWrite.trim()) { + return false; + } + return true; + } + } catch (err) { + console.error(err); + } + return false; +}; + +const installUdev = (mainWindow: BrowserWindow) => { + const options = { + name: "Install Udev rules", + icns: "./build/icon.icns", + }; + const dialogOpts: MessageBoxOptions = { + type: "question", + buttons: ["Cancel", "Install"], + cancelId: 0, + defaultId: 1, + title: "Udev rules Installation", + message: "Bazecor lacks write access to your Raise keyboard", + detail: "Press install to set up the required Udev Rules, then scan keyboards again.", + }; + dialog.showMessageBox(mainWindow, dialogOpts).then(response => { + if (response.response === 1) { + sudo.exec( + `echo '${udevRulesToWrite}' > ${filename} && udevadm control --reload-rules && udevadm trigger`, + options, + error => { + if (error !== null) { + console.log(`stdout: ${error.message}`); + const errorOpts: MessageBoxOptions = { + type: "error", + buttons: ["Ok"], + defaultId: 0, + title: "Error when launching sudo prompt", + message: "An error happened when launching a sudo prompt window", + detail: `Your linux distribution lacks a polkit agent, installing polkit-1-auth-agent, policykit-1-gnome, or polkit-kde-1 (depending on your desktop manager) will solve this problem\n\n${error.message}`, + }; + dialog.showMessageBox(mainWindow, errorOpts); + } + }, + ); + } + }); +}; + +export { checkUdev, installUdev }; diff --git a/src/preload/preload.ts b/src/preload/preload.ts new file mode 100644 index 000000000..539b89b2c --- /dev/null +++ b/src/preload/preload.ts @@ -0,0 +1,3 @@ +// See the Electron documentation for details on how to use preload scripts: +// https://www.electronjs.org/docs/latest/tutorial/process-model#preload-scripts +import { contextBridge, ipcRenderer } from "electron"; diff --git a/src/renderer/App.js b/src/renderer/App.js deleted file mode 100644 index 9a911ed72..000000000 --- a/src/renderer/App.js +++ /dev/null @@ -1,422 +0,0 @@ -// -*- mode: js-jsx -*- -/* Bazecor -- Kaleidoscope Command Center - * Copyright (C) 2018, 2019 Keyboardio, Inc. - * - * This program is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by the Free Software - * Foundation, version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -import React from "react"; -import { Switch, Redirect, Route, withRouter } from "react-router-dom"; -import { ToastContainer, toast } from "react-toastify"; -import { ThemeProvider } from "styled-components"; - -import { usb } from "usb"; - -import i18n from "./i18n"; - -import Focus from "../api/focus"; -import "../api/keymap"; -import "../api/colormap"; -import "react-toastify/dist/ReactToastify.css"; - -import GlobalStyles from "./theme/GlobalStyles"; -import Light from "./theme/LightTheme"; -import Dark from "./theme/DarkTheme"; - -import SelectKeyboard from "./views/SelectKeyboard"; -import FirmwareUpdate from "./views/FirmwareUpdate"; -import AltFirmwareUpdate from "./views/AltFirmwareUpdate"; -import LayoutEditor from "./views/LayoutEditor"; -import MacroEditor from "./views/MacroEditor"; -import SuperkeysEditor from "./views/SuperkeysEditor"; -import Preferences from "./views/Preferences"; -import Welcome from "./views/Welcome"; - -import Header from "./modules/NavigationMenu"; -import ToastMessage from "./component/ToastMessage"; -import { IconNoSignal } from "./component/Icon"; - -const Store = require("electron-store"); -const store = new Store(); - -const { ipcRenderer } = require("electron"); -const path = require("path"); - -let focus = new Focus(); -focus.debug = true; -focus.timeout = 15000; - -class App extends React.Component { - constructor(props) { - super(props); - this.updateStorageSchema(); - - const mode = store.get("settings.darkMode"); - let isDark = mode === "dark" ? true : false; - if (mode === "system") { - isDark = ipcRenderer.invoke("get-NativeTheme"); - } - - // Settings entry creation for the beta toggle, it will have a control in preferences to change the policy - - let allowBeta; - if (store.has("settings.allowBeta")) { - allowBeta = store.get("settings.allowBeta"); - } else { - allowBeta = true; - store.set("settings.allowBeta", true); - } - - this.state = { - darkMode: isDark, - connected: false, - device: null, - pages: {}, - contextBar: false, - cancelPendingOpen: false, - fwUpdate: false, - allowBeta: allowBeta - }; - localStorage.clear(); - - toast.configure({ - position: "top-right", - autoClose: false, - hideProgressBar: false, - newestOnTop: false, - draggable: false, - closeOnClick: true, - pauseOnHover: true, - pauseOnFocusLoss: true - }); - - this.forceDarkMode = this.forceDarkMode.bind(this); - } - flashing = false; - - async updateStorageSchema() { - //Update stored settings schema - console.log("Retrieving settings: ", store.get("settings")); - const locale = await this.getLocale(); - if (store.get("settings.language") != undefined) { - console.log("settings already upgraded, returning"); - i18n.setLanguage(store.get("settings.language")); - return; - } - - // create locale language identifier - const translator = { - en: "english", - es: "spanish", - fr: "french", - de: "german", - sv: "swedish", - da: "danish", - no: "norwegian", - is: "icelandic" - }; - // console.log("languageTEST", lang, translator[lang.split("-")[0]], translator["hh"]); - - // Store all settings from electron settings in electron store. - let data = {}; - data.backupFolder = path.join(ipcRenderer.invoke("get-userPath", "home"), "Raise", "Backups"); - data.backupFrequency = 30; - data.language = translator[locale.split("-")[0]] != "" ? translator[locale.split("-")[0]] : "english"; - data.darkMode = "system"; - data.showDefaults = false; - i18n.setLanguage(data.language); - store.set("settings", data); - store.set("neurons", []); - console.log("Testing results: ", data, store.get("settings"), store.get("settings.darkMode")); - } - - async getLocale() { - await ipcRenderer.invoke("get-Locale"); - } - - componentDidMount() { - // Loading font to be sure it wont blink - //document.fonts.load("Libre Franklin"); - - const fontFace = new FontFace("Libre Franklin", "./theme/fonts/LibreFranklin/LibreFranklin-VariableFont_wght.ttf"); - console.log("Font face: ", fontFace); - document.fonts.add(fontFace); - - // Setting up function to receive O.S. dark theme changes - const self = this; - ipcRenderer.on("darkTheme-update", function (evt, message) { - console.log("O.S. DarkTheme Settings changed to ", message); - let dm = store.get("settings.darkMode"); - if (dm === "system") { - self.forceDarkMode(message); - } - }); - - usb.on("detach", async device => { - if (!focus.device) return; - if (this.flashing) return; - - if ( - focus.device.usb.vendorId != device.deviceDescriptor.idVendor || - focus.device.usb.productId != device.deviceDescriptor.idProduct - ) { - return; - } - - // Must await this to stop re-render of components reliant on `focus.device` - // However, it only renders a blank screen. New route is rendered below. - this.props.history.push("./"); - - if (!focus._port.isOpen) { - toast.warning( - } - title={i18n.errors.deviceDisconnected} - content={i18n.errors.deviceDisconnectedContent} - />, - { icon: "" } - ); - } - await focus.close(); - await this.setState({ - connected: false, - device: null, - pages: {} - }); - // Second call to `navigate` will actually render the proper route - this.props.history.push("/keyboard-select"); - }); - } - - forceDarkMode = mode => { - this.setState({ - darkMode: mode - }); - }; - - toggleDarkMode = async mode => { - console.log("Dark mode changed to: ", mode, "NativeTheme says: ", ipcRenderer.invoke("get-NativeTheme")); - let isDark = mode === "dark" ? true : false; - if (mode === "system") { - isDark = ipcRenderer.invoke("get-NativeTheme"); - } - this.setState({ - darkMode: isDark - }); - store.set("settings.darkMode", mode); - }; - - toggleFlashing = async () => { - this.flashing = !this.flashing; - if (!this.flashing) { - this.setState({ - connected: false, - device: null, - pages: {} - }); - this.props.history.push("/keyboard-select"); - } - }; - - toggleFwUpdate = () => { - this.setState({ - fwUpdate: !this.state.fwUpdate - }); - }; - - updateAllowBeta = event => { - let newValue = event.target.checked; - // console.log("new allowBeta value: ", newValue); - store.set("settings.allowBeta", newValue); - this.setState({ - allowBeta: newValue - }); - }; - - onKeyboardConnect = async (port, file) => { - await focus.close(); - - if (!port.path) { - port.device.device = port.device; - - this.setState({ - connected: true, - pages: {}, - device: port.device - }); - this.props.history.push("/welcome"); - return []; - } - - console.log("Connecting to", port.path); - await focus.open(port.path, port.device, file); - console.log("After focus.open"); - if (focus.device.bootloader) { - this.setState({ - connected: true, - pages: {}, - device: port - }); - this.props.history.push("/welcome"); - return []; - } - - console.log("Probing for Focus support..."); - focus.setLayerSize(focus.device); - focus.setLEDMode(focus.device); - const pages = { - keymap: focus.isCommandSupported("keymap.custom") || focus.isCommandSupported("keymap.map"), - colormap: focus.isCommandSupported("colormap.map") && focus.isCommandSupported("palette") - }; - - this.setState({ - connected: true, - device: port, - pages: pages - }); - this.props.history.push(pages.keymap ? "/editor" : "/welcome"); - return []; - }; - - onKeyboardDisconnect = async () => { - focus.close(); - this.setState({ - connected: false, - device: null, - pages: {} - }); - localStorage.clear(); - this.props.history.push("/keyboard-select"); - }; - - cancelContext = dirty => { - if (dirty) { - this.setState({ cancelPendingOpen: true }); - } else { - this.doCancelContext(); - } - }; - doCancelContext = () => { - this.setState({ - contextBar: false, - cancelPendingOpen: false - }); - }; - cancelContextCancellation = () => { - this.setState({ cancelPendingOpen: false }); - }; - startContext = () => { - this.setState({ contextBar: true }); - }; - rgbString = color => { - return `rgb(${color.r},${color.g},${color.b})`; - }; - - render() { - const { connected, pages, contextBar, darkMode, fwUpdate, allowBeta } = this.state; - - let device = - (focus.device && focus.device.info) || - (this.state.device && this.state.device.device && this.state.device.device.info) || - (this.state.device && this.state.device.info); - - return ( - - -
                                          -
                                          - - - - - document.querySelector("#page-title")} - /> - document.querySelector("#page-title")} - darkMode={darkMode} - /> - document.querySelector("#page-title")} - appBarElement={() => document.querySelector("#appbar")} - darkMode={darkMode} - /> - document.querySelector("#page-title")} - /> - document.querySelector("#page-title")} - /> - document.querySelector("#page-title")} - darkMode={darkMode} - allowBeta={allowBeta} - /> - document.querySelector("#page-title")} - darkMode={darkMode} - toggleDarkMode={this.toggleDarkMode} - startContext={this.startContext} - cancelContext={this.cancelContext} - updateAllowBeta={this.updateAllowBeta} - allowBeta={allowBeta} - inContext={contextBar} - /> - -
                                          - - - ); - } -} - -export default withRouter(App); diff --git a/src/renderer/App.jsx b/src/renderer/App.jsx new file mode 100644 index 000000000..6b72e38eb --- /dev/null +++ b/src/renderer/App.jsx @@ -0,0 +1,435 @@ +// -*- mode: js-jsx -*- +/* Bazecor -- Kaleidoscope Command Center + * Copyright (C) 2018, 2019 Keyboardio, Inc. + * + * This program is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free Software + * Foundation, version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +import React from "react"; +import { Routes, Navigate, Route } from "react-router-dom"; +import { ToastContainer, toast } from "react-toastify"; +import { ThemeProvider } from "styled-components"; +import { ipcRenderer } from "electron"; +import path from "path"; +import withRouter from "@Renderer/utils/withRouter"; +import i18n from "@Renderer/i18n"; + +import "react-toastify/dist/ReactToastify.css"; + +import GlobalStyles from "@Renderer/theme/GlobalStyles"; +import Light from "@Renderer/theme/LightTheme"; +import Dark from "@Renderer/theme/DarkTheme"; + +import SelectKeyboard from "@Renderer/views/SelectKeyboard"; +import FirmwareUpdate from "@Renderer/views/FirmwareUpdate"; +import LayoutEditor from "@Renderer/views/LayoutEditor"; +import MacroEditor from "@Renderer/views/MacroEditor"; +import SuperkeysEditor from "@Renderer/views/SuperkeysEditor"; +import Preferences from "@Renderer/views/Preferences"; +import Wireless from "@Renderer/views/Wireless"; +import Welcome from "@Renderer/views/Welcome"; + +import Header from "@Renderer/modules/NavigationMenu"; +import ToastMessage from "@Renderer/component/ToastMessage"; +import { IconNoSignal } from "@Renderer/component/Icon"; + +import Store from "@Renderer/utils/Store"; +import Focus from "../api/focus"; +import "../api/keymap"; +import "../api/colormap"; + +const store = Store.getStore(); + +const focus = new Focus(); +focus.debug = true; +focus.timeout = 5000; + +class App extends React.Component { + flashing = false; + + constructor(props) { + super(props); + this.updateStorageSchema(); + + let isDark; + const mode = store.get("settings.darkMode"); + isDark = mode === "dark"; + if (mode === "system") { + isDark = ipcRenderer.invoke("get-NativeTheme"); + } + + // Settings entry creation for the beta toggle, it will have a control in preferences to change the policy + let allowBeta; + if (store.has("settings.allowBeta")) { + allowBeta = store.get("settings.allowBeta"); + } else { + allowBeta = true; + store.set("settings.allowBeta", true); + } + + this.state = { + darkMode: isDark, + connected: false, + device: null, + pages: {}, + contextBar: false, + fwUpdate: false, + allowBeta, + }; + localStorage.clear(); + + this.forceDarkMode = this.forceDarkMode.bind(this); + } + + componentDidMount() { + // Loading font to be sure it wont blink + // document.fonts.load("Libre Franklin"); + + const fontFace = new FontFace("Libre Franklin", "@Renderer/theme/fonts/LibreFranklin/LibreFranklin-VariableFont_wght.ttf"); + console.log("Font face: ", fontFace); + document.fonts.add(fontFace); + + // Setting up function to receive O.S. dark theme changes + ipcRenderer.on("darkTheme-update", (evt, message) => { + console.log("O.S. DarkTheme Settings changed to ", message); + const dm = store.get("settings.darkMode"); + if (dm === "system") { + this.forceDarkMode(message); + } + }); + ipcRenderer.on("usb-disconnected", (event, response) => this.handleUSBDisconnection(response)); + } + + async handleUSBDisconnection(device) { + const { connected } = this.state; + console.log("Handling device disconnect"); + if (this.flashing) { + console.log("no action due to flashing active"); + return; + } + + if (focus.device?.usb?.productId !== device.device.deviceDescriptor?.idProduct) { + return; + } + + // Must await this to stop re-render of components reliant on `focus.device` + // However, it only renders a blank screen. New route is rendered below. + if (connected) { + toast.warning( + } + title={i18n.errors.deviceDisconnected} + content={i18n.errors.deviceDisconnectedContent} + />, + { icon: "" }, + ); + } + this.onKeyboardDisconnect(); + } + + startContext = () => { + this.setState({ contextBar: true }); + }; + + doCancelContext = () => { + this.setState({ + contextBar: false, + }); + }; + + cancelContext = () => { + this.doCancelContext(); + }; + + onKeyboardDisconnect = async () => { + const { router } = this.props; + await focus.close(); + this.setState({ + connected: false, + device: null, + pages: {}, + }); + localStorage.clear(); + router.navigate("/keyboard-select"); + }; + + onKeyboardConnect = async (port, file) => { + const { router } = this.props; + await focus.close(); + if (!port.path) { + this.setState({ + connected: true, + pages: {}, + device: port.device, + }); + + router.navigate("/welcome"); + return []; + } + + console.log("Connecting to", port.path); + await focus.open(port.path, port.device, file); + console.log("After focus.open"); + if (focus.device.bootloader) { + this.setState({ + connected: true, + pages: {}, + device: port, + }); + router.navigate("/welcome"); + return []; + } + + console.log("Probing for Focus support..."); + focus.setLayerSize(focus.device); + focus.setLEDMode(focus.device); + const pages = { + keymap: focus.isCommandSupported("keymap.custom") || focus.isCommandSupported("keymap.map"), + colormap: focus.isCommandSupported("colormap.map") && focus.isCommandSupported("palette"), + }; + + this.setState({ + connected: true, + device: port, + pages, + }); + router.navigate(pages.keymap ? "/editor" : "/welcome"); + return []; + }; + + forceDarkMode = mode => { + this.setState({ + darkMode: mode, + }); + }; + + toggleDarkMode = async mode => { + console.log("Dark mode changed to: ", mode, "NativeTheme says: ", ipcRenderer.invoke("get-NativeTheme")); + let isDark = mode === "dark"; + if (mode === "system") { + isDark = ipcRenderer.invoke("get-NativeTheme"); + } + this.setState({ + darkMode: isDark, + }); + store.set("settings.darkMode", mode); + }; + + toggleFlashing = async () => { + const { router } = this.props; + this.flashing = !this.flashing; + if (!this.flashing) { + this.setState({ + connected: false, + device: null, + pages: {}, + }); + router.navigate("/keyboard-select"); + } + }; + + toggleFwUpdate = () => { + this.setState(state => ({ + fwUpdate: !state.fwUpdate, + })); + }; + + updateAllowBeta = event => { + const newValue = event.target.checked; + // console.log("new allowBeta value: ", newValue); + store.set("settings.allowBeta", newValue); + this.setState({ + allowBeta: newValue, + }); + }; + + async updateStorageSchema() { + // Update stored settings schema + console.log("Retrieving settings: ", store.get("settings")); + const locale = await ipcRenderer.invoke("get-Locale"); + if (store.get("settings.language") !== undefined) { + console.log("settings already upgraded, returning"); + i18n.setLanguage(store.get("settings.language")); + return; + } + // create locale language identifier + const translator = { + en: "english", + es: "spanish", + fr: "french", + de: "german", + sv: "swedish", + da: "danish", + no: "norwegian", + is: "icelandic", + }; + // console.log("languageTEST", lang, translator[lang.split("-")[0]], translator["hh"]); + + // Store all settings from electron settings in electron store. + const data = {}; + const userPath = await ipcRenderer.invoke("get-userPath", "home"); + data.backupFolder = path.join(userPath, "Raise", "Backups"); + data.backupFrequency = 30; + data.language = translator[locale.split("-")[0]] !== "" ? translator[locale.split("-")[0]] : "english"; + data.darkMode = "system"; + data.showDefaults = false; + i18n.setLanguage(data.language); + store.set("settings", data); + store.set("neurons", []); + this.setState(); + console.log("Testing results: ", data, store.get("settings"), store.get("settings.darkMode")); + } + + render() { + const { connected, pages, contextBar, darkMode, fwUpdate, allowBeta, device } = this.state; + + return ( + + +
                                          +
                                          + + } /> + document.querySelector("#page-title")} + /> + } + /> + document.querySelector("#page-title")} + device={device} + darkMode={darkMode} + /> + } + /> + document.querySelector("#page-title")} + appBarElement={() => document.querySelector("#appbar")} + darkMode={darkMode} + /> + } + /> + document.querySelector("#page-title")} + /> + } + /> + document.querySelector("#page-title")} + /> + } + /> + document.querySelector("#page-title")} + darkMode={darkMode} + allowBeta={allowBeta} + /> + } + /> + document.querySelector("#page-title")} + darkMode={darkMode} + toggleDarkMode={this.toggleDarkMode} + startContext={this.startContext} + cancelContext={this.cancelContext} + updateAllowBeta={this.updateAllowBeta} + allowBeta={allowBeta} + inContext={contextBar} + /> + } + /> + document.querySelector("#page-title")} + darkMode={darkMode} + toggleDarkMode={this.toggleDarkMode} + startContext={this.startContext} + cancelContext={this.cancelContext} + updateAllowBeta={this.updateAllowBeta} + allowBeta={allowBeta} + inContext={contextBar} + /> + } + /> + +
                                          + + + ); + } +} + +export default withRouter(App); diff --git a/src/renderer/component/Accordion/AccordionFirmware.js b/src/renderer/component/Accordion/AccordionFirmware.js index a56f27f7b..0fe03b857 100644 --- a/src/renderer/component/Accordion/AccordionFirmware.js +++ b/src/renderer/component/Accordion/AccordionFirmware.js @@ -1,5 +1,6 @@ import React, { useState, useEffect } from "react"; import Styled from "styled-components"; +import i18n from "../../i18n"; import Accordion from "react-bootstrap/Accordion"; import Card from "react-bootstrap/Card"; @@ -84,20 +85,35 @@ margin-top: 32px; `; const AccordionFirmware = ({ items }) => { - const [passedTasks, SetPassedTasks] = useState(0); + const [passedTasks, SetPassedTasks] = useState(true); const [counterTasks, SetCounterTasks] = useState(0); - useEffect(() => { - function numberOfFalseValues(obj) { - var counter = 0; - for (var index = 0; index < obj.length; index++) { - if (obj[index].isMarried === false) { - counter++; - } - } - return counter; + const textList = [ + { + text: i18n.firmwareUpdate.milestones.checkLeftSide + }, + { + text: i18n.firmwareUpdate.milestones.checkLeftSideBL + }, + { + text: i18n.firmwareUpdate.milestones.checkRightSide + }, + { + text: i18n.firmwareUpdate.milestones.checkRightSideBL + }, + { + text: i18n.firmwareUpdate.milestones.checkBackup } + ]; + + useEffect(() => { items.map((item, index) => { + if (index == 0) { + SetCounterTasks(false); + } + if ((index == 0 && !item.checked) || (index == 2 && !item.checked)) { + SetPassedTasks(false); + } if (item.checked) { SetCounterTasks(previousValue => previousValue + 1); } @@ -112,12 +128,15 @@ const AccordionFirmware = ({ items }) => {
                                          - - + {passedTasks ? <IconCheckmarkSm /> : ""} + <Title + text={passedTasks ? i18n.firmwareUpdate.milestones.readyToStart : i18n.firmwareUpdate.milestones.analyzedTasks} + headingLevel={5} + /> </div> <div className="stepsCompleted"> <div className={`stepsCompletedLabel ${counterTasks == items.length ? "passed" : "warning"}`}> - {counterTasks} of {items.length} tasks passed + {counterTasks} {i18n.general.of} {items.length} {i18n.firmwareUpdate.milestones.tasksPassed} </div>{" "} <small> <IconChevronDown /> @@ -135,7 +154,7 @@ const AccordionFirmware = ({ items }) => { key={`itemChecked-${item.id}`} > <div className="item-checked--icon">{item.checked ? <IconCheckmarkSm /> : <IconCloseXs />}</div> - {item.text} + {textList[index].text} </div> ))} </Card.Body> diff --git a/src/renderer/component/Badge/Badge.js b/src/renderer/component/Badge/Badge.tsx similarity index 56% rename from src/renderer/component/Badge/Badge.js rename to src/renderer/component/Badge/Badge.tsx index 3b0954f44..29fa190be 100644 --- a/src/renderer/component/Badge/Badge.js +++ b/src/renderer/component/Badge/Badge.tsx @@ -16,7 +16,6 @@ */ import React from "react"; -import PropTypes from "prop-types"; import Styled from "styled-components"; const Style = Styled.div` @@ -26,42 +25,44 @@ const Style = Styled.div` font-weight: 600; padding: 8px 12px; border: 1px solid ${({ theme }) => theme.colors.gray500}; + color: ${({ theme }) => theme.styles.badge.textColor}; &.success { color: ${({ theme }) => theme.colors.brandSuccess}; border: 1px solid ${({ theme }) => theme.colors.brandSuccess}; } + &.danger-low { + border: 1px solid ${({ theme }) => theme.styles.badge.dangerLowBG}; + background-color: ${({ theme }) => theme.styles.badge.dangerLowBG}; + color: ${({ theme }) => theme.styles.badge.dangerLowText}; + } + &.subtle { + border:1px solid ${({ theme }) => theme.styles.badge.subtleBGColor}; + background-color: ${({ theme }) => theme.styles.badge.subtleBGColor}; + color: ${({ theme }) => theme.styles.badge.subtleColor}; + } + &.sm { + font-size: 0.6875rem; + padding: 0.25rem 0.5rem; + } } `; -/** - * This Badge function returns a component that render a badge element, similar to badge on Bootstrap framework - * The object will accept the following parameters - * - * @param {string} content - The content rendered inside the component - * @param {string} icon - [Optional] SVG component - * @param {string} size - Not implemented - * @param {string} style - Not implemented - * @param {string} className - Not implemented - * @returns {<Badge>} Badge component. - */ +interface BadgeProps { + content?: string; + icon?: any; + size?: "sm" | "md" | "lg"; + variation?: "primary" | "secondary" | "tertiary" | "info" | "warning" | "success" | "danger" | "danger-low" | "subtle"; + className?: string; +} -const Badge = ({ content, icon, size, style, className }) => { +function Badge({ content, icon, size, variation, className }: BadgeProps) { return ( <Style className={className}> - <div className={`badge ${size ? size : ""} ${style ? style : ""} ${icon ? "hasIcon" : ""} `}> + <div className={`badge ${size || ""} ${variation || ""} ${icon ? "hasIcon" : ""} `}> {icon && icon} {content && <span dangerouslySetInnerHTML={{ __html: content }} />} </div> </Style> ); -}; - -Badge.defaultProps = { - content: "" -}; - -Badge.propTypes = { - content: PropTypes.string.isRequired, - icon: PropTypes.object -}; +} export default Badge; diff --git a/src/renderer/component/Badge/BadgeFirmware.tsx b/src/renderer/component/Badge/BadgeFirmware.tsx new file mode 100644 index 000000000..eedfacd1c --- /dev/null +++ b/src/renderer/component/Badge/BadgeFirmware.tsx @@ -0,0 +1,67 @@ +import React from "react"; +import Styled from "styled-components"; + +const BadgeWrapper = Styled.div` + position: absolute; + z-index: 2; + color: ${({ theme }) => theme.colors.gray700}; + background-color: rgb(0,205,200); + padding: 2px 4px; + bottom: -12px; + left: 50%; + margin-left: -63px; + white-space: nowrap; + width: 126px; + border-radius: 18px; + text-align: center; + font-size: 0.825rem; + transition: 300ms color ease-in-out, 300ms background-color ease-in-out, 300ms opacity ease-in-out; + transform-origin: center center; + opacity: 0; + &.key-badge__add { + opacity: 1; + } + &.key-badge__release { + color: ${({ theme }) => theme.colors.gray25}; + background-color: ${({ theme }) => theme.colors.brandDangerLighter}; + animation: pulse-orange 1s infinite; + } + &.key-badge__add.key-badge__remove { + opacity: 0; + } + @keyframes pulse-orange { + 0% { + transform: scale(0.95); + box-shadow: 0 0 0 0 rgba(255,107,107, 0.7); + } + + 70% { + transform: scale(1); + box-shadow: 0 0 0 24px rgba(255,107,107, 0); + } + + 100% { + transform: scale(0.95); + box-shadow: 0 0 0 0 rgba(255,107,107, 0); + } + } +`; + +interface BadgeFirmwareProps { + countdown: number; +} + +const BadgeFirmware = ({ countdown }: BadgeFirmwareProps) => { + if (countdown === 0 || countdown > 3) return null; + return ( + <BadgeWrapper + className={`key-badge key-badge__add ${countdown === 2 || countdown === 3 ? "key-badge__release" : null} ${ + countdown > 4 ? "key-badge__remove" : null + }`} + > + {countdown === 1 ? "Keep holding" : null} {countdown === 2 || countdown === 3 ? "Release the key" : null} + </BadgeWrapper> + ); +}; + +export default BadgeFirmware; diff --git a/src/renderer/component/Badge/index.js b/src/renderer/component/Badge/index.tsx similarity index 89% rename from src/renderer/component/Badge/index.js rename to src/renderer/component/Badge/index.tsx index f969faf3f..f85fdb9df 100644 --- a/src/renderer/component/Badge/index.js +++ b/src/renderer/component/Badge/index.tsx @@ -15,5 +15,6 @@ */ import Badge from "./Badge"; +import BadgeFirmware from "./BadgeFirmware"; -export { Badge as default }; +export { Badge, BadgeFirmware }; diff --git a/src/renderer/component/Battery/BatteryStatusSide.tsx b/src/renderer/component/Battery/BatteryStatusSide.tsx new file mode 100644 index 000000000..b2c7b241c --- /dev/null +++ b/src/renderer/component/Battery/BatteryStatusSide.tsx @@ -0,0 +1,278 @@ +import React, { useState, useEffect } from "react"; + +import Styled from "styled-components"; + +import PileIndicator from "@Renderer/component/Battery/PileIndicator"; +import DefyBatteryIndicator from "@Renderer/component/Battery/DefyBatteryIndicator"; + +const Style = Styled.div` +.status--default, +.status--disconnected, +.status--disconnected.status--saving { + --color-status: ${({ theme }) => theme.colors.gray200}; +} +.status--saving, +.status--fault, +.status--warning { + --color-status: ${({ theme }) => theme.colors.brandWarning}; +} +.status--critical, +.status--fatal-error { + --color-status: ${({ theme }) => theme.colors.brandPrimary}; +} +.status--charging { + --color-status: ${({ theme }) => theme.styles.batteryIndicator.fillShapeColor}; +} +.size--sm { + padding: 4px; + border-radius: 3px; + background-color: ${({ theme }) => theme.styles.batteryIndicator.pileBackgroundColor}; + .battery-item--container { + display: flex; + grid-gap: 5px; + align-items: center; + color: var(--color-status); + .battery-indicator--side { + color: ${({ theme }) => theme.colors.gray400}; + font-size: 0.5rem; + font-weight: 700; + text-transform: uppercase; + } + } + &.status--saving, + &.status--fault { + background-color: ${({ theme }) => theme.styles.batteryIndicator.pileBackgroundSavingMode}; + } + &.status--fatal-error { + background-color: ${({ theme }) => theme.styles.batteryIndicator.pileBackgroundFatalError}; + } + &.status--disconnected, + &.status--disconnected.status--saving { + background-color: ${({ theme }) => theme.styles.batteryIndicator.pileBackgroundColor}; + } + .pileIndicator { + max-width: 100%; + } +} +.size--lg { + --color-stroke: ${({ theme }) => theme.styles.batteryIndicator.strokeShapeColor}; + .shapeIndicator { + opacity: 0.1; + } + .shapeFill { + opacity: ${({ theme }) => theme.styles.batteryIndicator.fillShapeOpacity}; + } + &.status--default { + --color-status: ${({ theme }) => theme.styles.batteryIndicator.fillShapeColor}; + .shapeIndicator { + opacity: 0; + } + .shapeFill { + opacity: ${({ theme }) => theme.styles.batteryIndicator.fillShapeDefaultOpacity}; + } + } + &.status--disconnected, + &.status--disconnected.status--saving { + --color-stroke: ${({ theme }) => theme.styles.batteryIndicator.largeIndicatorDisconnectedColor}; + --color-status: ${({ theme }) => theme.styles.batteryIndicator.largeIndicatorDisconnectedColor}; + svg { + overflow: visible; + } + .fillBaseDisconnected { + opacity: 0.5; + color: ${({ theme }) => theme.styles.batteryIndicator.lineDisconnectedColor}; + } + .lineDisconnected { + color: ${({ theme }) => theme.styles.batteryIndicator.lineDisconnectedColor}; + } + } + &.status--saving { + --color-status: ${({ theme }) => theme.colors.brandWarning}; + --color-stroke: ${({ theme }) => theme.colors.brandWarning}; + .shapeIndicator { + opacity: 0.25; + } + } + &.status--critical:not(.status--saving) { + .shapeIndicator { + opacity: 0.2; + } + } + &.status--charging, + &.status--charging.status--saving { + --color-status: ${({ theme }) => theme.styles.batteryIndicator.fillShapeColor}; + --color-stroke: ${({ theme }) => theme.styles.batteryIndicator.strokeShapeColor}; + .lightningbattery { + color: ${({ theme }) => theme.styles.batteryIndicator.fillShapeColor}; + } + .shapeIndicator { + opacity: 0.1; + } + } + &.status--charging.status--charging-done { + .lightningbattery { + color: ${({ theme }) => theme.colors.gray25}; + } + } + &.status--fault { + --color-stroke: ${({ theme }) => theme.colors.brandWarning}; + .shapeIndicator { + opacity: 0.1; + } + } + &.status--fatal-error, + &.status--fatal-error.status--saving { + --color-status: ${({ theme }) => theme.colors.brandPrimary}; + --color-stroke: ${({ theme }) => theme.colors.brandPrimary}; + .shapeIndicator { + opacity: ${({ theme }) => theme.styles.batteryIndicator.shapeIndicatorOpacity}; + } + } +} +@media screen and (max-width: 999px) { + .size--sm { + .battery-item--container { + .battery-indicator--side { + display: none; + } + } + } +} +@media screen and (max-height: 870px) { + .size--sm { + .battery-item--container { + .battery-indicator--side { + display: none; + } + } + } +} +.pulse { + animation: pulseAnimation 1s infinite ease-in-out; + transform-origin: center; +} +@keyframes pulseAnimation { + 0% { transform: scale(0.9); opacity: 0.5; } + 50% { transform: scale(1); opacity: 1; } + 100% { transform: scale(0.9); opacity: 0.5; } +} +.size--lg { + --color-stroke: ${({ theme }) => theme.styles.batteryIndicator.strokeShapeColor}; + .shapeIndicator { + opacity: 0.1; + } + &.status--default { + --color-status: ${({ theme }) => theme.styles.batteryIndicator.fillShapeColor}; + .shapeIndicator { + opacity: 0; + } + } + &.status--saving { + --color-status: ${({ theme }) => theme.colors.brandWarning}; + --color-stroke: ${({ theme }) => theme.colors.brandWarning}; + .shapeIndicator { + opacity: 0.25; + } + } + &.status--critical:not(.status--saving) { + .shapeIndicator { + opacity: 0.2; + } + } + &.status--charging, + &.status--charging.status--saving { + --color-status: ${({ theme }) => theme.styles.batteryIndicator.fillShapeColor}; + --color-stroke: ${({ theme }) => theme.styles.batteryIndicator.strokeShapeColor}; + .lightningbattery { + color: ${({ theme }) => theme.styles.batteryIndicator.fillShapeColor}; + } + .shapeIndicator { + opacity: 0.1; + } + } +} +@media screen and (max-width: 999px) { + .size--sm { + .battery-item--container { + .battery-indicator--side { + display: none; + } + } + } +} +@media screen and (max-height: 870px) { + .size--sm { + .battery-item--container { + .battery-indicator--side { + display: none; + } + } + } +} + +`; + +interface BatteryStatusSideProps { + side: "left" | "right"; + batteryLevel: number; + batteryStatus: number; + isSavingMode: boolean; + size: "sm" | "lg"; +} + +const BatteryStatusSide: React.FC<BatteryStatusSideProps> = ({ side, batteryLevel, isSavingMode, batteryStatus, size }) => { + const [loading, setLoading] = useState(true); + const [sideFirstLetter, setSideFirstLetter] = useState(""); + const [sideStatus, setSideStatus] = useState("status--default"); + + useEffect(() => { + if (side) { + setLoading(false); + setSideFirstLetter(side.charAt(0)); + } + }, [side]); + + useEffect(() => { + // console.log("batteryStatus", batteryStatus); + switch (batteryStatus) { + case 0: + if (batteryLevel > 10 && batteryLevel < 20 && !isSavingMode) { + setSideStatus("status--warning"); + } else if (batteryLevel <= 10 && !isSavingMode) { + setSideStatus("status--critical"); + } else { + setSideStatus("status--default"); + } + break; + case 1: + setSideStatus("status--charging"); + break; + case 2: + setSideStatus("status--charging status--charging-done"); + break; + case 3: + setSideStatus("status--fault"); + break; + case 4: + setSideStatus("status--disconnected"); + break; + default: + setSideStatus("status--fatal-error"); + } + }, [batteryLevel, batteryStatus, isSavingMode]); + + if (loading) return null; + return ( + <Style> + <div className={`battery-indicator--item size--${size} item--${side} ${sideStatus} ${isSavingMode && "status--saving"}`}> + <div className="battery-item--container"> + {size === "sm" ? <div className="battery-indicator--side">{sideFirstLetter}</div> : ""} + {size === "sm" ? <PileIndicator batteryLevel={batteryLevel} batteryStatus={batteryStatus} /> : ""} + {size === "lg" ? <DefyBatteryIndicator side={side} batteryLevel={batteryLevel} batteryStatus={batteryStatus} /> : ""} + </div> + </div> + </Style> + ); +}; + +export default BatteryStatusSide; diff --git a/src/renderer/component/Battery/DefyBatteryIndicator.tsx b/src/renderer/component/Battery/DefyBatteryIndicator.tsx new file mode 100644 index 000000000..a32a6e585 --- /dev/null +++ b/src/renderer/component/Battery/DefyBatteryIndicator.tsx @@ -0,0 +1,125 @@ +import React, { useState, useEffect } from "react"; +import Styled from "styled-components"; + +import DefyBatteryIndicatorLeft from "@Renderer/component/Battery/DefyBatteryIndicatorLeft"; +import DefyBatteryIndicatorRight from "@Renderer/component/Battery/DefyBatteryIndicatorRight"; + +import i18n from "../../i18n"; + +const Style = Styled.div` +.levelIndicator { + transform-origin: bottom left; + transform: rotate(180deg); + fill: var(--color-status); +} +.batterySide { + position: relative; +} +.batterySide--percentage { + position: absolute; + top: 50%; + left: 50%; + transform: translate3d(-50%, -50%, 0); + width: 100%; + font-weight: 700; + letter-spacing: -0.025em; + text-align: center; + font-size: 1.25rem; + color: ${({ theme }) => theme.styles.batteryIndicator.largeIndicatorPercentageColor}; + text-align: center; +} +.shapeStroke { + stroke: var(--color-stroke); +} +.shapeFill { + fill: ${({ theme }) => theme.styles.batteryIndicator.largeIndicatorFillColor}; +} +.shapeIndicator { + fill: var(--color-status); +} +.alertMessage { + padding: 0.3rem 0.25rem; + font-size: 0.6875rem; + text-align: center; + font-weight: 600; + border-radius: 4px; + margin-top: 8px; + line-height: 1rem; + letter-spacing: -0.02rem; + &.alert-warning { + color: ${({ theme }) => theme.styles.batteryIndicator.alertWarningText}; + background-color: ${({ theme }) => theme.styles.batteryIndicator.alertWarningBackground}; + } + &.alert-fatal-error { + color: ${({ theme }) => theme.styles.batteryIndicator.alertErrorText}; + background-color: ${({ theme }) => theme.styles.batteryIndicator.alertErrorBackground}; + } + &.alert-disconnected { + color: ${({ theme }) => theme.styles.batteryIndicator.alertDisconnectedText}; + background-color: ${({ theme }) => theme.styles.batteryIndicator.alertDisconnectedBackground}; + } +} +`; +interface DefyBatteryIndicatorProps { + side: "left" | "right"; + batteryLevel: number; + batteryStatus: number; +} +const DefyBatteryIndicator = ({ side, batteryLevel, batteryStatus }: DefyBatteryIndicatorProps) => { + const [batteryHeight, setBatteryHeight] = useState(0); + + useEffect(() => { + switch (batteryStatus) { + case 0: + if (batteryLevel > 0 && batteryLevel < 5) { + setBatteryHeight(2); + } else { + setBatteryHeight((115 * batteryLevel) / 100); + } + break; + case 1: + setBatteryHeight(0); + break; + case 2: + setBatteryHeight(115); + break; + case 3: + setBatteryHeight(0); + break; + case 4: + setBatteryHeight(0); + break; + default: + setBatteryHeight(0); + } + }, [batteryLevel, batteryStatus]); + + return ( + <Style> + <div className="batterySideWrapper"> + <div className="batterySide"> + {side === "left" ? <DefyBatteryIndicatorLeft batteryStatus={batteryStatus} batteryHeight={batteryHeight} /> : ""} + {side === "right" ? <DefyBatteryIndicatorRight batteryStatus={batteryStatus} batteryHeight={batteryHeight} /> : ""} + {batteryStatus === 0 ? <div className="batterySide--percentage">{batteryLevel}%</div> : ""} + </div> + {batteryStatus === 3 ? ( + <div className="alertMessage alert-warning">{i18n.wireless.batteryPreferences.batteryErrorReading}</div> + ) : ( + "" + )} + {batteryStatus === 4 ? ( + <div className="alertMessage alert-disconnected">{i18n.wireless.batteryPreferences.batteryDisconnected}</div> + ) : ( + "" + )} + {batteryStatus === 255 ? ( + <div className="alertMessage alert-fatal-error">{i18n.wireless.batteryPreferences.batteryFatalError}</div> + ) : ( + "" + )} + </div> + </Style> + ); +}; + +export default DefyBatteryIndicator; diff --git a/src/renderer/component/Battery/DefyBatteryIndicatorLeft.tsx b/src/renderer/component/Battery/DefyBatteryIndicatorLeft.tsx new file mode 100644 index 000000000..1a250c424 --- /dev/null +++ b/src/renderer/component/Battery/DefyBatteryIndicatorLeft.tsx @@ -0,0 +1,132 @@ +import React from "react"; + +interface DefyBatteryIndicatorLeftProps { + batteryStatus: number; + batteryHeight: number; +} + +const DefyBatteryIndicatorLeft = ({ batteryStatus, batteryHeight }: DefyBatteryIndicatorLeftProps) => { + const maskHash = `${Date.now()}-${(Math.random() + 1).toString(36).substring(7)}-left`; + return ( + <svg + className="defy-battery-indicator" + width="99" + height="127" + viewBox="0 0 99 127" + fill="none" + xmlns="http://www.w3.org/2000/svg" + > + {batteryStatus === 4 ? ( + <> + <mask + id={`mask-disconnected-${maskHash}`} + style={{ maskType: "alpha" }} + maskUnits="userSpaceOnUse" + x="0" + y="0" + width="99" + height="127" + > + <path + opacity="0.8" + d="M95.9585 72.1L91.1585 55.5C90.6585 53.9 90.4585 52.3 90.4585 50.7V16.2C90.4585 14.9 89.9585 13.7 89.0585 12.9C88.1585 12 86.9585 11.5 85.6585 11.5H81.5585C81.3585 11.5 81.2585 11.4 81.0585 11.3L76.5585 6.9C75.9585 6.3 75.2585 6 74.4585 6H61.4585C60.9585 6 60.5585 5.8 60.2585 5.6L56.4585 2.7C55.8585 2.2 55.1585 2 54.3585 2H44.4585C43.6585 2 42.8585 2.3 42.2585 2.8L39.0585 5.6C38.6585 5.9 38.2585 6.1 37.7585 6.1H32.0585C31.2585 6.1 30.4585 6.4 29.8585 6.9L26.5585 9.5C26.1585 9.8 25.7585 10 25.2585 10H11.2585C9.85849 10 8.55849 10.6 7.55849 11.5C6.55849 12.5 6.05849 13.8 6.05849 15.2V44.4L2.65849 55.2C1.65849 58.3 1.35849 61.6 1.55849 64.8L5.65849 119.3C5.75849 120.8 6.45849 122.2 7.55849 123.3C8.65849 124.3 10.1585 124.9 11.6585 124.9H69.0585C70.4585 124.9 71.7585 124.5 72.8585 123.6C73.9585 122.8 74.6585 121.6 74.9585 120.3L80.5585 97.4C81.3585 94.3 83.1585 91.6 85.7585 89.7L91.5585 85.5C93.5585 84 95.1585 81.9 95.9585 79.5C96.6585 77.1 96.6585 74.5 95.9585 72.1Z" + stroke="#3F425A" + strokeWidth="3" + strokeMiterlimit="10" + strokeLinecap="round" + /> + <path + opacity="0.5" + d="M14.2522 121.001C11.6522 121.001 9.45219 119.001 9.25219 116.301L5.55219 64.6006C5.35219 61.8006 5.65219 59.1006 6.45219 56.5006L9.85219 45.5006C9.95219 45.2006 9.95219 44.9006 9.95219 44.6006V16.9006C9.95219 15.3006 11.2522 14.0006 12.8522 14.0006H24.8522C26.4522 14.0006 28.0522 13.4006 29.3522 12.4006L31.3522 10.8006C31.9522 10.3006 32.5522 10.1006 33.3522 10.1006H36.5522C38.7522 10.1006 40.8522 9.30059 42.4522 7.90059L43.7522 6.80059C44.3522 6.30059 45.0522 6.10059 45.7522 6.10059H53.0522C53.7522 6.10059 54.3522 6.30059 54.9522 6.70059L57.7522 8.90059C58.8522 9.70059 60.1522 10.2006 61.4522 10.2006H72.7522C73.5522 10.2006 74.3522 10.5006 74.9522 11.1006L78.2522 14.3006C79.1522 15.1006 80.2522 15.6006 81.4522 15.6006H83.5522C85.1522 15.6006 86.4522 16.9006 86.4522 18.5006V50.8006C86.4522 52.8006 86.7522 54.8006 87.2522 56.7006L92.0522 73.3006C92.5522 74.9006 92.4522 76.7006 91.9522 78.3006C91.3522 79.9006 90.3522 81.3006 88.9522 82.4006L83.2522 86.6006C79.9522 89.1006 77.5522 92.6006 76.5522 96.6006L71.8522 117.201C71.3522 119.501 69.3522 121.101 66.9522 121.101H14.2522V121.001Z" + fill="#3F425A" + /> + </mask> + <g mask={`url(#mask-disconnected-${maskHash}`}> + <path d="M-6 -2L103 132.5V-2H-6Z" className="fillBaseDisconnected" fill="currentColor" /> + <path d="M96 132.5L-6 5V132.5H96Z" className="fillBaseDisconnected" fill="currentColor" /> + </g> + </> + ) : ( + <> + <path + d="M96.4585 72.1L91.6585 55.5C91.1585 53.9 90.9585 52.3 90.9585 50.7V16.2C90.9585 14.9 90.4585 13.7 89.5585 12.9C88.6585 12 87.4585 11.5 86.1585 11.5H82.0585C81.8585 11.5 81.7585 11.4 81.5585 11.3L77.0585 6.9C76.4585 6.3 75.7585 6 74.9585 6H61.9585C61.4585 6 61.0585 5.8 60.7585 5.6L56.9585 2.7C56.3585 2.2 55.6585 2 54.8585 2H44.9585C44.1585 2 43.3585 2.3 42.7585 2.8L39.5585 5.6C39.1585 5.9 38.7585 6.1 38.2585 6.1H32.5585C31.7585 6.1 30.9585 6.4 30.3585 6.9L27.0585 9.5C26.6585 9.8 26.2585 10 25.7585 10H11.7585C10.3585 10 9.05849 10.6 8.05849 11.5C7.05849 12.5 6.55849 13.8 6.55849 15.2V44.4L3.15849 55.2C2.15849 58.3 1.85849 61.6 2.05849 64.8L6.15849 119.3C6.25849 120.8 6.95849 122.2 8.05849 123.3C9.15849 124.3 10.6585 124.9 12.1585 124.9H69.5585C70.9585 124.9 72.2585 124.5 73.3585 123.6C74.4585 122.8 75.1585 121.6 75.4585 120.3L81.0585 97.4C81.8585 94.3 83.6585 91.6 86.2585 89.7L92.0585 85.5C94.0585 84 95.6585 81.9 96.4585 79.5C97.1585 77.1 97.1585 74.5 96.4585 72.1Z" + className="shapeStroke" + strokeWidth="3" + strokeMiterlimit="10" + strokeLinecap="round" + /> + <path + d="M14.7522 121.001C12.1522 121.001 9.95219 119.001 9.75219 116.301L6.05219 64.6006C5.85219 61.8006 6.15219 59.1006 6.95219 56.5006L10.3522 45.5006C10.4522 45.2006 10.4522 44.9006 10.4522 44.6006V16.9006C10.4522 15.3006 11.7522 14.0006 13.3522 14.0006H25.3522C26.9522 14.0006 28.5522 13.4006 29.8522 12.4006L31.8522 10.8006C32.4522 10.3006 33.0522 10.1006 33.8522 10.1006H37.0522C39.2522 10.1006 41.3522 9.30059 42.9522 7.90059L44.2522 6.80059C44.8522 6.30059 45.5522 6.10059 46.2522 6.10059H53.5522C54.2522 6.10059 54.8522 6.30059 55.4522 6.70059L58.2522 8.90059C59.3522 9.70059 60.6522 10.2006 61.9522 10.2006H73.2522C74.0522 10.2006 74.8522 10.5006 75.4522 11.1006L78.7522 14.3006C79.6522 15.1006 80.7522 15.6006 81.9522 15.6006H84.0522C85.6522 15.6006 86.9522 16.9006 86.9522 18.5006V50.8006C86.9522 52.8006 87.2522 54.8006 87.7522 56.7006L92.5522 73.3006C93.0522 74.9006 92.9522 76.7006 92.4522 78.3006C91.8522 79.9006 90.8522 81.3006 89.4522 82.4006L83.7522 86.6006C80.4522 89.1006 78.0522 92.6006 77.0522 96.6006L72.3522 117.201C71.8522 119.501 69.8522 121.101 67.4522 121.101H14.7522V121.001Z" + className="shapeFill" + /> + <path + d="M14.7522 121.001C12.1522 121.001 9.95219 119.001 9.75219 116.301L6.05219 64.6006C5.85219 61.8006 6.15219 59.1006 6.95219 56.5006L10.3522 45.5006C10.4522 45.2006 10.4522 44.9006 10.4522 44.6006V16.9006C10.4522 15.3006 11.7522 14.0006 13.3522 14.0006H25.3522C26.9522 14.0006 28.5522 13.4006 29.8522 12.4006L31.8522 10.8006C32.4522 10.3006 33.0522 10.1006 33.8522 10.1006H37.0522C39.2522 10.1006 41.3522 9.30059 42.9522 7.90059L44.2522 6.80059C44.8522 6.30059 45.5522 6.10059 46.2522 6.10059H53.5522C54.2522 6.10059 54.8522 6.30059 55.4522 6.70059L58.2522 8.90059C59.3522 9.70059 60.6522 10.2006 61.9522 10.2006H73.2522C74.0522 10.2006 74.8522 10.5006 75.4522 11.1006L78.7522 14.3006C79.6522 15.1006 80.7522 15.6006 81.9522 15.6006H84.0522C85.6522 15.6006 86.9522 16.9006 86.9522 18.5006V50.8006C86.9522 52.8006 87.2522 54.8006 87.7522 56.7006L92.5522 73.3006C93.0522 74.9006 92.9522 76.7006 92.4522 78.3006C91.8522 79.9006 90.8522 81.3006 89.4522 82.4006L83.7522 86.6006C80.4522 89.1006 78.0522 92.6006 77.0522 96.6006L72.3522 117.201C71.8522 119.501 69.8522 121.101 67.4522 121.101H14.7522V121.001Z" + className="shapeIndicator" + /> + <mask + id={`mask0_4143_258857${maskHash}`} + style={{ maskType: "alpha" }} + maskUnits="userSpaceOnUse" + x="5" + y="6" + width="88" + height="116" + > + <path + d="M14.7522 121.001C12.1522 121.001 9.95219 119.001 9.75219 116.301L6.05219 64.6006C5.85219 61.8006 6.15219 59.1006 6.95219 56.5006L10.3522 45.5006C10.4522 45.2006 10.4522 44.9006 10.4522 44.6006V16.9006C10.4522 15.3006 11.7522 14.0006 13.3522 14.0006H25.3522C26.9522 14.0006 28.5522 13.4006 29.8522 12.4006L31.8522 10.8006C32.4522 10.3006 33.0522 10.1006 33.8522 10.1006H37.0522C39.2522 10.1006 41.3522 9.30059 42.9522 7.90059L44.2522 6.80059C44.8522 6.30059 45.5522 6.10059 46.2522 6.10059H53.5522C54.2522 6.10059 54.8522 6.30059 55.4522 6.70059L58.2522 8.90059C59.3522 9.70059 60.6522 10.2006 61.9522 10.2006H73.2522C74.0522 10.2006 74.8522 10.5006 75.4522 11.1006L78.7522 14.3006C79.6522 15.1006 80.7522 15.6006 81.9522 15.6006H84.0522C85.6522 15.6006 86.9522 16.9006 86.9522 18.5006V50.8006C86.9522 52.8006 87.2522 54.8006 87.7522 56.7006L92.5522 73.3006C93.0522 74.9006 92.9522 76.7006 92.4522 78.3006C91.8522 79.9006 90.8522 81.3006 89.4522 82.4006L83.7522 86.6006C80.4522 89.1006 78.0522 92.6006 77.0522 96.6006L72.3522 117.201C71.8522 119.501 69.8522 121.101 67.4522 121.101H14.7522V121.001Z" + fill="#57617E" + /> + </mask> + </> + )} + + {batteryStatus === 0 || batteryStatus === 2 ? ( + <g mask={`url(#mask0_4143_258857${maskHash})`}> + <rect x="-94" y="132" width="89" height={batteryStatus === 0 ? batteryHeight : 115} className="levelIndicator" /> + </g> + ) : ( + "" + )} + {batteryStatus === 1 || batteryStatus === 2 ? ( + <path + className="lightningbattery" + d="M40.9893 63.989L51.6559 48.1001V60.3223H56.9893L46.3226 77.4334V63.989H40.9893Z" + fill={batteryStatus === 1 ? "currentColor" : "white"} + stroke="currentColor" + strokeWidth="1.2" + /> + ) : ( + "" + )} + {batteryStatus === 3 ? ( + <path + d="M49.7782 67.6962C49.7782 68.0322 49.5862 68.2002 49.2022 68.2002H46.7542C46.5782 68.2002 46.4582 68.1682 46.3942 68.1042C46.3302 68.0242 46.2982 67.9122 46.2982 67.7682V65.1042C46.2982 64.8482 46.4102 64.7202 46.6342 64.7202H49.4662C49.6742 64.7202 49.7782 64.8322 49.7782 65.0562V67.6962ZM42.6262 54.1122C42.5142 54.0802 42.4502 54.0162 42.4342 53.9202C42.4182 53.8242 42.4262 53.7362 42.4582 53.6562C42.9702 52.5522 43.7382 51.6962 44.7622 51.0882C45.8022 50.4642 47.0182 50.1522 48.4102 50.1522C49.5782 50.1522 50.5862 50.3442 51.4342 50.7282C52.2822 51.0962 52.9382 51.6002 53.4022 52.2402C53.8822 52.8642 54.1222 53.5762 54.1222 54.3762C54.1222 55.1602 53.9542 55.8322 53.6182 56.3922C53.2982 56.9362 52.9062 57.4322 52.4422 57.8802C51.9782 58.3282 51.5062 58.7762 51.0262 59.2242C50.5462 59.6562 50.1382 60.1362 49.8022 60.6642C49.4822 61.1922 49.3222 61.8322 49.3222 62.5842C49.3222 62.6962 49.2822 62.7922 49.2022 62.8722C49.1382 62.9522 49.0422 62.9922 48.9142 62.9922H47.2102C46.9222 62.9922 46.7782 62.8322 46.7782 62.5122C46.7782 61.6482 46.9222 60.9042 47.2102 60.2802C47.4982 59.6402 47.8502 59.0802 48.2662 58.6002C48.6822 58.1202 49.0982 57.6722 49.5142 57.2562C49.9302 56.8242 50.2822 56.4002 50.5702 55.9842C50.8582 55.5522 51.0022 55.0722 51.0022 54.5442C51.0022 53.8722 50.7542 53.3362 50.2582 52.9362C49.7782 52.5362 49.1542 52.3362 48.3862 52.3362C47.9382 52.3362 47.4902 52.4242 47.0422 52.6002C46.6102 52.7762 46.2182 53.0242 45.8662 53.3442C45.5302 53.6642 45.2742 54.0322 45.0982 54.4482C45.0502 54.5442 44.9942 54.6082 44.9302 54.6402C44.8822 54.6562 44.7942 54.6562 44.6662 54.6402L42.6262 54.1122Z" + fill="#FF6B6B" + /> + ) : ( + "" + )} + {batteryStatus === 4 ? ( + <path + d="M106 130L2 1" + stroke="currentColor" + className="lineDisconnected" + strokeWidth="3" + style={{ transform: "translate(-5px, 0px)" }} + /> + ) : ( + "" + )} + {batteryStatus === 255 ? ( + <path + d="M50.1789 67.6962C50.1789 68.0322 49.9869 68.2002 49.6029 68.2002H47.1549C46.8509 68.2002 46.6989 68.0562 46.6989 67.7682V65.1042C46.6989 64.8482 46.8029 64.7202 47.0109 64.7202H49.8669C50.0749 64.7202 50.1789 64.8322 50.1789 65.0562V67.6962ZM49.4829 62.5842C49.4829 62.7602 49.4349 62.8882 49.3389 62.9682C49.2589 63.0322 49.1229 63.0642 48.9309 63.0642H47.8749C47.6989 63.0642 47.5869 63.0322 47.5389 62.9682C47.4909 62.9042 47.4509 62.7922 47.4189 62.6322L46.6509 50.7762C46.6349 50.6482 46.6589 50.5522 46.7229 50.4882C46.7869 50.4242 46.8669 50.3922 46.9629 50.3922H49.9389C50.1629 50.3922 50.2669 50.5042 50.2509 50.7282L49.4829 62.5842Z" + fill="#FF6B6B" + /> + ) : ( + "" + )} + </svg> + ); +}; + +export default DefyBatteryIndicatorLeft; diff --git a/src/renderer/component/Battery/DefyBatteryIndicatorRight.tsx b/src/renderer/component/Battery/DefyBatteryIndicatorRight.tsx new file mode 100644 index 000000000..5060b3508 --- /dev/null +++ b/src/renderer/component/Battery/DefyBatteryIndicatorRight.tsx @@ -0,0 +1,123 @@ +import React from "react"; + +interface DefyBatteryIndicatorRightProps { + batteryStatus: number; + batteryHeight: number; +} + +const DefyBatteryIndicatorRight = ({ batteryStatus, batteryHeight }: DefyBatteryIndicatorRightProps) => { + const maskHash = `${Date.now()}-${(Math.random() + 1).toString(36).substring(7)}-right`; + return ( + <svg + className="defy-battery-indicator" + width="99" + height="127" + viewBox="0 0 99 127" + fill="none" + xmlns="http://www.w3.org/2000/svg" + > + {batteryStatus === 4 ? ( + <> + <mask + id={`mask-disconnected-${maskHash}`} + style={{ maskType: "alpha" }} + maskUnits="userSpaceOnUse" + x="0" + y="0" + width="99" + height="127" + > + <path + opacity="0.8" + d="M2.65234 79.6C3.45234 82 4.95233 84.1 7.05233 85.6L12.8523 89.8C15.4523 91.7 17.2523 94.4 18.0523 97.5L23.5523 120.5C23.8523 121.8 24.6523 123 25.6523 123.8C26.7523 124.6 28.0523 125.1 29.4523 125.1H86.8523C88.3523 125.1 89.8523 124.5 90.9523 123.5C92.0523 122.5 92.7523 121 92.8523 119.5L96.9523 65C97.1523 61.8 96.8523 58.5 95.8523 55.4L92.4523 44.5V15.3C92.4523 13.9 91.8523 12.6 90.9523 11.6C89.9523 10.6 88.6523 10.1 87.2523 10.1H73.2523C72.7523 10.1 72.3523 9.9 71.9523 9.6L68.6523 6.9C68.0523 6.4 67.2523 6.1 66.4523 6.1H60.7523C60.2523 6.1 59.7523 5.9 59.4523 5.6L56.2523 2.8C55.6523 2.3 54.8523 2 54.0523 2H44.1523C43.3523 2 42.6523 2.3 42.0523 2.7L38.2523 5.6C37.8523 5.9 37.4523 6 37.0523 6H24.1523C23.3523 6 22.5523 6.3 22.0523 6.9L17.5523 11.3C17.4523 11.4 17.2523 11.5 17.0523 11.5H12.8523C11.5523 11.5 10.3523 12 9.45233 12.9C8.55233 13.8 8.05233 15 8.05233 16.2V50.6C8.05233 52.2 7.85234 53.9 7.35234 55.4L2.55233 72C1.75233 74.6 1.85234 77.2 2.65234 79.6Z" + stroke="#3F425A" + strokeWidth="3" + strokeMiterlimit="10" + strokeLinecap="round" + /> + <path + opacity="0.5" + d="M84.1522 121.1C86.7522 121.1 88.9522 119.1 89.1522 116.4L92.8522 64.5996C93.0522 61.7996 92.7522 59.0996 91.9522 56.4996L88.5522 45.4996C88.4522 45.1996 88.4522 44.8996 88.4522 44.5996V16.8996C88.4522 15.2996 87.1522 13.9996 85.5522 13.9996H73.5522C71.9522 13.9996 70.3522 13.3996 69.0522 12.3996L67.0522 10.7996C66.4522 10.2996 65.8522 10.0996 65.0522 10.0996H61.8522C59.6522 10.0996 57.5522 9.29961 55.9522 7.89961L54.6522 6.79961C54.0522 6.29961 53.3522 6.09961 52.6522 6.09961H45.3522C44.6522 6.09961 44.0522 6.29961 43.4522 6.69961L40.6522 8.89961C39.5522 9.69961 38.2522 10.1996 36.9522 10.1996H25.6522C24.8522 10.1996 24.0522 10.4996 23.4522 11.0996L20.1522 14.2996C19.2522 15.0996 18.1522 15.5996 16.9522 15.5996H14.8522C13.2522 15.5996 11.9522 16.8996 11.9522 18.4996V50.7996C11.9522 52.7996 11.6522 54.7996 11.1522 56.6996L6.35217 73.2996C5.85217 74.8996 5.95216 76.6996 6.45216 78.2996C7.05216 79.8996 8.05216 81.2996 9.45216 82.3996L15.1522 86.5996C18.4522 89.0996 20.8522 92.5996 21.8522 96.5996L26.5522 117.2C27.0522 119.5 29.0522 121.1 31.4522 121.1H84.1522Z" + fill="#3F425A" + /> + </mask> + <g mask={`url(#mask-disconnected-${maskHash}`}> + <path d="M-0.5 -1.5L108.5 133V-1.5H-0.5Z" className="fillBaseDisconnected" fill="currentColor" /> + <path d="M101.5 133L-0.5 5.5V133H101.5Z" className="fillBaseDisconnected" fill="currentColor" /> + </g> + </> + ) : ( + <> + <path + d="M2.63672 79.6C3.43672 82 4.93671 84.1 7.03671 85.6L12.8367 89.8C15.4367 91.7 17.2367 94.4 18.0367 97.5L23.5367 120.5C23.8367 121.8 24.6367 123 25.6367 123.8C26.7367 124.6 28.0367 125.1 29.4367 125.1H86.8367C88.3367 125.1 89.8367 124.5 90.9367 123.5C92.0367 122.5 92.7367 121 92.8367 119.5L96.9367 65C97.1367 61.8 96.8367 58.5 95.8367 55.4L92.4367 44.5V15.3C92.4367 13.9 91.8367 12.6 90.9367 11.6C89.9367 10.6 88.6367 10.1 87.2367 10.1H73.2367C72.7367 10.1 72.3367 9.9 71.9367 9.6L68.6367 6.9C68.0367 6.4 67.2367 6.1 66.4367 6.1H60.7367C60.2367 6.1 59.7367 5.9 59.4367 5.6L56.2367 2.8C55.6367 2.3 54.8367 2 54.0367 2H44.1367C43.3367 2 42.6367 2.3 42.0367 2.7L38.2367 5.6C37.8367 5.9 37.4367 6 37.0367 6H24.1367C23.3367 6 22.5367 6.3 22.0367 6.9L17.5367 11.3C17.4367 11.4 17.2367 11.5 17.0367 11.5H12.8367C11.5367 11.5 10.3367 12 9.4367 12.9C8.5367 13.8 8.03671 15 8.03671 16.2V50.6C8.03671 52.2 7.83671 53.9 7.33671 55.4L2.53671 72C1.73671 74.6 1.83672 77.2 2.63672 79.6Z" + className="shapeStroke" + strokeWidth="3" + strokeMiterlimit="10" + strokeLinecap="round" + /> + <path + d="M84.1365 121.1C86.7365 121.1 88.9365 119.1 89.1365 116.4L92.8365 64.5996C93.0365 61.7996 92.7365 59.0996 91.9365 56.4996L88.5365 45.4996C88.4365 45.1996 88.4365 44.8996 88.4365 44.5996V16.8996C88.4365 15.2996 87.1365 13.9996 85.5365 13.9996H73.5365C71.9365 13.9996 70.3365 13.3996 69.0365 12.3996L67.0365 10.7996C66.4365 10.2996 65.8365 10.0996 65.0365 10.0996H61.8365C59.6365 10.0996 57.5365 9.29961 55.9365 7.89961L54.6365 6.79961C54.0365 6.29961 53.3365 6.09961 52.6365 6.09961H45.3365C44.6365 6.09961 44.0365 6.29961 43.4365 6.69961L40.6365 8.89961C39.5365 9.69961 38.2365 10.1996 36.9365 10.1996H25.6365C24.8365 10.1996 24.0365 10.4996 23.4365 11.0996L20.1365 14.2996C19.2365 15.0996 18.1365 15.5996 16.9365 15.5996H14.8365C13.2365 15.5996 11.9365 16.8996 11.9365 18.4996V50.7996C11.9365 52.7996 11.6365 54.7996 11.1365 56.6996L6.33654 73.2996C5.83654 74.8996 5.93653 76.6996 6.43653 78.2996C7.03653 79.8996 8.03653 81.2996 9.43653 82.3996L15.1365 86.5996C18.4365 89.0996 20.8365 92.5996 21.8365 96.5996L26.5365 117.2C27.0365 119.5 29.0365 121.1 31.4365 121.1H84.1365Z" + className="shapeFill" + /> + <path + d="M84.1365 121.1C86.7365 121.1 88.9365 119.1 89.1365 116.4L92.8365 64.5996C93.0365 61.7996 92.7365 59.0996 91.9365 56.4996L88.5365 45.4996C88.4365 45.1996 88.4365 44.8996 88.4365 44.5996V16.8996C88.4365 15.2996 87.1365 13.9996 85.5365 13.9996H73.5365C71.9365 13.9996 70.3365 13.3996 69.0365 12.3996L67.0365 10.7996C66.4365 10.2996 65.8365 10.0996 65.0365 10.0996H61.8365C59.6365 10.0996 57.5365 9.29961 55.9365 7.89961L54.6365 6.79961C54.0365 6.29961 53.3365 6.09961 52.6365 6.09961H45.3365C44.6365 6.09961 44.0365 6.29961 43.4365 6.69961L40.6365 8.89961C39.5365 9.69961 38.2365 10.1996 36.9365 10.1996H25.6365C24.8365 10.1996 24.0365 10.4996 23.4365 11.0996L20.1365 14.2996C19.2365 15.0996 18.1365 15.5996 16.9365 15.5996H14.8365C13.2365 15.5996 11.9365 16.8996 11.9365 18.4996V50.7996C11.9365 52.7996 11.6365 54.7996 11.1365 56.6996L6.33654 73.2996C5.83654 74.8996 5.93653 76.6996 6.43653 78.2996C7.03653 79.8996 8.03653 81.2996 9.43653 82.3996L15.1365 86.5996C18.4365 89.0996 20.8365 92.5996 21.8365 96.5996L26.5365 117.2C27.0365 119.5 29.0365 121.1 31.4365 121.1H84.1365Z" + className="shapeIndicator" + /> + </> + )} + + <mask + id={`mask0_4143_258864${maskHash}`} + style={{ maskType: "alpha" }} + maskUnits="userSpaceOnUse" + x="6" + y="6" + width="87" + height="116" + > + <path + d="M84.1365 121.1C86.7365 121.1 88.9365 119.1 89.1365 116.4L92.8365 64.5996C93.0365 61.7996 92.7365 59.0996 91.9365 56.4996L88.5365 45.4996C88.4365 45.1996 88.4365 44.8996 88.4365 44.5996V16.8996C88.4365 15.2996 87.1365 13.9996 85.5365 13.9996H73.5365C71.9365 13.9996 70.3365 13.3996 69.0365 12.3996L67.0365 10.7996C66.4365 10.2996 65.8365 10.0996 65.0365 10.0996H61.8365C59.6365 10.0996 57.5365 9.29961 55.9365 7.89961L54.6365 6.79961C54.0365 6.29961 53.3365 6.09961 52.6365 6.09961H45.3365C44.6365 6.09961 44.0365 6.29961 43.4365 6.69961L40.6365 8.89961C39.5365 9.69961 38.2365 10.1996 36.9365 10.1996H25.6365C24.8365 10.1996 24.0365 10.4996 23.4365 11.0996L20.1365 14.2996C19.2365 15.0996 18.1365 15.5996 16.9365 15.5996H14.8365C13.2365 15.5996 11.9365 16.8996 11.9365 18.4996V50.7996C11.9365 52.7996 11.6365 54.7996 11.1365 56.6996L6.33654 73.2996C5.83654 74.8996 5.93653 76.6996 6.43653 78.2996C7.03653 79.8996 8.03653 81.2996 9.43653 82.3996L15.1365 86.5996C18.4365 89.0996 20.8365 92.5996 21.8365 96.5996L26.5365 117.2C27.0365 119.5 29.0365 121.1 31.4365 121.1H84.1365Z" + fill="#25273B" + /> + </mask> + + {batteryStatus === 0 || batteryStatus === 2 ? ( + <g mask={`url(#mask0_4143_258864${maskHash})`}> + <rect x="-94" y="132" width="89" height={batteryStatus === 0 ? batteryHeight : 115} className="levelIndicator" /> + </g> + ) : ( + "" + )} + {batteryStatus === 1 || batteryStatus === 2 ? ( + <path + className="lightningbattery" + d="M40.9893 63.989L51.6559 48.1001V60.3223H56.9893L46.3226 77.4334V63.989H40.9893Z" + fill={batteryStatus === 1 ? "currentColor" : "white"} + stroke="currentColor" + strokeWidth="1.2" + /> + ) : ( + "" + )} + {batteryStatus === 3 ? ( + <path + d="M54.4267 68.496C54.4267 68.832 54.2347 69 53.8507 69H51.4027C51.2267 69 51.1067 68.968 51.0427 68.904C50.9787 68.824 50.9467 68.712 50.9467 68.568V65.904C50.9467 65.648 51.0587 65.52 51.2827 65.52H54.1147C54.3227 65.52 54.4267 65.632 54.4267 65.856V68.496ZM47.2747 54.912C47.1627 54.88 47.0987 54.816 47.0827 54.72C47.0667 54.624 47.0747 54.536 47.1067 54.456C47.6187 53.352 48.3867 52.496 49.4107 51.888C50.4507 51.264 51.6667 50.952 53.0587 50.952C54.2267 50.952 55.2347 51.144 56.0827 51.528C56.9307 51.896 57.5867 52.4 58.0507 53.04C58.5307 53.664 58.7707 54.376 58.7707 55.176C58.7707 55.96 58.6027 56.632 58.2667 57.192C57.9467 57.736 57.5547 58.232 57.0907 58.68C56.6267 59.128 56.1547 59.576 55.6747 60.024C55.1947 60.456 54.7867 60.936 54.4507 61.464C54.1307 61.992 53.9707 62.632 53.9707 63.384C53.9707 63.496 53.9307 63.592 53.8507 63.672C53.7867 63.752 53.6907 63.792 53.5627 63.792H51.8587C51.5707 63.792 51.4267 63.632 51.4267 63.312C51.4267 62.448 51.5707 61.704 51.8587 61.08C52.1467 60.44 52.4987 59.88 52.9147 59.4C53.3307 58.92 53.7467 58.472 54.1627 58.056C54.5787 57.624 54.9307 57.2 55.2187 56.784C55.5067 56.352 55.6507 55.872 55.6507 55.344C55.6507 54.672 55.4027 54.136 54.9067 53.736C54.4267 53.336 53.8027 53.136 53.0347 53.136C52.5867 53.136 52.1387 53.224 51.6907 53.4C51.2587 53.576 50.8667 53.824 50.5147 54.144C50.1787 54.464 49.9227 54.832 49.7467 55.248C49.6987 55.344 49.6427 55.408 49.5787 55.44C49.5307 55.456 49.4427 55.456 49.3147 55.44L47.2747 54.912Z" + fill="#FF6B6B" + /> + ) : ( + "" + )} + {batteryStatus === 4 ? <path d="M106 130L2 1" stroke="currentColor" className="lineDisconnected" strokeWidth="3" /> : ""} + {batteryStatus === 255 ? ( + <path + d="M50.1789 67.6962C50.1789 68.0322 49.9869 68.2002 49.6029 68.2002H47.1549C46.8509 68.2002 46.6989 68.0562 46.6989 67.7682V65.1042C46.6989 64.8482 46.8029 64.7202 47.0109 64.7202H49.8669C50.0749 64.7202 50.1789 64.8322 50.1789 65.0562V67.6962ZM49.4829 62.5842C49.4829 62.7602 49.4349 62.8882 49.3389 62.9682C49.2589 63.0322 49.1229 63.0642 48.9309 63.0642H47.8749C47.6989 63.0642 47.5869 63.0322 47.5389 62.9682C47.4909 62.9042 47.4509 62.7922 47.4189 62.6322L46.6509 50.7762C46.6349 50.6482 46.6589 50.5522 46.7229 50.4882C46.7869 50.4242 46.8669 50.3922 46.9629 50.3922H49.9389C50.1629 50.3922 50.2669 50.5042 50.2509 50.7282L49.4829 62.5842Z" + fill="#FF6B6B" + /> + ) : ( + "" + )} + </svg> + ); +}; + +export default DefyBatteryIndicatorRight; diff --git a/src/renderer/component/Battery/PileIndicator.tsx b/src/renderer/component/Battery/PileIndicator.tsx new file mode 100644 index 000000000..d8d7bf3bc --- /dev/null +++ b/src/renderer/component/Battery/PileIndicator.tsx @@ -0,0 +1,203 @@ +import React, { useState, useEffect } from "react"; + +interface PileIndicatorProps { + batteryLevel: number; + batteryStatus: number; +} +const PileIndicator = ({ batteryLevel, batteryStatus }: PileIndicatorProps) => { + const [batteryWidth, setBatteryWidth] = useState(0); + // console.log("isCharging", isCharging); + // console.log("batteryStatus", batteryStatus); + + const maskHash = `${Date.now()}-${(Math.random() + 1).toString(36).substring(7)}-level`; + + useEffect(() => { + switch (batteryStatus) { + case 0: + if (batteryLevel <= 5) { + setBatteryWidth(1); + } else { + setBatteryWidth((16 * batteryLevel) / 100); + } + break; + case 1: + setBatteryWidth(0); + break; + case 2: + setBatteryWidth(16); + break; + case 3: + setBatteryWidth(0); + break; + case 4: + setBatteryWidth(0); + break; + default: + setBatteryWidth(0); + } + }, [batteryLevel, batteryStatus]); + + return ( + <svg className="pileIndicator" width="22" height="16" viewBox="0 0 22 16" fill="none" xmlns="http://www.w3.org/2000/svg"> + {batteryStatus === 1 || batteryStatus === 2 ? ( + <> + <mask + id={`mask0_1956_10095-${maskHash}`} + style={{ maskType: "alpha" }} + maskUnits="userSpaceOnUse" + x="0" + y="4" + width="20" + height="8" + > + <rect x="0.5" y="4.5" width="19" height="7" stroke="currentColor" /> + </mask> + <g mask={`url(#mask0_1956_10095-${maskHash})`}> + <path d="M17 5H14V2.5H24V13H12L17 5Z" fill="currentColor" /> + </g> + <mask + id={`mask1_1956_10095-${maskHash}`} + style={{ maskType: "alpha" }} + maskUnits="userSpaceOnUse" + x="0" + y="4" + width="20" + height="8" + > + <rect x="0.5" y="4.5" width="19" height="7" stroke="currentColor" /> + </mask> + <g mask={`url(#mask1_1956_10095-${maskHash})`}> + <path d="M3 9.5L8 2H-2V13H6V9.5H3Z" fill="currentColor" /> + </g> + </> + ) : ( + "" + )} + <rect x="21" y="6" width="1" height="4" fill="currentColor" /> + {batteryStatus === 1 || batteryStatus === 2 ? ( + <path d="M7 8.45833L11 2.5V7.08333H13L9 13.5V8.45833H7Z" fill="currentColor" stroke="currentColor" /> + ) : ( + "" + )} + {batteryStatus === 0 ? ( + <> + <rect x="0.5" y="4.5" width="19" height="7" stroke="currentColor" /> + <rect x="2" y="6" width={batteryWidth} height="4" fill="currentColor" /> + </> + ) : ( + "" + )} + {batteryStatus === 2 ? ( + <> + <mask + id={`mask2_2054_10381-${maskHash}`} + style={{ maskType: "alpha" }} + maskUnits="userSpaceOnUse" + x="2" + y="6" + width="16" + height="4" + > + <rect x="2" y="6" width="16" height="4" fill="currentColor" /> + </mask> + <g mask={`url(#mask2_2054_10381-${maskHash})`}> + <path d="M16.75 6H13.75V3.5H23.75V14H11.75L16.75 6Z" fill="currentColor" /> + <path d="M2.75 10.5L7.75 3H-2.25V14H5.75V10.5H2.75Z" fill="currentColor" /> + </g> + </> + ) : ( + "" + )} + {batteryStatus === 3 ? ( + <> + <mask + id={`mask_battery3-${maskHash}`} + style={{ maskType: "alpha" }} + maskUnits="userSpaceOnUse" + x="-2" + y="1" + width="25" + height="12" + > + <path + fillRule="evenodd" + clipRule="evenodd" + d="M12.9 9.95785C14.3347 9.1279 15.3 7.57668 15.3 5.8C15.3 4.92571 15.0663 4.10602 14.6578 3.4H22.5V13H12.9V9.95785ZM8.1 13H-1.5V3.4H6.34215C5.93375 4.10602 5.7 4.92571 5.7 5.8C5.7 7.57668 6.66528 9.1279 8.1 9.95785V13Z" + fill="black" + /> + </mask> + <g mask={`url(#mask_battery3-${maskHash})`}> + <rect x="0.5" y="4.5" width="19" height="7" stroke="currentColor" /> + </g> + <rect x="22" y="6" width="1" height="4" fill="currentColor" /> + <path + d="M11.579 12.688C11.579 12.896 11.462 13 11.228 13H9.681C9.577 13 9.50333 12.9783 9.46 12.935C9.42533 12.8917 9.408 12.8223 9.408 12.727V11.115C9.408 10.959 9.47733 10.881 9.616 10.881H11.397C11.5183 10.881 11.579 10.9503 11.579 11.089V12.688ZM7.471 5.486C7.40167 5.46867 7.36267 5.42967 7.354 5.369C7.34533 5.30833 7.34967 5.252 7.367 5.2C7.64433 4.56733 8.069 4.082 8.641 3.744C9.213 3.39733 9.89333 3.224 10.682 3.224C11.332 3.224 11.891 3.328 12.359 3.536C12.8357 3.73533 13.204 4.00833 13.464 4.355C13.7327 4.693 13.867 5.07433 13.867 5.499C13.867 5.90633 13.7803 6.253 13.607 6.539C13.4337 6.825 13.2213 7.08067 12.97 7.306C12.7187 7.53133 12.463 7.75667 12.203 7.982C11.9517 8.19867 11.7393 8.44133 11.566 8.71C11.3927 8.97867 11.306 9.308 11.306 9.698C11.306 9.76733 11.28 9.828 11.228 9.88C11.1847 9.92333 11.124 9.945 11.046 9.945H9.98C9.798 9.945 9.707 9.84533 9.707 9.646C9.707 9.18667 9.78067 8.79233 9.928 8.463C10.0753 8.13367 10.2573 7.84767 10.474 7.605C10.6907 7.35367 10.903 7.124 11.111 6.916C11.3277 6.708 11.5097 6.5 11.657 6.292C11.813 6.084 11.891 5.85433 11.891 5.603C11.891 5.291 11.774 5.044 11.54 4.862C11.306 4.68 11.0157 4.589 10.669 4.589C10.4437 4.589 10.2227 4.63233 10.006 4.719C9.78933 4.80567 9.59867 4.93133 9.434 5.096C9.26933 5.26067 9.13933 5.45133 9.044 5.668C9.00933 5.73733 8.97467 5.78067 8.94 5.798C8.90533 5.80667 8.849 5.80667 8.771 5.798L7.471 5.486Z" + fill="#FF6B6B" + className="pulse" + /> + </> + ) : ( + "" + )} + {batteryStatus === 4 ? ( + <> + <mask + id={`mask_battery4-${maskHash}`} + style={{ maskType: "alpha" }} + maskUnits="userSpaceOnUse" + x="0" + y="3" + width="20" + height="8" + > + <rect x="0.5" y="-0.5" width="19" height="7" transform="matrix(-1 0 0 1 20 4)" stroke="black" /> + </mask> + <g mask={`url(#mask_battery4-${maskHash})`}> + <path d="M20 3H9L17 11H20V3Z" fill="currentColor" /> + <path d="M3 3H0V11H11L3 3Z" fill="currentColor" /> + </g> + <rect x="21" y="5" width="1" height="4" fill="currentColor" /> + <line + y1="-0.6" + x2="18" + y2="-0.6" + transform="matrix(-0.707107 -0.707107 -0.707107 0.707107 15.7275 13.7279)" + stroke="currentColor" + strokeWidth="1.2" + /> + </> + ) : ( + "" + )} + {batteryStatus === 255 ? ( + <> + <mask + id={`mask_battery_error_${maskHash}`} + style={{ maskType: "alpha" }} + maskUnits="userSpaceOnUse" + x="0" + y="4" + width="20" + height="8" + > + <rect x="0.5" y="4.5" width="19" height="7" stroke="black" /> + </mask> + <g mask={`url(#mask_battery_error_${maskHash})`}> + <path d="M0 4H6.5L7 12H0V4Z" fill="currentColor" /> + <path d="M13 4H20V12H12.5L13 4Z" fill="currentColor" /> + </g> + <rect x="21" y="6" width="1" height="4" fill="currentColor" /> + <path + d="M10.782 12.688C10.782 12.896 10.665 13 10.431 13H8.897C8.70633 13 8.611 12.909 8.611 12.727V11.115C8.611 10.959 8.676 10.881 8.806 10.881H10.587C10.717 10.881 10.782 10.9503 10.782 11.089V12.688ZM10.366 9.698C10.3573 9.802 10.327 9.87567 10.275 9.919C10.223 9.96233 10.1363 9.984 10.015 9.984H9.326C9.222 9.984 9.15267 9.96667 9.118 9.932C9.092 9.88867 9.07033 9.81933 9.053 9.724L8.559 3.588C8.55033 3.51 8.56333 3.45367 8.598 3.419C8.64133 3.37567 8.69333 3.354 8.754 3.354H10.665C10.8037 3.354 10.8643 3.42767 10.847 3.575L10.366 9.698Z" + fill="currentColor" + className="pulse" + /> + </> + ) : ( + "" + )} + </svg> + ); +}; + +export default PileIndicator; diff --git a/src/renderer/component/Battery/SavingModeIndicator.tsx b/src/renderer/component/Battery/SavingModeIndicator.tsx new file mode 100644 index 000000000..7fd560f76 --- /dev/null +++ b/src/renderer/component/Battery/SavingModeIndicator.tsx @@ -0,0 +1,53 @@ +import React from "react"; +import OverlayTrigger from "react-bootstrap/OverlayTrigger"; +import Tooltip from "react-bootstrap/Tooltip"; + +import Styled from "styled-components"; + +import { IconLeaf } from "@Renderer/component/Icon"; + +const Style = Styled.div` +&.status--default { + --color-status: ${({ theme }) => theme.styles.batteryIndicator.strokeShapeColor}; +} +&.status--saving{ + --color-status: ${({ theme }) => theme.colors.brandWarning}; +} +&.status--charging.status--saving{ + --color-status: ${({ theme }) => theme.styles.batteryIndicator.fillShapeColor}; +} +&.batterySavingMode { + position: absolute; + top: 98px; + color: var(--color-status); + left: 50%; + transform: translate3d(-50%, -4px, 0); + transition: 300ms color ease-in-out; +} +`; + +interface SavingModeIndicatorProps { + isSavingMode: boolean; +} + +function SavingModeIndicator({ isSavingMode }: SavingModeIndicatorProps) { + return ( + <Style + className={`batterySavingMode ${isSavingMode ? "savingModeEnabled status--saving" : "savingModeDisabled status--default"}`} + > + <OverlayTrigger + key="keySavingModeOverlay" + placement="top" + overlay={ + <Tooltip id="tooltip-top-savingMode"> + Saving mode <strong>{isSavingMode ? "enabled" : "disabled"}</strong> + </Tooltip> + } + > + <IconLeaf /> + </OverlayTrigger> + </Style> + ); +} + +export default SavingModeIndicator; diff --git a/src/renderer/component/Battery/index.tsx b/src/renderer/component/Battery/index.tsx new file mode 100644 index 000000000..1508f34b3 --- /dev/null +++ b/src/renderer/component/Battery/index.tsx @@ -0,0 +1,15 @@ +import BatteryStatusSide from "./BatteryStatusSide"; +import DefyBatteryIndicator from "./DefyBatteryIndicator"; +import DefyBatteryIndicatorLeft from "./DefyBatteryIndicatorLeft"; +import DefyBatteryIndicatorRight from "./DefyBatteryIndicatorRight"; +import PileIndicator from "./PileIndicator"; +import SavingModeIndicator from "./SavingModeIndicator"; + +export { + BatteryStatusSide, + DefyBatteryIndicator, + DefyBatteryIndicatorLeft, + DefyBatteryIndicatorRight, + PileIndicator, + SavingModeIndicator, +}; diff --git a/src/renderer/component/Button/ButtonConfig.js b/src/renderer/component/Button/ButtonConfig.js index 8d98b60f6..36f5be26c 100644 --- a/src/renderer/component/Button/ButtonConfig.js +++ b/src/renderer/component/Button/ButtonConfig.js @@ -26,7 +26,7 @@ const Style = Styled.div` } `; -const ButtonConfig = ({ +function ButtonConfig({ selected, onClick, size, @@ -34,20 +34,21 @@ const ButtonConfig = ({ tooltip, tooltipPlacement, tooltipClassName, - style, + variation, icoSVG, icoPosition, tooltipDelay, - disabled -}) => { + disabled, + dataAnimate, +}) { return ( <> {tooltip ? ( <OverlayTrigger - placement={tooltipPlacement ? tooltipPlacement : "top"} - delay={{ show: `${tooltipDelay ? tooltipDelay : "0"}`, hide: "0" }} + placement={tooltipPlacement || "top"} + delay={{ show: `${tooltipDelay || "0"}`, hide: "0" }} overlay={ - <Tooltip id="tooltip-top" className={`${tooltipClassName ? tooltipClassName : "tooltipRegular"}`}> + <Tooltip id="tooltip-top" className={`${tooltipClassName || "tooltipRegular"}`}> <div dangerouslySetInnerHTML={{ __html: tooltip }} /> </Tooltip> } @@ -55,13 +56,13 @@ const ButtonConfig = ({ <Style onClick={disabled ? () => {} : onClick} data-value={selected} - className={`${size ? size : ""} ${selected ? "active" : ""} button-config ${style ? style : ""} ${ - style ? style : "" - } icon-${icoPosition ? icoPosition : "none"}`} + className={`${size || ""} ${selected ? "active" : ""} button-config ${variation || ""} ${variation || ""} icon-${ + icoPosition || "none" + }`} disabled={disabled} > {icoSVG && icoPosition !== "right" ? icoSVG : ""} - {buttonText && <span className={"buttonLabel"} dangerouslySetInnerHTML={{ __html: buttonText }} />} + {buttonText && <span className="buttonLabel" dangerouslySetInnerHTML={{ __html: buttonText }} />} {icoSVG && icoPosition === "right" ? icoSVG : ""} </Style> </OverlayTrigger> @@ -69,18 +70,19 @@ const ButtonConfig = ({ <Style onClick={disabled ? () => {} : onClick} data-value={selected} - className={`${size ? size : ""} ${selected ? "active" : ""} ${disabled ? "disabled" : ""} button-config ${ - style ? style : "" - } ${style ? style : ""} icon-${icoPosition ? icoPosition : "none"}`} + className={`${size || ""} ${selected ? "active" : ""} ${disabled ? "disabled" : ""} button-config ${variation || ""} ${ + variation || "" + } icon-${icoPosition || "none"}`} disabled={disabled} + data-animate={dataAnimate} > {icoSVG && icoPosition !== "right" ? icoSVG : ""} - {buttonText && <span className={"buttonLabel"} dangerouslySetInnerHTML={{ __html: buttonText }} />} + {buttonText && <span className="buttonLabel" dangerouslySetInnerHTML={{ __html: buttonText }} />} {icoSVG && icoPosition === "right" ? icoSVG : ""} </Style> )} </> ); -}; +} export default ButtonConfig; diff --git a/src/renderer/component/Button/ButtonMouse.js b/src/renderer/component/Button/ButtonMouse.js index c5b0adb58..75d137d13 100644 --- a/src/renderer/component/Button/ButtonMouse.js +++ b/src/renderer/component/Button/ButtonMouse.js @@ -53,18 +53,16 @@ transition: background 300ms ease-in-out; } `; -const ButtonMouse = ({ selected, onClick, eventType, direction, disabled }) => { +function ButtonMouse({ selected, onClick, eventType, direction, disabled }) { return ( <Styles onClick={disabled ? () => {} : onClick} - className={`${selected ? "active" : ""} buttonMouse direction${direction ? direction : ""} eventType${ - eventType ? eventType : "" - }`} + className={`${selected ? "active" : ""} buttonMouse direction${direction || ""} eventType${eventType || ""}`} disabled={disabled} > - <div className={"buttonInner"}>{eventType == "wheel" ? <IconArrowsMouseWheel /> : <IconArrowsMouseMovement />}</div> + <div className="buttonInner">{eventType == "wheel" ? <IconArrowsMouseWheel /> : <IconArrowsMouseMovement />}</div> </Styles> ); -}; +} export default ButtonMouse; diff --git a/src/renderer/component/Button/ButtonSettings.js b/src/renderer/component/Button/ButtonSettings.js index f7ffc6d48..a074ca18b 100644 --- a/src/renderer/component/Button/ButtonSettings.js +++ b/src/renderer/component/Button/ButtonSettings.js @@ -25,12 +25,12 @@ const Style = Styled.div` } `; -const ButtonSettings = props => { +function ButtonSettings(props) { return ( <Style> <IconSettings /> </Style> ); -}; +} export default ButtonSettings; diff --git a/src/renderer/component/Button/ColorButton.js b/src/renderer/component/Button/ColorButton.js index e9b33be3e..59208731c 100644 --- a/src/renderer/component/Button/ColorButton.js +++ b/src/renderer/component/Button/ColorButton.js @@ -18,11 +18,11 @@ import React from "react"; import PropTypes from "prop-types"; import Styled from "styled-components"; +import { toast } from "react-toastify"; import i18n from "../../i18n"; -import { toast } from "react-toastify"; -import ToastMessage from "../../component/ToastMessage"; -import { IconColorPicker } from "../../component/Icon"; +import ToastMessage from "../ToastMessage"; +import { IconColorPicker } from "../Icon"; const Style = Styled.div` .buttonColor { @@ -66,7 +66,7 @@ const Style = Styled.div` } `; -const ColorButton = ({ selected, onClick, label, text, icoSVG, color }) => { +function ColorButton({ selected, onClick, label, text, icoSVG, color }) { const [disabled, setDisabled] = React.useState(true); const colorToastMessage = () => { @@ -76,7 +76,7 @@ const ColorButton = ({ selected, onClick, label, text, icoSVG, color }) => { content={i18n.editor.color.selectColorFirstContent} icon={<IconColorPicker />} />, - { icon: "" } + { icon: "" }, ); }; React.useEffect(() => { @@ -92,18 +92,18 @@ const ColorButton = ({ selected, onClick, label, text, icoSVG, color }) => { className={`${selected ? "active" : ""} button button-config buttonColor`} disabled={disabled} > - <div className={"buttonIcon"}> - {icoSVG ? icoSVG : null} - {color ? <div className="colorIndicator" style={{ background: `${color.rgb}` }}></div> : null} + <div className="buttonIcon"> + {icoSVG || null} + {color ? <div className="colorIndicator" style={{ background: `${color.rgb}` }} /> : null} </div> - <div className={"buttonLabel"}> + <div className="buttonLabel"> {label ? <div className="subtitle">{label}</div> : null} <div className="title">{text}</div> </div> </div> </Style> ); -}; +} ColorButton.propTypes = { selected: PropTypes.bool, @@ -111,7 +111,7 @@ ColorButton.propTypes = { label: PropTypes.string, text: PropTypes.string, icoSVG: PropTypes.object, - color: PropTypes.object + color: PropTypes.object, }; export default ColorButton; diff --git a/src/renderer/component/Button/ColorPicker.js b/src/renderer/component/Button/ColorPicker.js index 245e54690..9e47dbf9b 100644 --- a/src/renderer/component/Button/ColorPicker.js +++ b/src/renderer/component/Button/ColorPicker.js @@ -125,7 +125,7 @@ const Style = Styled.div` } `; -const ColorPicker = ({ menuKey, id, onClick, dataID, selected, buttonStyle, className }) => { +function ColorPicker({ menuKey, id, onClick, dataID, selected, buttonStyle, className }) { return ( <Style> <div @@ -135,13 +135,13 @@ const ColorPicker = ({ menuKey, id, onClick, dataID, selected, buttonStyle, clas data-id={dataID} > <div className="button-content"> - <div className={`colorItem`} style={buttonStyle}> + <div className="colorItem" style={buttonStyle}> {className == "addColorButton" ? <IconPlusXs /> : " "} </div> </div> </div> </Style> ); -}; +} export default ColorPicker; diff --git a/src/renderer/component/Button/NavigationButton.js b/src/renderer/component/Button/NavigationButton.tsx similarity index 65% rename from src/renderer/component/Button/NavigationButton.js rename to src/renderer/component/Button/NavigationButton.tsx index 6cb53133e..061d9c730 100644 --- a/src/renderer/component/Button/NavigationButton.js +++ b/src/renderer/component/Button/NavigationButton.tsx @@ -15,24 +15,27 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-nocheck import React from "react"; import Styled from "styled-components"; -import i18n from "../../i18n"; import OverlayTrigger from "react-bootstrap/OverlayTrigger"; import Tooltip from "react-bootstrap/Tooltip"; -import LightAccent from "../../../../static/dark/light-accent--lg.png"; +import LightAccent from "@Assets/dark/light-accent--lg.png"; +import i18n from "../../i18n"; const Style = Styled.div` +width: 100%; .disabled{ opacity: 0.5; - } .disabled.menuLink svg { color: ${({ theme }) => theme.styles.navbar.menuLink.color}; } .menuLink { - width: 96px; - height: 96px; + width: 100%; + aspect-ratio: 1; + display: flex; flex-wrap: wrap; justify-content: center; @@ -53,7 +56,7 @@ const Style = Styled.div` position: absolute; right: 2px; top: 2px; - font-size: 10px; + font-size: 9px; font-weight: 700; padding: 4px 6px; z-index: 3; @@ -100,7 +103,7 @@ const Style = Styled.div` background-image: url(${LightAccent}); opacity: 0; transition: 250ms opacity ease-in-out; - z-index: 2; + z-index: 1; } .menuLink:hover { text-decoration: none; @@ -123,21 +126,31 @@ const Style = Styled.div` .menuLinkInner { position: relative; padding: 8px 6px; - width: 96px; - height: 96px; + width: 100%; + aspect-ratio: 1; + display: flex; + justify-content: center; + align-items: center; + flex-wrap: wrap; svg, .menuLinkText { position: relative; z-index: 2; } + svg { + flex: 0 0 42px; + } + .menuLinkText { + margin-bottom: auto; + } } .menuLinkInner:before { position: absolute; opacity: 0; transition: 250ms opacity ease-in-out; border-radius: 6px; - width: 96px; - height: 96px; + width: 100%; + aspect-ratio: 1; left: 0; top 0; content: ''; @@ -145,78 +158,110 @@ const Style = Styled.div` background: ${({ theme }) => theme.styles.navbar.menuLink.gradient}; } @media screen and (max-width: 999px) { - .menuLink, - .menuLinkInner, - .menuLinkInner:before { - width: 64px; - height: 64px; - } - .menuLinkText { - display: none; - } - .menuLink:after { - right: -14px; - } - .menuLink:before { - right: -17px; - height: 36px; - } - .menuLinkInner { - align-items: center; - display: flex; - justify-content: center; - } - .menuLinkInner svg { - transform: scale(0.85); - } - .menuLink .badge { - right: -18px; - } + .menuLinkText { + display: none; } - @media screen and (max-height: 719px) { - .menuLink, - .menuLinkInner, - .menuLinkInner:before { - width: 64px; - height: 64px; - } - .menuLinkText { - display: none; - } - .menuLink:after { - right: -14px; - } - .menuLink:before { - right: -17px; - height: 36px; - } - .menuLinkInner { - align-items: center; - display: flex; - justify-content: center; - } - .menuLinkInner svg { - transform: scale(0.85); - } - .menuLink .badge { - right: -18px; - } + .menuLink:after { + right: -14px; + } + .menuLink:before { + right: -17px; + height: 36px; + } + .menuLinkInner { + align-items: center; + display: flex; + justify-content: center; + padding: 0; + } + .menuLinkInner svg { + transform: scale(1); + flex: 0 0 26px; + } + .menuLink .badge { + right: -18px; + } +} +@media screen and (max-width: 860px) { + .menuLinkText { + display: none; + } + .menuLink:before { + right: -15px; + height: 26px; + } + .menuLinkInner { + align-items: center; + display: flex; + justify-content: center; + padding: 0; + } + .menuLinkInner svg { + transform: scale(1); + flex: 0 0 30px; + } + .menuLink .badge { + right: -18px; + } +} +@media screen and (max-height: 870px) { + .menuLinkText { + display: none; } + .menuLink:before { + right: -15px; + height: 36px; + } + .menuLinkInner { + align-items: center; + display: flex; + justify-content: center; + padding: 0; + } + .menuLinkInner svg { + transform: scale(1); + flex: 0 0 30px; + } + .menuLink .badge { + right: -18px; + } +} +@media screen and (max-height: 670px) { + .menuLink:before { + height: 26px; + } + .menuLink:after { + right: -12px; + } + .menuLinkInner svg { + transform: scale(1); + flex: 0 0 24px; + } +} `; -//className={`icon-image ${selected ? "select" : ""}`} -const NavigationButton = ({ selected, onClick, showNotif, notifText, buttonText, icoSVG, disabled }) => { + +interface NavigationButtonProps { + selected: boolean; + showNotif?: boolean; + notifText?: string; + buttonText: string; + icoSVG: JSX.Element; + disabled: boolean; +} + +function NavigationButton({ selected, showNotif, notifText, buttonText, icoSVG, disabled }: NavigationButtonProps) { return ( <Style> <OverlayTrigger - placement={`right`} + placement="right" overlay={ - <Tooltip className={`tooltipMenu`}> + <Tooltip className="tooltipMenu"> <div dangerouslySetInnerHTML={{ __html: buttonText }} /> </Tooltip> } > <div className={`menuLink ${selected ? "active" : ""} ${disabled ? "disabled" : ""}`}> - <div className={"menuLinkInner"}> + <div className="menuLinkInner"> {icoSVG} {showNotif ? ( notifText ? ( @@ -227,12 +272,12 @@ const NavigationButton = ({ selected, onClick, showNotif, notifText, buttonText, ) : ( "" )} - <div className={"menuLinkText"} dangerouslySetInnerHTML={{ __html: buttonText }} /> + <div className="menuLinkText" dangerouslySetInnerHTML={{ __html: buttonText }} /> </div> </div> </OverlayTrigger> </Style> ); -}; +} export default NavigationButton; diff --git a/src/renderer/component/Button/RegularButtonFwRef.tsx b/src/renderer/component/Button/RegularButtonFwRef.tsx new file mode 100644 index 000000000..6b3171674 --- /dev/null +++ b/src/renderer/component/Button/RegularButtonFwRef.tsx @@ -0,0 +1,36 @@ +import React from "react"; + +interface RegularButtonProps { + selected?: boolean; + onClick?: () => void; + size?: string; + children: React.ReactNode; + variation?: string; + icoSVG?: React.ReactNode; + icoPosition?: "left" | "right" | undefined; + disabled?: boolean; +} +const RegularButtonFwRef = React.forwardRef( + ( + { selected, onClick, size, children, variation, icoSVG, icoPosition, disabled }: RegularButtonProps, + ref?: React.ForwardedRef<HTMLButtonElement>, + ) => ( + <button + type="button" + onClick={disabled ? () => {} : onClick} + className={`${size || ""} ${selected ? "active" : ""} button ${variation && variation} iconOn${icoPosition || "None"}`} + disabled={disabled} + tabIndex={0} + ref={ref} + > + <div className="buttonLabel"> + {icoSVG && icoPosition !== "right" ? icoSVG : ""} + <span className="buttonText">{children}</span> + {icoSVG && icoPosition === "right" ? icoSVG : ""} + </div> + <div className="buttonFX" /> + </button> + ), +); + +export default RegularButtonFwRef; diff --git a/src/renderer/component/Button/SuperkeyPicker.js b/src/renderer/component/Button/SuperkeyPicker.js index e3b44205a..833d632ad 100644 --- a/src/renderer/component/Button/SuperkeyPicker.js +++ b/src/renderer/component/Button/SuperkeyPicker.js @@ -157,7 +157,7 @@ const Style = Styled.div` `; -const SuperkeyPicker = ({ +function SuperkeyPicker({ selected, selectedAction, onClick, @@ -173,11 +173,11 @@ const SuperkeyPicker = ({ keymapDB, changeSelected, updateSuper, - updateAction -}) => { + updateAction, +}) { const [controlDeleteButton, setControlDeleteButton] = React.useState(false); const [keyContent, setKeyContent] = React.useState("Loading..."); - let action = superkeys[selected] == undefined ? 0 : superkeys[selected].actions[index]; + const action = superkeys[selected] == undefined ? 0 : superkeys[selected].actions[index]; React.useEffect(() => { if (superkeys[selected] == undefined) { @@ -191,7 +191,7 @@ const SuperkeyPicker = ({ } else { aux = keymapDB.parse(superkeys[selected].actions[index]); } - //setKeyContent(aux.label); + // setKeyContent(aux.label); if (superkeys[selected].actions[index]) { setControlDeleteButton(true); } else { @@ -204,7 +204,7 @@ const SuperkeyPicker = ({ } } if (aux.label) { - setKeyContent((aux.extraLabel != undefined ? aux.extraLabel + " " : "") + aux.label); + setKeyContent((aux.extraLabel != undefined ? `${aux.extraLabel} ` : "") + aux.label); } }, [index, keymapDB, macros, selected, superkeys, action]); @@ -231,6 +231,6 @@ const SuperkeyPicker = ({ </div> </Style> ); -}; +} export default SuperkeyPicker; diff --git a/src/renderer/component/Button/index.js b/src/renderer/component/Button/index.js index b6d7f5cac..7be05d8b4 100644 --- a/src/renderer/component/Button/index.js +++ b/src/renderer/component/Button/index.js @@ -18,9 +18,20 @@ import ColorButton from "./ColorButton"; import ColorPicker from "./ColorPicker"; import NavigationButton from "./NavigationButton"; import RegularButton from "./regularButton"; +import RegularButtonFwRef from "./RegularButtonFwRef"; import ButtonConfig from "./ButtonConfig"; import ButtonSettings from "./ButtonSettings"; import SuperkeyPicker from "./SuperkeyPicker"; import ButtonMouse from "./ButtonMouse"; -export { ColorButton, ColorPicker, NavigationButton, RegularButton, ButtonConfig, ButtonSettings, SuperkeyPicker, ButtonMouse }; +export { + ColorButton, + ColorPicker, + NavigationButton, + RegularButton, + RegularButtonFwRef, + ButtonConfig, + ButtonSettings, + SuperkeyPicker, + ButtonMouse, +}; diff --git a/src/renderer/component/Button/regularButton.js b/src/renderer/component/Button/regularButton.js index 60de852fd..33da7aa9a 100644 --- a/src/renderer/component/Button/regularButton.js +++ b/src/renderer/component/Button/regularButton.js @@ -18,34 +18,34 @@ import React from "react"; import PropTypes from "prop-types"; -const RegularButton = ({ selected, onClick, size, buttonText, style, icoSVG, icoPosition, disabled }) => { +function RegularButton({ selected, onClick, size, buttonText, styles, icoSVG, icoPosition, disabled }) { return ( - <div + <button + type="button" onClick={disabled ? () => {} : onClick} - className={`${size ? size : ""} ${selected ? "active" : ""} button ${style && style} iconOn${ - icoPosition ? icoPosition : "None" - }`} + className={`${size || ""} ${selected ? "active" : ""} button ${styles && styles} iconOn${icoPosition || "None"}`} disabled={disabled} + tabIndex={0} > - <div className={"buttonLabel"}> + <div className="buttonLabel"> {icoSVG && icoPosition !== "right" ? icoSVG : ""} - <span className={"buttonText"} dangerouslySetInnerHTML={{ __html: buttonText }} /> + <span className="buttonText" dangerouslySetInnerHTML={{ __html: buttonText }} /> {icoSVG && icoPosition === "right" ? icoSVG : ""} </div> - <div className="buttonFX"></div> - </div> + <div className="buttonFX" /> + </button> ); -}; +} RegularButton.propTypes = { selected: PropTypes.bool, onClick: PropTypes.func, size: PropTypes.string, buttonText: PropTypes.string, - style: PropTypes.string, + styles: PropTypes.string, icoSVG: PropTypes.object, icoPosition: PropTypes.string, - disabled: PropTypes.bool + disabled: PropTypes.bool, }; export default RegularButton; diff --git a/src/renderer/component/Callout/Callout.js b/src/renderer/component/Callout/Callout.jsx similarity index 96% rename from src/renderer/component/Callout/Callout.js rename to src/renderer/component/Callout/Callout.jsx index 9e099dc3d..e3ed85b23 100644 --- a/src/renderer/component/Callout/Callout.js +++ b/src/renderer/component/Callout/Callout.jsx @@ -20,7 +20,6 @@ import PropTypes from "prop-types"; import Styled from "styled-components"; import Modal from "react-bootstrap/Modal"; -import Spinner from "react-bootstrap/Spinner"; const Style = Styled.div` &.mt-xs { @@ -151,10 +150,10 @@ const Style = Styled.div` * @param {number} maxWidth - The max with of the element. * @param {string} videoDuration - The video length * @param {boolean} hasVideo - Check if video exists - * @returns {<Callout>} Callout component. */ -const Callout = ({ content, media, size, className, maxWidth, hasVideo, videoDuration, videoTitle }) => { +function Callout(props) { + const { content, media, size, className, maxWidth, hasVideo, videoDuration, videoTitle } = props; let maxStyle = { maxWidth: "auto" }; if (maxWidth) { maxStyle = { maxWidth: `${maxWidth}px` }; @@ -177,7 +176,7 @@ const Callout = ({ content, media, size, className, maxWidth, hasVideo, videoDur <span dangerouslySetInnerHTML={{ __html: content }} /> </div> {hasVideo && media ? ( - <div className="playCounter" onClick={() => setModalCallOut(true)}> + <div className="playCounter" onClick={() => setModalCallOut(true)} aria-hidden="true"> <div className="playCounterInner"> <div className="playCounterIcon"> <svg width="9" height="12" viewBox="0 0 9 12" fill="none" xmlns="http://www.w3.org/2000/svg"> @@ -218,7 +217,7 @@ const Callout = ({ content, media, size, className, maxWidth, hasVideo, videoDur frameBorder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowFullScreen - ></iframe> + /> </div> </div> </Modal.Body> @@ -228,16 +227,17 @@ const Callout = ({ content, media, size, className, maxWidth, hasVideo, videoDur )} </Style> ); -}; +} Callout.propTypes = { - content: PropTypes.string.isRequired, + content: PropTypes.string, media: PropTypes.string, size: PropTypes.string, className: PropTypes.string, maxWidth: PropTypes.number, hasVideo: PropTypes.bool, - videoDuration: PropTypes.string + videoDuration: PropTypes.string, + videoTitle: PropTypes.string, }; export default Callout; diff --git a/src/renderer/component/Callout/index.js b/src/renderer/component/Callout/index.js index 0bec72bf7..f3e4f9ff5 100644 --- a/src/renderer/component/Callout/index.js +++ b/src/renderer/component/Callout/index.js @@ -16,4 +16,4 @@ import Callout from "./Callout"; -export { Callout as default }; +export default Callout; diff --git a/src/renderer/component/ConfirmationDialog.js b/src/renderer/component/ConfirmationDialog.js index d50c5e237..f31a92f8d 100644 --- a/src/renderer/component/ConfirmationDialog.js +++ b/src/renderer/component/ConfirmationDialog.js @@ -28,7 +28,7 @@ const Styles = Styled.div` `; -const ConfirmationDialog = props => { +function ConfirmationDialog(props) { return ( <Modal backdrop="static" @@ -44,12 +44,12 @@ const ConfirmationDialog = props => { </Modal.Header> <Modal.Body className="body">{props.text}</Modal.Body> <Modal.Footer> - <RegularButton buttonText={i18n.dialog.cancel} style="outline" size="sm" onClick={props.onCancel} /> - <RegularButton buttonText={i18n.dialog.applyChanges} style="outline gradient" size="sm" onClick={props.onConfirm} /> + <RegularButton buttonText={i18n.dialog.cancel} styles="outline transp-bg" size="sm" onClick={props.onCancel} /> + <RegularButton buttonText={i18n.dialog.applyChanges} styles="outline gradient" size="sm" onClick={props.onConfirm} /> </Modal.Footer> </Styles> </Modal> ); -}; +} export { ConfirmationDialog as default }; diff --git a/src/renderer/component/ConnectionStatus/ConnectionStatus.tsx b/src/renderer/component/ConnectionStatus/ConnectionStatus.tsx new file mode 100644 index 000000000..e4f659564 --- /dev/null +++ b/src/renderer/component/ConnectionStatus/ConnectionStatus.tsx @@ -0,0 +1,52 @@ +import React from "react"; +import Styled from "styled-components"; + +import { IconBluetooth, IconPlug, IconSignal } from "@Renderer/component/Icon"; +import Title from "@Renderer/component/Title"; +import { ConnectionProps } from "@Renderer/types/wireless"; + +const Styles = Styled.div` +.cardConnection { + display: flex; + grid-gap: 16px; + align-items: center; + background-color: ${({ theme }) => theme.styles.energyManagement.connectionBGColor}; + padding: 0.75rem 1rem; + border-radius: 14px; + margin-bottom: -0.5rem; + h4 { + margin-bottom: 0; + font-size: 0.915rem; + color: ${({ theme }) => theme.styles.energyManagement.connectionColor}; + } +} +.cardConnectionIcon { + display: flex; + align-items: center; + justify-content: center; + border-radius: 50%; + color: white; + width: 42px; + aspect-ratio: 1; + background-color: ${({ theme }) => theme.colors.purple300}; +} +`; + +function ConnectionStatus(props: ConnectionProps) { + const { connection } = props; + const connectionTypes = [ + { id: 0, text: "Wired connected", icon: <IconPlug /> }, + { id: 1, text: "Bluetooh connected", icon: <IconBluetooth /> }, + { id: 2, text: "RF connected", icon: <IconSignal /> }, + ]; + return ( + <Styles> + <div className="cardConnection"> + <div className="cardConnectionIcon">{connectionTypes[connection].icon}</div> + <Title text={connectionTypes[connection].text} headingLevel={4} /> + </div> + </Styles> + ); +} + +export default ConnectionStatus; diff --git a/src/renderer/component/NeuronStatus/index.js b/src/renderer/component/ConnectionStatus/index.js similarity index 82% rename from src/renderer/component/NeuronStatus/index.js rename to src/renderer/component/ConnectionStatus/index.js index f73c1c66a..55cf5467b 100644 --- a/src/renderer/component/NeuronStatus/index.js +++ b/src/renderer/component/ConnectionStatus/index.js @@ -1,5 +1,5 @@ /* Bazecor - * Copyright (C) 2022 Dygmalab, Inc. + * Copyright (C) 2023 Dygmalab, Inc. * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free Software @@ -14,6 +14,6 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ -import NeuronStatus from "./NeuronStatus"; +import ConnectionStatus from "./ConnectionStatus"; -export { NeuronStatus as default }; +export { ConnectionStatus as default }; diff --git a/src/renderer/component/CopyFromDialog.js b/src/renderer/component/CopyFromDialog.js index 110f8d799..436429878 100644 --- a/src/renderer/component/CopyFromDialog.js +++ b/src/renderer/component/CopyFromDialog.js @@ -17,12 +17,12 @@ import React, { useState } from "react"; import Styled from "styled-components"; -import i18n from "../i18n"; -//React Bootstrap components +// React Bootstrap components import Modal from "react-bootstrap/Modal"; import Button from "react-bootstrap/Button"; import ListGroup from "react-bootstrap/ListGroup"; +import i18n from "../i18n"; import { RegularButton } from "./Button"; import Title from "./Title"; @@ -77,7 +77,7 @@ const Styles = Styled.div` } `; -export const CopyFromDialog = props => { +export function CopyFromDialog(props) { const [selectedLayer, setSelectedLayer] = useState(-1); return ( <Modal @@ -95,29 +95,27 @@ export const CopyFromDialog = props => { <Modal.Body> <Title text={i18n.editor.pleaseSelectLayer} headingLevel={4} /> <ListGroup variant="flush"> - {props.layers.map(layer => { - return ( - <ListGroup.Item - className={`listitem ${ - layer.index == props.currentLayer ? "disabled" : layer.index == selectedLayer ? "selected" : "" - }`} - key={layer.index} - action - disabled={layer.index == props.currentLayer} - onClick={() => { - setSelectedLayer(layer.index); - }} - > - {layer.label} {layer.index == selectedLayer ? <span>{i18n.editor.layers.layerToCopy}</span> : ""} - </ListGroup.Item> - ); - })} + {props.layers.map(layer => ( + <ListGroup.Item + className={`listitem ${ + layer.index == props.currentLayer ? "disabled" : layer.index == selectedLayer ? "selected" : "" + }`} + key={layer.index} + action + disabled={layer.index == props.currentLayer} + onClick={() => { + setSelectedLayer(layer.index); + }} + > + {layer.label} {layer.index == selectedLayer ? <span>{i18n.editor.layers.layerToCopy}</span> : ""} + </ListGroup.Item> + ))} </ListGroup> </Modal.Body> <Modal.Footer> <RegularButton buttonText={i18n.dialog.cancel} - style="outline" + styles="outline transp-bg" size="sm" onClick={() => { setSelectedLayer(-1); @@ -126,7 +124,7 @@ export const CopyFromDialog = props => { /> <RegularButton buttonText={i18n.dialog.ok} - style="outline gradient" + styles="outline gradient" size="sm" onClick={() => { const layer = selectedLayer; @@ -138,4 +136,4 @@ export const CopyFromDialog = props => { </Styles> </Modal> ); -}; +} diff --git a/src/renderer/component/Form/CustomRadioCheckBox.js b/src/renderer/component/Form/CustomRadioCheckBox.js index e2a10eeb9..dbc499255 100644 --- a/src/renderer/component/Form/CustomRadioCheckBox.js +++ b/src/renderer/component/Form/CustomRadioCheckBox.js @@ -75,7 +75,7 @@ const Style = Styled.div` } `; -const CustomRadioCheckBox = ({ +function CustomRadioCheckBox({ label, type, id, @@ -86,18 +86,18 @@ const CustomRadioCheckBox = ({ className, onClick, disabled, - checked -}) => { + checked, +}) { return ( <Style className={`customCheckbox ${className}`} onClick={onClick}> <div className="customCheckboxInner" id={`input-${id}`}> - <Form.Check type={type} id={`input-${id}-${type}`} name={name} disabled={disabled ? disabled : false} checked={checked} /> + <Form.Check type={type} id={`input-${id}-${type}`} name={name} disabled={disabled || false} checked={checked} /> <label htmlFor={`input-${id}-${type}`}> <Title text={label} tooltip={tooltip} headingLevel={6} /> </label> </div> </Style> ); -}; +} export default CustomRadioCheckBox; diff --git a/src/renderer/component/Icon/IconArrowRight.js b/src/renderer/component/Icon/IconArrowRight.js index d4865c2dd..3a4f858ff 100644 --- a/src/renderer/component/Icon/IconArrowRight.js +++ b/src/renderer/component/Icon/IconArrowRight.js @@ -1,4 +1,5 @@ import * as React from "react"; + function IconArrowRight(props) { return ( <svg width={24} height={24} fill="none" xmlns="http://www.w3.org/2000/svg" {...props}> diff --git a/src/renderer/component/Icon/IconBattery.js b/src/renderer/component/Icon/IconBattery.js new file mode 100644 index 000000000..384deeba2 --- /dev/null +++ b/src/renderer/component/Icon/IconBattery.js @@ -0,0 +1,13 @@ +import React from "react"; + +const IconBattery = props => { + return ( + <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> + <rect x="4.5" y="9.0498" width="11" height="6" fill="currentColor" stroke="currentColor" /> + <rect x="2.5" y="7.0498" width="18" height="10" stroke="currentColor" /> + <rect x="22" y="9.5498" width="1" height="5" fill="currentColor" /> + </svg> + ); +}; + +export default IconBattery; diff --git a/src/renderer/component/Icon/IconBluetooth.tsx b/src/renderer/component/Icon/IconBluetooth.tsx new file mode 100644 index 000000000..4dfe19cb9 --- /dev/null +++ b/src/renderer/component/Icon/IconBluetooth.tsx @@ -0,0 +1,21 @@ +import * as React from "react"; + +interface SVGProps { + width?: number; + height?: number; +} + +function IconBluetooth({ width = 24, height = 24 }: SVGProps) { + return ( + <svg width={width} height={height} viewBox={`0 0 ${width} ${height}`} fill="none" xmlns="http://www.w3.org/2000/svg"> + <mask id="mask0_4369_15994" style={{ maskType: "alpha" }} maskUnits="userSpaceOnUse" x="0" y="3" width="24" height="19"> + <rect y="3.5" width="24" height="18" fill="white" /> + </mask> + <g mask="url(#mask0_4369_15994)"> + <path d="M6 7L16.5 16.5L12 20.5V4.5L16.5 8.5L6 18" stroke="currentColor" strokeWidth="1.2" /> + </g> + </svg> + ); +} + +export default IconBluetooth; diff --git a/src/renderer/component/Icon/IconCloudDownload.js b/src/renderer/component/Icon/IconCloudDownload.js index 168ca5be1..24820516f 100644 --- a/src/renderer/component/Icon/IconCloudDownload.js +++ b/src/renderer/component/Icon/IconCloudDownload.js @@ -7,7 +7,7 @@ function IconCloudDownload(props) { <mask id="prefix__aIconCloudDownload" style={{ - maskType: "alpha" + maskType: "alpha", }} maskUnits="userSpaceOnUse" x={0} diff --git a/src/renderer/component/Icon/IconDelete.js b/src/renderer/component/Icon/IconDelete.js index 552baa3b1..c399a23d7 100644 --- a/src/renderer/component/Icon/IconDelete.js +++ b/src/renderer/component/Icon/IconDelete.js @@ -2,7 +2,7 @@ import * as React from "react"; function IconDelete(props) { return ( - <svg width={24} height={24} viewBox={`0 0 24 24`} fill="none" xmlns="http://www.w3.org/2000/svg" {...props}> + <svg width={24} height={24} viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" {...props}> <path d="M19.4 5V6.4H4.6V5C4.6 4.77909 4.77909 4.6 5 4.6H8H8.37082L8.53666 4.26833L8.98387 3.3739C9.22102 2.8996 9.70579 2.6 10.2361 2.6H13.7639C14.2942 2.6 14.779 2.8996 15.0161 3.3739L15.4633 4.26833L15.6292 4.6H16H19C19.2209 4.6 19.4 4.77909 19.4 5ZM5.6 20V8.6H18.4V20C18.4 20.7732 17.7732 21.4 17 21.4H7C6.2268 21.4 5.6 20.7732 5.6 20Z" stroke="currentColor" diff --git a/src/renderer/component/Icon/IconEditModeStandardView.js b/src/renderer/component/Icon/IconEditModeStandardView.js index 472f4e922..54908b369 100644 --- a/src/renderer/component/Icon/IconEditModeStandardView.js +++ b/src/renderer/component/Icon/IconEditModeStandardView.js @@ -6,7 +6,7 @@ function IconEditModeStandardView(props) { <mask id="prefix__IconEditModeStandardView" style={{ - maskType: "alpha" + maskType: "alpha", }} maskUnits="userSpaceOnUse" x={1} @@ -23,7 +23,7 @@ function IconEditModeStandardView(props) { <mask id="prefix_b_IconEditModeStandardView" style={{ - maskType: "alpha" + maskType: "alpha", }} maskUnits="userSpaceOnUse" x={1} diff --git a/src/renderer/component/Icon/IconEditModeStandardViewSm.js b/src/renderer/component/Icon/IconEditModeStandardViewSm.js index d56a99126..3cd3c355f 100644 --- a/src/renderer/component/Icon/IconEditModeStandardViewSm.js +++ b/src/renderer/component/Icon/IconEditModeStandardViewSm.js @@ -7,7 +7,7 @@ function IconEditModeStandardViewSm(props) { <mask id="prefix_StandardViewModeSm_a" style={{ - maskType: "alpha" + maskType: "alpha", }} maskUnits="userSpaceOnUse" x={0} @@ -24,7 +24,7 @@ function IconEditModeStandardViewSm(props) { <mask id="prefix_StandardViewModeSm_b" style={{ - maskType: "alpha" + maskType: "alpha", }} maskUnits="userSpaceOnUse" x={0} diff --git a/src/renderer/component/Icon/IconFLashlight.js b/src/renderer/component/Icon/IconFLashlight.js index d7e6300ff..2a1b78c1a 100644 --- a/src/renderer/component/Icon/IconFLashlight.js +++ b/src/renderer/component/Icon/IconFLashlight.js @@ -1,4 +1,4 @@ -import * as React from "react"; +import React from "react"; function IconFlashlight(props) { return ( diff --git a/src/renderer/component/Icon/IconKeyboard2Stroke.js b/src/renderer/component/Icon/IconKeyboard2Stroke.js index 7daf2ca5b..24e5ee9d6 100644 --- a/src/renderer/component/Icon/IconKeyboard2Stroke.js +++ b/src/renderer/component/Icon/IconKeyboard2Stroke.js @@ -2,7 +2,7 @@ import * as React from "react"; function IconKeyboard2Stroke(props) { return ( - <svg width={42} height={42} fill="none" xmlns="http://www.w3.org/2000/svg" {...props}> + <svg width={42} height={42} viewBox="0 0 42 42" fill="none" xmlns="http://www.w3.org/2000/svg" {...props}> <path fillRule="evenodd" clipRule="evenodd" diff --git a/src/renderer/component/Icon/IconKeyboardSelector.js b/src/renderer/component/Icon/IconKeyboardSelector.js index 4d35ba303..693d18a78 100644 --- a/src/renderer/component/Icon/IconKeyboardSelector.js +++ b/src/renderer/component/Icon/IconKeyboardSelector.js @@ -2,7 +2,7 @@ import * as React from "react"; function IconKeyboardSelector(props) { return ( - <svg width={42} height={42} fill="none" xmlns="http://www.w3.org/2000/svg" {...props}> + <svg width={42} height={42} viewBox="0 0 42 42" fill="none" xmlns="http://www.w3.org/2000/svg" {...props}> <g clipPath="url(#prefix__clip0_1914_216318)" fill="currentColor"> <path d="M14.054 9.5H6.25a2 2 0 00-2 2v19a2 2 0 002 2h29.5c.477 0 .916-.167 1.26-.447L35.429 30.5H6.25v-19h9.84l-2.036-2z" /> <path d="M19.397 14.75h-.147v2h2.183l-2.036-2zM24.741 20H24.5v2h2.277l-2.036-2zM8.75 16.75h3.5v-2h-3.5v2zM14 16.75h3.5v-2H14v2zM8.75 22h3.5v-2h-3.5v2zM14 22h3.5v-2H14v2zM19.25 22h3.5v-2h-3.5v2zM14 27.25h14v-2H14v2z" /> diff --git a/src/renderer/component/Icon/IconLEDSwitchLeft.js b/src/renderer/component/Icon/IconLEDSwitchLeft.js index 7fbe48b49..58e1ad7cf 100644 --- a/src/renderer/component/Icon/IconLEDSwitchLeft.js +++ b/src/renderer/component/Icon/IconLEDSwitchLeft.js @@ -6,7 +6,7 @@ function IconLEDSwitchLeft(props) { <mask id="prefix__a" style={{ - maskType: "alpha" + maskType: "alpha", }} maskUnits="userSpaceOnUse" x={0} diff --git a/src/renderer/component/Icon/IconLayersSm.js b/src/renderer/component/Icon/IconLayersSm.js index 7c5ab6805..5c37879dd 100644 --- a/src/renderer/component/Icon/IconLayersSm.js +++ b/src/renderer/component/Icon/IconLayersSm.js @@ -6,7 +6,7 @@ function IconLayersSm(props) { <mask id="prefix_LayersSm_a" style={{ - maskType: "alpha" + maskType: "alpha", }} maskUnits="userSpaceOnUse" x={0} diff --git a/src/renderer/component/Icon/IconLeaf.js b/src/renderer/component/Icon/IconLeaf.js new file mode 100644 index 000000000..47a5f22f3 --- /dev/null +++ b/src/renderer/component/Icon/IconLeaf.js @@ -0,0 +1,29 @@ +import * as React from "react"; + +function IconLeaf(props) { + const pathHash = `${(Math.random() + 1).toString(36).substring(7)}`; + return ( + <svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg" {...props}> + <g id="Leaf" clipPath={`url(#clip0_4160_258872)-${pathHash}`}> + <path + id="Leaf_2" + d="M15.1798 19.668C12.6742 22.1737 8.74151 22.3826 5.9978 20.2949C5.74815 20.105 5.50834 19.896 5.28034 19.668C5.05233 19.44 4.84334 19.2001 4.65337 18.9505C2.56569 16.2068 2.77468 12.2741 5.28034 9.76848C8.01401 7.03481 18.7154 6.23295 18.7154 6.23295C18.7154 6.23295 17.9135 16.9343 15.1798 19.668Z" + stroke="currentColor" + strokeWidth="1.2" + /> + <path + id="Center" + d="M4.65722 18.9499C4.84719 19.1995 5.05618 19.4394 5.28419 19.6674C5.51219 19.8954 5.752 20.1043 6.00165 20.2943C7.50161 17.4499 10.5016 13.9499 14.5016 9.94986C9.30161 12.9239 6.50171 16.4498 4.65722 18.9499Z" + stroke="currentColor" + /> + </g> + <defs> + <clipPath id={`clip0_4160_258872-${pathHash}`}> + <rect width="24" height="24" fill="white" transform="translate(0 0.450195)" /> + </clipPath> + </defs> + </svg> + ); +} + +export default IconLeaf; diff --git a/src/renderer/component/Icon/IconLetterColor.js b/src/renderer/component/Icon/IconLetterColor.js index 5b3dbcdec..80da79d9d 100644 --- a/src/renderer/component/Icon/IconLetterColor.js +++ b/src/renderer/component/Icon/IconLetterColor.js @@ -7,7 +7,7 @@ function IconLetterColor(props) { <mask id="prefix_maskLetter_a" style={{ - maskType: "alpha" + maskType: "alpha", }} maskUnits="userSpaceOnUse" x={0} diff --git a/src/renderer/component/Icon/IconMemory2Stroke.js b/src/renderer/component/Icon/IconMemory2Stroke.js index 4123daa54..02369fd12 100644 --- a/src/renderer/component/Icon/IconMemory2Stroke.js +++ b/src/renderer/component/Icon/IconMemory2Stroke.js @@ -2,7 +2,7 @@ import * as React from "react"; function IconMemory2Stroke(props) { return ( - <svg width={42} height={42} fill="none" xmlns="http://www.w3.org/2000/svg" {...props}> + <svg width={42} height={42} viewBox="0 0 42 42" fill="none" xmlns="http://www.w3.org/2000/svg" {...props}> <path fillRule="evenodd" clipRule="evenodd" diff --git a/src/renderer/component/Icon/IconNoKey.js b/src/renderer/component/Icon/IconNoKey.js index 680edd054..613aeb852 100644 --- a/src/renderer/component/Icon/IconNoKey.js +++ b/src/renderer/component/Icon/IconNoKey.js @@ -6,7 +6,7 @@ function IconNoKey(props) { <mask id="prefix__IconNoKey" style={{ - maskType: "alpha" + maskType: "alpha", }} maskUnits="userSpaceOnUse" x={0} diff --git a/src/renderer/component/Icon/IconNullSm.js b/src/renderer/component/Icon/IconNullSm.js index 727b2f401..f32753119 100644 --- a/src/renderer/component/Icon/IconNullSm.js +++ b/src/renderer/component/Icon/IconNullSm.js @@ -6,7 +6,7 @@ function IconNullSm(props) { <mask id="prefix_NullSm_a" style={{ - maskType: "alpha" + maskType: "alpha", }} maskUnits="userSpaceOnUse" x={0} diff --git a/src/renderer/component/Icon/IconPen.js b/src/renderer/component/Icon/IconPen.js index 13fb885f5..317d8bc0d 100644 --- a/src/renderer/component/Icon/IconPen.js +++ b/src/renderer/component/Icon/IconPen.js @@ -2,7 +2,7 @@ import * as React from "react"; function IconPen(props) { return ( - <svg width={24} height={24} fill="none" viewBox={`0 0 24 24`} xmlns="http://www.w3.org/2000/svg" {...props}> + <svg width={24} height={24} fill="none" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" {...props}> <path d="M15.1,5l1.4-1.3c0.4-0.4,1-0.4,1.4,0L20.3,6c0.4,0.4,0.4,1,0,1.4l-1.4,1.3L15.1,5z" fill="none" diff --git a/src/renderer/component/Icon/IconPlug.tsx b/src/renderer/component/Icon/IconPlug.tsx new file mode 100644 index 000000000..6fa8e14bc --- /dev/null +++ b/src/renderer/component/Icon/IconPlug.tsx @@ -0,0 +1,21 @@ +import * as React from "react"; + +interface SVGProps { + width?: number; + height?: number; +} + +function IconPlug({ width = 24, height = 24 }: SVGProps) { + return ( + <svg width={width} height={height} viewBox={`0 0 ${width} ${height}`} fill="none" xmlns="http://www.w3.org/2000/svg"> + <path + d="M8 2V8M8 8H6C5.44772 8 5 8.44772 5 9V14L10 19V22H14V19L19 14V9C19 8.44772 18.5523 8 18 8H16M8 8H16M16 2V8" + stroke="currentColor" + strokeWidth="1.2" + strokeLinecap="round" + /> + </svg> + ); +} + +export default IconPlug; diff --git a/src/renderer/component/Icon/IconPreferences2Stroke.js b/src/renderer/component/Icon/IconPreferences2Stroke.js index 12b8ecbde..1dea9eba3 100644 --- a/src/renderer/component/Icon/IconPreferences2Stroke.js +++ b/src/renderer/component/Icon/IconPreferences2Stroke.js @@ -2,7 +2,7 @@ import * as React from "react"; function IconPreferences2Stroke(props) { return ( - <svg width={42} height={42} fill="none" xmlns="http://www.w3.org/2000/svg" {...props}> + <svg width={42} height={42} viewBox="0 0 42 42" fill="none" xmlns="http://www.w3.org/2000/svg" {...props}> <path fillRule="evenodd" clipRule="evenodd" diff --git a/src/renderer/component/Icon/IconRefresh.js b/src/renderer/component/Icon/IconRefresh.js index 09f882e59..de2deab0e 100644 --- a/src/renderer/component/Icon/IconRefresh.js +++ b/src/renderer/component/Icon/IconRefresh.js @@ -1,16 +1,25 @@ import * as React from "react"; function IconRefresh(props) { + const maskHash = `${(Math.random() + 1).toString(36).substring(7)}-Refresh`; return ( <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> - <mask id="mask0_4032_256833" style={{ maskType: "alpha" }} maskUnits="userSpaceOnUse" x="1" y="2" width="22" height="21"> + <mask + id={`mask0_4032_256833${maskHash}`} + style={{ maskType: "alpha" }} + maskUnits="userSpaceOnUse" + x="1" + y="2" + width="22" + height="21" + > <path d="M18 10H22V3H2V22H22V12H18V10Z" fill="white" stroke="currentColor" /> </mask> - <g mask="url(#mask0_4032_256833)"> + <g mask={`url(#mask0_4032_256833${maskHash})`}> <path d="M20 12C20 16.4183 16.4183 20 12 20C7.58172 20 4 16.4183 4 12C4 7.58172 7.58172 4 12 4C14.3894 4 16.5341 5.04751 18 6.70835" stroke="currentColor" - strokeWwidth="1.2" + strokeWidth="1.2" /> </g> <path d="M20.4 9.4H15.4485L20.4 4.44853V9.4Z" stroke="currentColor" strokeWidth="1.2" /> diff --git a/src/renderer/component/Icon/IconRobot2Stroke.js b/src/renderer/component/Icon/IconRobot2Stroke.js index 0a8615076..ee2715727 100644 --- a/src/renderer/component/Icon/IconRobot2Stroke.js +++ b/src/renderer/component/Icon/IconRobot2Stroke.js @@ -2,7 +2,7 @@ import * as React from "react"; function IconRobot2Stroke(props) { return ( - <svg width={42} height={42} fill="none" xmlns="http://www.w3.org/2000/svg" {...props}> + <svg width={42} height={42} viewBox="0 0 42 42" fill="none" xmlns="http://www.w3.org/2000/svg" {...props}> <path d="M0 15.75h1.75V28H0V15.75z" fill="currentColor" /> <path fillRule="evenodd" diff --git a/src/renderer/component/Icon/IconSignal.js b/src/renderer/component/Icon/IconSignal.js new file mode 100644 index 000000000..0939a99be --- /dev/null +++ b/src/renderer/component/Icon/IconSignal.js @@ -0,0 +1,26 @@ +import * as React from "react"; + +function IconSignal(props) { + return ( + <svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg"> + <mask id="mask0_4074_262576" style={{ maskType: "alpha" }} maskUnits="userSpaceOnUse" x="10" y="10" width="10" height="11"> + <path d="M10 10.4502L20 10.4502L20 20.4502L10 20.4502L10 10.4502Z" fill="white" /> + </mask> + <g mask="url(#mask0_4074_262576)"> + <circle cx="20" cy="20.4502" r="9.4" transform="rotate(-180 20 20.4502)" stroke="currentColor" strokeWidth="1.2" /> + <circle cx="20" cy="20.4502" r="5.4" transform="rotate(-180 20 20.4502)" stroke="currentColor" strokeWidth="1.2" /> + <circle cx="20" cy="20.4502" r="1.4" transform="rotate(-180 20 20.4502)" stroke="currentColor" strokeWidth="1.2" /> + </g> + <mask id="mask1_4074_262576" style={{ maskType: "alpha" }} maskUnits="userSpaceOnUse" x="4" y="4" width="10" height="11"> + <path d="M14 14.4502H4V4.4502H14V14.4502Z" fill="white" /> + </mask> + <g mask="url(#mask1_4074_262576)"> + <circle cx="4" cy="4.4502" r="9.4" stroke="currentColor" strokeWidth="1.2" /> + <circle cx="4" cy="4.4502" r="5.4" stroke="currentColor" strokeWidth="1.2" /> + <circle cx="4" cy="4.4502" r="1.4" stroke="currentColor" strokeWidth="1.2" /> + </g> + </svg> + ); +} + +export default IconSignal; diff --git a/src/renderer/component/Icon/IconStopWatchCrossed.js b/src/renderer/component/Icon/IconStopWatchCrossed.js index 3a8afd6ac..1681067d6 100644 --- a/src/renderer/component/Icon/IconStopWatchCrossed.js +++ b/src/renderer/component/Icon/IconStopWatchCrossed.js @@ -6,7 +6,7 @@ function IconStopWatchCrossed(props) { <mask id="prefixIconStopWatchCrossed" style={{ - maskType: "alpha" + maskType: "alpha", }} maskUnits="userSpaceOnUse" x={0} diff --git a/src/renderer/component/Icon/IconThunder2Stroke.js b/src/renderer/component/Icon/IconThunder2Stroke.js index 583364025..247efbe4c 100644 --- a/src/renderer/component/Icon/IconThunder2Stroke.js +++ b/src/renderer/component/Icon/IconThunder2Stroke.js @@ -2,7 +2,7 @@ import * as React from "react"; function IconThunder2Stroke(props) { return ( - <svg width={42} height={42} fill="none" xmlns="http://www.w3.org/2000/svg" {...props}> + <svg width={42} height={42} viewBox="0 0 42 42" fill="none" xmlns="http://www.w3.org/2000/svg" {...props}> <path fillRule="evenodd" clipRule="evenodd" diff --git a/src/renderer/component/Icon/IconTypo.js b/src/renderer/component/Icon/IconTypo.js index 57fdfb519..5040279c5 100644 --- a/src/renderer/component/Icon/IconTypo.js +++ b/src/renderer/component/Icon/IconTypo.js @@ -7,7 +7,7 @@ function IconTypo(props) { <mask id="prefix__a" style={{ - maskType: "alpha" + maskType: "alpha", }} maskUnits="userSpaceOnUse" x={0} diff --git a/src/renderer/component/Icon/IconUndoRestart.js b/src/renderer/component/Icon/IconUndoRestart.js index d3c92236f..cda0ac3b4 100644 --- a/src/renderer/component/Icon/IconUndoRestart.js +++ b/src/renderer/component/Icon/IconUndoRestart.js @@ -6,7 +6,7 @@ function IconUndoRestart(props) { <mask id="prefixIconUndoRestart" style={{ - maskType: "alpha" + maskType: "alpha", }} maskUnits="userSpaceOnUse" x={1} diff --git a/src/renderer/component/Icon/IconUpload.js b/src/renderer/component/Icon/IconUpload.js index 77570f452..1eda0bade 100644 --- a/src/renderer/component/Icon/IconUpload.js +++ b/src/renderer/component/Icon/IconUpload.js @@ -1,4 +1,5 @@ import * as React from "react"; + function IconUpload(props) { return ( <svg width={24} height={24} fill="none" xmlns="http://www.w3.org/2000/svg" {...props}> diff --git a/src/renderer/component/Icon/IconWireless.js b/src/renderer/component/Icon/IconWireless.js new file mode 100644 index 000000000..f9eda9ea8 --- /dev/null +++ b/src/renderer/component/Icon/IconWireless.js @@ -0,0 +1,41 @@ +import React from "react"; + +function IconWireless({ width, height, strokeWidth }) { + return ( + <svg + width={width ? width : 42} + height={height ? height : 42} + viewBox={`0 0 ${width ? width : 42} ${height ? height : 42}`} + fill="none" + xmlns="http://www.w3.org/2000/svg" + > + <mask id="mask0_4116_799" style={{ maskType: "luminance" }} maskUnits="userSpaceOnUse" x="2" y="-1" width="39" height="39"> + <path d="M39.5 18.5L21.5 0.5L3.5 18.5L21.5 36.5L39.5 18.5Z" fill="white" stroke="white" /> + </mask> + <g mask="url(#mask0_4116_799)"> + <mask id="mask1_4116_799" style={{ maskType: "alpha" }} maskUnits="userSpaceOnUse" x="2" y="-1" width="39" height="39"> + <path d="M21.5 0.5L39.5 18.5L21.5 36.5L3.5 18.5L21.5 0.5Z" fill="white" stroke="#F0F2F4" /> + </mask> + <g mask="url(#mask1_4116_799)"> + <path + d="M38.8878 19.9559C29.2761 10.3443 13.6926 10.3443 4.081 19.9559C-5.53062 29.5675 -5.53062 45.151 4.081 54.7626C13.6926 64.3743 29.2761 64.3743 38.8878 54.7626C48.4994 45.151 48.4994 29.5675 38.8878 19.9559Z" + stroke="currentColor" + strokeWidth={strokeWidth ? strokeWidth : 2} + /> + <path + d="M31.6878 26.0303C26.0526 20.3952 16.9161 20.3952 11.2809 26.0303C5.64575 31.6655 5.64575 40.802 11.281 46.4372C16.9161 52.0724 26.0526 52.0724 31.6878 46.4372C37.323 40.802 37.323 31.6655 31.6878 26.0303Z" + stroke="currentColor" + strokeWidth={strokeWidth ? strokeWidth : 2} + /> + <path + d="M24.5034 32.1041C22.8447 30.4454 20.1553 30.4454 18.4966 32.1041C16.8379 33.7628 16.8379 36.4522 18.4966 38.1109C20.1553 39.7696 22.8447 39.7696 24.5034 38.1109C26.1621 36.4522 26.1621 33.7628 24.5034 32.1041Z" + stroke="currentColor" + strokeWidth={strokeWidth ? strokeWidth : 2} + /> + </g> + </g> + </svg> + ); +} + +export default IconWireless; diff --git a/src/renderer/component/Icon/IconWirelessMd.tsx b/src/renderer/component/Icon/IconWirelessMd.tsx new file mode 100644 index 000000000..0acb4bbd3 --- /dev/null +++ b/src/renderer/component/Icon/IconWirelessMd.tsx @@ -0,0 +1,39 @@ +import React from "react"; + +type IconWirelessProps = { + strokeWidth?: number; +}; + +function IconWirelessMd({ strokeWidth = 1.2 }: IconWirelessProps) { + return ( + <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> + <mask id="mask0_2127_8986" style={{ maskType: "luminance" }} maskUnits="userSpaceOnUse" x="0" y="-4" width="26" height="26"> + <path d="M25 9L13 -3L1 9L13 21L25 9Z" fill="white" stroke="white" /> + </mask> + <g mask="url(#mask0_2127_8986)"> + <mask id="mask1_2127_8986" style={{ maskType: "alpha" }} maskUnits="userSpaceOnUse" x="0" y="-5" width="26" height="26"> + <path d="M13 -4L25 8.00001L13 20L1 8.00001L13 -4Z" fill="white" stroke="#F0F2F4" /> + </mask> + <g mask="url(#mask1_2127_8986)"> + <path + d="M24.5782 8.97168C18.1705 2.56394 7.78145 2.56394 1.3737 8.97168C-5.03404 15.3794 -5.03405 25.7684 1.3737 32.1762C7.78145 38.5839 18.1705 38.5839 24.5782 32.1762C30.986 25.7684 30.986 15.3794 24.5782 8.97168Z" + stroke="currentColor" + strokeWidth={strokeWidth} + /> + <path + d="M19.7782 13.021C16.0214 9.26421 9.93047 9.26421 6.17367 13.021C2.41687 16.7778 2.41687 22.8688 6.17367 26.6256C9.93047 30.3824 16.0214 30.3824 19.7782 26.6256C23.535 22.8688 23.535 16.7778 19.7782 13.021Z" + stroke="currentColor" + strokeWidth={strokeWidth} + /> + <path + d="M14.9938 17.07C13.888 15.9642 12.0951 15.9642 10.9893 17.07C9.88351 18.1758 9.88351 19.9687 10.9893 21.0745C12.0951 22.1803 13.888 22.1803 14.9938 21.0745C16.0996 19.9687 16.0996 18.1758 14.9938 17.07Z" + stroke="currentColor" + strokeWidth={strokeWidth} + /> + </g> + </g> + </svg> + ); +} + +export default IconWirelessMd; diff --git a/src/renderer/component/Icon/IconWirelessSm.tsx b/src/renderer/component/Icon/IconWirelessSm.tsx new file mode 100644 index 000000000..2d9e89987 --- /dev/null +++ b/src/renderer/component/Icon/IconWirelessSm.tsx @@ -0,0 +1,47 @@ +import React from "react"; + +type IconWirelessProps = { + strokeWidth?: number; +}; + +function IconWirelessSm({ strokeWidth = 1.2 }: IconWirelessProps) { + return ( + <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"> + <mask + id="mask0_4410_117926" + style={{ maskType: "luminance" }} + maskUnits="userSpaceOnUse" + x="0" + y="-4" + width="22" + height="23" + > + <path d="M21 7.5L11 -2.5L1 7.5L11 17.5L21 7.5Z" fill="white" stroke="white" /> + </mask> + <g mask="url(#mask0_4410_117926)"> + <mask id="mask1_4410_117926" style={{ maskType: "alpha" }} maskUnits="userSpaceOnUse" x="0" y="-5" width="22" height="23"> + <path d="M11 -3.3335L21 6.66651L11 16.6665L1 6.66651L11 -3.3335Z" fill="white" stroke="#F0F2F4" /> + </mask> + <g mask="url(#mask1_4410_117926)"> + <path + d="M20.6451 7.4763C15.3053 2.13651 6.64781 2.13651 1.30802 7.4763C-4.03177 12.8161 -4.03177 21.4736 1.30802 26.8134C6.64781 32.1532 15.3053 32.1532 20.6451 26.8134C25.9849 21.4736 25.9849 12.8161 20.6451 7.4763Z" + stroke="currentColor" + strokeWidth={strokeWidth} + /> + <path + d="M16.6451 10.8507C13.5145 7.72007 8.43866 7.72007 5.30799 10.8507C2.17733 13.9814 2.17733 19.0572 5.30799 22.1879C8.43866 25.3185 13.5145 25.3185 16.6451 22.1879C19.7758 19.0572 19.7758 13.9814 16.6451 10.8507Z" + stroke="currentColor" + strokeWidth={strokeWidth} + /> + <path + d="M12.6607 14.2248C11.7392 13.3033 10.2452 13.3033 9.32364 14.2248C8.40213 15.1464 8.40213 16.6404 9.32364 17.5619C10.2452 18.4834 11.7392 18.4834 12.6607 17.5619C13.5822 16.6404 13.5822 15.1464 12.6607 14.2248Z" + stroke="currentColor" + strokeWidth={strokeWidth} + /> + </g> + </g> + </svg> + ); +} + +export default IconWirelessSm; diff --git a/src/renderer/component/Icon/index.js b/src/renderer/component/Icon/index.js index af261849f..228a2d324 100644 --- a/src/renderer/component/Icon/index.js +++ b/src/renderer/component/Icon/index.js @@ -24,6 +24,8 @@ import IconArrowRight from "./IconArrowRight"; import IconArrowsSmallSeparating from "./IconArrowsSmallSeparating"; import IconArrowUpWithLine from "./IconArrowUpWithLine"; import IconArrowDownWithLine from "./IconArrowDownWithLine"; +import IconBattery from "./IconBattery"; +import IconBluetooth from "./IconBluetooth"; import IconColorPalette from "./IconColorPalette"; import IconColorPicker from "./IconColorPicker"; import IconConnected from "./IconConnected"; @@ -53,6 +55,7 @@ import IconKeyboardSelector from "./IconKeyboardSelector"; import IconKeyboard2Stroke from "./IconKeyboard2Stroke"; import IconKeysLight from "./IconKeysLight"; import IconKeysUnderglow from "./IconKeysUnderglow"; +import IconLeaf from "./IconLeaf"; import IconLEDNextEffect from "./IconLEDNextEffect"; import IconLEDNextEffectSm from "./IconLEDNextEffectSm"; import IconLEDPreviousEffect from "./IconLEDPreviousEffect"; @@ -86,6 +89,7 @@ import IconNoWifi from "./IconNoWifi"; import IconOneShot from "./IconOneShot"; import IconOneShotSm from "./IconOneShotSm"; import IconPauseXl from "./IconPauseXl"; +import IconPlug from "./IconPlug"; import IconPlus from "./IconPlus"; import IconPlusXs from "./IconPlusXs"; import IconPreferences2Stroke from "./IconPreferences2Stroke"; @@ -118,6 +122,8 @@ import IconRecord from "./IconRecord"; import IconRefresh from "./IconRefresh"; import IconRobot from "./IconRobot"; import IconRobotSm from "./IconRobotSm"; +import IconSettings from "./IconSettings"; +import IconSignal from "./IconSignal"; import IconShutdown from "./IconShutdown"; import IconShutdownSm from "./IconShutdownSm"; import IconSleep from "./IconSleep"; @@ -135,10 +141,12 @@ import IconToolsBrightnessLessSm from "./IconToolsBrightnessLessSm"; import IconToolsBrightnessMore from "./IconToolsBrightnessMore"; import IconToolsBrightnessMoreSm from "./IconToolsBrightnessMoreSm"; import IconThreeDots from "./IconThreeDots"; -import IconSettings from "./IconSettings"; import IconUndoRestart from "./IconUndoRestart"; import IconUpload from "./IconUpload"; import IconWarning from "./IconWarning"; +import IconWireless from "./IconWireless"; +import IconWirelessMd from "./IconWirelessMd"; +import IconWirelessSm from "./IconWirelessSm"; import IconWrench from "./IconWrench"; import IconWrenchSm from "./IconWrenchSm"; @@ -153,6 +161,8 @@ export { IconArrowsMouseWheel, IconArrowUpWithLine, IconArrowDownWithLine, + IconBattery, + IconBluetooth, IconColorPalette, IconColorPicker, IconConnected, @@ -182,6 +192,7 @@ export { IconKeyboard2Stroke, IconKeysLight, IconKeysUnderglow, + IconLeaf, IconLEDSwitchLeft, IconLEDNextEffect, IconLEDNextEffectSm, @@ -215,6 +226,7 @@ export { IconOneShot, IconOneShotSm, IconPauseXl, + IconPlug, IconPlus, IconPlusXs, IconPen, @@ -247,6 +259,8 @@ export { IconRefresh, IconRobot, IconRobotSm, + IconSettings, + IconSignal, IconShutdown, IconShutdownSm, IconSleep, @@ -264,10 +278,12 @@ export { IconToolsBrightnessMore, IconToolsBrightnessMoreSm, IconThreeDots, - IconSettings, IconUndoRestart, IconUpload, IconWarning, + IconWireless, + IconWirelessMd, + IconWirelessSm, IconWrench, - IconWrenchSm + IconWrenchSm, }; diff --git a/src/renderer/component/Keyboard/SWGR.json b/src/renderer/component/Keyboard/SWGR.json index a5e2d2fda..38bc3b322 100644 --- a/src/renderer/component/Keyboard/SWGR.json +++ b/src/renderer/component/Keyboard/SWGR.json @@ -1484,7 +1484,7 @@ "iconname": "", "content": { "type": "longBlock", - "first": "Intro", + "first": "Enter", "second": "", "third": "", "fourth": "" @@ -1921,7 +1921,16 @@ "y": 244, "centered": true, "icon": false, - "idArray": [53852,53853,53854,53855,53856,53857,53858,53859,53860,53861,53862,53863,53864,53865,53866,53867,53868,53869,53870,53871,53872,53873,53874,53875,53876,53877,53878,53879,53880,53881,53882,53883,53884,53885,53886,53887,53888,53889,53890,53891,53892,53893,53894,53895,53896,53897,53898,53899,53900,53901,53902,53903,53904,53905,53906,53907,53908,53909,53910,53911,53912,53913,53914,53915,53916,53917,53918,53919,53920,53921,53922,53923,53924,53925,53926,53927,53928,53929,53930,53931,53932,53933,53934,53935,53936,53937,53938,53939,53940,53941,53942,53943,53944,53945,53946,53947,53948,53949,53950,53951,53952,53953,53954,53955,53956,53957,53958,53959,53960,53961,53962,53963,53964,53965,53966,53967,53968,53969,53970,53971,53972,53973,53974,53975,53976,53977,53978,53979], + "idArray": [ + 53852, 53853, 53854, 53855, 53856, 53857, 53858, 53859, 53860, 53861, 53862, 53863, 53864, 53865, 53866, 53867, 53868, + 53869, 53870, 53871, 53872, 53873, 53874, 53875, 53876, 53877, 53878, 53879, 53880, 53881, 53882, 53883, 53884, 53885, + 53886, 53887, 53888, 53889, 53890, 53891, 53892, 53893, 53894, 53895, 53896, 53897, 53898, 53899, 53900, 53901, 53902, + 53903, 53904, 53905, 53906, 53907, 53908, 53909, 53910, 53911, 53912, 53913, 53914, 53915, 53916, 53917, 53918, 53919, + 53920, 53921, 53922, 53923, 53924, 53925, 53926, 53927, 53928, 53929, 53930, 53931, 53932, 53933, 53934, 53935, 53936, + 53937, 53938, 53939, 53940, 53941, 53942, 53943, 53944, 53945, 53946, 53947, 53948, 53949, 53950, 53951, 53952, 53953, + 53954, 53955, 53956, 53957, 53958, 53959, 53960, 53961, 53962, 53963, 53964, 53965, 53966, 53967, 53968, 53969, 53970, + 53971, 53972, 53973, 53974, 53975, 53976, 53977, 53978, 53979 + ], "iconname": "", "content": { "type": "2UT", @@ -1953,7 +1962,16 @@ "y": 216, "centered": true, "icon": false, - "idArray": [53980,53981,53982,53983,53984,53985,53986,53987,53988,53989,53990,53991,53992,53993,53994,53995,53996,53997,53998,53999,54000,54001,54002,54003,54004,54005,54006,54007,54008,54009,54010,54011,54012,54013,54014,54015,54016,54017,54018,54019,54020,54021,54022,54023,54024,54025,54026,54027,54028,54029,54030,54031,54032,54033,54034,54035,54036,54037,54038,54039,54040,54041,54042,54043,54044,54045,54046,54047,54048,54049,54050,54051,54052,54053,54054,54055,54056,54057,54058,54059,54060,54061,54062,54063,54064,54065,54066,54067,54068,54069,54070,54071,54072,54073,54074,54075,54076,54077,54078,54079,54080,54081,54082,54083,54084,54085,54086,54087,54088,54089,54090,54091,54092,54093,54094,54095,54096,54097,54098,54099,54100,54101,54102,54103,54104,54105,54106,54107], + "idArray": [ + 53980, 53981, 53982, 53983, 53984, 53985, 53986, 53987, 53988, 53989, 53990, 53991, 53992, 53993, 53994, 53995, 53996, + 53997, 53998, 53999, 54000, 54001, 54002, 54003, 54004, 54005, 54006, 54007, 54008, 54009, 54010, 54011, 54012, 54013, + 54014, 54015, 54016, 54017, 54018, 54019, 54020, 54021, 54022, 54023, 54024, 54025, 54026, 54027, 54028, 54029, 54030, + 54031, 54032, 54033, 54034, 54035, 54036, 54037, 54038, 54039, 54040, 54041, 54042, 54043, 54044, 54045, 54046, 54047, + 54048, 54049, 54050, 54051, 54052, 54053, 54054, 54055, 54056, 54057, 54058, 54059, 54060, 54061, 54062, 54063, 54064, + 54065, 54066, 54067, 54068, 54069, 54070, 54071, 54072, 54073, 54074, 54075, 54076, 54077, 54078, 54079, 54080, 54081, + 54082, 54083, 54084, 54085, 54086, 54087, 54088, 54089, 54090, 54091, 54092, 54093, 54094, 54095, 54096, 54097, 54098, + 54099, 54100, 54101, 54102, 54103, 54104, 54105, 54106, 54107 + ], "iconname": "", "content": { "type": "2UT", diff --git a/src/renderer/component/ListModifiers/ListModifiers.js b/src/renderer/component/ListModifiers/ListModifiers.js index 7888a0721..d02c0eef4 100644 --- a/src/renderer/component/ListModifiers/ListModifiers.js +++ b/src/renderer/component/ListModifiers/ListModifiers.js @@ -77,18 +77,18 @@ const Style = Styled.div` display: none; } `; -//}= ({ oldValue, newValue, keyCode }) => { +// }= ({ oldValue, newValue, keyCode }) => { class ListModifiers extends Component { constructor(props) { super(props); this.state = { - //modifs: [] + // modifs: [] }; } parseModifs(keycode) { - let modifs = []; + const modifs = []; if (keycode & 0b100000000) { // Ctrl Decoder modifs.push(1); diff --git a/src/renderer/component/ListModifiers/ListModifiersKey.js b/src/renderer/component/ListModifiers/ListModifiersKey.js index abcb51a09..859443305 100644 --- a/src/renderer/component/ListModifiers/ListModifiersKey.js +++ b/src/renderer/component/ListModifiers/ListModifiersKey.js @@ -20,9 +20,9 @@ import React from "react"; // import OverlayTrigger from "react-bootstrap/OverlayTrigger"; // import Tooltip from "react-bootstrap/Tooltip"; -const ListModifiersKey = ({ altApplied, altGrApplied, osApplied, shiftApplied, ctrlApplied, mehApplied, hyperApplied }) => { +function ListModifiersKey({ altApplied, altGrApplied, osApplied, shiftApplied, ctrlApplied, mehApplied, hyperApplied }) { return ( - <div xmlns="http://www.w3.org/1999/xhtml" className={`keyContentModifiers`}> + <div xmlns="http://www.w3.org/1999/xhtml" className="keyContentModifiers"> <ul className={`labelModifier ${ (altApplied && altGrApplied && osApplied && shiftApplied) || (ctrlApplied && altGrApplied && osApplied && shiftApplied) @@ -40,6 +40,6 @@ const ListModifiersKey = ({ altApplied, altGrApplied, osApplied, shiftApplied, c </ul> </div> ); -}; +} export default ListModifiersKey; diff --git a/src/renderer/component/Loader/FirmwareLoader.js b/src/renderer/component/Loader/FirmwareLoader.js index d92bc9cd4..5cffcf2cc 100644 --- a/src/renderer/component/Loader/FirmwareLoader.js +++ b/src/renderer/component/Loader/FirmwareLoader.js @@ -1,7 +1,7 @@ import React from "react"; import LogoLoader from "./LogoLoader"; -const FirmwareLoader = ({ width, warning, error, paused }) => { +function FirmwareLoader({ width, warning, error, paused }) { return ( <div className="firmware-wrapper"> <div className="firmware-row"> @@ -11,6 +11,6 @@ const FirmwareLoader = ({ width, warning, error, paused }) => { </div> </div> ); -}; +} export default FirmwareLoader; diff --git a/src/renderer/component/Loader/LogoLoader.js b/src/renderer/component/Loader/LogoLoader.tsx similarity index 97% rename from src/renderer/component/Loader/LogoLoader.js rename to src/renderer/component/Loader/LogoLoader.tsx index e0aa6b4b0..f06f69498 100644 --- a/src/renderer/component/Loader/LogoLoader.js +++ b/src/renderer/component/Loader/LogoLoader.tsx @@ -106,23 +106,30 @@ svg { } `; -const LogoLoader = ({ width, warning, error, paused }) => { - let neuronLoader = useTheme().styles.neuronStatus.neuronLoader; - let maxWidth = width ? width : `52px`; +interface LogoLoaderProps { + width?: string; + warning?: boolean; + error?: boolean; + paused?: boolean; +} + +const LogoLoader = ({ width = "52px", warning = false, error = false, paused = false }: LogoLoaderProps) => { + const { neuronLoader } = useTheme().styles.neuronStatus; + return ( <Style> <div className={`loader-container ${warning ? "loader-warning" : ""} ${error ? "loader-error" : ""} ${ paused ? "paused" : "running" }`} - style={{ width: maxWidth }} + style={{ width: `${width}` }} > <svg width="50" height="52" viewBox="0 0 50 52" fill="none" xmlns="http://www.w3.org/2000/svg"> <g className="loader-rotating"> <mask id="mask0_3994_257195" style={{ - maskType: "alpha" + maskType: "alpha", }} maskUnits="userSpaceOnUse" x="0" @@ -183,7 +190,7 @@ const LogoLoader = ({ width, warning, error, paused }) => { <pattern id="prefix__pattern0" patternContentUnits="objectBoundingBox" width={1} height={1}> <use xlinkHref="#prefix__image0_1082_145292" transform="scale(.00357)" /> </pattern> - <image className={`rotating`} id="prefix__image0_1082_145292" width={280} height={280} xlinkHref={neuronLoader} /> + <image className="rotating" id="prefix__image0_1082_145292" width={280} height={280} xlinkHref={neuronLoader} /> </defs> </svg> </div> diff --git a/src/renderer/component/Loader/LogoLoaderCentered.tsx b/src/renderer/component/Loader/LogoLoaderCentered.tsx new file mode 100644 index 000000000..85fc93f71 --- /dev/null +++ b/src/renderer/component/Loader/LogoLoaderCentered.tsx @@ -0,0 +1,34 @@ +import React from "react"; +import Styled from "styled-components"; +import LogoLoader from "./LogoLoader"; + +const Style = Styled.div` +&.centererd-wrapper { + width: 100%; + height: 100vh; + display: flex; + justify-content: center; + align-items: center; +} +`; + +interface LogoLoaderProps { + width?: string; + warning?: boolean; + error?: boolean; + paused?: boolean; +} + +function LogoLoaderCentered({ width = "52px", warning = false, error = false, paused = false }: LogoLoaderProps) { + return ( + <Style className="centererd-wrapper"> + <div className="centererd-inner"> + <div className="loading marginCenter text-center"> + <LogoLoader width={width} warning={warning} error={error} paused={paused} /> + </div> + </div> + </Style> + ); +} + +export default LogoLoaderCentered; diff --git a/src/renderer/component/Loader/index.js b/src/renderer/component/Loader/index.js index f4741694c..790e4077d 100644 --- a/src/renderer/component/Loader/index.js +++ b/src/renderer/component/Loader/index.js @@ -17,5 +17,6 @@ import CircleLoader from "./CircleLoader"; import FirmwareLoader from "./FirmwareLoader"; import LogoLoader from "./LogoLoader"; +import LogoLoaderCentered from "./LogoLoaderCentered"; -export { CircleLoader, FirmwareLoader, LogoLoader }; +export { CircleLoader, FirmwareLoader, LogoLoader, LogoLoaderCentered }; diff --git a/src/renderer/component/Modal/AdvancedBatterySettingsModal.tsx b/src/renderer/component/Modal/AdvancedBatterySettingsModal.tsx new file mode 100644 index 000000000..6f2d3b668 --- /dev/null +++ b/src/renderer/component/Modal/AdvancedBatterySettingsModal.tsx @@ -0,0 +1,170 @@ +import React from "react"; + +import Form from "react-bootstrap/Form"; +import Row from "react-bootstrap/Row"; +import Col from "react-bootstrap/Col"; +import Modal from "react-bootstrap/Modal"; +import Card from "react-bootstrap/Card"; + +import Slider from "@appigram/react-rangeslider"; + +import Title from "@Renderer/component/Title"; +import { Badge } from "@Renderer/component/Badge"; +import { RegularButton } from "@Renderer/component/Button"; +import { ToggleButtons } from "@Renderer/component/ToggleButtons"; +import { AdvancedEnergyManagementProps } from "@Renderer/types/wireless"; + +import i18n from "@Renderer/i18n"; + +function AdvancedBatterySettingsModal(props: AdvancedEnergyManagementProps) { + const { wireless, changeWireless, showModal, setShowModal } = props; + const RFModes = [ + { + name: "Low", + value: 0, + index: 0, + }, + { + name: "Medium", + value: 1, + index: 1, + }, + { + name: "High", + value: 2, + index: 2, + }, + ]; + + const setBrightness = async (value: number) => { + const newWireless = { ...wireless }; + newWireless.brightness = (value * 255) / 100; + changeWireless(newWireless); + }; + + const setBrightnessUG = async (value: number) => { + const newWireless = { ...wireless }; + newWireless.brightnessUG = (value * 255) / 100; + changeWireless(newWireless); + }; + + const setIdleleds = async (value: number) => { + const newWireless = { ...wireless }; + newWireless.idleleds = value * 60; + changeWireless(newWireless); + }; + + const setFade = async (value: any) => { + const newWireless = { ...wireless }; + newWireless.fade = value.target.checked ? 1 : 0; + changeWireless(newWireless); + }; + + const setRfPower = async (value: number) => { + const newWireless = { ...wireless }; + newWireless.rf.power = value; + changeWireless(newWireless); + }; + + return ( + <Modal size="xl" show={showModal} onHide={() => setShowModal(false)} aria-labelledby="contained-modal-title-vcenter" centered> + <Modal.Header closeButton> + <Modal.Title>{i18n.wireless.energyManagement.advancedSettings}</Modal.Title> + </Modal.Header> + <Modal.Body> + <Card className="overflowFix card-preferences card-preferences--battery"> + <Card.Title> + <Title text={i18n.wireless.energyManagement.settings.maximumLED} headingLevel={4} /> + <Badge content={i18n.wireless.energyManagement.settings.highBatteryImpact} variation="danger-low" size="sm" /> + </Card.Title> + <Card.Body> + <Row className="card-preferences--option justify-between"> + <Col lg={5}> + <Title text={i18n.wireless.energyManagement.settings.maximumLEDBackLight} headingLevel={6} /> + </Col> + <Col lg={5}> + <div className="slider-wrapper"> + <span className="tagsfix slider-label">0%</span> + <Slider min={1} max={100} value={Math.round((wireless.brightness * 100) / 255)} onChange={setBrightness} /> + <span className="tagsfix slider-label">100%</span> + </div> + </Col> + </Row> + <Row className="card-preferences--option justify-between"> + <Col lg={5}> + <Title text={i18n.wireless.energyManagement.settings.maximumLEDUnderglow} headingLevel={6} /> + </Col> + <Col lg={5}> + <div className="slider-wrapper"> + <span className="tagsfix slider-label">0%</span> + <Slider min={1} max={100} value={Math.round((wireless.brightnessUG * 100) / 255)} onChange={setBrightnessUG} /> + <span className="tagsfix slider-label">100%</span> + </div> + </Col> + </Row> + <Row className="card-preferences--option justify-between"> + <Col lg={5}> + <Title text={i18n.wireless.energyManagement.settings.idleLedsTime} headingLevel={6} /> + </Col> + <Col lg={5}> + <div className="slider-wrapper"> + <span className="tagsfix slider-label">off </span> + <Slider min={0} max={60} value={Math.round(wireless.idleleds / 60)} onChange={setIdleleds} /> + <span className="tagsfix slider-label">60 min</span> + </div> + </Col> + </Row> + </Card.Body> + </Card> + <Card className="overflowFix card-preferences card-preferences--battery mt-4"> + <Card.Title> + <Title text={i18n.wireless.energyManagement.settings.highlightLayerChanging} headingLevel={4} /> + <Badge content={i18n.wireless.energyManagement.settings.lowBatteryImpact} variation="subtle" size="sm" /> + </Card.Title> + <Card.Body> + <Row className="card-preferences--option justify-between"> + <Col sm={8} lg={5}> + <Title text={i18n.wireless.energyManagement.settings.highlightLayerChangingDesc} headingLevel={6} /> + </Col> + <Form.Check type="switch" id="toggleLayerHighlight" checked={wireless.fade === 1} onChange={setFade} /> + </Row> + </Card.Body> + </Card> + <Card className="overflowFix card-preferences card-preferences--battery mt-4"> + <Card.Title> + <Title text={i18n.wireless.energyManagement.settings.RFSettingTitle} headingLevel={4} /> + <Badge content={i18n.wireless.energyManagement.settings.lowBatteryImpact} variation="subtle" size="sm" /> + </Card.Title> + <Card.Body> + <Row className="card-preferences--option justify-between"> + <Col lg={5}> + <Title + text={i18n.wireless.energyManagement.settings.manageRFSignal} + tooltip={i18n.wireless.energyManagement.settings.tooltipRF} + headingLevel={6} + /> + </Col> + <ToggleButtons + selectDarkMode={setRfPower} + value={wireless.rf.power} + listElements={RFModes} + style="flex" + size="sm" + /> + </Row> + </Card.Body> + </Card> + </Modal.Body> + <Modal.Footer> + <RegularButton + buttonText={i18n.app.cancelPending.button} + styles="outline transp-bg" + onClick={() => setShowModal(false)} + /> + <RegularButton buttonText={i18n.dialog.applyChanges} styles="outline gradient" onClick={() => setShowModal(false)} /> + </Modal.Footer> + </Modal> + ); +} + +export default AdvancedBatterySettingsModal; diff --git a/src/renderer/component/Modal/NameModal.js b/src/renderer/component/Modal/NameModal.js index 347b3bd9a..540f9e670 100644 --- a/src/renderer/component/Modal/NameModal.js +++ b/src/renderer/component/Modal/NameModal.js @@ -10,7 +10,7 @@ export default class NameModal extends React.Component { super(props); this.inputText = React.createRef(); this.state = { - name: props.name + name: props.name, }; } @@ -18,7 +18,7 @@ export default class NameModal extends React.Component { if (this.props != previousProps) { // console.log("PROBLEM", this.props.name, previousProps.name); this.setState({ - name: this.props.name + name: this.props.name, }); } } @@ -40,10 +40,10 @@ export default class NameModal extends React.Component { /> </Modal.Body> <Modal.Footer> - <RegularButton buttonText={i18n.app.cancelPending.button} style="outline" size="sm" onClick={toggleShow} /> + <RegularButton buttonText={i18n.app.cancelPending.button} styles="outline transp-bg" size="sm" onClick={toggleShow} /> <RegularButton buttonText={i18n.components.save.button} - style="outline gradient" + styles="outline gradient" size="sm" onClick={event => handleSave(this.state.name)} /> diff --git a/src/renderer/component/Modal/PreviewMacroModal.js b/src/renderer/component/Modal/PreviewMacroModal.js index 4a191a066..3e13b6ce3 100644 --- a/src/renderer/component/Modal/PreviewMacroModal.js +++ b/src/renderer/component/Modal/PreviewMacroModal.js @@ -1,9 +1,9 @@ import React from "react"; import ReactDom from "react-dom"; +import Modal from "react-bootstrap/Modal"; import { RegularButton } from "../Button"; import { IconEye } from "../Icon"; -import Modal from "react-bootstrap/Modal"; import i18n from "../../i18n"; @@ -22,7 +22,7 @@ export default function PreviewMacroModal({ children, hookref }) { buttonText="Preview macro" size="sm" icoSVG={<IconEye />} - style="outline-sm" + styles="outline-sm transp-bg" icoPosition="right" onClick={() => setShow(!show)} /> @@ -35,6 +35,6 @@ export default function PreviewMacroModal({ children, hookref }) { </Modal.Body> </Modal> </>, - hookref.current + hookref.current, ); } diff --git a/src/renderer/component/Modal/index.js b/src/renderer/component/Modal/index.js index 67042a287..7d106a520 100644 --- a/src/renderer/component/Modal/index.js +++ b/src/renderer/component/Modal/index.js @@ -14,9 +14,10 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ +import AdvancedBatterySettingsModal from "./AdvancedBatterySettingsModal"; import NameModal from "./NameModal"; import MacroKeyModal from "./MacroKeyModal"; import PreviewMacroModal from "./PreviewMacroModal"; import RecordMacroModal from "../../modules/Macros/RecordMacroModal"; -export { NameModal, MacroKeyModal, PreviewMacroModal, RecordMacroModal }; +export { AdvancedBatterySettingsModal, NameModal, MacroKeyModal, PreviewMacroModal, RecordMacroModal }; diff --git a/src/renderer/component/NeuronStatus/NeuronStatus.js b/src/renderer/component/NeuronStatus/index.tsx similarity index 89% rename from src/renderer/component/NeuronStatus/NeuronStatus.js rename to src/renderer/component/NeuronStatus/index.tsx index 8b3ca3c91..11a8fdb90 100644 --- a/src/renderer/component/NeuronStatus/NeuronStatus.js +++ b/src/renderer/component/NeuronStatus/index.tsx @@ -15,9 +15,8 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ -import * as React from "react"; -import Styled from "styled-components"; -import { useTheme } from "styled-components"; +import React from "react"; +import Styled, { useTheme } from "styled-components"; import { IconChip } from "../Icon"; const Style = Styled.div` @@ -31,6 +30,21 @@ align-self: center; justify-content: center; align-items: center; position: relative; + overflow: hidden; + isolation: isolate; + &.isConnected { + border: 1px solid rgba(0, 205, 200, 0.2); + &:after { + position: absolute; + top: 0; + left: 0; + height: 100%; + width: 100%; + content: ''; + background-color: rgba(0, 205, 200, 0.05); + z-index: -1; + } + } } .neuronConnectAnimation { position: absolute; @@ -117,23 +131,46 @@ align-self: center; } `; -const NeuronStatus = props => { - let neuronLoader = useTheme().styles.neuronStatus.neuronLoader; - let checkedIcon = useTheme().styles.neuronStatus.checkedIcon; - let connectionColorMatrix = useTheme().styles.neuronStatus.connectionColorMatrix; - let connectionColorMatrixOnLoading = useTheme().styles.neuronStatus.connectionColorMatrixOnLoading; +interface NeuronStatusProps { + loading: "loading" | undefined; + connected: boolean | undefined; + connectedDevice: number | undefined; + scanFoundDevices: boolean; + deviceItems: number; + selectedPortIndex: number; + isVirtual: boolean; +} +const NeuronStatus: React.FC<NeuronStatusProps> = ({ + loading, + connected, + connectedDevice, + scanFoundDevices, + deviceItems, + selectedPortIndex, + isVirtual, +}) => { + const { neuronLoader } = useTheme().styles.neuronStatus; + const { checkedIcon } = useTheme().styles.neuronStatus; + const { connectionColorMatrix } = useTheme().styles.neuronStatus; + const { connectionColorMatrixOnLoading } = useTheme().styles.neuronStatus; + + const isDeviceConnected = !!(connected && connectedDevice === selectedPortIndex); return ( <Style> - <div className="neuronStatusInner"> - {props.connected && !props.isVirtual ? ( + <div + className={`neuronStatusInner ${ + (isDeviceConnected && !isVirtual) || (connected && isVirtual) ? "isConnected" : "notConnected" + }`} + > + {isDeviceConnected && !isVirtual ? ( <div className="neuronConnectAnimation"> - <img src={checkedIcon} /> + <img src={checkedIcon} alt="Device Connected" /> </div> ) : ( "" )} - {props.connected && props.isVirtual ? ( + {connected && isVirtual ? ( <div className="neuronConnectAnimation isVirtual"> <IconChip /> </div> @@ -142,9 +179,9 @@ const NeuronStatus = props => { )} <svg width={157} height={179} fill="none" xmlns="http://www.w3.org/2000/svg"> <path - className={`lineColor ${props.loading && props.deviceItems ? "loading" : ""} ${ - props.scanFoundDevices ? "scanFoundDevices" : "" - } ${props.connected ? "connected" : ""} `} + className={`lineColor ${loading && deviceItems ? "loading" : ""} ${scanFoundDevices ? "scanFoundDevices" : ""} ${ + isDeviceConnected ? "connected" : "" + } `} clipRule="evenodd" d="M68.219 173.573c-1.048 2.516-3.983 3.773-6.498 2.62-.105 0-.105-.104-.21-.104l-50.833-24.107c-7.546-3.563-10.795-12.577-7.231-20.228l30.814-66.24c2.934-6.288 4.402-13.1 4.402-20.018V13.005C38.663 6.926 43.589 2 49.668 2h58.064c6.079 0 11.005 4.926 11.005 11.005v32.49c0 6.918 1.467 13.731 4.402 20.02l30.814 66.239c3.564 7.546.315 16.56-7.232 20.228l-50.832 24.107c-2.516 1.152-5.45.104-6.603-2.411 0-.105-.105-.105-.105-.21-2.41-5.764-9.014-8.489-14.778-6.079-2.935 1.258-5.031 3.459-6.184 6.184z" stroke="#3F425A" @@ -153,8 +190,8 @@ const NeuronStatus = props => { strokeLinecap="round" strokeLinejoin="round" /> - {props.deviceItems && !props.connected ? ( - <g className={"connectionLoading connectionScanning "}> + {deviceItems && !isDeviceConnected ? ( + <g className="connectionLoading connectionScanning "> <g filter="url(#prefix__filter0_d_1082_145292)"> <path d="M96.15 64.955l-.933-.016-1.868-.033c-3.894.085-7.643.784-11.241 1.791l11.754 4.486 2.783 1.118 2.474.96-4.517 17.96a80.16 80.16 0 01-8.952 22.317l7.775-8.425 2.697-2.858.317-.3 4.124-4.361c.633-.6 1.113-1.357 1.285-2.27l1.481-4.561 7.401-22.65c-4.481-1.912-9.446-2.916-14.58-3.158z" @@ -232,7 +269,7 @@ const NeuronStatus = props => { <mask id="prefix__a" style={{ - maskType: "alpha" + maskType: "alpha", }} maskUnits="userSpaceOnUse" x={46} @@ -261,7 +298,7 @@ const NeuronStatus = props => { <use xlinkHref="#prefix__image0_1082_145292" transform="scale(.00357)" /> </pattern> <image - className={`rotating ${props.loading || props.scanFoundDevices ? "loading" : ""}`} + className={`rotating ${loading || scanFoundDevices ? "loading" : ""}`} id="prefix__image0_1082_145292" width={270} height={270} @@ -273,8 +310,8 @@ const NeuronStatus = props => { "" )} - {!props.deviceItems ? ( - <g className={"noDeviceFounded"}> + {!deviceItems ? ( + <g className="noDeviceFounded"> <path fill="#E2E4EA" d="M58 80.75h1.75V93H58z" /> <path fillRule="evenodd" @@ -291,8 +328,8 @@ const NeuronStatus = props => { "" )} - {props.connected ? ( - <g className={"connectionSuccess"}> + {isDeviceConnected ? ( + <g className="connectionSuccess"> <g filter="url(#prefix__filter0_d_1082_156043)"> <path d="M95.722 64.654H92.92c-3.892.152-7.628.917-11.208 1.987l11.83 4.28 2.803 1.07 2.49.916-4.203 18.037a80.18 80.18 0 01-8.561 22.469l7.627-8.56 2.647-2.904.31-.306 4.048-4.433c.623-.61 1.09-1.375 1.246-2.292l1.401-4.586 7.005-22.774c-4.515-1.835-9.496-2.752-14.633-2.904z" diff --git a/src/renderer/component/Select/LayerSelector.js b/src/renderer/component/Select/LayerSelector.js index f6b6a8d90..f2a1aa405 100644 --- a/src/renderer/component/Select/LayerSelector.js +++ b/src/renderer/component/Select/LayerSelector.js @@ -17,8 +17,8 @@ import React from "react"; import Styled from "styled-components"; -import i18n from "../../i18n"; import Dropdown from "react-bootstrap/Dropdown"; +import i18n from "../../i18n"; import { IconArrowsSmallSeparating, @@ -29,11 +29,11 @@ import { IconArrowDownWithLine, IconFileDownload, IconKeyboard, - IconFlashlight + IconFlashlight, } from "../Icon"; import { NameModal } from "../Modal"; // Imported custom modal component -import { RegularButton, ButtonSettings } from "../Button"; +import { ButtonSettings } from "../Button"; import { KeyboardViewSelector } from "../ToggleButtons"; const Style = Styled.div` @@ -95,7 +95,7 @@ class LayerSelector extends React.Component { this.state = { show: false, - showAdd: false + showAdd: false, }; } @@ -129,7 +129,7 @@ class LayerSelector extends React.Component { clearFunc, editModeActual, editModeFunc, - exportToPdf + exportToPdf, } = this.props; const { show, showAdd } = this.state; const layoutsMode = [ @@ -137,14 +137,14 @@ class LayerSelector extends React.Component { name: i18n.editor.keys, tooltip: i18n.editor.keysEditor, value: "keyboard", - icon: <IconKeyboard /> + icon: <IconKeyboard />, }, { name: i18n.editor.color.color, tooltip: i18n.editor.color.colorEditor, value: "color", - icon: <IconFlashlight /> - } + icon: <IconFlashlight />, + }, ]; return ( <Style> @@ -249,8 +249,8 @@ class LayerSelector extends React.Component { name={itemList[selectedItem].name} toggleShow={this.toggleShow} handleSave={this.handleSave} - modalTitle={`Change layer name`} - labelInput={`Layer name`} + modalTitle="Change layer name" + labelInput="Layer name" /> )} </Style> diff --git a/src/renderer/component/Select/MacroSelector.js b/src/renderer/component/Select/MacroSelector.js index 824b3f716..c4d2f956d 100644 --- a/src/renderer/component/Select/MacroSelector.js +++ b/src/renderer/component/Select/MacroSelector.js @@ -17,8 +17,8 @@ import React from "react"; import Styled from "styled-components"; -import i18n from "../../i18n"; import Dropdown from "react-bootstrap/Dropdown"; +import i18n from "../../i18n"; import MacrosMemoryUsage from "../../modules/Macros/MacrosMemoryUsage"; import { IconArrowsSmallSeparating, IconPen, IconAddNew, IconClone, IconDelete } from "../Icon"; @@ -88,7 +88,7 @@ class MacroSelector extends React.Component { this.state = { show: false, - showAdd: false + showAdd: false, }; } @@ -127,9 +127,9 @@ class MacroSelector extends React.Component { <div className="dropdownListItemSelected"> {itemList == undefined || itemList.length == 0 || itemList.length <= selectedItem ? i18n.dialog.loading - : itemList[selectedItem].name == "" + : itemList[selectedItem]?.name == "" ? i18n.general.noname - : itemList[selectedItem].name} + : itemList[selectedItem]?.name} </div> <span className="caret"> <IconArrowsSmallSeparating /> @@ -142,7 +142,7 @@ class MacroSelector extends React.Component { {itemList.map((item, iter) => ( <Dropdown.Item eventKey={iter} key={`item-${iter}`} className={iter === selectedItem ? "active" : ""}> <span className="itemIndex">#{iter + 1}.</span> - {item.name == "" ? i18n.general.noname : item.name} + {item?.name == "" ? i18n.general.noname : item.name} </Dropdown.Item> ))} </Dropdown.Menu> @@ -175,7 +175,7 @@ class MacroSelector extends React.Component { icoSVG={<IconAddNew />} icoPosition="left" buttonText={i18n.general.new} - style="outline gradient addNew" + styles="outline gradient addNew" onClick={this.toggleShowAdd} /> <MacrosMemoryUsage mem={mem} tMem={tMem} /> @@ -184,20 +184,20 @@ class MacroSelector extends React.Component { ) : ( <NameModal show={show} - name={itemList[selectedItem].name} + name={itemList[selectedItem]?.name} toggleShow={this.toggleShow} handleSave={this.handleSave} - modalTitle={`Change macro name`} - labelInput={`Macro name`} + modalTitle="Change macro name" + labelInput="Macro name" /> )} <NameModal show={showAdd} - name={""} + name="" toggleShow={this.toggleShowAdd} handleSave={this.handleAdd} - modalTitle={`Create new macro name`} - labelInput={`Macro name`} + modalTitle="Create new macro name" + labelInput="Macro name" /> </Style> ); diff --git a/src/renderer/component/Select/NeuronSelector.js b/src/renderer/component/Select/NeuronSelector.js index bb7bb0750..6578b9c0e 100644 --- a/src/renderer/component/Select/NeuronSelector.js +++ b/src/renderer/component/Select/NeuronSelector.js @@ -17,14 +17,12 @@ import React from "react"; import Styled from "styled-components"; -import i18n from "../../i18n"; import Dropdown from "react-bootstrap/Dropdown"; +import i18n from "../../i18n"; import { ButtonSettings } from "../Button"; -import { IconArrowsSmallSeparating } from "../Icon"; -import { IconPen } from "../Icon"; -import { IconDelete } from "../Icon"; +import { IconArrowsSmallSeparating, IconPen, IconDelete } from "../Icon"; -import { NameModal } from "../Modal/"; // Imported custom modal component +import { NameModal } from "../Modal"; // Imported custom modal component const Style = Styled.div` @@ -34,7 +32,7 @@ class NeuronSelector extends React.Component { super(props); this.state = { - show: false + show: false, }; } @@ -51,12 +49,15 @@ class NeuronSelector extends React.Component { const { onSelect, itemList, selectedItem, deleteItem, subtitle } = this.props; const { show } = this.state; + let localItemList = itemList; + if (!Array.isArray(localItemList) || localItemList.length <= 0) localItemList = []; + return ( <Style> <div className="itemListelector dropdownMultipleActions"> <Dropdown onSelect={onSelect} value={selectedItem} className="dropdownList"> <Dropdown.Toggle className="toggler neuronToggler"> - {itemList.length == 0 ? ( + {localItemList.length == 0 ? ( i18n.keyboardSettings.neuronManager.defaultNeuron ) : ( <div className="dropdownListInner"> @@ -65,7 +66,7 @@ class NeuronSelector extends React.Component { <div className="dropdownListItemInner"> <div className="dropdownListItemLabel">{subtitle}</div> <div className="dropdownListItemSelected"> - {itemList[selectedItem].name == "" ? i18n.general.noname : itemList[selectedItem].name} + {localItemList[selectedItem].name == "" ? i18n.general.noname : localItemList[selectedItem].name} </div> <span className="caret"> <IconArrowsSmallSeparating /> @@ -76,7 +77,7 @@ class NeuronSelector extends React.Component { )} </Dropdown.Toggle> <Dropdown.Menu className="dropdownMenu"> - {itemList.map((item, iter) => ( + {localItemList?.map((item, iter) => ( <Dropdown.Item eventKey={iter} key={`item-${iter}`} className={iter === selectedItem ? "active" : ""}> {item.name == "" ? i18n.general.noname : item.name} </Dropdown.Item> @@ -111,7 +112,7 @@ class NeuronSelector extends React.Component { </div> <NameModal show={show} - name={itemList[selectedItem].name} + name={localItemList[selectedItem]?.name} toggleShow={this.toggleShow} handleSave={this.handleSave} modalTitle={i18n.keyboardSettings.neuronManager.changeLayerTitle} diff --git a/src/renderer/component/Select/Select.js b/src/renderer/component/Select/Select.js index 44fbcf6ef..223411257 100644 --- a/src/renderer/component/Select/Select.js +++ b/src/renderer/component/Select/Select.js @@ -64,76 +64,78 @@ const Style = Styled.div` * @param {listElements} listElements - The array of objects that hold the elements to be selected.\ * @returns {<Select>} Dropdown object. */ -const Select = ({ onSelect, value, listElements, disabled }) => { +function Select({ onSelect, value, listElements, disabled }) { return ( <Style> <Dropdown onSelect={onSelect} value={value} className={`custom-dropdown ${disabled ? "disabled" : ""}`}> <Dropdown.Toggle id="dropdown-custom"> <div className="dropdownItemSelected"> {value != undefined && value != null && listElements.length > 0 ? ( // Ternary operator checking validity of variables - <React.Fragment> - {typeof value == "string" && value != "" ? ( // Ternary operator checking if string - <React.Fragment> + <> + {typeof value === "string" && value != "" ? ( // Ternary operator checking if string + <> {listElements[0].icon != undefined ? ( // Ternary operator checking if icon exists - <React.Fragment> + <> <div className="dropdownIcon"> - <img src={listElements.filter(elem => elem.value === value)[0].icon} className="dropdwonIcon" /> + <img src={listElements.find(elem => elem.value === value)?.icon} className="dropdwonIcon" /> </div> - <div className="dropdownItem">{value}</div> - </React.Fragment> + <div className="dropdownItem">{listElements.find(elem => elem.value === value)?.text}</div> + </> ) : ( - <div className="dropdownItem">{value}</div> + <div className="dropdownItem">{listElements.find(elem => elem.value === value)?.text}</div> )} - </React.Fragment> + </> ) : ( "" )} - {typeof value == "number" && value > -1 ? ( // Ternary operator checking if number - <React.Fragment> + {typeof value === "number" && value > -1 && listElements.length > 0 ? ( // Ternary operator checking if number + <> {listElements[0].icon != undefined ? ( // Ternary operator checking if icon exists - <React.Fragment> + <> <div className="dropdownIcon"> - <img src={listElements.filter(elem => elem.value === value)[0].icon} className="dropdwonIcon" /> + <img src={listElements.find(elem => elem.value === value)?.icon} className="dropdwonIcon" /> </div> - <div className="dropdownItem">{listElements.filter(elem => elem.value === value)[0].text}</div> - </React.Fragment> + <div className="dropdownItem">{listElements.find(elem => elem.value === value)?.text}</div> + </> ) : ( - <div className="dropdownItem">{listElements.filter(elem => elem.value === value)[0].text}</div> + <div className="dropdownItem">{listElements.find(elem => elem.value === value)?.text}</div> )} - </React.Fragment> + </> ) : ( "" )} - </React.Fragment> + </> ) : ( "" )} </div> </Dropdown.Toggle> <Dropdown.Menu> - {listElements.map((item, index) => ( - <Dropdown.Item - eventKey={item.value} - key={index} - className={`${value == item.text ? "active" : ""}`} - disabled={item.disabled} - > - <div className="dropdownInner"> - {value != undefined && value != "" > 0 && listElements.length > 0 && listElements[0].icon != undefined ? ( - <div className="dropdownIcon"> - <img src={item.icon} className="dropdwonIcon" /> + {listElements.length > 0 + ? listElements.map((item, index) => ( + <Dropdown.Item + eventKey={item.value} + key={index} + className={`${value == item.text ? "active" : ""}`} + disabled={item.disabled} + > + <div className="dropdownInner"> + {value != undefined && value != "" > 0 && listElements.length > 0 && listElements[0].icon != undefined ? ( + <div className="dropdownIcon"> + <img src={item.icon} className="dropdwonIcon" /> + </div> + ) : ( + "" + )} + <div className="dropdownItem">{item.text}</div> </div> - ) : ( - "" - )} - <div className="dropdownItem">{item.text}</div> - </div> - </Dropdown.Item> - ))} + </Dropdown.Item> + )) + : ""} </Dropdown.Menu> </Dropdown> </Style> ); -}; +} export default Select; diff --git a/src/renderer/component/Select/SelectF13PlusKeys.js b/src/renderer/component/Select/SelectF13PlusKeys.js index 6390b31ca..369eb7614 100644 --- a/src/renderer/component/Select/SelectF13PlusKeys.js +++ b/src/renderer/component/Select/SelectF13PlusKeys.js @@ -81,7 +81,7 @@ const Style = Styled.div` * @param {listElements} listElements - The array of objects that hold the elements to be selected.\ * @returns {<Select>} Dropdown object. */ -const SelectF13PlusKeys = ({ keyCode, onSelect, value, listElements, ksl, content, selected, disabled }) => { +function SelectF13PlusKeys({ keyCode, onSelect, value, listElements, ksl, content, selected, disabled }) { const [load, setLoad] = React.useState(true); const keymapDB = new KeymapDB(); @@ -110,18 +110,18 @@ const SelectF13PlusKeys = ({ keyCode, onSelect, value, listElements, ksl, conten <Dropdown.Toggle id="dropdown-Fkeys"> <div className="dropdownItemSelected"> <svg width={65} height={26}> - <g filter={`url(#filter0_d_2211_181319)`}> + <g filter="url(#filter0_d_2211_181319)"> <rect x={0} y={0} width={65} height={26} rx="5" className="baseKey baseKeyDropdown" /> </g> - <rect x={0} y={0} width={65} height={26} rx="5" fill={`url(#paint_gradient)`} fillOpacity={0.1} /> + <rect x={0} y={0} width={65} height={26} rx="5" fill="url(#paint_gradient)" fillOpacity={0.1} /> <g width="12" height="12" fill="transparent"> <path d="M1.5 3.5L6 8L10.5 3.5" stroke="currentColor" strokeWidth="2" transform={`translate(${44}, ${6})`} /> </g> - <text x={22} y={16} fontSize={13} fill={"white"} fontWeight={600} textAnchor="middle"> + <text x={22} y={16} fontSize={13} fill="white" fontWeight={600} textAnchor="middle"> {content.first} </text> </svg> - <div className="badge-circle"></div> + <div className="badge-circle" /> </div> </Dropdown.Toggle> <Dropdown.Menu flip="false"> @@ -141,6 +141,6 @@ const SelectF13PlusKeys = ({ keyCode, onSelect, value, listElements, ksl, conten </Dropdown> </Style> ); -}; +} export default SelectF13PlusKeys; diff --git a/src/renderer/component/Select/SelectGenericKeys.js b/src/renderer/component/Select/SelectGenericKeys.js index 8712783f7..6522e41e1 100644 --- a/src/renderer/component/Select/SelectGenericKeys.js +++ b/src/renderer/component/Select/SelectGenericKeys.js @@ -81,7 +81,7 @@ const Style = Styled.div` * @param {listElements} listElements - The array of objects that hold the elements to be selected.\ * @returns {<Select>} Dropdown object. */ -const SelectGenericKeys = ({ keyCode, onSelect, value, listElements, ksl, content, selected, disabled }) => { +function SelectGenericKeys({ keyCode, onSelect, value, listElements, ksl, content, selected, disabled }) { const [load, setLoad] = React.useState(true); const contentWidth = 200; const keymapDB = new KeymapDB(); @@ -111,10 +111,10 @@ const SelectGenericKeys = ({ keyCode, onSelect, value, listElements, ksl, conten <Dropdown.Toggle id="dropdown-generic"> <div className="dropdownItemSelected"> <svg width={contentWidth} height={26}> - <g filter={`url(#filter0_d_2211_181319)`}> + <g filter="url(#filter0_d_2211_181319)"> <rect x={0} y={0} width={contentWidth} height={26} rx="5" className="baseKey baseKeyDropdown" /> </g> - <rect x={0} y={0} width={contentWidth} height={26} rx="5" fill={`url(#paint_gradient)`} fillOpacity={0.1} /> + <rect x={0} y={0} width={contentWidth} height={26} rx="5" fill="url(#paint_gradient)" fillOpacity={0.1} /> <g width="12" height="12" fill="transparent"> <path d="M1.5 3.5L6 8L10.5 3.5" @@ -123,11 +123,11 @@ const SelectGenericKeys = ({ keyCode, onSelect, value, listElements, ksl, conten transform={`translate(${contentWidth - 22}, ${6})`} /> </g> - <text x={4} y={16} fontSize={13} fill={"white"} fontWeight={600} textAnchor="left"> + <text x={4} y={16} fontSize={13} fill="white" fontWeight={600} textAnchor="left"> {content.first} </text> </svg> - <div className="badge-circle"></div> + <div className="badge-circle" /> </div> </Dropdown.Toggle> <Dropdown.Menu flip="false"> @@ -147,6 +147,6 @@ const SelectGenericKeys = ({ keyCode, onSelect, value, listElements, ksl, conten </Dropdown> </Style> ); -}; +} export default SelectGenericKeys; diff --git a/src/renderer/component/Select/SelectKeyboardDropdown.js b/src/renderer/component/Select/SelectKeyboardDropdown.js index 69fa9076d..6495196d3 100644 --- a/src/renderer/component/Select/SelectKeyboardDropdown.js +++ b/src/renderer/component/Select/SelectKeyboardDropdown.js @@ -18,8 +18,8 @@ import React from "react"; import Styled from "styled-components"; import Dropdown from "react-bootstrap/Dropdown"; -import iconKeyboard from "../../../../static/base/icon-keyboard.svg"; -import iconConnected from "../../../../static/base/icon-connected.svg"; +import iconKeyboard from "@Assets/base/icon-keyboard.svg"; +import iconConnected from "@Assets/base/icon-connected.svg"; const Style = Styled.div` .custom-dropdown { @@ -76,14 +76,18 @@ const Style = Styled.div` } } `; -const SelectKeyboardDropdown = ({ selectPort, selectedPortIndex, deviceItems, connected }) => { +function SelectKeyboardDropdown({ selectPort, selectedPortIndex, deviceItems, connected, connectedDevice }) { return ( <Style> <Dropdown className="custom-dropdown" onSelect={selectPort}> <Dropdown.Toggle id="dropdown-custom"> <div className="dropdownItemSelected"> <div className="dropdownIcon"> - {deviceItems[selectedPortIndex] && connected ? <img src={iconConnected} /> : <img src={iconKeyboard} />} + {deviceItems[connectedDevice] && connectedDevice === selectedPortIndex && connected ? ( + <img src={iconConnected} /> + ) : ( + <img src={iconKeyboard} /> + )} </div> <div className="dropdownItem"> <h3>{deviceItems[selectedPortIndex] != null ? deviceItems[selectedPortIndex].userName : "Keyboard not found"}</h3> @@ -104,7 +108,7 @@ const SelectKeyboardDropdown = ({ selectPort, selectedPortIndex, deviceItems, co > <div className="dropdownInner"> <div className="dropdownIcon"> - {selectedPortIndex == item.index && connected ? <img src={iconConnected} /> : <img src={iconKeyboard} />} + {connectedDevice === item.index && connected ? <img src={iconConnected} /> : <img src={iconKeyboard} />} </div> <div className="dropdownItem"> <h3>{item.userName}</h3> @@ -119,6 +123,6 @@ const SelectKeyboardDropdown = ({ selectPort, selectedPortIndex, deviceItems, co </Dropdown> </Style> ); -}; +} export default SelectKeyboardDropdown; diff --git a/src/renderer/component/Select/SelectLayersCustomDropdown.js b/src/renderer/component/Select/SelectLayersCustomDropdown.js index 729dbe1e4..047d38553 100644 --- a/src/renderer/component/Select/SelectLayersCustomDropdown.js +++ b/src/renderer/component/Select/SelectLayersCustomDropdown.js @@ -156,7 +156,7 @@ class SelectLayersCustomDropdown extends Component { { name: "Layer Lock 7", keynum: 17498 }, { name: "Layer Lock 8", keynum: 17499 }, { name: "Layer Lock 9", keynum: 17500 }, - { name: "Layer Lock 10", keynum: 17501 } + { name: "Layer Lock 10", keynum: 17501 }, ]; this.layerSwitch = [ { name: "Layer Shift 1", keynum: 17450 }, @@ -168,9 +168,10 @@ class SelectLayersCustomDropdown extends Component { { name: "Layer Shift 7", keynum: 17456 }, { name: "Layer Shift 8", keynum: 17457 }, { name: "Layer Shift 9", keynum: 17458 }, - { name: "Layer Shift 10", keynum: 17459 } + { name: "Layer Shift 10", keynum: 17459 }, ]; } + render() { const { action, keyCode, onKeySelect, activeTab } = this.props; const KC = keyCode.base + keyCode.modified; @@ -192,7 +193,7 @@ class SelectLayersCustomDropdown extends Component { <div className="dropdownItemSelected"> <div className="dropdownItem"> <div className="dropdownItem">Layers</div> - <div className="badge-circle"></div> + <div className="badge-circle" /> </div> </div> </Dropdown.Toggle> @@ -203,20 +204,18 @@ class SelectLayersCustomDropdown extends Component { Layer <strong>Shift</strong> </div> <div className="dropdown-group-buttons"> - {this.layerSwitch.map((item, id) => { - return ( - <Dropdown.Item - eventKey={item.keynum} - key={`layerSwitch-${id}`} - disabled={activeTab == "super" ? true : item.keynum == -1 ? true : false} - className={`${ - keyCode.modified > 0 && item.keynum == keyCode.base + keyCode.modified ? "active" : "" - } dropdown-config-button`} - > - <div className="dropdownItem">{id + 1}</div> - </Dropdown.Item> - ); - })} + {this.layerSwitch.map((item, id) => ( + <Dropdown.Item + eventKey={item.keynum} + key={`layerSwitch-${id}`} + disabled={activeTab == "super" ? true : item.keynum == -1} + className={`${ + keyCode.modified > 0 && item.keynum == keyCode.base + keyCode.modified ? "active" : "" + } dropdown-config-button`} + > + <div className="dropdownItem">{id + 1}</div> + </Dropdown.Item> + ))} </div> </div> <div className="dropdown-group"> @@ -224,20 +223,18 @@ class SelectLayersCustomDropdown extends Component { Layer <strong>Lock</strong> </div> <div className="dropdown-group-buttons"> - {this.layerLock.map((item, id) => { - return ( - <Dropdown.Item - eventKey={item.keynum} - key={`layerLock-${id}`} - disabled={item.keynum == -1} - className={`${ - keyCode.modified > 0 && item.keynum == keyCode.base + keyCode.modified ? "active" : "" - } dropdown-config-button`} - > - <div className="dropdownItem">{id + 1}</div> - </Dropdown.Item> - ); - })} + {this.layerLock.map((item, id) => ( + <Dropdown.Item + eventKey={item.keynum} + key={`layerLock-${id}`} + disabled={item.keynum == -1} + className={`${ + keyCode.modified > 0 && item.keynum == keyCode.base + keyCode.modified ? "active" : "" + } dropdown-config-button`} + > + <div className="dropdownItem">{id + 1}</div> + </Dropdown.Item> + ))} </div> </div> </div> diff --git a/src/renderer/component/Select/SelectLayersLock.js b/src/renderer/component/Select/SelectLayersLock.js index a5ea06116..99b9e1645 100644 --- a/src/renderer/component/Select/SelectLayersLock.js +++ b/src/renderer/component/Select/SelectLayersLock.js @@ -67,9 +67,10 @@ class SelectLayersLock extends Component { { name: "Layer Lock 7", keynum: 17498 }, { name: "Layer Lock 8", keynum: 17499 }, { name: "Layer Lock 9", keynum: 17500 }, - { name: "Layer Lock 10", keynum: 17501 } + { name: "Layer Lock 10", keynum: 17501 }, ]; } + render() { const { action, keyCode, onKeySelect, activeTab } = this.props; const KC = keyCode.base + keyCode.modified; @@ -97,20 +98,18 @@ class SelectLayersLock extends Component { </div> </Dropdown.Toggle> <Dropdown.Menu> - {this.layerLock.map((item, id) => { - return ( - <Dropdown.Item - eventKey={item.keynum} - key={`item-${id}`} - disabled={item.keynum == -1} - className={`${keyCode.modified > 0 && item.keynum == keyCode.base + keyCode.modified ? "active" : ""}`} - > - <div className="dropdownInner"> - <div className="dropdownItem">{`${id + 1}. ${item.name}`}</div> - </div> - </Dropdown.Item> - ); - })} + {this.layerLock.map((item, id) => ( + <Dropdown.Item + eventKey={item.keynum} + key={`item-${id}`} + disabled={item.keynum == -1} + className={`${keyCode.modified > 0 && item.keynum == keyCode.base + keyCode.modified ? "active" : ""}`} + > + <div className="dropdownInner"> + <div className="dropdownItem">{`${id + 1}. ${item.name}`}</div> + </div> + </Dropdown.Item> + ))} </Dropdown.Menu> </Dropdown> </Style> diff --git a/src/renderer/component/Select/SelectLayersSwitch.js b/src/renderer/component/Select/SelectLayersSwitch.js index 5ee30bae9..950c96840 100644 --- a/src/renderer/component/Select/SelectLayersSwitch.js +++ b/src/renderer/component/Select/SelectLayersSwitch.js @@ -67,9 +67,10 @@ class SelectLayersSwitch extends Component { { name: "Layer Shift 7", keynum: 17456 }, { name: "Layer Shift 8", keynum: 17457 }, { name: "Layer Shift 9", keynum: 17458 }, - { name: "Layer Shift 10", keynum: 17459 } + { name: "Layer Shift 10", keynum: 17459 }, ]; } + render() { const { action, keyCode, onKeySelect, activeTab } = this.props; const KC = keyCode.base + keyCode.modified; @@ -96,20 +97,18 @@ class SelectLayersSwitch extends Component { </div> </Dropdown.Toggle> <Dropdown.Menu> - {this.layerShift.map((item, id) => { - return ( - <Dropdown.Item - eventKey={item.keynum} - key={`item-${id}`} - disabled={item.keynum == -1} - className={`${keyCode.modified > 0 && item.keynum == keyCode.base + keyCode.modified ? "active" : ""}`} - > - <div className="dropdownInner"> - <div className="dropdownItem">{`${id + 1}. ${item.name}`}</div> - </div> - </Dropdown.Item> - ); - })} + {this.layerShift.map((item, id) => ( + <Dropdown.Item + eventKey={item.keynum} + key={`item-${id}`} + disabled={item.keynum == -1} + className={`${keyCode.modified > 0 && item.keynum == keyCode.base + keyCode.modified ? "active" : ""}`} + > + <div className="dropdownInner"> + <div className="dropdownItem">{`${id + 1}. ${item.name}`}</div> + </div> + </Dropdown.Item> + ))} </Dropdown.Menu> </Dropdown> </Style> diff --git a/src/renderer/component/Select/SelectMacro.js b/src/renderer/component/Select/SelectMacro.js index c761db238..bd803f6d5 100644 --- a/src/renderer/component/Select/SelectMacro.js +++ b/src/renderer/component/Select/SelectMacro.js @@ -58,6 +58,7 @@ class SelectMacro extends Component { super(props); this.state = {}; } + render() { const { keyCode, onKeySelect, macros } = this.props; const KC = keyCode.base + keyCode.modified; @@ -85,15 +86,13 @@ class SelectMacro extends Component { </div> </Dropdown.Toggle> <Dropdown.Menu> - {mcros.map((x, id) => { - return ( - <Dropdown.Item eventKey={x} key={`macro-${id}`} disabled={x == -1}> - <div className="dropdownInner"> - <div className="dropdownItem">{`${id + 1}. ${macros[id].name}`}</div> - </div> - </Dropdown.Item> - ); - })} + {mcros.map((x, id) => ( + <Dropdown.Item eventKey={x} key={`macro-${id}`} disabled={x == -1}> + <div className="dropdownInner"> + <div className="dropdownItem">{`${id + 1}. ${macros[id].name}`}</div> + </div> + </Dropdown.Item> + ))} </Dropdown.Menu> </Dropdown> </Style> diff --git a/src/renderer/component/Select/SelectMacroCustomDropdown.js b/src/renderer/component/Select/SelectMacroCustomDropdown.js index 8a9cec772..c68133d80 100644 --- a/src/renderer/component/Select/SelectMacroCustomDropdown.js +++ b/src/renderer/component/Select/SelectMacroCustomDropdown.js @@ -93,6 +93,7 @@ class SelectMacroCustomDropdown extends Component { super(props); this.state = {}; } + render() { const { keyCode, onKeySelect, macros } = this.props; const KC = keyCode.base + keyCode.modified; @@ -113,7 +114,7 @@ class SelectMacroCustomDropdown extends Component { <div className="dropdownItemSelected"> <div className="dropdownItem"> <div className="dropdownItem">Macros</div> - <div className="badge-circle"></div> + <div className="badge-circle" /> </div> </div> </Dropdown.Toggle> @@ -121,20 +122,18 @@ class SelectMacroCustomDropdown extends Component { <div className="large-dropdown-inner"> <div className="dropdownHeader">Macros</div> <div className="dropdown-list"> - {mcros.map((x, id) => { - return ( - <Dropdown.Item - eventKey={x} - key={`macro-${id}`} - disabled={x == -1} - className={`${mcros.indexOf(KC) == id ? "active" : ""}`} - > - <div className="dropdownInner"> - <div className="dropdownItem">{`${id + 1}. ${macros[id].name}`}</div> - </div> - </Dropdown.Item> - ); - })} + {mcros.map((x, id) => ( + <Dropdown.Item + eventKey={x} + key={`macro-${id}`} + disabled={x == -1} + className={`${mcros.indexOf(KC) == id ? "active" : ""}`} + > + <div className="dropdownInner"> + <div className="dropdownItem">{`${id + 1}. ${macros[id].name}`}</div> + </div> + </Dropdown.Item> + ))} </div> </div> </Dropdown.Menu> diff --git a/src/renderer/component/Select/SelectMouseCustomDropdown.js b/src/renderer/component/Select/SelectMouseCustomDropdown.js index 58763324c..5523fb02f 100644 --- a/src/renderer/component/Select/SelectMouseCustomDropdown.js +++ b/src/renderer/component/Select/SelectMouseCustomDropdown.js @@ -17,8 +17,8 @@ import React, { Component } from "react"; import Styled from "styled-components"; -import i18n from "../../i18n"; import Dropdown from "react-bootstrap/Dropdown"; +import i18n from "../../i18n"; const Style = Styled.div` width: 100%; @@ -161,21 +161,22 @@ class SelectMouseCustomDropdown extends Component { { name: i18n.editor.superkeys.specialKeys.middle, keynum: 20548 }, { name: i18n.editor.superkeys.specialKeys.right, keynum: 20546 }, { name: i18n.editor.superkeys.specialKeys.back, keynum: 20552 }, - { name: i18n.editor.superkeys.specialKeys.fwd, keynum: 20560 } + { name: i18n.editor.superkeys.specialKeys.fwd, keynum: 20560 }, ]; this.mouseMovement = [ { name: i18n.editor.superkeys.specialKeys.left, keynum: 20484 }, { name: i18n.editor.superkeys.specialKeys.right, keynum: 20488 }, { name: i18n.editor.superkeys.specialKeys.up, keynum: 20481 }, - { name: i18n.editor.superkeys.specialKeys.down, keynum: 20482 } + { name: i18n.editor.superkeys.specialKeys.down, keynum: 20482 }, ]; this.mouseWheel = [ { name: i18n.editor.superkeys.specialKeys.left, keynum: 20500 }, { name: i18n.editor.superkeys.specialKeys.right, keynum: 20504 }, { name: i18n.editor.superkeys.specialKeys.up, keynum: 20497 }, - { name: i18n.editor.superkeys.specialKeys.down, keynum: 20498 } + { name: i18n.editor.superkeys.specialKeys.down, keynum: 20498 }, ]; } + render() { const { keyCode, onKeySelect } = this.props; const KC = keyCode.base + keyCode.modified; @@ -197,7 +198,7 @@ class SelectMouseCustomDropdown extends Component { <div className="dropdownItemSelected"> <div className="dropdownItem"> <div className="dropdownItem">Mouse events</div> - <div className="badge-circle"></div> + <div className="badge-circle" /> </div> </div> </Dropdown.Toggle> @@ -209,18 +210,16 @@ class SelectMouseCustomDropdown extends Component { dangerouslySetInnerHTML={{ __html: i18n.editor.superkeys.specialKeys.mouseClick }} /> <div className="dropdown-group-buttons"> - {this.mouseClick.map((item, id) => { - return ( - <Dropdown.Item - eventKey={item.keynum} - key={`mouseClick-${id}`} - disabled={item.keynum == -1} - className={`${item.keynum == keyCode.base + keyCode.modified ? "active" : ""} dropdown-config-button`} - > - <div className="dropdownItem">{item.name}</div> - </Dropdown.Item> - ); - })} + {this.mouseClick.map((item, id) => ( + <Dropdown.Item + eventKey={item.keynum} + key={`mouseClick-${id}`} + disabled={item.keynum == -1} + className={`${item.keynum == keyCode.base + keyCode.modified ? "active" : ""} dropdown-config-button`} + > + <div className="dropdownItem">{item.name}</div> + </Dropdown.Item> + ))} </div> </div> <div className="dropdown-group mouseMovement"> @@ -229,18 +228,16 @@ class SelectMouseCustomDropdown extends Component { dangerouslySetInnerHTML={{ __html: i18n.editor.superkeys.specialKeys.mouseMovement }} /> <div className="dropdown-group-buttons"> - {this.mouseMovement.map((item, id) => { - return ( - <Dropdown.Item - eventKey={item.keynum} - key={`mouseMovement-${id}`} - disabled={item.keynum == -1} - className={`${item.keynum == keyCode.base + keyCode.modified ? "active" : ""} dropdown-config-button`} - > - <div className="dropdownItem">{item.name}</div> - </Dropdown.Item> - ); - })} + {this.mouseMovement.map((item, id) => ( + <Dropdown.Item + eventKey={item.keynum} + key={`mouseMovement-${id}`} + disabled={item.keynum == -1} + className={`${item.keynum == keyCode.base + keyCode.modified ? "active" : ""} dropdown-config-button`} + > + <div className="dropdownItem">{item.name}</div> + </Dropdown.Item> + ))} </div> </div> <div className="dropdown-group mouseWheel"> @@ -249,18 +246,16 @@ class SelectMouseCustomDropdown extends Component { dangerouslySetInnerHTML={{ __html: i18n.editor.superkeys.specialKeys.mouseWheel }} /> <div className="dropdown-group-buttons"> - {this.mouseWheel.map((item, id) => { - return ( - <Dropdown.Item - eventKey={item.keynum} - key={`mouseWheel-${id}`} - disabled={item.keynum == -1} - className={`${item.keynum == keyCode.base + keyCode.modified ? "active" : ""} dropdown-config-button`} - > - <div className="dropdownItem">{item.name}</div> - </Dropdown.Item> - ); - })} + {this.mouseWheel.map((item, id) => ( + <Dropdown.Item + eventKey={item.keynum} + key={`mouseWheel-${id}`} + disabled={item.keynum == -1} + className={`${item.keynum == keyCode.base + keyCode.modified ? "active" : ""} dropdown-config-button`} + > + <div className="dropdownItem">{item.name}</div> + </Dropdown.Item> + ))} </div> </div> </div> diff --git a/src/renderer/component/Select/SelectOneShotLayers.js b/src/renderer/component/Select/SelectOneShotLayers.js index 5abf28399..85e0cf013 100644 --- a/src/renderer/component/Select/SelectOneShotLayers.js +++ b/src/renderer/component/Select/SelectOneShotLayers.js @@ -65,9 +65,10 @@ class SelectOneShotLayers extends Component { { name: "One Shot Layer 5", keynum: 49165 }, { name: "One Shot Layer 6", keynum: 49166 }, { name: "One Shot Layer 7", keynum: 49167 }, - { name: "One Shot Layer 8", keynum: 49168 } + { name: "One Shot Layer 8", keynum: 49168 }, ]; } + render() { const { action, keyCode, onKeySelect, activeTab } = this.props; const KC = keyCode.base + keyCode.modified; @@ -99,20 +100,18 @@ class SelectOneShotLayers extends Component { </div> </Dropdown.Toggle> <Dropdown.Menu> - {this.oneShotLayers.map((item, id) => { - return ( - <Dropdown.Item - eventKey={item.keynum} - key={`OSL-${id}`} - disabled={item.keynum == -1} - className={`${keyCode.modified > 0 && item.keynum == keyCode.base + keyCode.modified ? "active" : ""}`} - > - <div className="dropdownInner"> - <div className="dropdownItem">{`${id + 1}. ${item.name}`}</div> - </div> - </Dropdown.Item> - ); - })} + {this.oneShotLayers.map((item, id) => ( + <Dropdown.Item + eventKey={item.keynum} + key={`OSL-${id}`} + disabled={item.keynum == -1} + className={`${keyCode.modified > 0 && item.keynum == keyCode.base + keyCode.modified ? "active" : ""}`} + > + <div className="dropdownInner"> + <div className="dropdownItem">{`${id + 1}. ${item.name}`}</div> + </div> + </Dropdown.Item> + ))} </Dropdown.Menu> </Dropdown> </Style> diff --git a/src/renderer/component/Select/SelectOneShotModifiers.js b/src/renderer/component/Select/SelectOneShotModifiers.js index f2ad8a397..dc4ab396d 100644 --- a/src/renderer/component/Select/SelectOneShotModifiers.js +++ b/src/renderer/component/Select/SelectOneShotModifiers.js @@ -65,9 +65,10 @@ class SelectOneShotModifiers extends Component { { name: "One Shot Right Control", keynum: 49157 }, { name: "One Shot Right Shift", keynum: 49158 }, { name: "One Shot AltGr", keynum: 49159 }, - { name: "One Shot Right OS", keynum: 49160 } + { name: "One Shot Right OS", keynum: 49160 }, ]; } + render() { const { action, keyCode, onKeySelect, activeTab } = this.props; const KC = keyCode.base + keyCode.modified; @@ -99,20 +100,18 @@ class SelectOneShotModifiers extends Component { </div> </Dropdown.Toggle> <Dropdown.Menu> - {this.oneShotModifiers.map((item, id) => { - return ( - <Dropdown.Item - eventKey={item.keynum} - key={`OSM-${id}`} - disabled={item.keynum == -1} - className={`${keyCode.modified > 0 && item.keynum == keyCode.base + keyCode.modified ? "active" : ""}`} - > - <div className="dropdownInner"> - <div className="dropdownItem">{`${id + 1}. ${item.name}`}</div> - </div> - </Dropdown.Item> - ); - })} + {this.oneShotModifiers.map((item, id) => ( + <Dropdown.Item + eventKey={item.keynum} + key={`OSM-${id}`} + disabled={item.keynum == -1} + className={`${keyCode.modified > 0 && item.keynum == keyCode.base + keyCode.modified ? "active" : ""}`} + > + <div className="dropdownInner"> + <div className="dropdownItem">{`${id + 1}. ${item.name}`}</div> + </div> + </Dropdown.Item> + ))} </Dropdown.Menu> </Dropdown> </Style> diff --git a/src/renderer/component/Select/SelectShotModifierCustomDropdown.js b/src/renderer/component/Select/SelectShotModifierCustomDropdown.js index 60086ffc9..e41b57570 100644 --- a/src/renderer/component/Select/SelectShotModifierCustomDropdown.js +++ b/src/renderer/component/Select/SelectShotModifierCustomDropdown.js @@ -17,8 +17,8 @@ import React, { Component } from "react"; import Styled from "styled-components"; -import i18n from "../../i18n"; import Dropdown from "react-bootstrap/Dropdown"; +import i18n from "../../i18n"; const Style = Styled.div` width: 100%; @@ -164,7 +164,7 @@ class SelectShotModifierCustomDropdown extends Component { { name: "5", keynum: 49165 }, { name: "6", keynum: 49166 }, { name: "7", keynum: 49167 }, - { name: "8", keynum: 49168 } + { name: "8", keynum: 49168 }, ]; this.oneShotModifiers = [ { name: i18n.editor.standardView.oneShot.leftControl, keynum: 49153 }, @@ -174,9 +174,10 @@ class SelectShotModifierCustomDropdown extends Component { { name: i18n.editor.standardView.oneShot.rightControl, keynum: 49157 }, { name: i18n.editor.standardView.oneShot.rightShift, keynum: 49158 }, { name: i18n.editor.standardView.oneShot.altGr, keynum: 49159 }, - { name: i18n.editor.standardView.oneShot.rightOS, keynum: 49160 } + { name: i18n.editor.standardView.oneShot.rightOS, keynum: 49160 }, ]; } + render() { const { keyCode, onKeySelect } = this.props; const KC = keyCode.base + keyCode.modified; @@ -197,7 +198,7 @@ class SelectShotModifierCustomDropdown extends Component { <div className="dropdownItemSelected"> <div className="dropdownItem"> <div className="dropdownItem">OneShot</div> - <div className="badge-circle"></div> + <div className="badge-circle" /> </div> </div> </Dropdown.Toggle> @@ -208,18 +209,16 @@ class SelectShotModifierCustomDropdown extends Component { OneShot <span>Layer</span> </div> <div className="dropdown-group-buttons"> - {this.oneShotLayers.map((item, id) => { - return ( - <Dropdown.Item - eventKey={item.keynum} - key={`mouseClick-${id}`} - disabled={item.keynum == -1} - className={`${item.keynum == keyCode.base + keyCode.modified ? "active" : ""} dropdown-config-button`} - > - <div className="dropdownItem">{item.name}</div> - </Dropdown.Item> - ); - })} + {this.oneShotLayers.map((item, id) => ( + <Dropdown.Item + eventKey={item.keynum} + key={`mouseClick-${id}`} + disabled={item.keynum == -1} + className={`${item.keynum == keyCode.base + keyCode.modified ? "active" : ""} dropdown-config-button`} + > + <div className="dropdownItem">{item.name}</div> + </Dropdown.Item> + ))} </div> </div> <div className="dropdown-group oneShotModifiers"> @@ -227,18 +226,16 @@ class SelectShotModifierCustomDropdown extends Component { OneShot <span>Modifiers</span> </div> <div className="dropdown-group-buttons"> - {this.oneShotModifiers.map((item, id) => { - return ( - <Dropdown.Item - eventKey={item.keynum} - key={`mouseClick-${id}`} - disabled={item.keynum == -1} - className={`${item.keynum == keyCode.base + keyCode.modified ? "active" : ""} dropdown-config-button`} - > - <div className="dropdownItem">{item.name}</div> - </Dropdown.Item> - ); - })} + {this.oneShotModifiers.map((item, id) => ( + <Dropdown.Item + eventKey={item.keynum} + key={`mouseClick-${id}`} + disabled={item.keynum == -1} + className={`${item.keynum == keyCode.base + keyCode.modified ? "active" : ""} dropdown-config-button`} + > + <div className="dropdownItem">{item.name}</div> + </Dropdown.Item> + ))} </div> </div> </div> diff --git a/src/renderer/component/Select/SelectSuperKey.js b/src/renderer/component/Select/SelectSuperKey.js index d9be9acc0..5e8845d52 100644 --- a/src/renderer/component/Select/SelectSuperKey.js +++ b/src/renderer/component/Select/SelectSuperKey.js @@ -59,6 +59,7 @@ class SelectSuperKey extends Component { this.state = {}; this.taps = ["TAP", "HOLD", "T&H", "2TAP", "2T&H"]; } + render() { const { action, actions, selKeys, onKeySelect, superkeys, keyCode } = this.props; @@ -67,7 +68,7 @@ class SelectSuperKey extends Component { .fill() .map((_, i) => i + 53980); - let adjactions = actions; + const adjactions = actions; if (adjactions.length < 5) { while (adjactions.length < 5) { adjactions.push(0); @@ -94,15 +95,13 @@ class SelectSuperKey extends Component { </div> </Dropdown.Toggle> <Dropdown.Menu> - {superk.map((x, id) => { - return ( - <Dropdown.Item eventKey={x} key={`super-${id}`} disabled={x == -1}> - <div className="dropdownInner"> - <div className="dropdownItem">{`${id + 1}. ${superkeys[id].name}`}</div> - </div> - </Dropdown.Item> - ); - })} + {superk.map((x, id) => ( + <Dropdown.Item eventKey={x} key={`super-${id}`} disabled={x == -1}> + <div className="dropdownInner"> + <div className="dropdownItem">{`${id + 1}. ${superkeys[id].name}`}</div> + </div> + </Dropdown.Item> + ))} </Dropdown.Menu> </Dropdown> </Style> diff --git a/src/renderer/component/Select/SelectSuperKeyCustomDropdown.js b/src/renderer/component/Select/SelectSuperKeyCustomDropdown.js index 2b1d048ef..d75856e63 100644 --- a/src/renderer/component/Select/SelectSuperKeyCustomDropdown.js +++ b/src/renderer/component/Select/SelectSuperKeyCustomDropdown.js @@ -29,6 +29,8 @@ width: 100%; text-transform: capitalize; font-size: inherit; line-height: 1em; + overflow: initial; + position: relative; } .dropdownItemSelected { @@ -50,9 +52,12 @@ width: 100%; } .badge.badge-primary { font-weight: 700; - font-size: 9px; padding: 2px 5px; line-height: 1em; + font-size: 7px; + position: absolute; + top: -6px; + margin-left: -3px; } } .active .dropdownItemSelected .badge-circle { @@ -101,6 +106,7 @@ class SelectSuperKeyCustomDropdown extends Component { this.state = {}; this.taps = ["TAP", "HOLD", "T&H", "2TAP", "2T&H"]; } + render() { const { action, actions, selKeys, onKeySelect, superkeys, keyCode, notifText } = this.props; @@ -109,7 +115,7 @@ class SelectSuperKeyCustomDropdown extends Component { .fill() .map((_, i) => i + 53980); - let adjactions = actions; + const adjactions = actions; if (adjactions.length < 5) { while (adjactions.length < 5) { adjactions.push(0); @@ -129,27 +135,25 @@ class SelectSuperKeyCustomDropdown extends Component { <div className="dropdownItem"> Superkeys {notifText ? <div className="badge badge-primary">{notifText}</div> : ""} </div> - <div className="badge-circle"></div> + <div className="badge-circle" /> </div> </Dropdown.Toggle> <Dropdown.Menu className="large-dropdown list-inside"> <div className="large-dropdown-inner"> <div className="dropdownHeader">Superkeys</div> <div className="dropdown-list"> - {superk.map((x, id) => { - return ( - <Dropdown.Item - eventKey={x} - key={`super-${id}`} - disabled={x == -1} - className={`${superk.indexOf(KC) == id ? "active" : ""}`} - > - <div className="dropdownInner"> - <div className="dropdownItem">{`${id + 1}. ${superkeys[id].name}`}</div> - </div> - </Dropdown.Item> - ); - })} + {superk.map((x, id) => ( + <Dropdown.Item + eventKey={x} + key={`super-${id}`} + disabled={x == -1} + className={`${superk.indexOf(KC) == id ? "active" : ""}`} + > + <div className="dropdownInner"> + <div className="dropdownItem">{`${id + 1}. ${superkeys[id].name}`}</div> + </div> + </Dropdown.Item> + ))} </div> </div> </Dropdown.Menu> diff --git a/src/renderer/component/Select/SelectWirelessDropdown.tsx b/src/renderer/component/Select/SelectWirelessDropdown.tsx new file mode 100644 index 000000000..ade2a2b36 --- /dev/null +++ b/src/renderer/component/Select/SelectWirelessDropdown.tsx @@ -0,0 +1,217 @@ +import React from "react"; +import Styled from "styled-components"; +import Dropdown from "react-bootstrap/Dropdown"; + +import i18n from "@Renderer/i18n"; +import { SelectWirelessDropdownProps, WirelessButton } from "@Renderer/types/wireless"; +import { BluetoothCodes } from "@Renderer/../hw/bluetooth"; +import { BatteryCodes } from "@Renderer/../hw/battery"; + +const Style = Styled.div` +width: 100%; +.custom-dropdown { + .dropdownItem { + padding-left: 0; + flex: 0 0 100%; + text-align: left; + text-transform: capitalize; + font-size: inherit; + line-height: 1em; + } + .dropdownItemSelected { + color: ${({ theme }) => theme.styles.dropdown.textButtonColor}; + position: relative; + .badge-circle { + width: 8px; + height: 8px; + border-radius: 50%; + background-color: rgba(254,0,124,1); + position: absolute; + right: -26px; + top: -13px; + font-size: 11px; + } + &:hover { + color: ${({ theme }) => theme.styles.dropdown.textButtonHover}; + } + } +} +.active .dropdownItemSelected .badge-circle { + opacity: 1; + } +.disabled { + pointer-events: none; + opacity: 35%; +} +.dropdown-toggle.btn.btn-primary { + margin-top: 0; + padding: 12px 16px; + } + + .dropdown-menu.large-dropdown { + min-width: 214px; + &.show { + height: auto; + } + } + .large-dropdown-inner { + + } + .dropdownHeader { + font-size: 12px; + text-transform: uppercase; + margin-bottom: 4px; + color: ${({ theme }) => theme.styles.dropdown.largeDropdown.title}; + margin-top: 6px; + span { + font-weight: 600; + color: ${({ theme }) => theme.styles.dropdown.largeDropdown.titleStrong}; + } + } +.dropdown-group { + background: ${({ theme }) => theme.styles.dropdown.largeDropdown.backgroundInner}; + padding: 8px; + border-radius: 6px; + border: ${({ theme }) => theme.styles.dropdown.largeDropdown.border}; +} +.dropdown-group { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} +.dropdown-group + .dropdown-group { + margin-top: 2px; + border-bottom-left-radius: 6px; + border-bottom-right-radius: 6px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.mouseMovement.dropdown-group { + border-radius: 0; +} +.dropdown-group-buttons { + display: grid; + grid-gap: 3px; + flex-wrap: nowrap; + padding: 2px 4px; + border-radius: 6px; + background-color: ${({ theme }) => theme.styles.cardButtons.groupButtonsBackground}; +} +.mouseClick .dropdown-group-buttons { + grid-template-columns: repeat(5, 1fr); +} +.mouseMovement .dropdown-group-buttons, +.mouseWheel .dropdown-group-buttons { + grid-template-columns: repeat(4, 1fr); +} +.dropdown-item.dropdown-config-button { + display: flex; + justify-content: center; + align-items: center; + width: 100%; + height: 36px; + text-align: center; + font-size: 14px; + font-weight: 600; + letter-spacing: -0.03em; + padding: 8px 0; + border: ${({ theme }) => theme.styles.button.config.border}; + color: ${({ theme }) => theme.styles.button.config.color}; + background: ${({ theme }) => theme.styles.button.config.background}; + border: none; + border-radius: 6px; + box-shadow: ${({ theme }) => theme.styles.button.config.boxShadow}; + transition-property: background, box-shadow, color + transition: 300ms ease-in-out; + .dropdownItem { + text-align: center; + } + &:hover { + cursor: pointer; + color: ${({ theme }) => theme.styles.button.config.colorHover}; + background: ${({ theme }) => theme.styles.button.config.backgroundHover}; + box-shadow: ${({ theme }) => theme.styles.button.config.boxShadowHover}; + } + &.active { + color: ${({ theme }) => theme.styles.button.config.colorActive}; + background: ${({ theme }) => theme.styles.button.config.backgroundActive}; + box-shadow: ${({ theme }) => theme.styles.button.config.boxShadowActive}; + } + } +`; + +enum WirelessButtonOrder { + BATTERY_LEVEL = 0, + PAIRING_MODE = 1, +} + +function SelectWirelessDropdown(props: SelectWirelessDropdownProps) { + const { keyCode, onKeySelect } = props; + const WirelessButtons: Array<WirelessButton> = [ + { name: i18n.editor.standardView.wireless.batteryLevel, keynum: BatteryCodes.STATUS }, + { name: i18n.wireless.bluetooth.pairingModeButton, keynum: BluetoothCodes.PAIRING }, + ]; + const KC: number = keyCode.base + keyCode.modified; + // const verifiedKC = WirelessButtons.findIndex((param: WirelessButton) => param.keynum === KC); + + return ( + <Style> + <Dropdown + onSelect={value => onKeySelect(parseInt(value, 10))} + className={`custom-dropdown ${WirelessButtons.map(i => i.keynum).includes(KC) ? "active" : ""}`} + > + <Dropdown.Toggle id="dropdown-custom" className="button-config-style"> + <div className="dropdownItemSelected"> + <div className="dropdownItem"> + <div className="dropdownItem">{i18n.app.menu.wireless}</div> + <div className="badge-circle" /> + </div> + </div> + </Dropdown.Toggle> + <Dropdown.Menu className="large-dropdown"> + <div className="large-dropdown-inner"> + <div className="dropdown-group wirelessBattery"> + <div className="dropdownHeader"> + Wireless <span>Battery status</span> + </div> + <div className="dropdown-group-buttons"> + <Dropdown.Item + eventKey={String(WirelessButtons[WirelessButtonOrder.BATTERY_LEVEL].keynum)} + key={`wirelessButtons-${WirelessButtonOrder.BATTERY_LEVEL}`} + disabled={WirelessButtons[WirelessButtonOrder.BATTERY_LEVEL].keynum === -1} + className={` + ${ + WirelessButtons[WirelessButtonOrder.BATTERY_LEVEL].keynum === keyCode.base + keyCode.modified + ? "active" + : "" + } dropdown-config-button`} + > + <div className="dropdownItem">{WirelessButtons[WirelessButtonOrder.BATTERY_LEVEL].name}</div> + </Dropdown.Item> + </div> + </div> + <div className="dropdown-group wirelessPairing"> + <div className="dropdownHeader"> + Bluetooth <span>{i18n.wireless.bluetooth.pairingMode}</span> + </div> + <div className="dropdown-group-buttons"> + <Dropdown.Item + eventKey={String(WirelessButtons[WirelessButtonOrder.PAIRING_MODE].keynum)} + key={`wirelessButtons-${WirelessButtonOrder.PAIRING_MODE}`} + disabled={WirelessButtons[WirelessButtonOrder.PAIRING_MODE].keynum === -1} + className={` + ${ + WirelessButtons[WirelessButtonOrder.PAIRING_MODE].keynum === keyCode.base + keyCode.modified ? "active" : "" + } dropdown-config-button`} + > + <div className="dropdownItem">{WirelessButtons[WirelessButtonOrder.PAIRING_MODE].name}</div> + </Dropdown.Item> + </div> + </div> + </div> + </Dropdown.Menu> + </Dropdown> + </Style> + ); +} + +export default SelectWirelessDropdown; diff --git a/src/renderer/component/Select/SuperkeysSelector.js b/src/renderer/component/Select/SuperkeysSelector.js index 498db7a73..836b76d1d 100644 --- a/src/renderer/component/Select/SuperkeysSelector.js +++ b/src/renderer/component/Select/SuperkeysSelector.js @@ -17,14 +17,15 @@ import React from "react"; import Styled from "styled-components"; -import i18n from "../../i18n"; import Dropdown from "react-bootstrap/Dropdown"; -1; -import { NameModal } from "../Modal/"; // Imported custom modal component -import { RegularButton, ButtonConfig, ButtonSettings } from "../Button"; +import i18n from "../../i18n"; +import { NameModal } from "../Modal"; // Imported custom modal component +import { RegularButton, ButtonConfig } from "../Button"; import { IconArrowsSmallSeparating, IconPen, IconAddNew, IconClone, IconDelete } from "../Icon"; +1; + const Style = Styled.div` display: flex; .dropdownMultipleActions { @@ -95,7 +96,7 @@ class SuperKeysSelector extends React.Component { this.state = { show: false, - showAdd: false + showAdd: false, }; } @@ -205,7 +206,7 @@ class SuperKeysSelector extends React.Component { icoSVG={<IconAddNew />} icoPosition="left" buttonText={i18n.general.new} - style="outline gradient addNew" + styles="outline gradient addNew" onClick={this.toggleShowAdd} /> {itemList == undefined || itemList.length == 0 || itemList.length <= selectedItem ? ( @@ -216,13 +217,13 @@ class SuperKeysSelector extends React.Component { name={itemList[selectedItem].name} toggleShow={this.toggleShow} handleSave={this.handleSave} - modalTitle={`Change Superkey name`} - labelInput={`Superkey name`} + modalTitle="Change Superkey name" + labelInput="Superkey name" /> )} <NameModal show={showAdd} - name={""} + name="" toggleShow={this.toggleShowAdd} handleSave={this.handleAdd} modalTitle={i18n.editor.superkeys.createModal.createNew} diff --git a/src/renderer/component/Select/index.js b/src/renderer/component/Select/index.js index c73a6d124..3fe3db1ad 100644 --- a/src/renderer/component/Select/index.js +++ b/src/renderer/component/Select/index.js @@ -33,6 +33,7 @@ import SelectMacroCustomDropdown from "./SelectMacroCustomDropdown"; import SelectMouseCustomDropdown from "./SelectMouseCustomDropdown"; import SelectShotModifierCustomDropdown from "./SelectShotModifierCustomDropdown"; import SelectSuperKeyCustomDropdown from "./SelectSuperKeyCustomDropdown"; +import SelectWirelessDropdown from "./SelectWirelessDropdown"; export { LayerSelector, @@ -53,5 +54,6 @@ export { SelectMacroCustomDropdown, SelectMouseCustomDropdown, SelectShotModifierCustomDropdown, - SelectSuperKeyCustomDropdown + SelectSuperKeyCustomDropdown, + SelectWirelessDropdown, }; diff --git a/src/renderer/component/StepsBar/StepsBar.js b/src/renderer/component/StepsBar/StepsBar.js index 2a2bf637c..b3c1cb6e2 100644 --- a/src/renderer/component/StepsBar/StepsBar.js +++ b/src/renderer/component/StepsBar/StepsBar.js @@ -114,19 +114,19 @@ width: 100%; * @returns {<StepsBar>} StepsBar component. */ -const StepsBar = ({ steps, stepActive }) => { - let [stepsPosition, setStepsPosition] = React.useState(parseInt(stepActive)); - let [refreshPositionStyle, setRefreshPositionStyle] = React.useState({ - width: `${(100 / (steps.length - 1)) * stepsPosition}%` +function StepsBar({ steps, stepActive }) { + const [stepsPosition, setStepsPosition] = React.useState(parseInt(stepActive)); + const [refreshPositionStyle, setRefreshPositionStyle] = React.useState({ + width: `${(100 / (steps.length - 1)) * stepsPosition}%`, }); const constructGrid = { - gridTemplateColumns: `repeat(${steps.length - 1}, 1fr)` + gridTemplateColumns: `repeat(${steps.length - 1}, 1fr)`, }; React.useEffect(() => { if (steps.length > stepActive) { const widthPercentage = { - width: `${(100 / (steps.length - 1)) * stepActive}%` + width: `${(100 / (steps.length - 1)) * stepActive}%`, }; setRefreshPositionStyle(widthPercentage); } @@ -140,17 +140,17 @@ const StepsBar = ({ steps, stepActive }) => { {steps.map((item, index) => ( <div className={`step ${index <= stepActive ? "active" : ""}`} data-order={index} key={`${item.name}-${index}`}> <div className="stepIcon">{item.icon}</div> - <div className="stepBullet"></div> + <div className="stepBullet" /> </div> ))} </div> <div className="progressBar"> - <div className="progressBarActive" style={refreshPositionStyle}></div> + <div className="progressBarActive" style={refreshPositionStyle} /> </div> </div> </div> </Style> ); -}; +} export default StepsBar; diff --git a/src/renderer/component/Tab/customTab.js b/src/renderer/component/Tab/customTab.js index eb10bc9a2..a3bcbce3e 100644 --- a/src/renderer/component/Tab/customTab.js +++ b/src/renderer/component/Tab/customTab.js @@ -21,7 +21,7 @@ import Styled from "styled-components"; import Nav from "react-bootstrap/Nav"; -import lightNavImage from "../../../../static/base/light-accent--md.png"; +import lightNavImage from "@Assets/base/light-accent--md.png"; const Style = Styled.div` .nav-link { @@ -96,7 +96,7 @@ const Style = Styled.div` * @returns {<CustomTab>} CustomTab component. */ -const CustomTab = ({ text, eventKey, icon, className, notifText }) => { +function CustomTab({ text, eventKey, icon, className, notifText }) { return ( <Style className={className}> <Nav.Item> @@ -107,17 +107,17 @@ const CustomTab = ({ text, eventKey, icon, className, notifText }) => { </Nav.Item> </Style> ); -}; +} CustomTab.defaultProps = { - text: "" + text: "", }; CustomTab.propTypes = { text: PropTypes.string, icon: PropTypes.object, eventKey: PropTypes.string, - className: PropTypes.string + className: PropTypes.string, }; export default CustomTab; diff --git a/src/renderer/component/Title/Title.js b/src/renderer/component/Title/Title.tsx similarity index 70% rename from src/renderer/component/Title/Title.js rename to src/renderer/component/Title/Title.tsx index 38ce10a14..cc7ee4443 100644 --- a/src/renderer/component/Title/Title.js +++ b/src/renderer/component/Title/Title.tsx @@ -19,10 +19,10 @@ import React from "react"; import Styled from "styled-components"; import OverlayTrigger from "react-bootstrap/OverlayTrigger"; import Tooltip from "react-bootstrap/Tooltip"; +import LightWarning from "@Assets/base/light-warning.png"; +import LightDanger from "@Assets/base/light-danger.png"; +import LightSuccess from "@Assets/base/light-success.png"; import { IconInformationBubble, IconInformationBubbleSm } from "../Icon"; -import LightWarning from "../../../../static/base/light-warning.png"; -import LightDanger from "../../../../static/base/light-danger.png"; -import LightSuccess from "../../../../static/base/light-success.png"; const Style = Styled.div` .lg { @@ -122,7 +122,7 @@ h6 { .danger { color: ${({ theme }) => theme.colors.textDanger}; &:before { - background-image: url(${LightSuccess}); + background-image: url(${LightDanger}); } &:after { background: ${({ theme }) => theme.colors.gradientDanger}; @@ -155,9 +155,22 @@ h6 { .counter2:before { content: "02"; } - `; -const Title = ({ + +interface TitleProps { + text: string; + headingLevel: number; + size?: "md" | "lg"; + className?: string; + color?: "danger" | "error" | "success" | "warning"; + type?: "danger" | "error" | "success" | "warning"; + tooltip?: string | HTMLElement; + tooltipSize?: "wide" | "narrow"; + tooltipIconSize?: "sm" | "md" | "lg"; + tooltipPlacement?: "left" | "top" | "right" | "bottom"; + svgICO?: any; +} +function Title({ text, headingLevel, size, @@ -165,41 +178,38 @@ const Title = ({ color, type, tooltip, - tooltipSize, - tooltipIconSize, - tooltipPlacement, - svgICO -}) => { - let Tag = "h" + headingLevel; - + tooltipSize = "narrow", + tooltipIconSize = "md", + tooltipPlacement = "top", + svgICO, +}: TitleProps) { + const Tag = `h${headingLevel}` as keyof JSX.IntrinsicElements; return ( <Style> <Tag - className={`${size ? size : ""} ${type && "titleAlert"} ${type ? type : ""} ${color ? color : ""} ${ - svgICO ? "hasIcon" : "" - } ${className ? className : ""}`} + className={`${size || ""} ${type && "titleAlert"} ${type || ""} ${color || ""} ${svgICO ? "hasIcon" : ""} ${ + className || "" + }`} > {svgICO && svgICO} <span dangerouslySetInnerHTML={{ __html: text }} /> {tooltip && ( - <> - <OverlayTrigger - placement={`${tooltipPlacement ? tooltipPlacement : "top"}`} - overlay={ - <Tooltip id="tooltip-top" className={`${tooltipSize == "wide" ? "tooltipWide" : "tooltipRegular"}`}> - <div dangerouslySetInnerHTML={{ __html: tooltip }} /> - </Tooltip> - } - > - <span className="tooltipIcon"> - {tooltipIconSize == "sm" ? <IconInformationBubbleSm /> : <IconInformationBubble />} - </span> - </OverlayTrigger> - </> + <OverlayTrigger + placement={tooltipPlacement} + overlay={ + <Tooltip id="tooltip-top" className={`${tooltipSize === "wide" ? "tooltipWide" : "tooltipRegular"}`}> + <div dangerouslySetInnerHTML={{ __html: tooltip }} /> + </Tooltip> + } + > + <span className="tooltipIcon"> + {tooltipIconSize === "sm" ? <IconInformationBubbleSm /> : <IconInformationBubble />} + </span> + </OverlayTrigger> )} </Tag> </Style> ); -}; +} export default Title; diff --git a/src/renderer/component/Title/index.js b/src/renderer/component/Title/index.js index d8cd9e7ac..6c952a471 100644 --- a/src/renderer/component/Title/index.js +++ b/src/renderer/component/Title/index.js @@ -16,4 +16,4 @@ import Title from "./Title"; -export { Title as default }; +export default Title; diff --git a/src/renderer/component/ToastMessage/ToastMessage.js b/src/renderer/component/ToastMessage/ToastMessage.tsx similarity index 66% rename from src/renderer/component/ToastMessage/ToastMessage.js rename to src/renderer/component/ToastMessage/ToastMessage.tsx index 540ed3923..1eb04bc02 100644 --- a/src/renderer/component/ToastMessage/ToastMessage.js +++ b/src/renderer/component/ToastMessage/ToastMessage.tsx @@ -14,11 +14,12 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ - +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-nocheck import React from "react"; import Styled from "styled-components"; import Title from "../Title"; -import { ButtonConfig } from "../Button"; +import ButtonConfig from "../Button/ButtonConfig"; const Style = Styled.div` .toastBody { @@ -73,26 +74,43 @@ const Style = Styled.div` * @param {string} clickDismissText [Optional] - The text to render the secondary button * @returns {<ToastMessage>} ToastMessage component. */ -const ToastMessage = ({ title, content, icon, onClickAction, clickActionText, onClickDismiss, clickDismissText }) => { - return ( - <Style className={`toastContentWrapper`}> - <div className={`toastBody ${icon ? "hasIcon" : "noIcon"}`}> - {icon && <div className="toastIcon">{icon}</div>} - <div className="toastBodyInner"> - {title && <Title text={title} headingLevel={4} />} - <div className={"toastContent"} dangerouslySetInnerHTML={{ __html: content }} /> - </div> + +interface ToasMessageProps { + title: string; + content?: string; + icon?: any; + onClickAction?: (...args: any[]) => any; + clickActionText?: string; + onClickDismiss?: (...args: any[]) => any; + clickDismissText?: string; +} + +const ToastMessage: React.FC<ToasMessageProps> = ({ + title, + content, + icon, + onClickAction, + clickActionText, + onClickDismiss, + clickDismissText, +}) => ( + <Style className="toastContentWrapper"> + <div className={`toastBody ${icon ? "hasIcon" : "noIcon"}`}> + {icon && <div className="toastIcon">{icon}</div>} + <div className="toastBodyInner"> + {title && <Title text={title} headingLevel={4} />} + <div className="toastContent" dangerouslySetInnerHTML={{ __html: content }} /> + </div> + </div> + {onClickAction || onClickDismiss ? ( + <div className="toastFooter"> + <ButtonConfig onClick={onClickDismiss} buttonText={clickDismissText} variation="link" size="sm" /> + <ButtonConfig onClick={onClickAction} buttonText={clickActionText} size="sm" /> </div> - {onClickAction || onClickDismiss ? ( - <div className="toastFooter"> - <ButtonConfig onClick={onClickDismiss} buttonText={clickDismissText} style="link" size="sm" /> - <ButtonConfig onClick={onClickAction} buttonText={clickActionText} size="sm" /> - </div> - ) : ( - "" - )} - </Style> - ); -}; + ) : ( + "" + )} + </Style> +); export default ToastMessage; diff --git a/src/renderer/component/ToggleButtons/KeyboardViewSelector.js b/src/renderer/component/ToggleButtons/KeyboardViewSelector.js index 9761c1f40..c75ad5c79 100644 --- a/src/renderer/component/ToggleButtons/KeyboardViewSelector.js +++ b/src/renderer/component/ToggleButtons/KeyboardViewSelector.js @@ -16,8 +16,8 @@ */ import React from "react"; -import { ButtonConfig } from "../Button"; import Styled from "styled-components"; +import { ButtonConfig } from "../Button"; const Style = Styled.div` &.toggleButtonsContainer { @@ -86,7 +86,7 @@ const Style = Styled.div` } } `; -const KeyboardViewSelector = ({ editModeFunc, value, listElements, style, size }) => { +function KeyboardViewSelector({ editModeFunc, value, listElements, style, size }) { return ( // className={`button-config ${value == item.value ? "active" : ""}`} <Style className={`toggleButtonsContainer ${style == "flex" ? "toggleButtonsContainerFlex" : ""}`}> @@ -95,14 +95,14 @@ const KeyboardViewSelector = ({ editModeFunc, value, listElements, style, size } {listElements.map((item, index) => ( <ButtonConfig onClick={e => editModeFunc(item.value)} - selected={value === item.value ? true : false} + selected={value === item.value} icoPosition="left" icoSVG={item.icon} key={index} buttonText={item.name} size={size} tooltip={item.tooltip} - tooltipPlacement={"bottom"} + tooltipPlacement="bottom" tooltipDelay={300} tooltipClassName="tooltipRegular tooltipKeyboardViewSelector" /> @@ -110,6 +110,6 @@ const KeyboardViewSelector = ({ editModeFunc, value, listElements, style, size } </div> </Style> ); -}; +} export default KeyboardViewSelector; diff --git a/src/renderer/component/ToggleButtons/LayoutViewSelector.js b/src/renderer/component/ToggleButtons/LayoutViewSelector.js index 367aa375b..c5f54ead0 100644 --- a/src/renderer/component/ToggleButtons/LayoutViewSelector.js +++ b/src/renderer/component/ToggleButtons/LayoutViewSelector.js @@ -20,10 +20,10 @@ import PropTypes from "prop-types"; import Styled from "styled-components"; import i18n from "../../i18n"; -import Title from "../../component/Title"; +import Title from "../Title"; import { ButtonConfig } from "../Button"; -import { IconEditModeStandardViewSm, IconEditModeSingleViewSm } from "../../component/Icon"; +import { IconEditModeStandardViewSm, IconEditModeSingleViewSm } from "../Icon"; const Style = Styled.div` &.layoutSelector { @@ -111,10 +111,10 @@ h5 { * @returns {LayoutViewSelector} Badge component. */ -const LayoutViewSelector = ({ onToggle, isStandardView, tooltip, layoutSelectorPosition }) => { +function LayoutViewSelector({ onToggle, isStandardView, tooltip, layoutSelectorPosition }) { return ( - <Style className={`layoutSelector`} isStandardView={isStandardView} layoutSelectorPosition={layoutSelectorPosition}> - <Title text={i18n.editor.editMode.title} headingLevel={5} tooltip={tooltip ? tooltip : false} tooltipIconSize="sm" /> + <Style className="layoutSelector" isStandardView={isStandardView} layoutSelectorPosition={layoutSelectorPosition}> + <Title text={i18n.editor.editMode.title} headingLevel={5} tooltip={tooltip || false} tooltipIconSize="sm" /> <div className="toggleButtonsContainer"> <div className="toggleButtonsInner"> <ButtonConfig @@ -123,7 +123,7 @@ const LayoutViewSelector = ({ onToggle, isStandardView, tooltip, layoutSelectorP icoPosition="left" selected={isStandardView} buttonText={i18n.editor.editMode.standardView} - size={"sm"} + size="sm" /> <ButtonConfig onClick={onToggle} @@ -131,18 +131,18 @@ const LayoutViewSelector = ({ onToggle, isStandardView, tooltip, layoutSelectorP icoSVG={<IconEditModeSingleViewSm />} selected={!isStandardView} buttonText={i18n.editor.editMode.singleView} - size={"sm"} + size="sm" /> </div> </div> </Style> ); -}; +} LayoutViewSelector.propTypes = { onToggle: PropTypes.func.isRequired, isStandardView: PropTypes.bool.isRequired, - tooltip: PropTypes.string + tooltip: PropTypes.string, }; export default LayoutViewSelector; diff --git a/src/renderer/component/ToggleButtons/ToggleButtons.js b/src/renderer/component/ToggleButtons/ToggleButtons.js index 5e8b76dc9..789e85825 100644 --- a/src/renderer/component/ToggleButtons/ToggleButtons.js +++ b/src/renderer/component/ToggleButtons/ToggleButtons.js @@ -16,8 +16,8 @@ */ import React from "react"; -import { ButtonConfig } from "../../component/Button"; import Styled from "styled-components"; +import { ButtonConfig } from "../Button"; const Style = Styled.div` &.toggleButtonsContainer { @@ -44,7 +44,7 @@ const Style = Styled.div` } } `; -const ToggleButtons = ({ selectDarkMode, value, listElements, style, size }) => { +function ToggleButtons({ selectDarkMode, value, listElements, style, size }) { return ( // className={`button-config ${value == item.value ? "active" : ""}`} <Style className={`toggleButtonsContainer ${style == "flex" ? "toggleButtonsContainerFlex" : ""}`}> @@ -53,7 +53,7 @@ const ToggleButtons = ({ selectDarkMode, value, listElements, style, size }) => {listElements.map((item, index) => ( <ButtonConfig onClick={e => selectDarkMode(item.value)} - selected={value === item.value ? true : false} + selected={value === item.value} icoSVG={item.icon} icoPosition="left" key={index} @@ -64,6 +64,6 @@ const ToggleButtons = ({ selectDarkMode, value, listElements, style, size }) => </div> </Style> ); -}; +} export default ToggleButtons; diff --git a/src/renderer/component/Tooltip/Tooltip.js b/src/renderer/component/Tooltip/Tooltip.js index 681713bc2..ed8be7fb5 100644 --- a/src/renderer/component/Tooltip/Tooltip.js +++ b/src/renderer/component/Tooltip/Tooltip.js @@ -38,30 +38,29 @@ export default class CTooltip extends Component { return ( <Tooltip id="select-tooltip" className="longtooltip"> <TooltipStyle> - {texts.map((tip, i) => { - return ( - <React.Fragment key={`Tip-${i}`}> - {tip[0] == "*" ? ( - <React.Fragment> - {i == 0 ? "" : <br></br>} - <h5 className="ttip-h">{tip.substr(1)}</h5> - </React.Fragment> - ) : tip == "%" ? ( - <br /> - ) : ( - <p className="ttip-p">{tip}</p> - )} - </React.Fragment> - ); - })} + {texts.map((tip, i) => ( + <React.Fragment key={`Tip-${i}`}> + {tip[0] == "*" ? ( + <> + {i == 0 ? "" : <br />} + <h5 className="ttip-h">{tip.substr(1)}</h5> + </> + ) : tip == "%" ? ( + <br /> + ) : ( + <p className="ttip-p">{tip}</p> + )} + </React.Fragment> + ))} </TooltipStyle> </Tooltip> ); } + RenderImgToolTip(image) { return ( <Tooltip id="select-tooltip" className="longtooltip"> - <img src={image}></img> + <img src={image} /> </Tooltip> ); } diff --git a/src/renderer/component/Version/Version.tsx b/src/renderer/component/Version/Version.tsx new file mode 100644 index 000000000..4d7bf99d7 --- /dev/null +++ b/src/renderer/component/Version/Version.tsx @@ -0,0 +1,8 @@ +import React from "react"; +import { version } from "../../../../package.json"; + +function Version() { + return <div className="text-center mb-4">Bazecor v{version}</div>; +} + +export default Version; diff --git a/src/renderer/config.js b/src/renderer/config.js deleted file mode 100644 index c6434643f..000000000 --- a/src/renderer/config.js +++ /dev/null @@ -1,34 +0,0 @@ -// -*- mode: js-jsx -*- -/* Bazecor -- Kaleidoscope Command Center - * Copyright (C) 2018, 2019 Keyboardio, Inc. - * - * This program is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by the Free Software - * Foundation, version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -// TODO: const isDevelopment = process.env.NODE_ENV !== "production"; -const isDevelopment = true; - -import path from "path"; - -function getStaticPath() { - if (process.env.NODE_ENV !== "production") { - // The `__static` global doesn't match what it should in development. - // Instead, it includes an unexpected `node_modules` path, specifically: - // node_modules/electron/dist/Electron.app/Contents/Resources/static - return path.join(path.resolve(__dirname), "..", "..", "static"); - } else { - return __static; - } -} - -export { isDevelopment, getStaticPath }; diff --git a/src/renderer/controller/FlashingSM/DeviceChecks.js b/src/renderer/controller/FlashingSM/DeviceChecks.js index bfbd8ba25..fb28db443 100644 --- a/src/renderer/controller/FlashingSM/DeviceChecks.js +++ b/src/renderer/controller/FlashingSM/DeviceChecks.js @@ -5,15 +5,14 @@ import Backup from "../../../api/backup"; const keyboardSetup = async context => { if (context.device.bootloader) return { RaiseBrightness: undefined }; try { - let focus = new Focus(); + const focus = new Focus(); if (context.device.info.product === "Raise") { await focus.command("led.mode 1"); - let brightness = await focus.command("led.brightness"); + const brightness = await focus.command("led.brightness"); await focus.command("led.brightness 255"); return { RaiseBrightness: brightness }; - } else { - await focus.command("upgrade.start"); } + await focus.command("upgrade.start"); } catch (error) { console.warn("error when querying the device"); console.error(error); @@ -23,9 +22,9 @@ const keyboardSetup = async context => { }; const GetLSideData = async () => { - let result = {}; + const result = {}; try { - let focus = new Focus(); + const focus = new Focus(); result.leftSideConn = String(await focus.command("upgrade.keyscanner.isConnected 1")).includes("true"); result.leftSideBoot = String(await focus.command("upgrade.keyscanner.isBootloader 1")).includes("true"); } catch (error) { @@ -37,9 +36,9 @@ const GetLSideData = async () => { }; const GetRSideData = async () => { - let result = {}; + const result = {}; try { - let focus = new Focus(); + const focus = new Focus(); result.rightSideConn = String(await focus.command("upgrade.keyscanner.isConnected 0")).includes("true"); result.rightSideBoot = String(await focus.command("upgrade.keyscanner.isBootloader 0")).includes("true"); } catch (error) { @@ -53,16 +52,21 @@ const GetRSideData = async () => { const CreateBackup = async context => { let backup; try { - let bkp = new Backup(); + const bkp = new Backup(); const commands = await bkp.Commands(); backup = await bkp.DoBackup(commands, context.device.chipID); await bkp.SaveBackup(backup); + const focus = new Focus(); + let keymap = await focus.command("keymap.custom"); + keymap = keymap.split(" "); + keymap[0] = "41"; + await focus.command(`keymap.custom ${keymap.join(" ")}`); } catch (error) { console.warn("error when creating Backup of the device"); console.error(error); throw new Error(error); } - return { backup: backup }; + return { backup }; }; const DeviceChecks = createMachine( @@ -78,51 +82,51 @@ const DeviceChecks = createMachine( sideLeftBL: false, sideRightOK: true, sideRightBL: false, - backup: undefined + backup: undefined, }, states: { PerfSetup: { id: "PerfSetup", entry: [ - (context, event) => { + () => { console.log("Performing setup"); - } + }, ], invoke: { id: "keyboardSetup", - src: (context, data) => keyboardSetup(context), + src: context => keyboardSetup(context), onDone: { actions: [ assign((context, event) => { if (event.data.RaiseBrightness) { return { - RaiseBrightness: event.data.RaiseBrightness + RaiseBrightness: event.data.RaiseBrightness, }; } }), assign({ - stateblock: (context, event) => 1 + stateblock: () => 1, }), - raise("internal") - ] + raise("internal"), + ], }, onError: { target: "failure", - actions: assign({ error: (context, event) => event }) - } + actions: assign({ error: (context, event) => event }), + }, }, on: [ { event: "*", target: "validateStatus", cond: "doNotRequireSideCheck" }, { event: "*", target: "success", cond: "bootloaderMode" }, - { event: "*", target: "LSideCheck", cond: "requireSideCheck" } - ] + { event: "*", target: "LSideCheck", cond: "requireSideCheck" }, + ], }, LSideCheck: { id: "LSideCheck", entry: [ - (context, event) => { + () => { console.log("Checking left side"); - } + }, ], invoke: { id: "GetLSideData", @@ -134,23 +138,23 @@ const DeviceChecks = createMachine( console.log(event); return { sideLeftOk: event.data.leftSideConn, - sideLeftBL: event.data.leftSideBoot + sideLeftBL: event.data.leftSideBoot, }; }), assign({ - stateblock: (context, event) => 2 - }) - ] + stateblock: () => 2, + }), + ], }, - onError: "failure" - } + onError: "failure", + }, }, RSideCheck: { id: "RSideCheck", entry: [ - (context, event) => { + () => { console.log("Checking right side"); - } + }, ], invoke: { id: "GetRSideData", @@ -162,48 +166,48 @@ const DeviceChecks = createMachine( console.log(event); return { sideRightOK: event.data.rightSideConn, - sideRightBL: event.data.rightSideBoot + sideRightBL: event.data.rightSideBoot, }; }), assign({ - stateblock: (context, event) => 3 - }) - ] + stateblock: () => 3, + }), + ], }, - onError: "failure" - } + onError: "failure", + }, }, validateStatus: { id: "validateStatus", entry: [ - (context, event) => { + () => { console.log("Validating status, waiting for UPDATE"); - } + }, ], invoke: { id: "CreateBackup", - src: (context, data) => CreateBackup(context), + src: context => CreateBackup(context), onDone: { actions: [ assign((context, event) => { console.log(event); return { - backup: event.data.backup + backup: event.data.backup, }; }), assign({ - stateblock: (context, event) => (context.device.info.product === "Raise" ? 0 : 5) + stateblock: context => (context.device.info.product === "Raise" ? 0 : 5), }), - (context, event) => { + () => { console.log("Backup ready"); }, - raise("AUTOPRESSED") - ] + raise("AUTOPRESSED"), + ], }, onError: { target: "failure", - actions: assign({ error: (context, event) => event }) - } + actions: assign({ error: (context, event) => event }), + }, }, on: { PRESSED: { @@ -211,48 +215,38 @@ const DeviceChecks = createMachine( cond: "allStepsClear", actions: [ assign({ - stateblock: (context, event) => 6 - }) - ] + stateblock: () => 6, + }), + ], }, AUTOPRESSED: { target: "success", - cond: "RaiseStepsClear" + cond: "RaiseStepsClear", }, RETRY: { - target: "PerfSetup" - } - } + target: "PerfSetup", + }, + }, }, failure: { on: { - RETRY: "PerfSetup" - } + RETRY: "PerfSetup", + }, }, success: { - type: "final" - } - } + type: "final", + }, + }, }, { guards: { - requireSideCheck: (context, event) => { - return !context.device.bootloader == true && context.device.info.product !== "Raise"; - }, - doNotRequireSideCheck: (context, event) => { - return !context.device.bootloader == true && context.device.info.product === "Raise"; - }, - bootloaderMode: (context, event) => { - return context.device.bootloader == true; - }, - allStepsClear: (context, event) => { - return context.sideLeftOk == true && context.sideRightOK == true && context.backup !== undefined; - }, - RaiseStepsClear: (context, event) => { - return context.device.info.product === "Raise" && context.backup !== undefined; - } - } - } + requireSideCheck: context => !context.device.bootloader === true && context.device.info.product !== "Raise", + doNotRequireSideCheck: context => !context.device.bootloader === true && context.device.info.product === "Raise", + bootloaderMode: context => context.device.bootloader === true, + allStepsClear: context => context.sideLeftOk === true && context.sideRightOK === true && context.backup !== undefined, + RaiseStepsClear: context => context.device.info.product === "Raise" && context.backup !== undefined, + }, + }, ); export default DeviceChecks; diff --git a/src/renderer/controller/FlashingSM/FWSelection.js b/src/renderer/controller/FlashingSM/FWSelection.js index 9a49d4fae..ac104d727 100644 --- a/src/renderer/controller/FlashingSM/FWSelection.js +++ b/src/renderer/controller/FlashingSM/FWSelection.js @@ -8,7 +8,7 @@ const FocusAPIRead = async () => { let data = {}; try { let focus = new Focus(); - data.bootloader = focus.device.bootloader; + data.bootloader = focus.device ? focus.device.bootloader : false; data.info = focus.device.info; if (data.bootloader) return data; data.version = await focus.command("version"); diff --git a/src/renderer/controller/FlashingSM/FlashDevice.js b/src/renderer/controller/FlashingSM/FlashDevice.js index c06c1fccf..bbb7227df 100644 --- a/src/renderer/controller/FlashingSM/FlashDevice.js +++ b/src/renderer/controller/FlashingSM/FlashDevice.js @@ -1,17 +1,17 @@ import { createMachine, assign, raise } from "xstate"; -import { FlashRaise, FlashDefyWireless } from "../../../api/flash"; +import fs from "fs"; +import path from "path"; +import { ipcRenderer } from "electron"; import sideFlaser from "../../../api/flash/defyFlasher/sideFlasher"; import Focus from "../../../api/focus"; import Hardware from "../../../api/hardware"; -import path from "path"; -import fs from "fs"; -const { ipcRenderer } = require("electron"); +import { FlashRaise, FlashDefyWireless } from "../../../api/flash"; -let flashRaise = undefined, - flashDefyWireless = undefined, - flashSides = undefined, - bootloader = undefined, - comPath = undefined; +let flashRaise; +let flashDefyWireless; +let flashSides; +let bootloader; +let comPath; /** * Waits for N miliseconds, uses promises resolution to achieve this effect. @@ -20,10 +20,56 @@ let flashRaise = undefined, */ const delay = ms => new Promise(res => setTimeout(res, ms)); -const restoreSettings = async (context, backup, stateUpdate) => { - stateUpdate("restore", 0); - let focus = new Focus(); - const errorMessage = "Firmware update failed, because the settings could not be restored"; +const stateUpdate = (stage, percentage, context, callback) => { + console.log(stage, percentage); + let { globalProgress } = context; + let { leftProgress } = context; + let { rightProgress } = context; + let { resetProgress } = context; + let { neuronProgress } = context; + let { restoreProgress } = context; + switch (stage) { + case "right": + rightProgress = percentage; + break; + case "left": + leftProgress = percentage; + break; + case "reset": + resetProgress = percentage; + break; + case "neuron": + neuronProgress = percentage; + break; + case "restore": + restoreProgress = percentage; + break; + + default: + break; + } + if (context.device.info.product === "Raise") { + globalProgress = leftProgress * 0 + rightProgress * 0 + resetProgress * 0.33 + neuronProgress * 0.33 + restoreProgress * 0.33; + } else { + globalProgress = + leftProgress * 0.2 + rightProgress * 0.2 + resetProgress * 0.2 + neuronProgress * 0.2 + restoreProgress * 0.2; + } + callback({ + type: "INC", + data: { + globalProgress, + leftProgress, + rightProgress, + resetProgress, + neuronProgress, + restoreProgress, + }, + }); +}; + +const restoreSettings = async (context, backup, stateUpd) => { + stateUpd("restore", 0); + const focus = new Focus(); console.log(backup); if (backup === undefined || backup.length === 0) { await focus.open(comPath, context.originalDevice.device.info, null); @@ -31,7 +77,7 @@ const restoreSettings = async (context, backup, stateUpdate) => { } try { await focus.open(comPath, context.originalDevice.device.info, null); - for (let i = 0; i < backup.length; i++) { + for (let i = 0; i < backup.length; i += 1) { let val = backup[i].data; // Boolean values need to be sent as int if (typeof val === "boolean") { @@ -39,10 +85,10 @@ const restoreSettings = async (context, backup, stateUpdate) => { } console.log(`Going to send ${backup[i].command} to keyboard`); await focus.command(`${backup[i].command} ${val}`.trim()); - stateUpdate("restore", (i / backup.length) * 90); + stateUpd("restore", (i / backup.length) * 90); } await focus.command("led.mode 0"); - stateUpdate("restore", 100); + stateUpd("restore", 100); return true; } catch (e) { return false; @@ -52,19 +98,19 @@ const restoreSettings = async (context, backup, stateUpdate) => { const reconnect = async (context, callback) => { let result = false; try { - const foundDevices = async (hardware, message, bootloader) => { - let focus = new Focus(); - let isFindDevice = false, - currentPort, - currentPath; + const foundDevices = async (hardware, message, isBootloader) => { + const focus = new Focus(); + let isFindDevice = false; + let currentPort; + let currentPath; await focus.find(...hardware).then(devices => { for (const device of devices) { if ( - bootloader - ? device.device.bootloader != undefined && - device.device.bootloader == bootloader && - context.originalDevice.device.info.keyboardType == device.device.info.keyboardType - : context.originalDevice.device.info.keyboardType == device.device.info.keyboardType + isBootloader + ? device.device.bootloader !== undefined && + device.device.bootloader === isBootloader && + context.originalDevice.device.info.keyboardType === device.device.info.keyboardType + : context.originalDevice.device.info.keyboardType === device.device.info.keyboardType ) { console.log(message); currentPort = { ...device }; @@ -84,14 +130,13 @@ const reconnect = async (context, callback) => { if (await findKeyboard()) { console.log("Ready to restore"); return true; - } else { - console.log(`Keyboard not detected, trying again for ${times} times`); - stateUpdate("reconnect", 10 + 100 * (1 / (5 - times)), context, callback); - await runnerFindKeyboard(findKeyboard, times - 1, errorMessage); } + console.log(`Keyboard not detected, trying again for ${times} times`); + stateUpdate("reconnect", 10 + 100 * (1 / (5 - times)), context, callback); + await runnerFindKeyboard(findKeyboard, times - 1, errorMessage); }; - const findKeyboard = async () => { - return new Promise(async resolve => { + const findKeyboard = async () => + new Promise(async resolve => { await delay(2500); if (await foundDevices(Hardware.serial, "Keyboard detected", false)) { resolve(true); @@ -99,7 +144,6 @@ const reconnect = async (context, callback) => { resolve(false); } }); - }; stateUpdate("reconnect", 10, context, callback); await runnerFindKeyboard(findKeyboard, 5); stateUpdate("reconnect", 100, context, callback); @@ -111,58 +155,11 @@ const reconnect = async (context, callback) => { return result; }; -const stateUpdate = (stage, percentage, context, callback) => { - console.log(stage, percentage); - let globalProgress = context.globalProgress, - leftProgress = context.leftProgress, - rightProgress = context.rightProgress, - resetProgress = context.resetProgress, - neuronProgress = context.neuronProgress, - restoreProgress = context.restoreProgress; - switch (stage) { - case "right": - rightProgress = percentage; - break; - case "left": - leftProgress = percentage; - break; - case "reset": - resetProgress = percentage; - break; - case "neuron": - neuronProgress = percentage; - break; - case "restore": - restoreProgress = percentage; - break; - - default: - break; - } - if (context.device.info.product == "Raise") { - globalProgress = leftProgress * 0 + rightProgress * 0 + resetProgress * 0.33 + neuronProgress * 0.33 + restoreProgress * 0.33; - } else { - globalProgress = - leftProgress * 0.2 + rightProgress * 0.2 + resetProgress * 0.2 + neuronProgress * 0.2 + restoreProgress * 0.2; - } - callback({ - type: "INC", - data: { - globalProgress: globalProgress, - leftProgress: leftProgress, - rightProgress: rightProgress, - resetProgress: resetProgress, - neuronProgress: neuronProgress, - restoreProgress: restoreProgress - } - }); -}; - const flashSide = async (side, context, callback) => { let result = false; try { - let focus = new Focus(); - if (flashSides == undefined) { + const focus = new Focus(); + if (flashSides === undefined) { bootloader = context.device.bootloader; comPath = focus._port.port.openOptions.path; flashSides = new sideFlaser(comPath, context.firmwares.fwSides); @@ -171,12 +168,12 @@ const flashSide = async (side, context, callback) => { await focus.close(); console.log("done closing focus"); console.log("Going to flash side:", side); - let result = await flashSides.flashSide( + result = await flashSides.flashSide( side, (stage, percentage) => { stateUpdate(stage, percentage, context, callback); }, - context.device.info.keyboardType + context.device.info.keyboardType, ); if (result.error) throw new Error(result.error); stateUpdate(side, 100, context, callback); @@ -189,9 +186,9 @@ const flashSide = async (side, context, callback) => { }; const uploadDefyWired = async (context, callback) => { - let result = false; + const result = false; try { - let focus = new Focus(); + const focus = new Focus(); if (flashSides == undefined) { bootloader = context.device.bootloader; comPath = focus._port.port.openOptions.path; @@ -202,7 +199,7 @@ const uploadDefyWired = async (context, callback) => { stateUpdate("neuron", 30, context, callback); await ipcRenderer.invoke("list-drives", true).then(result => { stateUpdate("neuron", 60, context, callback); - let finalPath = path.join(result, "default.uf2"); + const finalPath = path.join(result, "default.uf2"); // console.log("RESULTS!!!", result, context.firmwares.fw, " to ", finalPath); fs.writeFileSync(finalPath, Buffer.from(new Uint8Array(context.firmwares.fw))); stateUpdate("neuron", 80, context, callback); @@ -221,11 +218,11 @@ const uploadDefyWired = async (context, callback) => { const resetDefy = async (context, callback) => { let result = false; try { - let focus = new Focus(); - if (flashDefyWireless == undefined) { + const focus = new Focus(); + if (flashDefyWireless === undefined) { console.log("when creating FDW", context.originalDevice.device); flashDefyWireless = new FlashDefyWireless(context.originalDevice.device); - if (flashSides == undefined) { + if (flashSides === undefined) { comPath = focus._port.port.openOptions.path; bootloader = context.device.bootloader; } @@ -234,7 +231,7 @@ const resetDefy = async (context, callback) => { try { console.log("reset indicators", focus, flashDefyWireless, context.originalDevice.device); if (focus._port == null || focus._port.closed) { - const info = context.originalDevice.device.info; + const { info } = context.originalDevice.device; await focus.close(); await focus.open(comPath, info, null); } @@ -260,7 +257,7 @@ const uploadDefyWireles = async (context, callback) => { let result = false; try { if (!context.device.bootloader) { - let focus = new Focus(); + const focus = new Focus(); await focus.close(); } // console.log(context.originalDevice.device, focus, focus._port, flashDefyWireless); @@ -271,7 +268,7 @@ const uploadDefyWireles = async (context, callback) => { flashDefyWireless, (stage, percentage) => { stateUpdate(stage, percentage, context, callback); - } + }, ); } catch (error) { console.warn("error when flashing Neuron"); @@ -302,7 +299,7 @@ const resetRaise = async (context, callback) => { let result = false; try { - let focus = new Focus(); + const focus = new Focus(); if (flashRaise == undefined) { flashRaise = new FlashRaise(context.originalDevice.device); comPath = focus._port.port.openOptions.path; @@ -312,7 +309,7 @@ const resetRaise = async (context, callback) => { try { console.log("reset indicators", focus, flashRaise, context.originalDevice.device); if (focus._port.closed) { - const info = context.originalDevice.device.info; + const { info } = context.originalDevice.device; await focus.close(); await focus.open(comPath, info, null); } @@ -338,7 +335,7 @@ const uploadRaise = async (context, callback) => { let result = false; try { if (!context.device.bootloader) { - let focus = new Focus(); + const focus = new Focus(); await focus.close(); } console.log(context.originalDevice.device, focus, focus._port, flashRaise); @@ -370,19 +367,6 @@ const restoreRaise = async (context, callback) => { return result; }; -const sendLEDMode = async () => { - let result = false; - try { - let focus = new Focus(); - await focus.command("led.mode 0"); - } catch (error) { - console.warn("error when restoring Neuron"); - console.error(error); - throw new Error(error); - } - return result; -}; - const FlashDevice = createMachine( { /** @xstate-layout N4IgpgJg5mDOIC5QDEA2BDAFrAlgOygAUAnAewGM5YA6Ad3RwBcBRWcgYmYGUBhQgJW5dmAEQDaABgC6iUAAdSuRjlJ5ZIAB6IATAA4ArNQkB2bQE4zxgIzbz+gCxWANCACeiAGz7t1KxI8AzB4S+pYeZtoeAL5RLmhYuAQkFFTUAGYYsJj8OFCYjFw4EGDsXACqPDxCkjJIIApKKmp1Wgh6hibmljZ2ji7ubdoB1NrGuh66Elb6umb60-YxcRjY+ERklLA0GehZOXkFRSXM-PwA8vw16g1MTeqt7UamFta2c31uiPa6PgG6s5FdAF7KZvEsQPFVkkNqkdlkADJgNKHYqlCpVLhcK51G7KVT3TzmaihKxWMz+AzGay6fo6CT2ajGen2YKkrx+YzgyGJdYpLbpTKYRHIwqok7nS7Sa6KW74lqEszEsyk8kTfRUqw0z4IIJWaheazeMwg-QBKzRWIQlY85KbbaCgByYAArmQ8GjKtUpTiZXjmqBWhFhlYAgEJCEzcZvKTaQgyRJqCzNWb2nNSdouda1rbYY6XW7OKcLtj5L67vKEEHfKHw6arFHtDHtdp7AmIqbjKqJKHO-pMwlszD+cQ4IxSCP4ehXGBiLAPRisd7S405QHEDZzfrjN8ycaIkz7LHtCFiQEqQYph5zzZ+1DeXbqCPYGOJ1OZ3PxcWl-Uy6vNOuJCBEZ6y8cIAkbMxgVjXQ9RBZUvDCb59AkMxbxtIdtgYVBXRKQQABV+AATRLH8V39f82gMJ4uleXpnG1H4Ex+M9jSCfwLUtPBSGKeA6m5Qc+V45dZXI1oAFoPFjCS0IEh96CYVhyGlMiCQQextFjdVjGrPw5g8IZZgCPtLX46FBIFXZMEIdBGEwLgwFQMByBfZSRNU+wWSMIZ7G8cDjxBDxJO1YJg2PJlOjJTVUJMrMzIfOFslyfJRTAVy-VUmxDAcetAPDVsPG+Q9mxPcZjxDMwPBsQJzRkuLc0s4UUVSn0VIrFkEzGbt7DMAx7GBbtY01bS9CpSDlX+CCAlq+96qyJ1XT-XFyzXBBjAKkZw0q8DvCGGZBpgxlAOBKMbAkbQHGM5YBzq-kZzIYg0uWii-HVRl1PUsYgR6-RY1DXR9Uq+kurDFkLSuu8c2HUdxzASdp1nR6-1aF7tO3FtRn+AJvv2nxsvCDUrG6qZpshzCcGwkdEdE9cqK8f4r2CD61WgxtqDNExgX0U1AhMEmMOoWBnXIO0qYyoy9T0d7zumYxgSKgZ-MZGC9CGaYwyMxYYiiIA */ @@ -401,7 +385,7 @@ const FlashDevice = createMachine( retriesLeft: 0, retriesNeuron: 0, retriesDefyWired: 0, - firwmares: [] + firwmares: [], }, states: { waitEsc: { @@ -411,15 +395,15 @@ const FlashDevice = createMachine( console.log("Wait for esc!"); }, assign({ stateblock: (context, event) => 1 }), - "addEscListener" + "addEscListener", ], on: { // Go to flashPathSelector automatically when no esc key can be pressed "": [{ target: "flashPathSelector", cond: "doNotWaitForESC" }], // Esc key listener will send this event - ESCPRESSED: "flashPathSelector" + ESCPRESSED: "flashPathSelector", }, - exit: ["removeEscListener"] + exit: ["removeEscListener"], }, flashPathSelector: { id: "flashPathSelector", @@ -429,17 +413,17 @@ const FlashDevice = createMachine( console.log("context of device", context.device); }, assign({ - stateblock: (context, event) => 1 + stateblock: (context, event) => 1, }), "toggleFlashing", - raise("flashingPath") + raise("flashingPath"), ], on: [ { event: "*", target: "flashDefyWired", cond: "doNotFlashSidesW" }, { event: "*", target: "resetDefyWireless", cond: "doNotFlashSidesWi" }, { event: "*", target: "resetRaiseNeuron", cond: "flashRaise" }, - { event: "*", target: "flashRightSide", cond: "flashSides" } - ] + { event: "*", target: "flashRightSide", cond: "flashSides" }, + ], }, flashRightSide: { id: "flashRightSide", @@ -447,40 +431,36 @@ const FlashDevice = createMachine( (context, event) => { console.log(`Flashing Right Side! for ${context.retriesRight} times`); }, - assign((context, event) => { - return { - retriesRight: context.retriesRight + 1, - stateblock: 2 - }; - }) + assign((context, event) => ({ + retriesRight: context.retriesRight + 1, + stateblock: 2, + })), ], invoke: { id: "flashRightSide", src: (context, event) => (callback, onReceive) => flashSide("right", context, callback), onDone: { target: "flashLeftSide", - actions: [assign({ rightResult: (context, event) => event.data })] + actions: [assign({ rightResult: (context, event) => event.data })], }, onError: { target: "failure", - actions: assign({ error: (context, event) => event }) - } + actions: assign({ error: (context, event) => event }), + }, }, on: { INC: { - actions: assign((context, event) => { - return { - ...context, - globalProgress: event.data.globalProgress, - leftProgress: event.data.leftProgress, - rightProgress: event.data.rightProgress, - resetProgress: event.data.resetProgress, - neuronProgress: event.data.neuronProgress, - restoreProgress: event.data.restoreProgress - }; - }) - } - } + actions: assign((context, event) => ({ + ...context, + globalProgress: event.data.globalProgress, + leftProgress: event.data.leftProgress, + rightProgress: event.data.rightProgress, + resetProgress: event.data.resetProgress, + neuronProgress: event.data.neuronProgress, + restoreProgress: event.data.restoreProgress, + })), + }, + }, }, flashLeftSide: { id: "flashLeftSide", @@ -488,12 +468,10 @@ const FlashDevice = createMachine( (context, event) => { console.log(`Flashing Left Side! for ${context.retriesLeft} times`); }, - assign((context, event) => { - return { - retriesLeft: context.retriesLeft + 1, - stateblock: 3 - }; - }) + assign((context, event) => ({ + retriesLeft: context.retriesLeft + 1, + stateblock: 3, + })), ], invoke: { id: "flashLeftSide", @@ -501,37 +479,33 @@ const FlashDevice = createMachine( onDone: { actions: [ assign({ leftResult: (context, event) => event.data }), - assign((context, event) => { - return { - DefyVariant: context.device.info.product + "" + context.device.info.keyboardType - }; - }), - raise("internal") - ] + assign((context, event) => ({ + DefyVariant: `${context.device.info.product}${context.device.info.keyboardType}`, + })), + raise("internal"), + ], }, onError: { target: "failure", - actions: assign({ error: (context, event) => event }) - } + actions: assign({ error: (context, event) => event }), + }, }, on: [ { event: "INC", - actions: assign((context, event) => { - return { - ...context, - globalProgress: event.data.globalProgress, - leftProgress: event.data.leftProgress, - rightProgress: event.data.rightProgress, - resetProgress: event.data.resetProgress, - neuronProgress: event.data.neuronProgress, - restoreProgress: event.data.restoreProgress - }; - }) + actions: assign((context, event) => ({ + ...context, + globalProgress: event.data.globalProgress, + leftProgress: event.data.leftProgress, + rightProgress: event.data.rightProgress, + resetProgress: event.data.resetProgress, + neuronProgress: event.data.neuronProgress, + restoreProgress: event.data.restoreProgress, + })), }, { event: "*", target: "flashDefyWired", cond: "isDefywired" }, - { event: "*", target: "resetDefyWireless", cond: "isDefywireless" } - ] + { event: "*", target: "resetDefyWireless", cond: "isDefywireless" }, + ], }, flashDefyWired: { id: "flashDefyWired", @@ -539,40 +513,36 @@ const FlashDevice = createMachine( (context, event) => { console.log(`Flashing Neuron! for ${context.retriesDefyWired} times`); }, - assign((context, event) => { - return { - retriesDefyWired: context.retriesDefyNeuron + 1, - stateblock: 5 - }; - }) + assign((context, event) => ({ + retriesDefyWired: context.retriesDefyNeuron + 1, + stateblock: 5, + })), ], invoke: { id: "flashRP2040", src: (context, event) => (callback, onReceive) => uploadDefyWired(context, callback), onDone: { target: "reconnectDefy", - actions: [assign({ rightResult: (context, event) => event.data })] + actions: [assign({ rightResult: (context, event) => event.data })], }, onError: { target: "failure", - actions: assign({ error: (context, event) => event }) - } + actions: assign({ error: (context, event) => event }), + }, }, on: { INC: { - actions: assign((context, event) => { - return { - ...context, - globalProgress: event.data.globalProgress, - leftProgress: event.data.leftProgress, - rightProgress: event.data.rightProgress, - resetProgress: event.data.resetProgress, - neuronProgress: event.data.neuronProgress, - restoreProgress: event.data.restoreProgress - }; - }) - } - } + actions: assign((context, event) => ({ + ...context, + globalProgress: event.data.globalProgress, + leftProgress: event.data.leftProgress, + rightProgress: event.data.rightProgress, + resetProgress: event.data.resetProgress, + neuronProgress: event.data.neuronProgress, + restoreProgress: event.data.restoreProgress, + })), + }, + }, }, resetDefyWireless: { id: "resetDefyWireless", @@ -580,35 +550,33 @@ const FlashDevice = createMachine( (context, event) => { console.log(`Resetting Neuron!`); }, - assign({ stateblock: (context, event) => 4 }) + assign({ stateblock: (context, event) => 4 }), ], invoke: { id: "resetDefyWireless", src: (context, event) => (callback, onReceive) => resetDefy(context, callback), onDone: { target: "flashDefyWireless", - actions: [assign({ resetResult: (context, event) => event.data })] + actions: [assign({ resetResult: (context, event) => event.data })], }, onError: { target: "failure", - actions: assign({ error: (context, event) => event }) - } + actions: assign({ error: (context, event) => event }), + }, }, on: { INC: { - actions: assign((context, event) => { - return { - ...context, - globalProgress: event.data.globalProgress, - leftProgress: event.data.leftProgress, - rightProgress: event.data.rightProgress, - resetProgress: event.data.resetProgress, - neuronProgress: event.data.neuronProgress, - restoreProgress: event.data.restoreProgress - }; - }) - } - } + actions: assign((context, event) => ({ + ...context, + globalProgress: event.data.globalProgress, + leftProgress: event.data.leftProgress, + rightProgress: event.data.rightProgress, + resetProgress: event.data.resetProgress, + neuronProgress: event.data.neuronProgress, + restoreProgress: event.data.restoreProgress, + })), + }, + }, }, flashDefyWireless: { id: "flashDefyWireless", @@ -617,35 +585,33 @@ const FlashDevice = createMachine( console.log(`Flashing Neuron! for ${context.retriesNeuron} times`); }, assign({ stateblock: (context, event) => 5 }), - assign({ retriesNeuron: (context, event) => context.retriesNeuron + 1 }) + assign({ retriesNeuron: (context, event) => context.retriesNeuron + 1 }), ], invoke: { id: "uploadDefyWireless", src: (context, event) => (callback, onReceive) => uploadDefyWireles(context, callback), onDone: { target: "reconnectDefy", - actions: [assign({ flashResult: (context, event) => event.data })] + actions: [assign({ flashResult: (context, event) => event.data })], }, onError: { target: "failure", - actions: assign({ error: (context, event) => event }) - } + actions: assign({ error: (context, event) => event }), + }, }, on: { INC: { - actions: assign((context, event) => { - return { - ...context, - globalProgress: event.data.globalProgress, - leftProgress: event.data.leftProgress, - rightProgress: event.data.rightProgress, - resetProgress: event.data.resetProgress, - neuronProgress: event.data.neuronProgress, - restoreProgress: event.data.restoreProgress - }; - }) - } - } + actions: assign((context, event) => ({ + ...context, + globalProgress: event.data.globalProgress, + leftProgress: event.data.leftProgress, + rightProgress: event.data.rightProgress, + resetProgress: event.data.resetProgress, + neuronProgress: event.data.neuronProgress, + restoreProgress: event.data.restoreProgress, + })), + }, + }, }, reconnectDefy: { id: "reconnectDefy", @@ -653,35 +619,33 @@ const FlashDevice = createMachine( (context, event) => { console.log(`Reconnecting to Neuron!`); }, - assign({ stateblock: (context, event) => 5 }) + assign({ stateblock: (context, event) => 5 }), ], invoke: { id: "reconnectDefy", src: (context, event) => (callback, onReceive) => reconnect(context, callback), onDone: { target: "restoreDefy", - actions: [assign({ flashResult: (context, event) => event.data })] + actions: [assign({ flashResult: (context, event) => event.data })], }, onError: { target: "failure", - actions: assign({ error: (context, event) => event }) - } + actions: assign({ error: (context, event) => event }), + }, }, on: { INC: { - actions: assign((context, event) => { - return { - ...context, - globalProgress: event.data.globalProgress, - leftProgress: event.data.leftProgress, - rightProgress: event.data.rightProgress, - resetProgress: event.data.resetProgress, - neuronProgress: event.data.neuronProgress, - restoreProgress: event.data.restoreProgress - }; - }) - } - } + actions: assign((context, event) => ({ + ...context, + globalProgress: event.data.globalProgress, + leftProgress: event.data.leftProgress, + rightProgress: event.data.rightProgress, + resetProgress: event.data.resetProgress, + neuronProgress: event.data.neuronProgress, + restoreProgress: event.data.restoreProgress, + })), + }, + }, }, restoreDefy: { id: "restoreDefy", @@ -689,35 +653,33 @@ const FlashDevice = createMachine( (context, event) => { console.log(`Restoring Neuron!`); }, - assign({ stateblock: (context, event) => 6 }) + assign({ stateblock: (context, event) => 6 }), ], invoke: { id: "restoreDefy", src: (context, event) => (callback, onReceive) => restoreDefies(context, callback), onDone: { target: "reportSucess", - actions: [assign({ restoreResult: (context, event) => event.data })] + actions: [assign({ restoreResult: (context, event) => event.data })], }, onError: { target: "failure", - actions: assign({ error: (context, event) => event }) - } + actions: assign({ error: (context, event) => event }), + }, }, on: { INC: { - actions: assign((context, event) => { - return { - ...context, - globalProgress: event.data.globalProgress, - leftProgress: event.data.leftProgress, - rightProgress: event.data.rightProgress, - resetProgress: event.data.resetProgress, - neuronProgress: event.data.neuronProgress, - restoreProgress: event.data.restoreProgress - }; - }) - } - } + actions: assign((context, event) => ({ + ...context, + globalProgress: event.data.globalProgress, + leftProgress: event.data.leftProgress, + rightProgress: event.data.rightProgress, + resetProgress: event.data.resetProgress, + neuronProgress: event.data.neuronProgress, + restoreProgress: event.data.restoreProgress, + })), + }, + }, }, resetRaiseNeuron: { id: "resetRaiseNeuron", @@ -725,35 +687,33 @@ const FlashDevice = createMachine( (context, event) => { console.log(`Resetting Neuron!`); }, - assign({ stateblock: (context, event) => 4 }) + assign({ stateblock: (context, event) => 4 }), ], invoke: { id: "resetRaise", src: (context, event) => (callback, onReceive) => resetRaise(context, callback), onDone: { target: "flashRaiseNeuron", - actions: [assign({ resetResult: (context, event) => event.data })] + actions: [assign({ resetResult: (context, event) => event.data })], }, onError: { target: "failure", - actions: assign({ error: (context, event) => event }) - } + actions: assign({ error: (context, event) => event }), + }, }, on: { INC: { - actions: assign((context, event) => { - return { - ...context, - globalProgress: event.data.globalProgress, - leftProgress: event.data.leftProgress, - rightProgress: event.data.rightProgress, - resetProgress: event.data.resetProgress, - neuronProgress: event.data.neuronProgress, - restoreProgress: event.data.restoreProgress - }; - }) - } - } + actions: assign((context, event) => ({ + ...context, + globalProgress: event.data.globalProgress, + leftProgress: event.data.leftProgress, + rightProgress: event.data.rightProgress, + resetProgress: event.data.resetProgress, + neuronProgress: event.data.neuronProgress, + restoreProgress: event.data.restoreProgress, + })), + }, + }, }, flashRaiseNeuron: { id: "flashRaiseNeuron", @@ -762,35 +722,33 @@ const FlashDevice = createMachine( console.log(`Flashing Neuron! for ${context.retriesNeuron} times`); }, assign({ stateblock: (context, event) => 5 }), - assign({ retriesNeuron: (context, event) => context.retriesNeuron + 1 }) + assign({ retriesNeuron: (context, event) => context.retriesNeuron + 1 }), ], invoke: { id: "uploadRaise", src: (context, event) => (callback, onReceive) => uploadRaise(context, callback), onDone: { target: "restoreRaiseNeuron", - actions: [assign({ flashResult: (context, event) => event.data })] + actions: [assign({ flashResult: (context, event) => event.data })], }, onError: { target: "failure", - actions: assign({ error: (context, event) => event }) - } + actions: assign({ error: (context, event) => event }), + }, }, on: { INC: { - actions: assign((context, event) => { - return { - ...context, - globalProgress: event.data.globalProgress, - leftProgress: event.data.leftProgress, - rightProgress: event.data.rightProgress, - resetProgress: event.data.resetProgress, - neuronProgress: event.data.neuronProgress, - restoreProgress: event.data.restoreProgress - }; - }) - } - } + actions: assign((context, event) => ({ + ...context, + globalProgress: event.data.globalProgress, + leftProgress: event.data.leftProgress, + rightProgress: event.data.rightProgress, + resetProgress: event.data.resetProgress, + neuronProgress: event.data.neuronProgress, + restoreProgress: event.data.restoreProgress, + })), + }, + }, }, restoreRaiseNeuron: { id: "restoreRaiseNeuron", @@ -798,35 +756,33 @@ const FlashDevice = createMachine( (context, event) => { console.log(`Restoring Neuron!`); }, - assign({ stateblock: (context, event) => 6 }) + assign({ stateblock: (context, event) => 6 }), ], invoke: { id: "restoreRaise", src: (context, event) => (callback, onReceive) => restoreRaise(context, callback), onDone: { target: "reportSucess", - actions: [assign({ flashResult: (context, event) => event.data })] + actions: [assign({ flashResult: (context, event) => event.data })], }, onError: { target: "failure", - actions: assign({ error: (context, event) => event }) - } + actions: assign({ error: (context, event) => event }), + }, }, on: { INC: { - actions: assign((context, event) => { - return { - ...context, - globalProgress: event.data.globalProgress, - leftProgress: event.data.leftProgress, - rightProgress: event.data.rightProgress, - resetProgress: event.data.resetProgress, - neuronProgress: event.data.neuronProgress, - restoreProgress: event.data.restoreProgress - }; - }) - } - } + actions: assign((context, event) => ({ + ...context, + globalProgress: event.data.globalProgress, + leftProgress: event.data.leftProgress, + rightProgress: event.data.rightProgress, + resetProgress: event.data.resetProgress, + neuronProgress: event.data.neuronProgress, + restoreProgress: event.data.restoreProgress, + })), + }, + }, }, reportSucess: { id: "reportSucess", @@ -835,12 +791,12 @@ const FlashDevice = createMachine( console.log("Reporting Sucess"); }, assign({ - stateblock: (context, event) => 7 - }) + stateblock: (context, event) => 7, + }), ], after: { - 3000: { target: "success", actions: [() => sendLEDMode(), "finishFlashing"] } - } + 3000: { target: "success", actions: ["finishFlashing"] }, + }, }, failure: { entry: [ @@ -848,52 +804,36 @@ const FlashDevice = createMachine( console.log("Failure state"); }, assign({ - stateblock: (context, event) => 8 - }) + stateblock: (context, event) => 8, + }), ], on: { RETRY: "#FlahsingProcess", - CANCEL: { target: "success", actions: ["finishFlashing"] } - } + CANCEL: { target: "success", actions: ["finishFlashing"] }, + }, }, success: { - type: "final" - } - } + type: "final", + }, + }, }, { guards: { - flashSides: (context, event) => { - return context.device.bootloader !== true && context.device.info.product !== "Raise"; - }, - flashRaise: (context, event) => { - return context.device.info.product === "Raise"; - }, - doNotFlashSidesW: (context, event) => { - return ( - context.device.bootloader === true && - context.device.info.product !== "Raise" && - context.device.info.keyboardType === "wired" - ); - }, - doNotFlashSidesWi: (context, event) => { - return ( - context.device.bootloader === true && - context.device.info.product !== "Raise" && - context.device.info.keyboardType === "wireless" - ); - }, - doNotWaitForESC: (context, event) => { - return context.device.bootloader == true || context.sideLeftBL == true; - }, - isDefywired: (context, event) => { - return context.DefyVariant === "Defywired"; - }, - isDefywireless: (context, event) => { - return context.DefyVariant === "Defywireless"; - } - } - } + flashSides: (context, event) => context.device.bootloader !== true && context.device.info.product !== "Raise", + flashRaise: (context, event) => context.device.info.product === "Raise", + doNotFlashSidesW: (context, event) => + context.device.bootloader === true && + context.device.info.product !== "Raise" && + context.device.info.keyboardType === "wired", + doNotFlashSidesWi: (context, event) => + context.device.bootloader === true && + context.device.info.product !== "Raise" && + context.device.info.keyboardType === "wireless", + doNotWaitForESC: (context, event) => context.device.bootloader === true || context.sideLeftBL === true, + isDefywired: (context, event) => context.DefyVariant === "Defywired", + isDefywireless: (context, event) => context.DefyVariant === "Defywireless", + }, + }, ); export default FlashDevice; diff --git a/src/renderer/controller/FlashingSM/MainProcess.js b/src/renderer/controller/FlashingSM/MainProcess.js index 036fb262c..27e9c2cb0 100644 --- a/src/renderer/controller/FlashingSM/MainProcess.js +++ b/src/renderer/controller/FlashingSM/MainProcess.js @@ -1,96 +1,91 @@ -import context from "react-bootstrap/esm/AccordionContext"; -import { createMachine, assign, raise } from "xstate"; +import { createMachine, assign } from "xstate"; const MainProcessSM = createMachine({ predictableActionArguments: true, id: "FlahsingProcessLogic", initial: "FWSelectionCard", context: { - Block: 0 + Block: 0, }, states: { FWSelectionCard: { id: "FWSelectionCard", entry: [ - (context, event) => { + () => { // This will error at .flag console.log("First Block"); }, - assign({ Block: (context, event) => 1 }) + assign({ Block: () => 1 }), ], on: { NEXT: { target: "DeviceChecksCard", - actions: assign((context, event) => { - return { - firmwareList: event.data.firmwareList, - firmwares: event.data.firmwares, - device: event.data.device, - isUpdated: event.data.isUpdated, - isBeta: event.data.isBeta - }; - }) + actions: assign((context, event) => ({ + firmwareList: event.data.firmwareList, + firmwares: event.data.firmwares, + device: event.data.device, + isUpdated: event.data.isUpdated, + isBeta: event.data.isBeta, + })), }, RETRY: { target: "FWSelectionCard", actions: assign({ Block: (context, event) => (context.Block = 0) }) }, - ERROR: { target: "error", actions: [assign({ errorCause: (context, event) => event.data })] } - } + ERROR: { target: "error", actions: [assign({ errorCause: (context, event) => event.data })] }, + }, }, DeviceChecksCard: { id: "DeviceChecksCard", entry: [ - (context, event) => { + () => { // This will error at .flag console.log("Second Block"); }, - assign({ Block: (context, event) => 2 }) + assign({ Block: () => 2 }), ], on: { NEXT: { target: "FlashingProcedureCard", - actions: assign((context, event) => { - return { - backup: event.data.backup, - sideLeftOk: event.data.sideLeftOk, - sideLeftBL: event.data.sideLeftBL, - sideRightOK: event.data.sideRightOK, - sideRightBL: event.data.sideRightBL, - RaiseBrightness: event.data.RaiseBrightness - }; - }) + actions: assign((context, event) => ({ + backup: event.data.backup, + sideLeftOk: event.data.sideLeftOk, + sideLeftBL: event.data.sideLeftBL, + sideRightOK: event.data.sideRightOK, + sideRightBL: event.data.sideRightBL, + RaiseBrightness: event.data.RaiseBrightness, + })), }, RETRY: ["FWSelectionCard", assign({ Block: (context, event) => (context.Block = 0) })], - ERROR: { target: "error", actions: [assign({ errorCause: (context, event) => event.data })] } - } + ERROR: { target: "error", actions: [assign({ errorCause: (context, event) => event.data })] }, + }, }, FlashingProcedureCard: { id: "FlashingProcedureCard", entry: [ - (context, event) => { + () => { // This will error at .flag console.log("Third Block"); }, - assign({ Block: (context, event) => 3 }) + assign({ Block: () => 3 }), ], on: { NEXT: ["success"], RETRY: ["FWSelectionCard", assign({ Block: (context, event) => (context.Block = 0) })], - ERROR: { target: "error", actions: [assign({ errorCause: (context, event) => event.data })] } - } + ERROR: { target: "error", actions: [assign({ errorCause: (context, event) => event.data })] }, + }, }, error: { id: "error", entry: [ - (context, event) => { + () => { console.log("Error Card entry"); }, - assign({ Block: (context, event) => -1 }) + assign({ Block: () => -1 }), ], on: { - RETRY: ["FWSelectionCard", assign({ Block: (context, event) => (context.Block = 0) })] - } + RETRY: ["FWSelectionCard", assign({ Block: (context, event) => (context.Block = 0) })], + }, }, - success: { type: "final" } - } + success: { type: "final" }, + }, }); export default MainProcessSM; diff --git a/src/renderer/i18n.js b/src/renderer/i18n.js index 4160e4eeb..87b160419 100644 --- a/src/renderer/i18n.js +++ b/src/renderer/i18n.js @@ -18,14 +18,12 @@ import LocalizedStrings from "react-localization"; import English from "./i18n/en"; -import Hungarian from "./i18n/hu"; -let strings = { +const strings = { en: English, - hu: Hungarian }; -let i18n = new LocalizedStrings(strings); +const i18n = new LocalizedStrings(strings); i18n.refreshHardware = ({ device }) => { i18n.getAvailableLanguages().forEach(code => { strings[code].hardware = device.instructions ? device.instructions[code] : {}; @@ -36,4 +34,4 @@ i18n.refreshHardware = ({ device }) => { i18n.setLanguage(language); }; -export { i18n as default }; +export default i18n; diff --git a/src/renderer/i18n/en.js b/src/renderer/i18n/en.js index 699ed263d..7f76ec5e0 100644 --- a/src/renderer/i18n/en.js +++ b/src/renderer/i18n/en.js @@ -27,29 +27,29 @@ const English = { preferenceFailOnSave: "Whoops, Something Went Wrong!", preferenceFailOnSaveBody: "Please try again.", dismiss: "Dismiss", - troubleshooting: "Troubleshooting" + troubleshooting: "Troubleshooting", }, success: { preferencesSaved: "Your preferences have been saved.", - preferencesSavedBody: "" + preferencesSavedBody: "", }, components: { layer: "Layer {0}", save: { success: "Sent!", savePreferences: "Save preferences", - button: "Save<span> changes</span>" + button: "Save<span> changes</span>", }, pickerColorButton: "Change color", underglowColorButton: "Change color of all underglows", - keysColorButton: "Change color of all keys" + keysColorButton: "Change color of all keys", }, dialog: { ok: "Ok", cancel: "Cancel", allFiles: "All Files", loading: "Loading...", - applyChanges: "Apply changes" + applyChanges: "Apply changes", }, app: { device: "Keyboard", @@ -62,6 +62,7 @@ const English = { firmwareUpdate: "Firmware <br>Update", keyboardSettings: "Keyboard Settings", preferences: "Preferences", + wireless: "Wireless", selectAKeyboard: "Keyboard <br>Selection", selectAnotherKeyboard: "Select another keyboard", softwareUpdate: "Software update", @@ -73,18 +74,18 @@ const English = { miscSection: "Miscellaneous", upgradeAvailable: "An upgrade is available!", badgeNew: "New", - changeName: "Change name" + changeName: "Change name", }, deviceMenu: { Homepage: "Homepage", Forum: "Forum", - Chat: "Chat" + Chat: "Chat", }, cancelPending: { button: "Discard<span> changes</span>", title: "Cancel pending changes?", - content: "You have unsaved changes. If you proceed, they will be lost." - } + content: "You have unsaved changes. If you proceed, they will be lost.", + }, }, editor: { keyType: "Key type", @@ -104,7 +105,7 @@ const English = { layerLock: "Layer Lock", layerLockDescription: "Tap to permanently move to another layer.", exportToPdf: "Export layouts to pdf", - layerToCopy: "You will copy the layout of this layer" + layerToCopy: "You will copy the layout of this layer", }, color: { color: "Color", @@ -116,7 +117,7 @@ const English = { allKeys: "All Keys", underglow: "Underglow", selectColorFirst: "Select a color first", - selectColorFirstContent: "To use the color controls select a color to enable all buttons." + selectColorFirstContent: "To use the color controls select a color to enable all buttons.", }, groups: { Letters: "Letters", @@ -144,7 +145,7 @@ const English = { Steno: "Steno", SpaceCadet: "SpaceCadet", Blank: "Blank", - "Unknown keycodes": "Unknown keycodes" + "Unknown keycodes": "Unknown keycodes", }, macros: { actions: "Actions", @@ -198,10 +199,10 @@ const English = { successFlash: "Successfully sent the macros to the device", previewMacro: "Preview macro", deleteModal: { - title: "This macro is in use", - body: "The macro you want to delete is currently in use, select how to proceed, THIS MAKES PERMANENT CHANGES.", + title: "This macro is in use on your layout", + body: "Pick the action to replace it:", cancelButton: "Cancel", - applyButton: "Update Keyboard" + applyButton: "Update Keyboard", }, callout: "<p>Macros are sequences of events (such as keystrokes, mouse clicks, and delays) that can be played back to help with repetitive strings of texts or tasks. </p><p>They can also be used to replay sequences that are long or difficult to run.</p>", @@ -209,15 +210,15 @@ const English = { title: "Text", callout: "<p>Using text you can add an entire sequence of commands using only one key.</p>", placeholder: "Enter text", - buttonText: "Add to timeline" + buttonText: "Add to timeline", }, delayTabs: { title: "Delay", - description: "Add mouse clicks events in your key." + description: "Add mouse clicks events in your key.", }, macroTab: { callout: "<p>That's right! You can add macros inside macros! 🔥</p>", - label: "Select macro" + label: "Select macro", }, memoryUsage: { title: "Memory Usage", @@ -225,17 +226,17 @@ const English = { errordBody: "Please decrease the number of actions until the Memory Usage indicator is no longer red.", alertTitle: "You are almost out of memory", alertBody: - "Everything will still work perfectly but consider deleting macros you don't use to continue adding more actions to your macros." - } + "Everything will still work perfectly but consider deleting macros you don't use to continue adding more actions to your macros.", + }, }, standardView: { noKeyTransparent: "No Key/Transparent", - callOut: 'You can remove a functionality or inherit the functionality of the upper layer using "No key" or "Transparent"', + callOut: "You can remove a functionality or inherit the functionality from the previous layer", noKey: "No Key", noKeyDescription: "There's no function or character assigned to that key.", transparent: "Transparent", trans: "Trans.", - transparentDescription: "There's no function or character assigned to that key.", + transparentDescription: "The key triggers the function assigned to the same key from the previous layer.", keys: { keys: "Keys", standardViewTitle: "Select a key", @@ -247,7 +248,7 @@ const English = { descriptionModifiers: "Add any of these modifiers to selected key to create combinations such as Control, Alt or Shift.", addDualFunction: "Add a dual-function", dualFunctionDescription: - "Dual-function keys have two functionalities. 1. When tapped, they send a character. 2. When held, they send a modifier or a layer key." + "Dual-function keys have two functionalities. 1. When tapped, they send a character. 2. When held, they send a modifier or a layer key.", }, layers: { title: "Layers", @@ -257,20 +258,20 @@ const English = { "Move to another layer while holding the key, then release the key to go back to the previous layer.", layerLock: "Layer Lock", layerLockDescription: - "Tap to permanently move to another layer. To return to the previous layer set a layer lock key on the destination that targets it." + "Tap to permanently move to another layer. To return to the previous layer set a layer lock key on the destination that targets it.", }, macros: { title: "Macro", callOut: - "<p>Oh Yeah!! More superpowers! Here you can add macros to your keys! 🔥</p><p>Not so clear what is macros? Macros are sequences of events (such as keystrokes, mouse clicks, and delays) that can be played back to help with repetitive strings of texts or tasks.</p><p>They can also be used to replay sequences that are long or difficult to run.</p>" + "<p>Oh Yeah!! More superpowers! Here you can add macros to your keys! 🔥</p><p>Not so clear what is macros? Macros are sequences of events (such as keystrokes, mouse clicks, and delays) that can be played back to help with repetitive strings of texts or tasks.</p><p>They can also be used to replay sequences that are long or difficult to run.</p>", }, mediaAndLED: { title: "Media & LED", - callOut: "Put your hands up! Control the media and RGB lighting behaviour using keys shortcuts." + callOut: "Put your hands up! Control the media and RGB lighting behaviour using keys shortcuts.", }, mouse: { title: "Mouse", - callOut: "Add mouse events in your keys. You can assign any mouse events, such as clicks, moves and mouse wheel actions." + callOut: "Add mouse events in your keys. You can assign any mouse events, such as clicks, moves and mouse wheel actions.", }, oneShot: { title: "OneShot", @@ -288,14 +289,22 @@ const English = { rightControl: "Right Control", rightShift: "Right Shift", altGr: "Alt Gr.", - rightOS: "Right OS" + rightOS: "Right OS", }, superkeys: { title: "Superkeys", callOut: "<p>You are about to create crazy combinations to boost your workflow! 🔥</p><p>Superkeys allow up to 5 different functions in a single key. You activate each function with a tap, hold, tap and hold, double-tap or double-tap and hold.</p>", - label: "Select Superkey" - } + label: "Select Superkey", + }, + wireless: { + callOut: + "With battery and wireless features at your fingertips, you're in complete control of your device's performance and connectivity.", + batteryPowerStatus: "Battery power status", + batteryLevel: "Battery level", + batteryLevelDescription: "Check your power status in real time turning your device into a visual battery monitor.", + savingModeDescription: "Faster and convenient way to toggle Energy saving mode on and off.", + }, }, superkeys: { add: "Add new superkey", @@ -337,14 +346,14 @@ const English = { successFlash: "Successfully sent the superkeys to the device", createModal: { createNew: "Create new Superkey name", - inputLabel: "Superkey name" + inputLabel: "Superkey name", }, deleteModal: { title: "This superkey is in use", // prettier-ignore body:"The superkey you want to delete is currently in use, by pressing remove you will replace those superkeys with NO KEY on the keyboard layout. Select how to proceed.", cancelButton: "Cancel", - applyButton: "Remove" + applyButton: "Remove", }, actions: { tapLabel: "Tap", @@ -356,7 +365,7 @@ const English = { doubleTapLabel: "2Tap", doubleTap: "Tap twice fast and trigger another key.", doubleTapAndHoldLabel: "2Tap & hold", - doubleTapAndHold: "Tap twice fast and hold to see others keyboards crying." + doubleTapAndHold: "Tap twice fast and hold to see others keyboards crying.", }, callout: "<p>Wow! Superpowers, my friend!</p><p>Superkeys allow up to 5 different functions in a single key. You activate each function with a tap, hold, tap and hold, double-tap or double-tap and hold. This allows you to create crazy combinations to boost your workflow.</p>", @@ -364,7 +373,7 @@ const English = { "You can edit keys in two different ways. Advanced users may prefer Single View which is designed for quick key editing.", collapse: { title: "See what you are able to do", - content: "" + content: "", }, specialKeys: { noKey: "No Key", @@ -403,27 +412,27 @@ const English = { LEDTitle: "LED", LEDDescription: "Turn the RGB lighting On or Off and control the cycle through the lights effects.", othersTitle: "Others", - othersDescription: "Control your media, apps and brightness. Safe and sound!" - } + othersDescription: "Control your media, apps and brightness. Safe and sound!", + }, }, oldMacroModal: { title: "Update your macros", body: "The macros in your layout need to be updated to work on this Bazecor version.", body2: "Please note that the updated macro codes won't work until you flash the new firmware", cancelButton: "Cancel", - applyButton: "Update Macros" + applyButton: "Update Macros", }, oldNeuronModal: { title: "New Neuron detected", body: "A new Neuron was plugged in for the first time using this Bazecor installation", body2: "Do you want to clone the names of your existing neuron or use empty names", cancelButton: "Cancel", - applyButton: "Use existing names" + applyButton: "Use existing names", }, editMode: { title: "Edit mode", standardView: "Standard View", - singleView: "Single View" + singleView: "Single View", }, clearLayerQuestion: "Clear layer?", clearLayerPrompt: "This will reset the layer to its default state.", @@ -445,7 +454,7 @@ const English = { importSuccessAllLayers: "Imported all Layers successfully", exportSuccessCurrentLayer: "Ready to share!", exportSuccessCurrentLayerContent: "Your layer has been successfully exported.", - exportSuccessAllLayers: "Exported all Layers successfully" + exportSuccessAllLayers: "Exported all Layers successfully", }, preferences: { title: "Preferences", @@ -453,7 +462,7 @@ const English = { language: "Select language", interface: "Interface", tooltips: { - language: "" + language: "", }, advanced: "Advanced", verboseFocus: "Verbose logging", @@ -463,8 +472,55 @@ const English = { label: "Appearance", light: "Light", dark: "Dark", - system: "System" - } + system: "System", + }, + }, + wireless: { + title: "Wireless", + bluetooth: { + pairingMode: "Pairing mode", + pairingModeButton: "Bluetooth Pairing Mode", + pairingModeDescription: "Activate Pairing Mode for easy device connection.", + pair: "Pair", + }, + energyManagement: { + title: "Energy management", + advancedSettings: "Advanced settings", + advancedSettingsDesc: "Settings applied when the low-power mode is off", + savingMode: "Energy saving mode", + savingModeDesc: "Easy way to extend battery life", + savingModeInfo: "Consider that the battery has a safety policy that is activated when it reaches 10%.", + lowPowerMode: "Low-power mode", + settings: { + maximumLED: "Maximum LED intensity", + maximumLEDBackLight: "Maximum Per-key LED intensity while the device is NOT connected by cable", + maximumLEDUnderglow: "Maximum Underglow intensity while the device is NOT connected by cable", + idleLedsTime: "time to turn off LEDs when waiting while the device is NOT connected by cable", + highBatteryImpact: "High battery impact", + lowBatteryImpact: "Low battery impact", + highlightLayerChanging: "Highlight layer changing", + highlightLayerChangingDesc: + "Adjust underglow and backlight intensity as you switch layers. The maximum intensity smoothly fades to a lower level.", + RFSettingTitle: "RF energy saving settings", + manageRFSignal: "Manage the power of the radio signal", + reduceRFFrequency: "Reduce the frequency of data exchange in RF", + tooltipRF: `<div style="text-align: left"><strong>High</strong><p>Maximum coverage at the cost of higher energy consumption.</p><strong>Medium</strong><p>Reduced coverage and medium energy consumption</p><strong>Low</strong><p>Designed to conserves battery energy reducing at minimum levels the coverage.</p></div>`, + }, + }, + batteryPreferences: { + battery: "Battery", + batteryErrorReading: "Error reading battery level", + batteryDisconnected: "Battery physically disconnected!", + batteryFatalError: "Error!", + savingModeDescription: `<p><strong>Turn on automatically when the battery level reach 20%.</strong> This mode is designed to optimize and reduce the power consumption helping extend the time between charges.</p>`, + }, + RFPreferences: { + RFSettings: "RF Settings", + repairChannel: "Repair Channel", + reconnectSides: "Reconnect sides", + repairChannelDescription: + "Generate a new channel communication between the sides to reduce noise interference and enhance signal quality for uninterrupted and crystal-clear communication.", + }, }, keyboardSettings: { advanced: "Advanced", @@ -479,7 +535,7 @@ const English = { selectButtonText: "Change", restoreButtonText: "Restore backup", storeTime: "Backup storage period", - storeTimeTip: "Determines how long a backup is stored before being deleted" + storeTimeTip: "Determines how long a backup is stored before being deleted", }, neuronManager: { header: "Neuron Manager", @@ -491,19 +547,20 @@ const English = { descriptionTitle: "Selected neuron parameters", deleteNeuron: "Deleting the Neuron will erase the names of your layers, macros and superkeys from the local storage", changeLayerTitle: "Change Neuron name", - inputLabel: "Neuron name" + inputLabel: "Neuron name", }, keymap: { title: "General", noDefault: "No default", showHardcoded: "Show hardcoded layers", onlyCustom: "Use custom layers only", - defaultLayer: "Default layer" + defaultLayer: "Default layer", }, led: { title: "LED", - brightness: "LED brightness", + brightness: "LED backlight brightness", brightnesssub: " - From 0 to 254", + brightnessUG: "LED underglow brightness", idleDisabled: "Disabled", idleTimeLimit: "Time before LEDs turn off", idle: { @@ -516,8 +573,8 @@ const English = { fifteenMinutes: "15 minutes", twentyMinutes: "20 minutes", thirtyMinutes: "30 minutes", - oneHour: "1 hour" - } + oneHour: "1 hour", + }, }, qukeys: { title: "DUAL FUNCTION KEY PARAMETERS", @@ -535,7 +592,7 @@ const English = { holdTimeoutTip1: "This setting determines the amount of time it takes for the “hold” function to activate.", holdTimeoutTip2: "With a high value, it’ll take more time to activate the hold function.", holdTimeoutTip3: "With a low value, you might trigger the hold function if you linger on the key too much while typing.", - holdTimeoutTip4: "If the slider is at 'High', it'll take a bit more time for the hold function to activate." + holdTimeoutTip4: "If the slider is at 'High', it'll take a bit more time for the hold function to activate.", }, superkeys: { title: "Typing", @@ -558,7 +615,7 @@ const English = { holdstartsub: " - time from 0 to 65,534 milliseconds", overlap: "Adjust percentage that changes the way the hold function will trigger depending on the typing speed of the previous normal key", - overlapsub: " - Percentage from 0 to 100" + overlapsub: " - Percentage from 0 to 100", }, mouse: { title: "Mouse keys", @@ -578,7 +635,7 @@ const English = { wheelSpeed: "Wheel speed", wheelSpeedsub: " - From 0 to 254 pixels", wheelDelay: "Wheel delay between steps (the higher the number, the slower the mouse movement)", - wheelDelaysub: " - From 0 to 65,534 milliseconds" + wheelDelaysub: " - From 0 to 65,534 milliseconds", }, advancedOps: "Advanced keyboard settings & operations", resetEEPROM: { @@ -586,8 +643,8 @@ const English = { button: "Restore", dialogTitle: "Reset EEPROM to factory defaults?", dialogContents: `This will reset the EEPROM to factory defaults. - You will lose all customizations made.` - } + You will lose all customizations made.`, + }, }, keyboardSelect: { title: "Keyboard Selection", @@ -615,14 +672,17 @@ const English = { buttonLabel: "Select", buttonLabelSave: "Save", errorLoadingFile: "The file is not a valid virtual keyboard nor Backup", - backupTransform: "The selected file is a Backup, do you want to transform it into a virtual keyboard" - } + backupTransform: "The selected file is a Backup, do you want to transform it into a virtual keyboard", + }, }, firmwareUpdate: { texts: { advUsers: "Advanced", cstomFW: "Custom Firmware", backwds: "Back", + bootloaderWarningMessage: `What this means? Nothing special, in the next step the process + will continue automatically and you don't need to press any key.`, + bootloaderWarningTitle: "Your left side is on Bootloader mode!", cancel: "Cancel", cancelButton: "Cancel update process", letsStart: "Let's start", @@ -651,10 +711,14 @@ const English = { errorDuringProcessTitle: "Firmware update error!", errorDuringProcessDescription: "Something went wrong! Please, retry the flashing procedure. 🫠", flashCardTitle1: "Press and hold the top left key to start the firmware update.", - flashCardTitle2: "Don't release the key until the process finishes.", + flashCardTitleDefy1: "Press the top left key to start the firmware update.", + flashCardTitle2: "Release the key when the software prompts", flashCardHelp: "Why do I need to press and hold a key when updating the device firmware?", + flashCardHelpDefy: "Why do I need to press a key when updating the device firmware?", flashCardHelpTooltip: "<div class='text-left'><h5>Why do I need to press and hold the key?</h5><p>When updating the firmware, we require the user to physically press and hold a key in order for the Firmware to be loaded. This is for security reasons.</p><p>The update process is designed so that it will never be triggered accidentally. <strong>This makes the keyboard secure against undesired firmware modifications.</strong></p></div>", + flashCardHelpTooltipDefy: + "<div class='text-left'><h5>Why do I need to press the key?</h5><p>When updating the firmware, we require the user to physically press a key in order for the Firmware to be loaded. This is for security reasons.</p><p>The update process is designed so that it will never be triggered accidentally. <strong>This makes the keyboard secure against undesired firmware modifications.</strong></p></div>", flashCardOverlay1: "*Why do I need to press and hold the key? ", flashCardOverlay2: "When updating the firmware, we require the user to physically press and hold a key", flashCardOverlay3: "in order for the Firmware to be loaded. This is for security reasons.", @@ -662,32 +726,52 @@ const English = { flashCardOverlay5: "This makes the keyboard secure against undesired firmware modifications.", noInternetConncetion: "We were unable to download the firmware you requested. Please, check your internet connection or try again later.", - progressCardStatus1: "1. Hold ESC Key", - progressCardStatus2: "2. Updating the Firmware", + progressCardStatus1: "1. Hold the Key", + progressCardStatus2: "2. Release the Key. Updating the Firmware", progressCardStatus3: "3. Restoring your Layers", progressCardStatus4: "4. Firmware update!", + progressCardStatusDefy1: "1. Flashing right side", + progressCardStatusDefy2: "2. Flashing left side", + progressCardStatusDefy3: "3. Resetting the Neuron", + progressCardStatusDefy4: "4. Flashing Neuron", + progressCardStatusDefy5: "5. Restoring your Layers!", + progressCardStatusDefy6: "6. Firmware update!", progressCardBar1: "Preparing the Keyboard", progressCardBar2: "Gently installing...", progressCardBar3: "Wrapping everything up!", - progressCardBar4: "Solid as a rock! 💪", + progressCardBarDefy1: "Updating right side of the keyboard", + progressCardBarDefy2: "Updating left side of the keyboard", + progressCardBarDefy3: "Preparing the bootloader!", + progressCardBarDefy4: "Making it better 🎂 ", + progressCardBarDefy5: "Giving your things back! 💪", + progressCardBarSuccess: "Solid as a rock! 💪", progressCardTitle1: "Press and hold the top left key to start the firmware update.", progressCardTitle2: "Don't release the key until the process finishes.", + progressCardTitleDefy2: "Once the process starts, you can release the key.", currentlyRunningCardTitle: "Your <span class='hidden-on-sm'>device's </span>firmware version", latestAvailableText: "Latest version <span class='hidden-on-sm'>available</span>", latestVersionInstalled: "You are using the latest version", firmwareUpdatedTitle: "Firmware update!", - firmwareUpdatedMessage: "Solid as a rock! 💪" + firmwareUpdatedMessage: "Solid as a rock! 💪", }, milestones: { backup: "Next", esc: "Press and mantain esc", flash: "Uploading ...", - restore: "Done, Restoring ..." + restore: "Done, Restoring ...", + tasksPassed: "tasks passed", + readyToStart: "You are ready to start", + analyzedTasks: "Analyzed tasks", + checkLeftSide: "Check Left side connectivity", + checkRightSide: "Check Right side connectivity", + checkLeftSideBL: "Check Left side Bootloader status", + checkRightSideBL: "Check Right side Bootloader status", + checkBackup: "Create a backup file", }, dialog: { selectFirmware: "Select a firmware", firmwareFiles: "Firmware files", - allFiles: "All files" + allFiles: "All files", }, flashing: { error: "Error flashing the firmware", @@ -695,7 +779,7 @@ const English = { success: "Firmware flashed successfully!", button: "Update now", buttonUpdated: "Reflash", - buttonSuccess: "Updated!" + buttonSuccess: "Updated!", }, backupSuccessful: "Backup created successfully!", defaultFirmware: "Bazecor {0} default", @@ -706,8 +790,8 @@ const English = { custom: "Load custom FW", rcustom: "Remove custom FW", raise: { - reset: `Firmware Update Process` - } + reset: `Firmware Update Process`, + }, }, mouse: { mouseClickTitle: "Click", @@ -720,7 +804,7 @@ const English = { movementTitle: "Movement", movementDescription: "Control move using keys.", wheelTitle: "Wheel", - wheelDescription: "Control the wheel using keys." + wheelDescription: "Control the wheel using keys.", }, welcome: { bootloaderTitle: "Your device is currently on Bootloader Mode", @@ -729,10 +813,11 @@ const English = { contents: `Bazecor recognizes your keyboard, but needs to update its firmware before you can continue.`, gotoUpdate: "Update Firmware", reconnect: "Reconnect", - reconnectDescription: `There's a possibility that we misdetected the capabilities of the keyboard, or that the keyboard was starting up while we connected. In this case, you can try clicking the "{0}" button to attempt a reconnect, and look for the necessary features again. Reconnecting is useful if you're sure there was a temporary failure upon previous attempts, and the problem has been resolved.` + reconnectDescription: `There's a possibility that we misdetected the capabilities of the keyboard, or that the keyboard was starting up while we connected. In this case, you can try clicking the "{0}" button to attempt a reconnect, and look for the necessary features again. Reconnecting is useful if you're sure there was a temporary failure upon previous attempts, and the problem has been resolved.`, }, general: { actions: "Actions", + actionRequired: "Action required", add: "Add", configure: "Configure", clone: "Clone", @@ -743,12 +828,15 @@ const English = { loadFile: "Load file", modifier: "Modifier", new: "New", + noActionRequired: "No action required", noname: "No name", + of: "of", + onOff: "On/Off", select: "Select", record: "Record", resume: "Resume", - retry: "Retry" - } + retry: "Retry", + }, }; -export { English as default }; +export default English; diff --git a/src/renderer/i18n/hu.js b/src/renderer/i18n/hu.js deleted file mode 100644 index ffd8f47e9..000000000 --- a/src/renderer/i18n/hu.js +++ /dev/null @@ -1,182 +0,0 @@ -// -*- mode: js-jsx -*- -/* Bazecor -- Kaleidoscope Command Center - * Copyright (C) 2019 Keyboardio, Inc. - * - * This program is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by the Free Software - * Foundation, version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -const Hungarian = { - language: "Magyar", - errors: { - deviceDisconnected: "Az billentyűzet lecsatlakozott" - //TODO translation required - // invalidLayerFile: "Not a valid Layer file", - // exportError: "Error at Exporting: " - }, - components: { - layer: "{0}. réteg", - save: { - success: "Elmentve!", - saveChanges: "Mentés" - } - }, - dialog: { - ok: "Ok", - cancel: "Mégsem" - }, - app: { - device: "Billentyűzet", - menu: { - welcome: "Üdvözlet", - editor: "Kiosztás & színtérkép szerkesztő", - firmwareUpdate: "Vezérlő frissítés", - keyboardSettings: "Billentyűzet beállítások", - preferences: "Beállítások", - selectAKeyboard: "Billentyűzet választás", - selectAnotherKeyboard: "Másik billentyűzet választás", - chat: "Csevegőszoba", - feedback: "Visszajelzés küldése", - exit: "Kilépés", - keyboardSection: "Billentyűzet", - bazecorSection: "Bazecor", - miscSection: "Egyéb", - upgradeAvailable: "Frissítés érhető el!" - }, - deviceMenu: { - Homepage: "Honlap", - Forum: "Fórum", - Chat: "Csevegőszoba" - }, - cancelPending: { - title: "Eldobja a függőben lévő változtatásokat?", - content: `Függőben lévő változásokat észleltünk. - Ha folytatja, ezek elvesznek.` - } - }, - editor: { - keyType: "Gomb tipus", - keyCode: "Gomb kód", - groups: { - Letters: "Betűk", - Digits: "Számok", - Punctuation: "Központozás", - Spacing: "Szóközök", - Modifiers: "Módosítók", - Navigation: "Navigáció", - "Fx keys": "Fx gombok", - Numpad: "Numerikus billentyűzet", - Miscellaneous: "Egyebek", - "Shift to layer": "Ideiglenese réteg váltás", - "Lock layer to": "Réteg váltás", - "LED Effect": "LED gombok", - Macros: "Makrók", - Media: "Média", - "Mouse movement": "Egér mozgatás", - "Mouse button": "Egér gombok", - "Mouse wheel": "Egér görgő", - "Mouse warp": "Egér ugrás", - "OneShot modifiers": "Egyszeri módosítók", - "OneShot layers": "Egyszeri réteg váltók", - TapDance: "TapDance", - Leader: "Vezérgomb", - Steno: "Steno", - SpaceCadet: "SpaceCadet", - Blank: "Üres gombok", - "Unknown keycodes": "Ismeretlen kódok" - }, - clearLayer: "Réteg ürítése...", - clearLayerQuestion: "Ürítsük a réteget?", - clearLayerPrompt: "Ez visszaállítja a réteget annak alapbeállításaira.", - copyFrom: "Réteg másolás máshonnan...", - pleaseSelectLayer: "Válasszon réteget...", - dualUse: "Nyomvatartáskor módosító, normál gomb egyébként", - dualUseLayer: "Nyomvatartáskor réteg váltó, normál gomb egyébként", - layoutMode: "Billentyűzetkiosztás szerkesztése", - colormapMode: "Színtérkép szerkesztése", - importExport: "Aktuális réteg importálása/exportálása", - importExportDescription: - "Az alábbi adatok szabadon szerkeszthetőek, vagy máshova másolhatóak, hogy később vissza lehessen illeszteni. Ezek az adatok a Bazecor belső adatszerkezetét tükrözik, óvatosan szerkessze.", - loadDefault: "Alapértelmezett kiosztás betöltése:", - copyToClipboard: "Másolás a vágólapra", - copySuccess: "Másolva!", - pasteFromClipboard: "Beillesztés a vágólapról", - pasteSuccess: "Beillesztve!" - }, - preferences: { - devtools: "Fejlesztői eszközök", - language: "Nyelv", - interface: "Felhasználói felület", - advanced: "Haladó beállítások", - darkMode: "Sötét mód", - verboseFocus: "Bőbeszédű naplózás" - }, - keyboardSettings: { - advanced: "Haladó beállítások", - keymap: { - title: "Kiosztás beállításai", - noDefault: "Nincs alapértelmezett réteg", - showHardcoded: "Beépített rétegek mutatása", - onlyCustom: "Kizárólag testreszabott rétegek használata", - defaultLayer: "Alapértelmezett réteg" - }, - advancedOps: "Haladó billentyűzet beállítások és műveletek", - resetEEPROM: { - button: "EEPROM visszaállítása gyári alapbeállításokra", - dialogTitle: "Visszaállítja az EEPROM-ot gyári alapbeállításokra?", - dialogContents: `Ez visszaállítja az EEPROM-ot gyári alapbeállításokra. -Minden testreszabott beállítás el fog veszni.` - } - }, - keyboardSelect: { - unknown: "Ismeretlen", - selectPrompt: "Kérem válasszon billentyűzetet:", - noDevices: "Nincs ismert billentyűzet csatlakoztatva!", - connect: "Kapcsolódás", - disconnect: "Lecsatlakozás", - scan: "Billentyűzet keresés", - installUdevRules: "Javítás", - permissionError: `A számítógépe nem engedi, hogy a BAZECOR beszéljen a billentyűzetével. (Nincs elegendő jogosultsága a {{path}} állományhoz.)`, - permissionErrorSuggestion: `A BAZECOR ezt ki tudja javítani, egy udev szabály állomány /etc/udev/rules.d/ alá másolásával.` - }, - firmwareUpdate: { - dialog: { - selectFirmware: "Válasszon vezérlőt", - firmwareFiles: "Vezérlő állományok", - allFiles: "Minden állomány" - }, - flashing: { - error: "Hiba a vezérlő frissítése közben", - troubleshooting: "Hibaelhárítás", - success: "Vezérlő sikeresen frissítve!", - button: "Frissítés", - buttonSuccess: "Frissítve!" - }, - defaultFirmware: "Bazecor {0} alapértelmezett", - defaultFirmwareDescription: "Minimális, extrák nélkül", - experimentalFirmware: "Bazecor {0} kísérleti", - experimentalFirmwareDescription: "Experimental, extra kiegészítőkkel", - selected: "Kiválasztott vezérlő", - custom: "Egyedi vezérlő", - description: `A billentyűzet vezérlő frissítésevel tanítjuk új trükkökre. A Bazecor olyan új vezérlőt fog telepíteni, mely tartalmazza az eszközöket melyek lehetővé teszik a kiosztás szerkesztését, és még más dolgokat is. Ha korábban már testreszabta a vezérlőt, akkor ez a művelet felül fogja azt írni. A Bazecor által telepíthető vezérlő forrása mindig megtalálható az alábbi címen:`, - postUpload: `Amint a frissítés befejeződött, a Bazecor vissza fogja vinni a billentyűzet választó képernyőre.` - }, - welcome: { - title: "Üdvözöljük!", - contents: `A Bazecor felismerte a billentyűzetét, de a folytatáshoz frissíteni kell a vezérlőjét.`, - gotoUpdate: "Vezérlő frissítés", - reconnect: "Újracsatlakozás", - reconnectDescription: `Elképzelhető, hogy hibásan ismertük fel a billentyűzet által kínált funkcionalitást, vagy az is, hogy a billentyűzet még nem állt teljesen rendelkezésre mikor csatlakozni próbáltunk. Ebben az esetben az "{0}" gombra kattintva újra megpróbálunk csatlakozni. Az újracsatlakozás akkor hasznos, ha biztosak vagyunk benne, hogy átmeneti hiba állt fenn, és azóta megoldódott.` - } -}; - -export { Hungarian as default }; diff --git a/src/renderer/index.html b/src/renderer/index.html new file mode 100644 index 000000000..0426ee838 --- /dev/null +++ b/src/renderer/index.html @@ -0,0 +1,11 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="UTF-8"> + <title>Bazecor + + + +
                                          + + \ No newline at end of file diff --git a/src/renderer/index.js b/src/renderer/index.tsx similarity index 85% rename from src/renderer/index.js rename to src/renderer/index.tsx index 14b7f94fb..a3c09cacc 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.tsx @@ -16,26 +16,25 @@ */ import React from "react"; -import ReactDOM from "react-dom"; import { MemoryRouter } from "react-router-dom"; -import Electron from "electron"; - +import { createRoot } from "react-dom/client"; +import { I18nextProvider } from "react-i18next"; import App from "./App"; import Error from "./Error"; import "bootstrap-css-only/css/bootstrap.min.css"; import "@appigram/react-rangeslider/lib/index.css"; import i18n from "./i18n"; -import { I18nextProvider } from "react-i18next"; +const container = document.getElementById("root"); +const root = createRoot(container); try { - ReactDOM.render( + root.render( , - document.getElementById("app") ); } catch (e) { - ReactDOM.render(, document.getElementById("app")); + root.render(); } diff --git a/src/renderer/modules/BackupFolderConfigurator/BackupFolderConfigurator.js b/src/renderer/modules/BackupFolderConfigurator/BackupFolderConfigurator.js index ef4353216..f0b164058 100644 --- a/src/renderer/modules/BackupFolderConfigurator/BackupFolderConfigurator.js +++ b/src/renderer/modules/BackupFolderConfigurator/BackupFolderConfigurator.js @@ -17,9 +17,9 @@ import React from "react"; import Styled from "styled-components"; +import Form from "react-bootstrap/Form"; import Title from "../../component/Title"; import { RegularButton } from "../../component/Button"; -import Form from "react-bootstrap/Form"; import i18n from "../../i18n"; const Style = Styled.div` @@ -57,22 +57,22 @@ h6 { } } `; -const BackupFolderConfigurator = ({ chooseBackupFolder, getBackup, backupFolder, connected }) => { +function BackupFolderConfigurator({ chooseBackupFolder, getBackup, backupFolder, connected }) { return ( ); -}; +} export default BackupFolderConfigurator; diff --git a/src/renderer/modules/Battery/AdvancedBatterySettings.tsx b/src/renderer/modules/Battery/AdvancedBatterySettings.tsx new file mode 100644 index 000000000..390e161b4 --- /dev/null +++ b/src/renderer/modules/Battery/AdvancedBatterySettings.tsx @@ -0,0 +1,69 @@ +import React, { useState } from "react"; +import Styled from "styled-components"; + +import Title from "@Renderer/component/Title"; +import { IconSettings } from "@Renderer/component/Icon"; +import { RegularButton } from "@Renderer/component/Button"; +import { AdvancedBatterySettingsModal } from "@Renderer/component/Modal"; +import i18n from "@Renderer/i18n"; +import { EnergyManagementProps } from "@Renderer/types/wireless"; + +const Styles = Styled.div` +.settingsWrapper { + display: flex; + align-items: center; + grid-gap: 1rem; + justify-content: space-between; + padding: 1rem 0; +} +.settingsContent { + h4 { + font-size: 0.915rem; + margin-bottom: 0.25rem; + color: ${({ theme }) => theme.styles.energyManagement.titleColor}; + } + p { + font-size: 0.815rem; + font-weight: 401; + margin: 0; + color: ${({ theme }) => theme.styles.energyManagement.descriptionColor}; + } +} +.settingsActions { + button.short { + width: 40px; + padding: 0; + aspect-ratio: 1; + display: flex; + align-items: center; + justify-content: center; + color: ${({ theme }) => theme.styles.energyManagement.shortButtonColor}; + } +} +`; + +function AdvancedBatterySettings(props: EnergyManagementProps) { + const { wireless, changeWireless } = props; + const [showModal, setShowModal] = useState(false); + return ( + +
                                          +
                                          + + <p>{i18n.wireless.energyManagement.advancedSettingsDesc}</p> + </div> + <div className="settingsActions"> + <RegularButton icoSVG={<IconSettings />} styles="short" onClick={() => setShowModal(true)} /> + </div> + </div> + <AdvancedBatterySettingsModal + showModal={showModal} + setShowModal={setShowModal} + wireless={wireless} + changeWireless={changeWireless} + /> + </Styles> + ); +} + +export default AdvancedBatterySettings; diff --git a/src/renderer/modules/Battery/BatteryStatus.tsx b/src/renderer/modules/Battery/BatteryStatus.tsx new file mode 100644 index 000000000..73c269844 --- /dev/null +++ b/src/renderer/modules/Battery/BatteryStatus.tsx @@ -0,0 +1,252 @@ +import React, { useEffect, useCallback, useRef, useState } from "react"; + +import Styled from "styled-components"; + +// Custom components +import Title from "@Renderer/component/Title"; +import { ButtonConfig } from "@Renderer/component/Button"; +import { BatteryStatusSide, SavingModeIndicator } from "@Renderer/component/Battery"; + +// Assets +import { IconBattery, IconRefresh } from "@Renderer/component/Icon"; + +import Focus from "../../../api/focus"; +import i18n from "../../i18n"; + +const Style = Styled.div` +.battery-indicator--wrapper { + padding-top: 8px; + position: relative; + z-index: 2; + &:before { + position: absolute; + top: 0; + height: 12px; + width: 100%; + background: transparent; + content: ""; + } +} +.battery-indicator--container { + display: flex; + grid-gap: 3px; + > div { + flex: 1; + } +} +.battery-defy--indicator { + display: flex; + grid-gap: 8px; + position: relative; +} +.dropdown-menu--battery { + opacity: 0; + visibility: hidden; + position: absolute; + bottom: 100%; + top: auto; + display: flex; + transition: 300ms ease all; + background-color: ${({ theme }) => theme.styles.batteryIndicator.panelBackgroundColor}; + padding: 8px 16px 24px 16px; + width: auto; + z-index: 1101; + h4 { + color: ${({ theme }) => theme.styles.batteryIndicator.titleColor}; + .hasIcon svg { + vertical-align: -0.25em; + } + } +} +.battery-indicator--wrapper:hover { + .dropdown-menu--battery { + bottom: 100%; + opacity: 1; + visibility: visible; + } +} +.batterySettingItem { + display: flex; + justify-content: space-between; + align-items: center; + margin-top: 0.5rem; + padding-top: 0.5rem; + .custom-switch { + padding-left: 0; + margin-right: 24px; + height: 32px; + margin-top: -8px; + } +} +.batterySettingLabel { + font-size: 0.75rem; + color: ${({ theme }) => theme.colors.gray200}; + margin: 0; +} +.button-config[data-animate='1'] svg{ + animation: rotateUpdateIcon 500ms 1; +} +@keyframes rotateUpdateIcon { + 0% { + transform: scale(1) rotate(0deg); + } + 50% { + transform: scale(0.8) rotate(180deg); + } + 100% { + transform: scale(1) rotate(360deg); + } +} +@media screen and (max-height: 870px) { + .battery-indicator--container { + > div { + flex: 0 0 50%; + } + } +} +`; +interface BatteryStatusProps { + disable: boolean; +} +const BatteryStatus = ({ disable }: BatteryStatusProps) => { + const [bLeft, setbLeft] = useState(100); + const [bRight, setbRight] = useState(100); + const [sLeft, setsLeft] = useState(0); + const [sRight, setsRight] = useState(0); + const [isSavingMode, setIsSavingMode] = useState(false); + const [animateIcon, setAnimateIcon] = useState(0); + const target = useRef(null); + + const intervalIdRef = useRef<NodeJS.Timeout | null>(null); + const intervalIdAnimateRef = useRef<NodeJS.Timeout | null>(null); + + const getBatteryStatus = useCallback(async () => { + const focus = new Focus(); + const left = await focus.command("wireless.battery.left.level"); + const right = await focus.command("wireless.battery.right.level"); + const leftStatus = await focus.command("wireless.battery.left.status"); + const rightStatus = await focus.command("wireless.battery.right.status"); + const savingMode = await focus.command("wireless.battery.savingMode"); + setbLeft(parseInt(left, 10)); + setbRight(parseInt(right, 10)); + setsLeft(leftStatus.includes("0x") ? 255 : parseInt(leftStatus, 10)); + setsRight(rightStatus.includes("0x") ? 255 : parseInt(rightStatus, 10)); + setIsSavingMode(parseInt(savingMode, 10) > 0); + + // console.log("L Status internal: ", sLeft); + // console.log("L Status focus: ", leftStatus); + // console.log("L Level internal: ", bLeft); + + // console.log("R Status: ", sRight); + // console.log("R Status focus: ", rightStatus); + }, []); + + // async function getBatteryStatus() { + // const focus = new Focus(); + // const left = await focus.command("wireless.battery.left.level"); + // const right = await focus.command("wireless.battery.right.level"); + // const leftStatus = await focus.command("wireless.battery.left.status"); + // const rightStatus = await focus.command("wireless.battery.right.status"); + // const savingMode = await focus.command("wireless.battery.savingMode"); + // setbLeft(parseInt(left, 10)); + // setbRight(parseInt(right, 10)); + // setsLeft(leftStatus.includes("0x") ? 255 : parseInt(leftStatus, 10)); + // setsRight(rightStatus.includes("0x") ? 255 : parseInt(rightStatus, 10)); + // setIsSavingMode(parseInt(savingMode, 10) > 0); + + // console.log("L Status internal: ", sLeft); + // console.log("L Status focus: ", leftStatus); + // console.log("L Level internal: ", bLeft); + + // console.log("R Status: ", sRight); + // console.log("R Status focus: ", rightStatus); + // } + + if (!disable) { + getBatteryStatus(); + } + + useEffect(() => { + if (!disable) { + intervalIdRef.current = setInterval(() => { + getBatteryStatus(); + }, 60 * 1000); + } + // Return a cleanup function to clear the interval + return () => { + if (intervalIdRef.current) { + clearInterval(intervalIdRef.current); + } + }; + }, [disable, getBatteryStatus]); + + useEffect(() => { + intervalIdAnimateRef.current = setInterval(() => { + setAnimateIcon(0); + }, 1100); + + return () => { + if (intervalIdAnimateRef.current) { + clearInterval(intervalIdAnimateRef.current); + } + }; + }, [animateIcon]); + + const forceRetrieveBattery = async () => { + // const { disable } = props; + if (disable) return; + const focus = new Focus(); + await focus.command("wireless.battery.forceRead"); + await getBatteryStatus(); + setAnimateIcon(1); + }; + + return ( + <Style> + <div className="battery-indicator--wrapper" ref={target}> + <div className="battery-indicator--container"> + <BatteryStatusSide side="left" batteryLevel={bLeft} isSavingMode={isSavingMode} batteryStatus={sLeft} size="sm" /> + <BatteryStatusSide side="right" batteryLevel={bRight} isSavingMode={isSavingMode} batteryStatus={sRight} size="sm" /> + </div> + <div className="dropdown-menu dropdown-menu--battery"> + <div className="dropdown-menu__inner"> + <Title text={i18n.wireless.batteryPreferences.battery} headingLevel={4} svgICO={<IconBattery />} /> + <div className="battery-defy--indicator"> + <BatteryStatusSide side="left" batteryLevel={bLeft} isSavingMode={isSavingMode} batteryStatus={sLeft} size="lg" /> + <BatteryStatusSide + side="right" + batteryLevel={bRight} + isSavingMode={isSavingMode} + batteryStatus={sRight} + size="lg" + /> + <SavingModeIndicator isSavingMode={isSavingMode} /> + </div> + <div className="batterySettingItem batteryUpdateStatus"> + <div className="batterySettingLabel">Force read Battery level</div> + <ButtonConfig + onClick={() => { + forceRetrieveBattery(); + }} + icoSVG={<IconRefresh />} + variation="button-settings" + dataAnimate={animateIcon} + selected={null} + size={null} + buttonText={null} + tooltip={null} + tooltipPlacement={null} + tooltipClassName={null} + icoPosition={null} + tooltipDelay={null} + disabled={null} + /> + </div> + </div> + </div> + </div> + </Style> + ); +}; + +export default BatteryStatus; diff --git a/src/renderer/modules/Battery/SavingMode.tsx b/src/renderer/modules/Battery/SavingMode.tsx new file mode 100644 index 000000000..46e9c6b4a --- /dev/null +++ b/src/renderer/modules/Battery/SavingMode.tsx @@ -0,0 +1,88 @@ +import React from "react"; +import Styled from "styled-components"; + +import Form from "react-bootstrap/Form"; + +// Internal components +import Title from "@Renderer/component/Title"; + +import { EnergyManagementProps } from "@Renderer/types/wireless"; +import i18n from "../../i18n"; + +const Styles = Styled.div` +h5 { + font-size: 0.75rem; + border-bottom: 1px solid ${({ theme }) => theme.styles.energyManagement.borderColor}; + color: ${({ theme }) => theme.styles.energyManagement.lowPowerModeTitleColor}; + padding-bottom: 0.5rem; + margin: 1.5rem 0 0 0; +} +.settingsWrapper { + display: flex; + align-items: center; + grid-gap: 1rem; + justify-content: space-between; + padding: 1rem 0; +} +.settingsContent { + h4 { + font-size: 0.915rem; + margin-bottom: 0.25rem; + color: ${({ theme }) => theme.styles.energyManagement.titleColor}; + } + p { + font-size: 0.815rem; + font-weight: 401; + margin: 0; + color: ${({ theme }) => theme.styles.energyManagement.descriptionColor}; + small { + font-family: inherit; + font-size: 0.75rem; + font-weight: 401; + opacity: 0.8; + } + } + p + p { + margin-top: 0.25rem; + } +} +.settingsActions { + .custom-switch { + width: 60px; + } +} +`; + +function SavingMode({ wireless, changeWireless }: EnergyManagementProps) { + const toggleSavingBatteryMode = () => { + const newWireless = { ...wireless }; + newWireless.battery.savingMode = !wireless.battery.savingMode; + changeWireless(newWireless); + }; + return ( + <Styles> + <Title text={i18n.wireless.energyManagement.lowPowerMode} headingLevel={5} /> + <div className="settingsWrapper"> + <div className="settingsContent"> + <Title text={i18n.wireless.energyManagement.savingMode} headingLevel={4} /> + <p>{i18n.wireless.energyManagement.savingModeDesc}</p> + <p> + <small>{i18n.wireless.energyManagement.savingModeInfo}</small> + </p> + </div> + <div className="settingsActions"> + <Form className="batterySettingItem batterySetSavingMode"> + <Form.Check + type="switch" + id="settingSavingMode" + checked={wireless.battery ? wireless.battery.savingMode : false} + onChange={toggleSavingBatteryMode} + /> + </Form> + </div> + </div> + </Styles> + ); +} + +export default SavingMode; diff --git a/src/renderer/modules/Battery/index.tsx b/src/renderer/modules/Battery/index.tsx new file mode 100644 index 000000000..172a5cb34 --- /dev/null +++ b/src/renderer/modules/Battery/index.tsx @@ -0,0 +1,5 @@ +import AdvancedBatterySettings from "./AdvancedBatterySettings"; +import BatteryStatus from "./BatteryStatus"; +import SavingMode from "./SavingMode"; + +export { AdvancedBatterySettings, BatteryStatus, SavingMode }; diff --git a/src/renderer/modules/ColorEditor/ColorEditor.js b/src/renderer/modules/ColorEditor/ColorEditor.js index f7e06c20e..a97c5aabf 100644 --- a/src/renderer/modules/ColorEditor/ColorEditor.js +++ b/src/renderer/modules/ColorEditor/ColorEditor.js @@ -18,7 +18,6 @@ import React, { Component, Fragment } from "react"; import { SketchPicker } from "react-color"; import Styled from "styled-components"; -import i18n from "../../i18n"; // Bootstrap components @@ -26,11 +25,12 @@ import Button from "react-bootstrap/Button"; import Tooltip from "react-bootstrap/Tooltip"; import OverlayTrigger from "react-bootstrap/OverlayTrigger"; +import { CgSmartHomeLight, CgColorPicker } from "react-icons/cg"; import Title from "../../component/Title"; import { ColorButton, ColorPicker } from "../../component/Button"; // Icons -import { CgSmartHomeLight, CgColorPicker } from "react-icons/cg"; +import i18n from "../../i18n"; import { IconColorPalette, IconKeysLight, IconKeysUnderglow } from "../../component/Icon"; @@ -104,7 +104,7 @@ export default class ColorEditor extends Component { this.state = { displayColorPicker: false, - internalColors: props.colors + internalColors: props.colors, }; this.showColorPicker = this.showColorPicker.bind(this); @@ -149,14 +149,12 @@ export default class ColorEditor extends Component { } showColorPicker(event) { - this.setState(state => { - return { displayColorPicker: !state.displayColorPicker }; - }); + this.setState(state => ({ displayColorPicker: !state.displayColorPicker })); } removeColorPalette(idx) { - let arrayColorPalette = [...this.state.internalColors]; - let index = idx; + const arrayColorPalette = [...this.state.internalColors]; + const index = idx; if (index !== -1) { arrayColorPalette.splice(index, 1); this.setState({ internalColors: arrayColorPalette }); @@ -164,7 +162,7 @@ export default class ColorEditor extends Component { } addNewColorPalette() { - let arrayColorPalette = [...this.state.internalColors]; + const arrayColorPalette = [...this.state.internalColors]; arrayColorPalette.push({ r: 122, g: 121, b: 241, rgb: "(122, 121, 241)" }); this.setState({ internalColors: arrayColorPalette }); @@ -173,14 +171,14 @@ export default class ColorEditor extends Component { } render() { - const { colors, selected, toChangeAllKeysColor, onBacklightColorSelect, onColorButtonSelect } = this.props; + const { colors, selected, toChangeAllKeysColor, deviceName } = this.props; const { displayColorPicker, internalColors } = this.state; const layerButtons = internalColors.map((data, idx) => { const menuKey = `color-${idx.toString()}-${colors[idx].rgb.toString()}`; const buttonStyle = { - //backgroundColor: data.rgb - backgroundColor: colors[idx].rgb + // backgroundColor: data.rgb + backgroundColor: colors[idx].rgb, }; if ( idx > 0 && @@ -188,7 +186,7 @@ export default class ColorEditor extends Component { internalColors[idx - 1].rgb == "rgb(0, 0, 0)" && data.rgb == internalColors[idx - 1].rgb ) { - //internalColors.slice(idx, 1); + // internalColors.slice(idx, 1); this.removeColorPalette(idx); } else { return ( @@ -214,16 +212,18 @@ export default class ColorEditor extends Component { const popover = { position: "absolute", - top: "42px" + top: "42px", }; const cover = { position: "fixed", top: "0px", right: "0px", bottom: "0px", - left: "0px" + left: "0px", }; + const underglowStart = deviceName === "Defy" ? 70 : 69; + return ( <Styles className="extraPanel"> <div className="panelTitle"> @@ -236,7 +236,7 @@ export default class ColorEditor extends Component { <ColorPicker onClick={this.addNewColorPalette} menuKey="menuKeyAddNewColor" - key={`buttonAddNewColor`} + key="buttonAddNewColor" className="addColorButton" /> ) : ( @@ -262,7 +262,7 @@ export default class ColorEditor extends Component { <div className="buttonsApplyAll"> <ColorButton onClick={() => { - toChangeAllKeysColor(selected, 0, 70); + toChangeAllKeysColor(selected, 0, underglowStart); }} label={i18n.editor.color.applyColor} text={i18n.editor.color.allKeys} @@ -271,7 +271,7 @@ export default class ColorEditor extends Component { /> <ColorButton onClick={() => { - toChangeAllKeysColor(selected, 70, 177); + toChangeAllKeysColor(selected, underglowStart, 177); }} label={i18n.editor.color.applyColor} text={i18n.editor.color.underglow} diff --git a/src/renderer/modules/Firmware/FirmwareAdvancedOptions.js b/src/renderer/modules/Firmware/FirmwareAdvancedOptions.js index 9f74854e5..552e53f40 100644 --- a/src/renderer/modules/Firmware/FirmwareAdvancedOptions.js +++ b/src/renderer/modules/Firmware/FirmwareAdvancedOptions.js @@ -66,7 +66,7 @@ const Style = Styled.div` * @param {function} selectFirmware - The function that allows the user select the custom software * @returns {<FirmwareAdvancedOptions>} FirmwareAdvancedOptions component. */ -const FirmwareAdvancedOptions = ({ firmwareFilename, selectFirmware, selectExperimental }) => { +function FirmwareAdvancedOptions({ firmwareFilename, selectFirmware, selectExperimental }) { return ( <Style> <Dropdown className="dropdownWithContent AdvancedUsers"> @@ -78,17 +78,17 @@ const FirmwareAdvancedOptions = ({ firmwareFilename, selectFirmware, selectExper </Dropdown.Toggle> <Dropdown.Menu className="dropdownMenu"> <div className="dropdownMenuPadding"> - <div className={"dropdownMenuContent"} dangerouslySetInnerHTML={{ __html: i18n.firmwareUpdate.texts.advUsersHTML }} /> + <div className="dropdownMenuContent" dangerouslySetInnerHTML={{ __html: i18n.firmwareUpdate.texts.advUsersHTML }} /> <RegularButton className="flashingbutton nooutlined" - style="outline gradient btn-block" - buttonText={firmwareFilename == "" ? i18n.firmwareUpdate.custom : i18n.firmwareUpdate.rcustom} + styles="outline gradient btn-block" + buttonText={firmwareFilename === "" ? i18n.firmwareUpdate.custom : i18n.firmwareUpdate.rcustom} onClick={selectFirmware} /> <RegularButton className="flashingbutton nooutlined" - style="outline gradient btn-block" - buttonText={"Use Experimental"} + styles="outline gradient btn-block" + buttonText="Use Experimental" onClick={selectExperimental} /> {firmwareFilename ? <div className="fileSelected animOpacity">{firmwareFilename}</div> : ""} @@ -97,6 +97,6 @@ const FirmwareAdvancedOptions = ({ firmwareFilename, selectFirmware, selectExper </Dropdown> </Style> ); -}; +} export default FirmwareAdvancedOptions; diff --git a/src/renderer/modules/Firmware/FirmwareCheckProcessPanel.js b/src/renderer/modules/Firmware/FirmwareCheckProcessPanel.js index 543d6cade..088ecfb63 100644 --- a/src/renderer/modules/Firmware/FirmwareCheckProcessPanel.js +++ b/src/renderer/modules/Firmware/FirmwareCheckProcessPanel.js @@ -18,9 +18,8 @@ import React, { useState, useEffect } from "react"; import Styled from "styled-components"; import { useMachine } from "@xstate/react"; -import Card from "react-bootstrap/Card"; -import i18n from "../../i18n"; import SemVer from "semver"; +import i18n from "../../i18n"; // State machine import DeviceChecks from "../../controller/FlashingSM/DeviceChecks"; @@ -32,11 +31,7 @@ import { RegularButton } from "../../component/Button"; import { FirmwareLoader } from "../../component/Loader"; import AccordionFirmware from "../../component/Accordion/AccordionFirmware"; -import { FirmwareNeuronStatus } from "../Firmware"; - -//Assets -import videoDefyCablesDisconnect from "../../../../static/videos/connectCablesDefy.mp4"; -import { IconWarning } from "../../component/Icon"; +import { FirmwareNeuronStatus, FirmwareWarningList } from "../Firmware"; const Style = Styled.div` width: 100%; @@ -124,9 +119,6 @@ height:inherit; .lineColor { stroke: ${({ theme }) => theme.styles.firmwareUpdatePanel.neuronStatusLineWarning}; } - .firmware-content--inner h3 { - color: ${({ theme }) => theme.styles.firmwareUpdatePanel.disclaimerTitle}; - } } .buttonActions .button.outline, .buttonActions .button.primary { @@ -168,45 +160,13 @@ height:inherit; display:none; } } -.errorListWrapper { - padding-top: 16px; - display: flex; - grid-gap: 16px; - align-items: center; - .errorListItem { - display: flex; - grid-gap: 24px; - align-items: center; - } - .errorListImage { - video { - aspect-ratio: 1 /1; - object-fit: cover; - width: 162px; - border-radius: 16px; - border: 3px solid ${({ theme }) => theme.colors.brandWarning}; - } - } - .errorListContent { - max-width: 200px; - color: ${({ theme }) => theme.styles.firmwareErrorPanel.textColor} - } -} `; -/** - * This FirmwareUpdatePanel function returns a module that wrap all modules and components to manage the first steps of firware update. - * The object will accept the following parameters - * - * @param {number} disclaimerCard - Number that indicates the software when the installation will begin. - * @returns {<FirmwareUpdatePanel>} FirmwareUpdatePanel component. - */ - -const FirmwareCheckProcessPanel = ({ nextBlock, retryBlock, context }) => { +function FirmwareCheckProcessPanel(props) { + const { nextBlock, retryBlock, context } = props; const [state, send] = useMachine(DeviceChecks, { context: { device: context.device } }); const [listItems, setlistItems] = useState([]); const [loading, setLoading] = useState(true); - const [isSomethingMissing, SetIsSomethingMissing] = useState(false); useEffect(() => { if (state.context.stateblock > 4) { @@ -226,8 +186,6 @@ const FirmwareCheckProcessPanel = ({ nextBlock, retryBlock, context }) => { }); console.log("Setting checks", newValue); setlistItems(newValue); - - SetIsSomethingMissing(listItems.some(item => item.checked == false)); }, [state.context]); return ( @@ -236,25 +194,43 @@ const FirmwareCheckProcessPanel = ({ nextBlock, retryBlock, context }) => { <FirmwareLoader /> ) : ( <> - {isSomethingMissing && state.context.device.info.product !== "Raise" ? ( + {state.context.device.info.product !== "Raise" ? ( <div className="firmware-wrapper disclaimer-firmware"> <div className="firmware-row"> <div className="firmware-content borderLeftTopRadius"> <div className="firmware-content--inner"> - <Title text={i18n.firmwareUpdate.texts.disclaimerTitle} headingLevel={3} /> - <div - className={"disclaimerContent"} - dangerouslySetInnerHTML={{ __html: i18n.firmwareUpdate.texts.disclaimerContent }} + <Title + text={ + !state.context.sideLeftOk || !state.context.sideRightOK + ? i18n.firmwareUpdate.texts.errorTitle + : i18n.firmwareUpdate.texts.disclaimerTitle + } + headingLevel={3} + type={!state.context.sideLeftOk || !state.context.sideRightOK ? "warning" : "default"} + /> + {state.context.sideLeftOk && state.context.sideRightOK ? ( + <> + <div + className={"disclaimerContent"} + dangerouslySetInnerHTML={{ __html: i18n.firmwareUpdate.texts.disclaimerContent }} + /> + <Callout content={i18n.firmwareUpdate.texts.disclaimerContent2} size="sm" className="mt-lg" /> + </> + ) : ( + "" + )} + <FirmwareWarningList + leftSideOK={state.context.sideLeftOk} + rightSideOK={state.context.sideRightOK} + leftSideBL={state.context.sideLeftBL} /> - <Callout content={i18n.firmwareUpdate.texts.disclaimerContent2} size="sm" className="mt-lg" /> - {isSomethingMissing ? "Something is missing" : "Ready!"} {state.context.device.info.product !== "Raise" ? <AccordionFirmware items={listItems} /> : ""} </div> </div> <div className="firmware-sidebar borderRightTopRadius"> <FirmwareNeuronStatus isUpdated={state.context.isUpdated} - status="waiting" + status={!state.context.sideLeftOk || !state.context.sideRightOK ? "warning" : "waiting"} deviceProduct={state.context.device.info.product} keyboardType={state.context.device.info.keyboardType} /> @@ -265,8 +241,12 @@ const FirmwareCheckProcessPanel = ({ nextBlock, retryBlock, context }) => { <div className="wrapperActions"> <RegularButton className="flashingbutton nooutlined" - style="outline" - buttonText={i18n.firmwareUpdate.texts.backwds} + styles="outline transp-bg" + buttonText={ + !state.context.sideLeftOk || !state.context.sideRightOK + ? i18n.firmwareUpdate.texts.cancelButton + : i18n.firmwareUpdate.texts.backwds + } onClick={() => { retryBlock(); }} @@ -278,14 +258,14 @@ const FirmwareCheckProcessPanel = ({ nextBlock, retryBlock, context }) => { {state.context.sideLeftOk && state.context.sideRightOK && state.context.backup ? ( <RegularButton className="flashingbutton nooutlined" - style="primary" + styles="primary" buttonText={i18n.firmwareUpdate.texts.letsStart} onClick={() => send("PRESSED")} /> ) : ( <RegularButton className="flashingbutton nooutlined" - style="primary" + styles="primary" buttonText={i18n.general.retry} onClick={() => { send("RETRY"); @@ -297,69 +277,12 @@ const FirmwareCheckProcessPanel = ({ nextBlock, retryBlock, context }) => { </div> </div> ) : ( - <div className="firmware-wrapper"> - <div className="firmware-row"> - <div className="firmware-content borderLeftTopRadius"> - <div className="firmware-content--inner"> - <Title text={i18n.firmwareUpdate.texts.errorTitle} headingLevel={3} type="warning" /> - <div className="errorListWrapper"> - {!state.context.sideLeftBL || !state.context.sideRightBL ? ( - <div className="errorListItem"> - <div className="errorListImage"> - <video width={162} height={162} autoPlay={true} loop={true} className="img-center img-fluid"> - <source src={videoDefyCablesDisconnect} type="video/mp4" /> - </video> - </div> - <div className="errorListContent">{i18n.firmwareUpdate.texts.errorMissingCables}</div> - </div> - ) : ( - "" - )} - </div> - </div> - </div> - <div className="firmware-sidebar borderRightTopRadius"> - <FirmwareNeuronStatus - isUpdated={false} - icon={<IconWarning />} - status="warning" - deviceProduct={state.context.device.info.product} - keyboardType={state.context.device.info.keyboardType} - /> - </div> - </div> - <div className="firmware-row"> - <div className="firmware-content borderLeftBottomRadius"> - <div className="wrapperActions"> - <RegularButton - className="flashingbutton nooutlined" - style="outline" - buttonText={i18n.firmwareUpdate.texts.cancelButton} - onClick={() => { - retryBlock(); - }} - /> - </div> - </div> - <div className="firmware-sidebar borderRightBottomRadius"> - <div className="buttonActions"> - <RegularButton - className="flashingbutton nooutlined" - style="primary" - buttonText={i18n.general.retry} - onClick={() => { - send("PRESSED"); - }} - /> - </div> - </div> - </div> - </div> + "" )} </> )} </Style> ); -}; +} export default FirmwareCheckProcessPanel; diff --git a/src/renderer/modules/Firmware/FirmwareDefyFlashingStatus.js b/src/renderer/modules/Firmware/FirmwareDefyFlashingStatus.js deleted file mode 100644 index eac6ffde4..000000000 --- a/src/renderer/modules/Firmware/FirmwareDefyFlashingStatus.js +++ /dev/null @@ -1,196 +0,0 @@ -// -*- mode: js-jsx -*- -/* Bazecor - * Copyright (C) 2022 Dygmalab, Inc. - * - * This program is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by the Free Software - * Foundation, version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -import React from "react"; -import PropTypes from "prop-types"; -import Styled from "styled-components"; -import i18n from "../../i18n"; -import ProgressBar from "react-bootstrap/ProgressBar"; - -import Title from "../../component/Title"; -import { FirmwareImageHelp } from "../Firmware"; - -const Style = Styled.div` -width: 100%; -.process-header { - width: 100%; - display: flex; - flex-wrap: nowrap; - height: 260px; - .img-center { - margin: auto; - max-width: 162px; - border-radius:16px; - display: block; - align-self: center; - } - .process-image { - display: flex; - flex: 0 0 50%; - height: inherit; - background-color: ${({ theme }) => theme.styles.firmwareUpdateProcess.processImageBackground}; - border-top-left-radius: 16px; - position: relative; - .img-center { - width: 162px; - position: absolute; - } - } - .process-neuron { - display: flex; - flex: 0 0 50%; - height: inherit; - background-color: ${({ theme }) => theme.styles.firmwareUpdateProcess.processNeuronBackground}; - border-top-right-radius: 16px; - } - .videoWrapper{ - position: relative; - left: 50%; - top: 50%; - width: 162px; - height: 162px; - transform: translate3d(-50%, -50%, 0); - } - .videoInner{ - position: relative; - width: 162px; - height: 162px; - } - .firmwareCheck { - position: absolute; - z-index: 2; - top: 50%; - left: 50%; - width: 74px; - height: 74px; - line-height: 69px; - text-align: center; - border-radius: 50%; - background-color: rgba(0, 206, 201, 0.8); - transform-origin: center center; - transform: scale(0) translate3d(-50%, -50%, 0); - opacity: 0; - color: white; - svg { - transform: scale(1.5); - } - } -} -.process-footer { - width: 100%; - padding: 24px; - background-color: ${({ theme }) => theme.styles.firmwareUpdateProcess.processFooterBackground}; - border-radius: 0px 0px 16px 16px; - text-align: center; - h3 { - color: ${({ theme }) => theme.colors.brandSuccess}; - } - h6 { - font-weight: 395; - letter-spacing:0; - font-size: 15px; - } -} -.blob { - background: #33d9b2; - box-shadow: 0 0 0 0 #33d9b2; - border-radius: 50%; - margin: 10px; - height: 8px; - width: 8px; - transform: scale(1); - - //animation: pulse-green 2s infinite; - transform: scale(1); - box-shadow: 0 0 0 32px rgba(51, 217, 178, 0.15); -} - -@keyframes pulse-green { - 0% { - transform: scale(0.95); - box-shadow: 0 0 0 0 rgba(51, 217, 178, 0.7); - } - - 70% { - transform: scale(1); - box-shadow: 0 0 0 42px rgba(51, 217, 178, 0); - } - - 100% { - transform: scale(0.95); - box-shadow: 0 0 0 0 rgba(51, 217, 178, 0); - } -} -`; - -/** - * This FirmwareProgressStatus function returns a card with text and images that reacts according the process update - * The object will accept the following parameters - * - * @param {number} countdown - A number that represents the actual step on the firmware update process. - * @param {number} flashProgress - The value used to render the progress bar. - * @returns {<FirmwareProgressStatus>} FirmwareProgressStatus component. - */ - -const FirmwareProgressStatus = ({ countdown, flashProgress, deviceProduct, keyboardType }) => { - return ( - <Style> - <div className="mainProcessWrapper"> - <FirmwareImageHelp countdown={countdown} deviceProduct={deviceProduct} keyboardType={keyboardType} /> - <div className="process-row"> - <ProgressBar> - <ProgressBar striped animated now={flashProgress} /> - </ProgressBar> - </div> - <div className="process-row process-footer"> - {countdown === 1 ? ( - <Title text={i18n.firmwareUpdate.texts.flashCardTitle1} headingLevel={3} /> - ) : countdown === 2 ? ( - <Title text={i18n.firmwareUpdate.texts.progressCardStatus1} headingLevel={3} /> - ) : countdown === 3 ? ( - <Title text={i18n.firmwareUpdate.texts.progressCardStatus3} headingLevel={3} /> - ) : countdown === 4 ? ( - <Title text={i18n.firmwareUpdate.texts.firmwareUpdatedTitle} headingLevel={3} /> - ) : ( - "" - )} - - {countdown === 1 ? ( - <Title text={i18n.firmwareUpdate.texts.flashCardTitle2} headingLevel={6} /> - ) : countdown === 4 ? ( - <Title text={i18n.firmwareUpdate.texts.firmwareUpdatedMessage} headingLevel={6} /> - ) : ( - <Title - text={ - flashProgress <= 15 - ? i18n.firmwareUpdate.texts.progressCardBar1 - : flashProgress <= 29 - ? i18n.firmwareUpdate.texts.progressCardBar2 - : flashProgress <= 69 - ? i18n.firmwareUpdate.texts.progressCardBar3 - : i18n.firmwareUpdate.texts.progressCardBar4 - } - headingLevel={6} - /> - )} - </div> - </div> - </Style> - ); -}; - -export default FirmwareProgressStatus; diff --git a/src/renderer/modules/Firmware/FirmwareDefyUpdatingStatus.js b/src/renderer/modules/Firmware/FirmwareDefyUpdatingStatus.tsx similarity index 62% rename from src/renderer/modules/Firmware/FirmwareDefyUpdatingStatus.js rename to src/renderer/modules/Firmware/FirmwareDefyUpdatingStatus.tsx index fa8658d70..5ae407fec 100644 --- a/src/renderer/modules/Firmware/FirmwareDefyUpdatingStatus.js +++ b/src/renderer/modules/Firmware/FirmwareDefyUpdatingStatus.tsx @@ -18,8 +18,7 @@ import React from "react"; import Styled from "styled-components"; -import { IconWarning, IconCheckmarkSm, IconRefresh } from "../../component/Icon"; -import { DefyLeftSide, DefyRightSide, DefyNeuronStatus } from "../../component/SidesStatus"; +import { DefyLeftSide, DefyRightSide, DefyNeuronStatus } from "@Renderer/component/SidesStatus"; const Style = Styled.div` .defySidesUpdatingStatus { @@ -89,49 +88,49 @@ const Style = Styled.div` } } `; +interface FirmwareDefyUpdatingStatusProps { + countdown: number; + keyboardType: string; + retriesLeft: number; + retriesRight: number; + retriesDefyWired: number; +} + const FirmwareDefyUpdatingStatus = ({ countdown, - status, - deviceProduct, keyboardType, - icon, retriesLeft, retriesRight, - retriesNeuron, - retriesDefyWired -}) => { - return ( - <Style> - <div className={`defySidesUpdatingStatus defySidesUpdatingStatus-${countdown}`}> - {countdown <= 2 ? ( - <> - <DefyLeftSide - updating={countdown == 2 && retriesLeft == 1 ? true : false} - warning={retriesLeft > 1 && countdown < 3 ? true : false} - success={countdown > 2 ? "success" : ""} - error={retriesLeft >= 3} - /> - <DefyRightSide - updating={countdown == 1 && retriesRight == 1 ? true : false} - warning={retriesRight > 1 && countdown < 2 ? true : false} - success={countdown > 1 ? "success" : ""} - error={retriesRight >= 3} - /> - </> - ) : ( - <> - <DefyNeuronStatus - updating={countdown >= 3 && countdown < 5 ? true : false} - warning={retriesDefyWired > 1 && countdown < 4 ? true : false} - success={countdown >= 5 ? "success" : ""} - error={retriesDefyWired >= 3} - keyboardType={keyboardType} - /> - </> - )} - </div> - </Style> - ); -}; + retriesDefyWired, +}: FirmwareDefyUpdatingStatusProps) => ( + <Style> + <div className={`defySidesUpdatingStatus defySidesUpdatingStatus-${countdown}`}> + {countdown <= 2 ? ( + <> + <DefyLeftSide + updating={!!(countdown === 2 && retriesLeft === 1)} + warning={!!(retriesLeft > 1 && countdown < 3)} + success={countdown > 2 ? "success" : ""} + error={retriesLeft >= 3} + /> + <DefyRightSide + updating={!!(countdown === 1 && retriesRight === 1)} + warning={!!(retriesRight > 1 && countdown < 2)} + success={countdown > 1 ? "success" : ""} + error={retriesRight >= 3} + /> + </> + ) : ( + <DefyNeuronStatus + updating={!!(countdown >= 3 && countdown < 5)} + warning={!!(retriesDefyWired > 1 && countdown < 4)} + success={countdown >= 5 ? "success" : ""} + error={retriesDefyWired >= 3} + keyboardType={keyboardType} + /> + )} + </div> + </Style> +); export default FirmwareDefyUpdatingStatus; diff --git a/src/renderer/modules/Firmware/FirmwareErrorPanel.js b/src/renderer/modules/Firmware/FirmwareErrorPanel.jsx similarity index 83% rename from src/renderer/modules/Firmware/FirmwareErrorPanel.js rename to src/renderer/modules/Firmware/FirmwareErrorPanel.jsx index bab339504..0aa93eb1b 100644 --- a/src/renderer/modules/Firmware/FirmwareErrorPanel.js +++ b/src/renderer/modules/Firmware/FirmwareErrorPanel.jsx @@ -34,7 +34,7 @@ import { FirmwareLoader } from "../../component/Loader"; import { FirmwareNeuronStatus } from "../Firmware"; //Assets -import videoDefyCablesDisconnect from "../../../../static/videos/connectCablesDefy.mp4"; +import videoDefyCablesDisconnect from "@Assets/videos/connectCablesDefy.mp4"; import { IconNoWifi, IconWarning } from "../../component/Icon"; const Style = Styled.div` @@ -191,15 +191,7 @@ width: 100%; } `; -/** - * This FirmwareUpdatePanel function returns a module that wrap all modules and components to manage the first steps of firware update. - * The object will accept the following parameters - * - * @param {number} disclaimerCard - Number that indicates the software when the installation will begin. - * @returns {<FirmwareUpdatePanel>} FirmwareUpdatePanel component. - */ - -const FirmwareErrorPanel = ({ nextBlock, retryBlock }) => { +function FirmwareErrorPanel({ nextBlock, retryBlock }) { const [state, send] = useMachine(FWSelection); const [handleError, setHandleError] = useState(false); @@ -220,30 +212,40 @@ const FirmwareErrorPanel = ({ nextBlock, retryBlock }) => { return ( <Style> - {loading && !handleError ? ( + {!handleError ? ( <FirmwareLoader /> ) : ( <div className="firmware-wrapper"> <div className="firmware-row"> <div className="firmware-content borderLeftTopRadius"> <div className="firmware-content--inner"> - <Title text={i18n.firmwareUpdate.texts.errorTitle} headingLevel={3} type="warning" /> - <div className="errorListWrapper"> - {handleError ? ( - state.context.error == "error.platform.GitHubData" ? ( + {state.context.error === "error.platform.GitHubData" ? ( + <> + <Title text={i18n.firmwareUpdate.texts.errorTitle} headingLevel={3} type="warning" /> + <div className="errorListWrapper"> <div className="errorListItem"> <div className="errorListImage iconWarning"> <IconNoWifi /> </div> <div className="errorListContent">{i18n.firmwareUpdate.texts.noInternetConncetion}</div> </div> - ) : ( - "" - ) - ) : ( - "" - )} - </div> + </div> + </> + ) : ( + <> + <Title text="Something went wrong" headingLevel={3} type="warning" /> + <div className="errorListWrapper"> + <div className="errorListItem"> + <div className="errorListImage iconWarning"> + <IconNoWifi /> + </div> + <div className="errorListContent"> + {state.context?.error ? state.context.error : "Contact our customer for more details"} + </div> + </div> + </div> + </> + )} </div> </div> <div className="firmware-sidebar borderRightTopRadius"> @@ -251,8 +253,8 @@ const FirmwareErrorPanel = ({ nextBlock, retryBlock }) => { isUpdated={false} icon={<IconWarning />} status="warning" - deviceProduct={state.context.device.info.product} - keyboardType={state.context.device.info.keyboardType} + deviceProduct={state.context.device.info?.product ? state.context.device.info.product : "Raise"} + keyboardType={state.context.device.info?.keyboardType ? state.context.device.info.keyboardType : "Wired"} /> </div> </div> @@ -262,7 +264,7 @@ const FirmwareErrorPanel = ({ nextBlock, retryBlock }) => { {!handleError ? ( <RegularButton className="flashingbutton nooutlined" - style="outline" + styles="outline transp-bg" buttonText={i18n.firmwareUpdate.texts.cancelButton} // onClick={onCancelDialog} /> @@ -275,7 +277,7 @@ const FirmwareErrorPanel = ({ nextBlock, retryBlock }) => { <div className="buttonActions"> <RegularButton className="flashingbutton nooutlined" - style="primary" + styles="primary" buttonText={i18n.general.retry} onClick={() => { send("RETRY"); @@ -290,6 +292,6 @@ const FirmwareErrorPanel = ({ nextBlock, retryBlock }) => { <div style={{ display: "none" }}>{JSON.stringify(state.context)}</div> </Style> ); -}; +} export default FirmwareErrorPanel; diff --git a/src/renderer/modules/Firmware/FirmwareImageHelp.js b/src/renderer/modules/Firmware/FirmwareImageHelp.tsx similarity index 52% rename from src/renderer/modules/Firmware/FirmwareImageHelp.js rename to src/renderer/modules/Firmware/FirmwareImageHelp.tsx index 1ada5848a..3b83a5a78 100644 --- a/src/renderer/modules/Firmware/FirmwareImageHelp.js +++ b/src/renderer/modules/Firmware/FirmwareImageHelp.tsx @@ -1,3 +1,4 @@ +/* eslint-disable jsx-a11y/media-has-caption */ // -*- mode: js-jsx -*- /* Bazecor * Copyright (C) 2022 Dygmalab, Inc. @@ -15,17 +16,19 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ -import React, { useState, useEffect } from "react"; -import PropTypes from "prop-types"; +import React, { useRef, useEffect } from "react"; import Styled from "styled-components"; -import { FirmwareNeuronHelp, FirmwareDefyUpdatingStatus } from "../Firmware"; +import videoFirmwareUpdate from "@Assets/videos/update-firmware.mp4"; +import videoFirmwareUpdateReleaseKey from "@Assets/videos/release-key.mp4"; +import videoFirmwareUpdateDefySRC from "@Assets/videos/update-firmware-defy.mp4"; +import videoFirmwareUpdateDefyReleaseSRC from "@Assets/videos/release-key-defy.mp4"; -import videoFirmwareUpdate from "../../../../static/videos/update-firmware.mp4"; -import videoFirmwareUpdateReleaseKey from "../../../../static/videos/release-key.mp4"; -import videoFirmwareUpdateDefySRC from "../../../../static/videos/update-firmware-defy-compress.mp4"; -import videoFirmwareUpdateDefyReleaseSRC from "../../../../static/videos/update-firmware-defy-releaseKeys-compress.mp4"; -import { IconCheckmarkSm } from "../../component/Icon"; +import FirmwareNeuronHelp from "@Renderer/modules/Firmware/FirmwareNeuronHelp"; +import FirmwareDefyUpdatingStatus from "@Renderer/modules/Firmware/FirmwareDefyUpdatingStatus"; + +import { IconCheckmarkSm } from "@Renderer/component/Icon"; +import { BadgeFirmware } from "@Renderer/component/Badge"; const Style = Styled.div` .updatingRaise { @@ -46,24 +49,6 @@ const Style = Styled.div` transform: scale(1); box-shadow: 0 0 0 32px rgba(51, 217, 178, 0.15); } - -@keyframes pulse-green { - 0% { - transform: scale(0.95); - box-shadow: 0 0 0 0 rgba(51, 217, 178, 0.7); - } - - 70% { - transform: scale(1); - box-shadow: 0 0 0 42px rgba(51, 217, 178, 0); - } - - 100% { - transform: scale(0.95); - box-shadow: 0 0 0 0 rgba(51, 217, 178, 0); - } -} - .processCanvas { position: relative; canvas { @@ -93,6 +78,17 @@ const Style = Styled.div` background-repeat: no-repeat; background-image: url(${({ theme }) => theme.styles.firmwareUpdateProcess.defySVG}); } +.animPressDown { + animation: animaPressDown 0.3s forwards; + animation-timing-function: cubic-bezier(0.75, -1.27, 0.3, 2.33); +} +@keyframes animaPressDown { + to { + transform: scale(1); + opacity: 1; + } +} + `; /** * This FirmwareImageHelp function returns a video that reacts according the firmware update status @@ -101,7 +97,18 @@ const Style = Styled.div` * @param {number} countdown - Number representing the position during the update process * @returns {<FirmwareImageHelp>} FirmwareImageHelp component. */ -const FirmwareImageHelp = ({ +interface FirmwareImageHelpProps { + countdown: number; + deviceProduct: string; + keyboardType: string; + steps: Array<string | number>; + error: boolean; + retriesLeft: number | undefined; + retriesRight: number | undefined; + retriesDefyWired: number | undefined; +} + +const FirmwareImageHelp: React.FC<FirmwareImageHelpProps> = ({ countdown, deviceProduct, keyboardType, @@ -109,62 +116,73 @@ const FirmwareImageHelp = ({ error, retriesLeft, retriesRight, - retriesNeuron, - retriesDefyWired + retriesDefyWired, }) => { - const videoIntro = React.useRef(null); - const videoIntroDefy = React.useRef(null); - const videoReleaseDefy = React.useRef(null); - const videoRelease = React.useRef(null); - const checkSuccess = React.useRef(null); + const videoIntro = useRef<HTMLVideoElement | null>(null); + const videoIntroDefy = useRef<HTMLVideoElement | null>(null); + const videoReleaseDefy = useRef<HTMLVideoElement | null>(null); + const videoRelease = useRef<HTMLVideoElement | null>(null); + const checkSuccess = useRef(null); + + const isEndProcess = steps.length - 2; + const productName = deviceProduct; + + const playVideo = () => { + if (deviceProduct === "Raise" && videoIntro.current) { + videoIntro.current.currentTime = 3; + videoIntro.current.play(); + } else if (deviceProduct === "Defy" && videoIntroDefy.current) { + videoIntroDefy.current.currentTime = 3; + videoIntroDefy.current.play(); + } + }; useEffect(() => { - if (countdown == 0) { - if (deviceProduct == "Raise") { - videoIntro.current.addEventListener( - "ended", - function () { - videoIntro.current.currentTime = 3; - videoIntro.current.play(); - }, - false - ); - videoRelease.current.pause(); - } else { - videoIntroDefy.current.addEventListener( - "ended", - function () { - videoIntroDefy.current.currentTime = 3; - videoIntroDefy.current.play(); - }, - false - ); - videoIntroDefy.current.pause(); + const internalVideoIntro = videoIntro.current; + const internalVideoRelease = videoRelease.current; + const internalVideoIntroDefy = videoIntroDefy.current; + const internalVideoReleaseDefy = videoReleaseDefy.current; + + if (countdown === 0) { + if (productName === "Raise") { + internalVideoIntro.addEventListener("ended", playVideo, false); + internalVideoRelease.pause(); + } else if (productName === "Defy") { + internalVideoIntroDefy.addEventListener("ended", playVideo, false); + internalVideoReleaseDefy.pause(); } - checkSuccess.current.classList.remove("animInCheck"); } - if (countdown == 1) { - if (deviceProduct == "Raise") { - videoIntro.current.classList.add("animOut"); - videoRelease.current.classList.add("animIn"); - } else { - videoIntroDefy.current.classList.add("animOut"); - videoReleaseDefy.current.classList.add("animIn"); + checkSuccess.current.classList.remove("animInCheck"); + if (countdown === 1) { + if (productName === "Raise") { + internalVideoIntro.classList.add("animOut"); + internalVideoRelease.classList.add("animPressDown"); + } else if (productName === "Defy") { + internalVideoIntroDefy.classList.add("animOut"); + internalVideoReleaseDefy.classList.add("animIn"); + internalVideoReleaseDefy.play(); } checkSuccess.current.classList.remove("animInCheck"); } - if (countdown == 2) { - if (deviceProduct == "Raise") { - videoRelease.current.play(); - } else { - videoReleaseDefy.current.play(); + if (countdown === 2) { + if (productName === "Raise") { + internalVideoRelease.play(); } checkSuccess.current.classList.remove("animInCheck"); } - if (countdown == steps.length - 2) { + if (countdown === isEndProcess) { checkSuccess.current.classList.add("animInCheck"); } - }, [countdown, deviceProduct]); + + return () => { + if (internalVideoIntro && countdown === 0 && productName === "Raise") { + internalVideoIntro.removeEventListener("ended", playVideo, false); + } else if (internalVideoIntroDefy && countdown === 0 && productName === "Defy") { + internalVideoIntroDefy.removeEventListener("ended", playVideo, false); + } + }; + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [countdown]); return ( <Style> @@ -175,9 +193,9 @@ const FirmwareImageHelp = ({ <div className="firmwareCheck animWaiting" ref={checkSuccess}> <IconCheckmarkSm /> </div> - {deviceProduct == "Raise" ? ( + {deviceProduct === "Raise" ? ( <> - <video ref={videoIntro} width={520} height={520} autoPlay={true} className="img-center img-fluid animIn"> + <video ref={videoIntro} width={520} height={520} autoPlay className="img-center img-fluid"> <source src={videoFirmwareUpdate} type="video/mp4" /> </video> <video @@ -189,10 +207,11 @@ const FirmwareImageHelp = ({ > <source src={videoFirmwareUpdateReleaseKey} type="video/mp4" /> </video> + <BadgeFirmware countdown={countdown} /> </> ) : ( <> - <video ref={videoIntroDefy} width={520} height={520} autoPlay={true} className="img-center img-fluid animIn"> + <video ref={videoIntroDefy} width={520} height={520} autoPlay className="img-center img-fluid animIn"> <source src={videoFirmwareUpdateDefySRC} type="video/mp4" /> </video> <video @@ -209,36 +228,26 @@ const FirmwareImageHelp = ({ </div> </div> </div> - <div className={`process-col process-neuron ${countdown == 0 ? "process-" + deviceProduct : ""}`}> - {countdown == 0 ? ( + <div className={`process-col process-neuron ${countdown === 0 ? `process-${deviceProduct}` : ""}`}> + {countdown === 0 ? ( <div className={`processCanvas process${deviceProduct}`}> <div className="status-icon"> - <div className="blob green pulse-green"></div> + <div className="blob green pulse-green" /> </div> - <canvas className="" width={340} height={259}></canvas> + <canvas className="" width={340} height={259} /> </div> ) : ( - <div className={`${deviceProduct == "Defy" ? "updatingDefy" : ""} updatingRaise`}> - {deviceProduct == "Defy" ? ( + <div className={`${deviceProduct === "Defy" ? "updatingDefy" : ""} updatingRaise`}> + {deviceProduct === "Defy" ? ( <FirmwareDefyUpdatingStatus countdown={countdown} - deviceProduct={deviceProduct} keyboardType={keyboardType} - steps={steps} - error={error} retriesLeft={retriesLeft} retriesRight={retriesRight} - retriesNeuron={retriesNeuron} retriesDefyWired={retriesDefyWired} /> ) : ( - <FirmwareNeuronHelp - countdown={countdown} - deviceProduct={deviceProduct} - keyboardType={keyboardType} - steps={steps} - error={error} - /> + <FirmwareNeuronHelp countdown={countdown} deviceProduct={deviceProduct} steps={steps} error={error} /> )} </div> )} diff --git a/src/renderer/modules/Firmware/FirmwareNeuronHelp.js b/src/renderer/modules/Firmware/FirmwareNeuronHelp.tsx similarity index 97% rename from src/renderer/modules/Firmware/FirmwareNeuronHelp.js rename to src/renderer/modules/Firmware/FirmwareNeuronHelp.tsx index 55df2750a..54c46c5bd 100644 --- a/src/renderer/modules/Firmware/FirmwareNeuronHelp.js +++ b/src/renderer/modules/Firmware/FirmwareNeuronHelp.tsx @@ -16,11 +16,9 @@ */ import React from "react"; -import PropTypes from "prop-types"; -import Styled from "styled-components"; -import { useTheme } from "styled-components"; +import Styled, { useTheme } from "styled-components"; -import { IconWarning } from "../../component/Icon"; +import { IconWarning } from "@Renderer/component/Icon"; const Style = Styled.div` .lineColor { @@ -292,16 +290,23 @@ const Style = Styled.div` * @param {number} countdown - Number representing the position during the update process * @returns {<FirmwareNeuronHelp>} FirmwareNeuronHelp component. */ -const FirmwareNeuronHelp = ({ countdown, deviceProduct, keyboardType, steps, error }) => { - let connectionColorMatrix = useTheme().styles.neuronStatus.connectionColorMatrix; +interface FirmwareNeuronHelpProps { + countdown: number; + deviceProduct: string; + steps: Array<string | number>; + error: boolean; +} + +const FirmwareNeuronHelp: React.FC<FirmwareNeuronHelpProps> = ({ countdown, deviceProduct, steps, error }) => { + const { connectionColorMatrix } = useTheme().styles.neuronStatus; return ( <Style> - {deviceProduct == "Defy" ? ( + {deviceProduct === "Defy" ? ( "Defy" ) : ( <div className={`neuronUpdate-${countdown} ${countdown >= 3 ? "neuronUpdate-updating" : ""} ${ - countdown == steps.length - 2 ? "neuronUpdate-success" : "" + countdown === steps.length - 2 ? "neuronUpdate-success" : "" } ${error ? "neuronUpdate-error" : ""} neuronUpdateAnimation`} > {error ? ( diff --git a/src/renderer/modules/Firmware/FirmwareProgressStatus.js b/src/renderer/modules/Firmware/FirmwareProgressStatus.js index 0a6c4bc28..6e3fa86a4 100644 --- a/src/renderer/modules/Firmware/FirmwareProgressStatus.js +++ b/src/renderer/modules/Firmware/FirmwareProgressStatus.js @@ -225,7 +225,15 @@ const FirmwareProgressStatus = ({ </div> <div className="process-row process-footer"> {stepsPosition == 0 ? ( - <Title text={i18n.firmwareUpdate.texts.flashCardTitle1} headingLevel={3} color="success" /> + <Title + text={ + deviceProduct == "Raise" + ? i18n.firmwareUpdate.texts.flashCardTitle1 + : i18n.firmwareUpdate.texts.flashCardTitleDefy1 + } + headingLevel={3} + color="success" + /> ) : ( <Title text={steps[stepsPosition].title} @@ -234,7 +242,14 @@ const FirmwareProgressStatus = ({ /> )} {stepsPosition == 0 ? ( - <Title text={i18n.firmwareUpdate.texts.flashCardTitle2} headingLevel={6} /> + <Title + text={ + deviceProduct == "Raise" + ? i18n.firmwareUpdate.texts.flashCardTitle2 + : i18n.firmwareUpdate.texts.progressCardTitleDefy2 + } + headingLevel={6} + /> ) : ( <Title text={steps[stepsPosition].description} headingLevel={6} /> )} diff --git a/src/renderer/modules/Firmware/FirmwareUpdatePanel.js b/src/renderer/modules/Firmware/FirmwareUpdatePanel.js index 8c3330bea..7ab643630 100644 --- a/src/renderer/modules/Firmware/FirmwareUpdatePanel.js +++ b/src/renderer/modules/Firmware/FirmwareUpdatePanel.js @@ -15,24 +15,23 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ -import React, { useState, useEffect, useRef } from "react"; +import React, { useState, useEffect } from "react"; import Styled from "styled-components"; import { useMachine } from "@xstate/react"; -import i18n from "../../i18n"; -import SemVer from "semver"; +import i18n from "@Renderer/i18n"; // State machine -import FWSelection from "../../controller/FlashingSM/FWSelection"; +import FWSelection from "@Renderer/controller/FlashingSM/FWSelection"; // Visual components -import Title from "../../component/Title"; -import Callout from "../../component/Callout"; -import { RegularButton } from "../../component/Button"; -import { FirmwareLoader } from "../../component/Loader"; -import { IconLoader } from "../../component/Icon"; +import Title from "@Renderer/component/Title"; +import Callout from "@Renderer/component/Callout"; +import { RegularButton } from "@Renderer/component/Button"; +import { FirmwareLoader } from "@Renderer/component/Loader"; +import { IconLoader } from "@Renderer/component/Icon"; // Visual modules -import { FirmwareNeuronStatus, FirmwareVersionStatus } from "../Firmware"; +import { FirmwareNeuronStatus, FirmwareVersionStatus } from "@Renderer/modules/Firmware"; const Style = Styled.div` width: 100%; @@ -162,19 +161,18 @@ height:inherit; } `; -const FirmwareUpdatePanel = ({ nextBlock, retryBlock, errorBlock, allowBeta }) => { - const [state, send] = useMachine(FWSelection, { context: { allowBeta: allowBeta } }); - const [checkTimeOut, setCheckTimeOut] = useState(false); - const timerRef = useRef(null); +function FirmwareUpdatePanel(props) { + const { nextBlock, retryBlock, errorBlock, allowBeta } = props; + const [state, send] = useMachine(FWSelection, { context: { allowBeta } }); const [loading, setLoading] = useState(true); useEffect(() => { - if (state.context.stateblock >= 3 || state.context.stateblock == -1) { + if (state.context.stateblock >= 3 || state.context.stateblock === -1) { setLoading(false); } if (state.matches("success")) nextBlock(state.context); if (state.matches("failure")) errorBlock(state.context.error); - }, [state.context]); + }, [state]); return ( <Style> @@ -198,10 +196,10 @@ const FirmwareUpdatePanel = ({ nextBlock, retryBlock, errorBlock, allowBeta }) = content={i18n.firmwareUpdate.texts.calloutIntroText} className="mt-lg" size="md" - hasVideo={state.context.device.info.product == "Raise" ? true : false} - media={`aVu7EL4LXMI`} + hasVideo={state.context.device.info.product === "Raise"} + media="aVu7EL4LXMI" videoTitle="How to update the Software & Firmware of your Dygma keyboard" - videoDuration={state.context.device.info.product == "Raise" ? "2:58" : null} + videoDuration={state.context.device.info.product === "Raise" ? "2:58" : null} /> </div> </div> @@ -218,7 +216,6 @@ const FirmwareUpdatePanel = ({ nextBlock, retryBlock, errorBlock, allowBeta }) = {state.context.firmwareList && state.context.firmwareList.length > 0 ? ( <FirmwareVersionStatus currentlyVersionRunning={state.context.device.version} - latestVersionAvailable={state.context.firmwareList[state.context.selectedFirmware].version} isUpdated={state.context.isUpdated} firmwareList={state.context.firmwareList} selectedFirmware={state.context.selectedFirmware} @@ -232,17 +229,17 @@ const FirmwareUpdatePanel = ({ nextBlock, retryBlock, errorBlock, allowBeta }) = <div className="buttonActions"> <RegularButton className="flashingbutton nooutlined" - style={state.context.isUpdated ? "outline" : "primary"} + styles={state.context.isUpdated ? "outline transp-bg" : "primary"} buttonText={ - state.context.stateblock == 4 + state.context.stateblock === 4 ? "Processing..." : state.context.isUpdated ? i18n.firmwareUpdate.flashing.buttonUpdated : i18n.firmwareUpdate.flashing.button } - icoSVG={state.context.stateblock == 4 ? <IconLoader /> : null} - icoPosition={state.context.stateblock == 4 ? "right" : null} - disabled={state.context.stateblock == 4 ? true : false} + icoSVG={state.context.stateblock === 4 ? <IconLoader /> : null} + icoPosition={state.context.stateblock === 4 ? "right" : null} + disabled={state.context.stateblock === 4} onClick={() => { send("NEXT"); }} @@ -262,6 +259,6 @@ const FirmwareUpdatePanel = ({ nextBlock, retryBlock, errorBlock, allowBeta }) = )} </Style> ); -}; +} export default FirmwareUpdatePanel; diff --git a/src/renderer/modules/Firmware/FirmwareUpdateProcess.js b/src/renderer/modules/Firmware/FirmwareUpdateProcess.js index 953dca5d5..197599a42 100644 --- a/src/renderer/modules/Firmware/FirmwareUpdateProcess.js +++ b/src/renderer/modules/Firmware/FirmwareUpdateProcess.js @@ -16,24 +16,20 @@ */ import React, { useState, useEffect } from "react"; -import PropTypes from "prop-types"; import Styled from "styled-components"; import { useMachine } from "@xstate/react"; -import i18n from "../../i18n"; -import SemVer from "semver"; +import i18n from "@Renderer/i18n"; // State machine -import FlashDevice from "../../controller/FlashingSM/FlashDevice"; +import FlashDevice from "@Renderer/controller/FlashingSM/FlashDevice"; // Visual components -import Title from "../../component/Title"; -import { RegularButton } from "../../component/Button"; -import { StepsBar } from "../../component/StepsBar"; -import { IconArrowRight } from "../../component/Icon"; -import { FirmwareLoader } from "../../component/Loader"; +import Title from "@Renderer/component/Title"; +import { RegularButton } from "@Renderer/component/Button"; +import { FirmwareLoader } from "@Renderer/component/Loader"; // Visual modules -import { FirmwareProgressStatus } from "../Firmware"; +import { FirmwareProgressStatus } from "@Renderer/modules/Firmware"; const Style = Styled.div` width: 100%; @@ -94,15 +90,8 @@ height: inherit; } `; -/** - * This FirmwareUpdateProcess function returns a module that wrap all modules and components to manage the first steps of firware update. - * The object will accept the following parameters - * - * @param {number} disclaimerCard - Number that indicates the software when the installation will begin. - * @returns {<FirmwareUpdateProcess>} FirmwareUpdateProcess component. - */ - -const FirmwareUpdateProcess = ({ nextBlock, retryBlock, context, toggleFlashing, toggleFwUpdate, onDisconnect, device }) => { +function FirmwareUpdateProcess(props) { + const { nextBlock, retryBlock, context, toggleFlashing, toggleFwUpdate, onDisconnect, device } = props; const [toggledFlashing, sendToggledFlashing] = useState(false); const [state, send] = useMachine(FlashDevice, { context: { @@ -116,22 +105,22 @@ const FirmwareUpdateProcess = ({ nextBlock, retryBlock, context, toggleFlashing, sideLeftOk: context.sideLeftOk, sideLeftBL: context.sideLeftBL, sideRightOK: context.sideRightOK, - sideRightBL: context.sideRightBL + sideRightBL: context.sideRightBL, }, actions: { addEscListener: () => { console.log("added event listener"); - document.addEventListener("keydown", _handleKeyDown); + document.addEventListener("keydown", handleKeyDown); }, removeEscListener: () => { console.log("removed event listener"); - document.removeEventListener("keydown", _handleKeyDown); + document.removeEventListener("keydown", handleKeyDown); }, toggleFlashing: async () => { if (toggledFlashing) return; console.log("starting flashing indicators"); await toggleFlashing(); - toggleFwUpdate(); + await toggleFwUpdate(); sendToggledFlashing(true); }, finishFlashing: async () => { @@ -139,13 +128,13 @@ const FirmwareUpdateProcess = ({ nextBlock, retryBlock, context, toggleFlashing, sendToggledFlashing(false); console.log("closing flashin process"); await toggleFlashing(); - toggleFwUpdate(); + await toggleFwUpdate(); onDisconnect(); - } - } + }, + }, }); - const _handleKeyDown = event => { + const handleKeyDown = event => { switch (event.keyCode) { case 27: console.log("esc key logged"); @@ -162,29 +151,61 @@ const FirmwareUpdateProcess = ({ nextBlock, retryBlock, context, toggleFlashing, setLoading(false); } if (state.matches("success")) nextBlock(state.context); - }, [state.context]); + }, [state]); const stepsDefy = [ { step: 1, title: i18n.firmwareUpdate.texts.flashCardTitle1, description: i18n.firmwareUpdate.texts.flashCardTitle2 }, - { step: 2, title: "1. Flashing rigth side", description: "Updating right side of the keyboard" }, - { step: 3, title: "2. Flashing left side", description: "Updating left side of the keyboard" }, - { step: 4, title: "3. Resetting the Neuron", description: "Preparing the bootloader!" }, - { step: 5, title: "4. Flashing Neuron", description: "Making it better 🎂 " }, - { step: 6, title: "5. Restoring your Layers!", description: "Giving your things back! 💪" }, - { step: 7, title: "6. Firmware update!", description: "Solid as a rock! 💪" }, - { step: 8, title: "Firmware update error!", description: "Errors!!!! 🫠" } + { + step: 2, + title: i18n.firmwareUpdate.texts.progressCardStatusDefy1, + description: i18n.firmwareUpdate.texts.progressCardBarDefy1, + }, + { + step: 3, + title: i18n.firmwareUpdate.texts.progressCardStatusDefy2, + description: i18n.firmwareUpdate.texts.progressCardBarDefy2, + }, + { + step: 4, + title: i18n.firmwareUpdate.texts.progressCardStatusDefy3, + description: i18n.firmwareUpdate.texts.progressCardBarDefy3, + }, + { + step: 5, + title: i18n.firmwareUpdate.texts.progressCardStatusDefy4, + description: i18n.firmwareUpdate.texts.progressCardBarDefy4, + }, + { + step: 6, + title: i18n.firmwareUpdate.texts.progressCardStatusDefy5, + description: i18n.firmwareUpdate.texts.progressCardBarDefy5, + }, + { + step: 7, + title: i18n.firmwareUpdate.texts.progressCardStatusDefy6, + description: i18n.firmwareUpdate.texts.progressCardBarSuccess, + }, + { + step: 8, + title: i18n.firmwareUpdate.texts.errorDuringProcessTitle, + description: i18n.firmwareUpdate.texts.errorDuringProcessDescription, + }, ]; const stepsRaise = [ { step: 1, title: i18n.firmwareUpdate.texts.flashCardTitle1, description: i18n.firmwareUpdate.texts.flashCardTitle2 }, { step: 4, title: i18n.firmwareUpdate.texts.progressCardStatus1, description: i18n.firmwareUpdate.texts.progressCardBar1 }, { step: 5, title: i18n.firmwareUpdate.texts.progressCardStatus2, description: i18n.firmwareUpdate.texts.progressCardBar2 }, { step: 6, title: i18n.firmwareUpdate.texts.progressCardStatus3, description: i18n.firmwareUpdate.texts.progressCardBar3 }, - { step: 7, title: i18n.firmwareUpdate.texts.progressCardStatus4, description: i18n.firmwareUpdate.texts.progressCardBar4 }, + { + step: 7, + title: i18n.firmwareUpdate.texts.progressCardStatus4, + description: i18n.firmwareUpdate.texts.progressCardBarSuccess, + }, { step: 8, title: i18n.firmwareUpdate.texts.errorDuringProcessTitle, - description: i18n.firmwareUpdate.texts.errorDuringProcessDescription - } + description: i18n.firmwareUpdate.texts.errorDuringProcessDescription, + }, ]; return ( @@ -208,15 +229,15 @@ const FirmwareUpdateProcess = ({ nextBlock, retryBlock, context, toggleFlashing, countdown={state.context.stateblock} deviceProduct={state.context.device.info.product} keyboardType={state.context.device.info.keyboardType} - steps={state.context.device.info.product == "Defy" ? stepsDefy : stepsRaise} + steps={state.context.device.info.product === "Defy" ? stepsDefy : stepsRaise} /> </div> - {state.context.stateblock == 1 ? ( + {state.context.stateblock === 1 ? ( <div className="firmware-footer"> <div className="holdButton"> <RegularButton className="flashingbutton nooutlined" - style="outline" + styles="outline transp-bg" size="sm" buttonText={i18n.firmwareUpdate.texts.cancelButton} onClick={() => { @@ -226,9 +247,17 @@ const FirmwareUpdateProcess = ({ nextBlock, retryBlock, context, toggleFlashing, </div> <div className="holdTootip"> <Title - text={i18n.firmwareUpdate.texts.flashCardHelp} + text={ + state.context.device.info.product === "Raise" + ? i18n.firmwareUpdate.texts.flashCardHelp + : i18n.firmwareUpdate.texts.flashCardHelpDefy + } headingLevel={6} - tooltip={i18n.firmwareUpdate.texts.flashCardHelpTooltip} + tooltip={ + state.context.device.info.product === "Raise" + ? i18n.firmwareUpdate.texts.flashCardHelpTooltip + : i18n.firmwareUpdate.texts.flashCardHelpTooltipDefy + } tooltipSize="wide" /> </div> @@ -236,12 +265,12 @@ const FirmwareUpdateProcess = ({ nextBlock, retryBlock, context, toggleFlashing, ) : ( "" )} - {state.context.stateblock == 8 ? ( + {state.context.stateblock === 8 ? ( <div className="firmware-footer"> <div className="holdButton"> <RegularButton className="flashingbutton nooutlined" - style="outline" + styles="outline transp-bg" size="sm" buttonText={i18n.firmwareUpdate.texts.cancelButton} onClick={() => { @@ -251,9 +280,9 @@ const FirmwareUpdateProcess = ({ nextBlock, retryBlock, context, toggleFlashing, /> <RegularButton className="flashingbutton nooutlined" - style="primary" + styles="primary" size="sm" - buttonText={"Retry the flashing procedure"} + buttonText="Retry the flashing procedure" onClick={() => { send("RETRY"); }} @@ -261,9 +290,17 @@ const FirmwareUpdateProcess = ({ nextBlock, retryBlock, context, toggleFlashing, </div> <div className="holdTootip"> <Title - text={i18n.firmwareUpdate.texts.flashCardHelp} + text={ + state.context.device.info.product === "Raise" + ? i18n.firmwareUpdate.texts.flashCardHelp + : i18n.firmwareUpdate.texts.flashCardHelpDefy + } headingLevel={6} - tooltip={i18n.firmwareUpdate.texts.flashCardHelpTooltip} + tooltip={ + state.context.device.info.product === "Raise" + ? i18n.firmwareUpdate.texts.flashCardHelpTooltip + : i18n.firmwareUpdate.texts.flashCardHelpTooltipDefy + } tooltipSize="wide" /> </div> @@ -273,20 +310,8 @@ const FirmwareUpdateProcess = ({ nextBlock, retryBlock, context, toggleFlashing, )} </div> )} - {/* <hr /> - <div> - <h3>percentages</h3> - <div> - <div>{`global Percentage: ${state.context.globalProgress}`}</div> - <div>{`left Percentage: ${state.context.leftProgress}`}</div> - <div>{`right Percentage: ${state.context.rightProgress}`}</div> - <div>{`reset Percentage: ${state.context.resetProgress}`}</div> - <div>{`neuron Percentage: ${state.context.neuronProgress}`}</div> - <div>{`restore Percentage: ${state.context.restoreProgress}`}</div> - </div> - </div> */} </Style> ); -}; +} export default FirmwareUpdateProcess; diff --git a/src/renderer/modules/Firmware/FirmwareVersionStatus.js b/src/renderer/modules/Firmware/FirmwareVersionStatus.js index 71bacedb0..7d93b7cac 100644 --- a/src/renderer/modules/Firmware/FirmwareVersionStatus.js +++ b/src/renderer/modules/Firmware/FirmwareVersionStatus.js @@ -15,21 +15,20 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ -import React, { useState, useEffect } from "react"; +import React, { useState } from "react"; import Styled from "styled-components"; -import i18n from "../../i18n"; import ReactMarkdown from "react-markdown"; -import Title from "../../component/Title"; -import Badge from "../../component/Badge"; -import { IconEye } from "../../component/Icon"; +import Title from "@Renderer/component/Title"; +import { Badge } from "@Renderer/component/Badge"; +import { IconEye } from "@Renderer/component/Icon"; import Dropdown from "react-bootstrap/Dropdown"; import Modal from "react-bootstrap/Modal"; import Spinner from "react-bootstrap/Spinner"; -import { RegularButton } from "../../component/Button"; +import { RegularButton } from "@Renderer/component/Button"; const Style = Styled.div` margin-left:32px; @@ -139,22 +138,14 @@ h6 { } } `; -const FirmwareVersionStatus = ({ - currentlyVersionRunning, - latestVersionAvailable, - isUpdated, - firmwareList, - selectedFirmware, - send -}) => { +const FirmwareVersionStatus = ({ currentlyVersionRunning, isUpdated, firmwareList, selectedFirmware, send }) => { const [modalFirmwareDetails, setModalFirmwareDetails] = useState(false); - return ( <Style> <div className={`versionsStatus ${isUpdated && "isUpdated"}`}> <div className="versionStatusInner"> <div className="versionStatusInstalled"> - <Title text={`Installed firmware version`} headingLevel={6} /> + <Title text="Installed firmware version" headingLevel={6} /> <Badge content={currentlyVersionRunning} /> </div> <div className="versionStatusNext"> @@ -165,12 +156,12 @@ const FirmwareVersionStatus = ({ /> </svg> - <Title text={`Update to the version`} headingLevel={6} /> + <Title text="Update to the version" headingLevel={6} /> <div className="firmwareVersionContainer"> <Dropdown - onSelect={value => send("CHANGEFW", { selected: parseInt(value) })} + onSelect={value => send("CHANGEFW", { selected: parseInt(value, 10) })} value={selectedFirmware} - className={`custom-dropdown sm`} + className="custom-dropdown sm" > <div> <Dropdown.Toggle id="dropdown-custom"> @@ -182,8 +173,8 @@ const FirmwareVersionStatus = ({ {firmwareList.map((item, index) => ( <Dropdown.Item eventKey={index} - key={index} - className={`${selectedFirmware == index ? "active" : ""}`} + key={`id-${index}`} + className={`${selectedFirmware === index ? "active" : ""}`} disabled={item.disabled} > <div className="dropdownInner"> @@ -197,7 +188,7 @@ const FirmwareVersionStatus = ({ <RegularButton className="flashingbutton nooutlined" - style="btn-link" + styles="btn-link transp-bg" icoSVG={<IconEye />} onClick={() => { setModalFirmwareDetails(true); diff --git a/src/renderer/modules/Firmware/FirmwareWarningList.js b/src/renderer/modules/Firmware/FirmwareWarningList.js new file mode 100644 index 000000000..728ea47d3 --- /dev/null +++ b/src/renderer/modules/Firmware/FirmwareWarningList.js @@ -0,0 +1,135 @@ +// -*- mode: js-jsx -*- +/* Bazecor + * Copyright (C) 2022 Dygmalab, Inc. + * + * This program is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free Software + * Foundation, version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +import React, { useState, useEffect } from "react"; +import Styled from "styled-components"; +import i18n from "../../i18n"; + +import Title from "../../component/Title"; + +import videoDefyCablesDisconnect from "@Assets/videos/connectCablesDefy.mp4"; + +const Style = Styled.div` +.errorListWrapper { + padding-top: 16px; + display: flex; + grid-gap: 16px; + align-items: center; + .errorListItem { + display: flex; + grid-gap: 24px; + align-items: center; + } + .errorListImage { + video { + aspect-ratio: 1 /1; + object-fit: cover; + width: 162px; + border-radius: 16px; + border: 3px solid ${({ theme }) => theme.colors.brandWarning}; + } + } + .errorListContent { + max-width: 200px; + color: ${({ theme }) => theme.styles.firmwareErrorPanel.textColor} + } + .errorListDescription { + margin-top: 0.5rem; + } +} +.label { + font-size: 0.7rem; + font-weight: 600; + padding: 4px 8px; + color: ${({ theme }) => theme.colors.brandSuccess}; + background-color: rgba(0,206,201,0.1); + border-radius: 3px; + &.label-warning { + color: ${({ theme }) => theme.colors.brandWarning}; + background-color: rgba(255,159,67,0.1); + } + &.label-error { + color: ${({ theme }) => theme.colors.brandPrimary}; + background-color: rgba(254,0,124,0.1); + } +} +.warningListWrapper { + margin-top: 1.5rem; +} +.warningListItem { + border-radius: 6px; + padding: 16px 32px; + color: ${({ theme }) => theme.styles.callout.calloutColor}; + background: ${({ theme }) => theme.styles.callout.calloutBackground}; + border: 1px solid ${({ theme }) => theme.styles.callout.calloutBorderColor}; + font-size: 13px; + font-weight: 395; + line-height: 1.35em; + + .warningListHeader { + display: flex; + grid-gap: 8px; + align-items: center; + margin-bottom: 0.5rem; + h4 { + margin: 0; + font-size: 14px; + } + } +} +`; + +const FirmwareWarningList = ({ leftSideOK, rightSideOK, leftSideBL }) => { + return ( + <Style> + <> + {!leftSideOK || !rightSideOK ? ( + <div className="errorListWrapper"> + <div className="errorListItem"> + <div className="errorListImage"> + <video width={162} height={162} autoPlay={true} loop={true} className="img-center img-fluid"> + <source src={videoDefyCablesDisconnect} type="video/mp4" /> + </video> + </div> + <div className="errorListContent"> + <span className="label label-error">{i18n.general.actionRequired}</span> + <div className="errorListDescription">{i18n.firmwareUpdate.texts.errorMissingCables}</div> + </div> + </div> + </div> + ) : ( + "" + )} + {leftSideBL ? ( + <div className="warningListWrapper"> + <div className="warningListItem"> + <div className="warningListHeader"> + <Title text={i18n.firmwareUpdate.texts.bootloaderWarningTitle} headingLevel={4} />{" "} + <span className="label label-warning">{i18n.general.noActionRequired}</span> + </div> + <div className="errorListContent">{i18n.firmwareUpdate.texts.bootloaderWarningMessage}</div> + </div> + </div> + ) : ( + "" + )} + </> + </Style> + ); +}; + +export default FirmwareWarningList; diff --git a/src/renderer/modules/Firmware/index.js b/src/renderer/modules/Firmware/index.js index 27c2072be..c5f6d6174 100644 --- a/src/renderer/modules/Firmware/index.js +++ b/src/renderer/modules/Firmware/index.js @@ -17,7 +17,6 @@ import FirmwareUpdatePanel from "./FirmwareUpdatePanel"; import FirmwareAdvancedOptions from "./FirmwareAdvancedOptions"; import FirmwareCheckProcessPanel from "./FirmwareCheckProcessPanel"; -import FirmwareDefyFlashingStatus from "./FirmwareDefyFlashingStatus"; import FirmwareDefyUpdatingStatus from "./FirmwareDefyUpdatingStatus"; import FirmwareErrorPanel from "./FirmwareErrorPanel"; import FirmwareNeuronStatus from "./FirmwareNeuronStatus"; @@ -26,12 +25,12 @@ import FirmwareProgressStatus from "./FirmwareProgressStatus"; import FirmwareImageHelp from "./FirmwareImageHelp"; import FirmwareNeuronHelp from "./FirmwareNeuronHelp"; import FirmwareUpdateProcess from "./FirmwareUpdateProcess"; +import FirmwareWarningList from "./FirmwareWarningList"; export { FirmwareUpdatePanel, FirmwareAdvancedOptions, FirmwareCheckProcessPanel, - FirmwareDefyFlashingStatus, FirmwareDefyUpdatingStatus, FirmwareErrorPanel, FirmwareNeuronStatus, @@ -39,5 +38,6 @@ export { FirmwareProgressStatus, FirmwareImageHelp, FirmwareNeuronHelp, - FirmwareUpdateProcess + FirmwareUpdateProcess, + FirmwareWarningList, }; diff --git a/src/renderer/modules/KeyPickerKeyboard/DN.json b/src/renderer/modules/KeyPickerKeyboard/DN.json index 6ea588708..e3a2cb34b 100644 --- a/src/renderer/modules/KeyPickerKeyboard/DN.json +++ b/src/renderer/modules/KeyPickerKeyboard/DN.json @@ -1485,7 +1485,7 @@ "iconname": "", "content": { "type": "longBlock", - "first": "Intro", + "first": "Enter", "second": "", "third": "", "fourth": "" diff --git a/src/renderer/modules/KeyPickerKeyboard/DualFunctionPicker.js b/src/renderer/modules/KeyPickerKeyboard/DualFunctionPicker.js index 926b80b9b..fccf8edc3 100644 --- a/src/renderer/modules/KeyPickerKeyboard/DualFunctionPicker.js +++ b/src/renderer/modules/KeyPickerKeyboard/DualFunctionPicker.js @@ -83,7 +83,7 @@ class DualFunctionPicker extends Component { { name: "Dual Shift ", nameStd: "Shift", keynum: 49425 }, { name: "Dual Alt ", nameStd: "Alt", keynum: 49681 }, { name: "Dual OS ", nameStd: "OS", keynum: 49937 }, - { name: "Dual Alt Gr ", nameStd: "Alt Gr.", keynum: 50705 } + { name: "Dual Alt Gr ", nameStd: "Alt Gr.", keynum: 50705 }, ]; this.layerKey = [ { name: "None ", keynum: 0 }, @@ -94,7 +94,7 @@ class DualFunctionPicker extends Component { { name: "Dual Layer 5 ", nameStd: "5", keynum: 52242 }, { name: "Dual Layer 6 ", nameStd: "6", keynum: 52498 }, { name: "Dual Layer 7 ", nameStd: "7", keynum: 52754 }, - { name: "Dual Layer 8 ", nameStd: "8", keynum: 53010 } + { name: "Dual Layer 8 ", nameStd: "8", keynum: 53010 }, ]; } @@ -106,7 +106,7 @@ class DualFunctionPicker extends Component { const disabled = isMod || (isNotNK && isNotDF); // console.log("CHECKING", isMod, isNotNK, isNotDF, keyCode); - //if (disabled && !isStandardView) return <></>; + // if (disabled && !isStandardView) return <></>; const layers = ( <div className="dualFunctionPickerInner"> <Title text="Add Dual-function" headingLevel={4} /> @@ -118,31 +118,25 @@ class DualFunctionPicker extends Component { keyCode.modified > 0 && this.layerKey.map(i => i.keynum).includes(keyCode.modified) ? "active" : "" }`} > - <Dropdown.Toggle - id="dropdown-custom" - className="button-config-style" - disabled={disabled || activeTab == "super" ? true : false} - > + <Dropdown.Toggle id="dropdown-custom" className="button-config-style" disabled={!!(disabled || activeTab == "super")}> <div className="dropdownItemSelected"> <div className="dropdownItem">Layer</div> - <div className="badge-circle"></div> + <div className="badge-circle" /> </div> </Dropdown.Toggle> <Dropdown.Menu> - {this.layerKey.map((item, id) => { - return ( - <Dropdown.Item - eventKey={item.keynum} - key={`itemDualFunctionLayer-${id}`} - disabled={item.keynum == -1 || isMod} - className={`${keyCode.modified > 0 && item.keynum == keyCode.modified ? "active" : ""}`} - > - <div className="dropdownInner"> - <div className="dropdownItem">{item.name}</div> - </div> - </Dropdown.Item> - ); - })} + {this.layerKey.map((item, id) => ( + <Dropdown.Item + eventKey={item.keynum} + key={`itemDualFunctionLayer-${id}`} + disabled={item.keynum == -1 || isMod} + className={`${keyCode.modified > 0 && item.keynum == keyCode.modified ? "active" : ""}`} + > + <div className="dropdownInner"> + <div className="dropdownItem">{item.name}</div> + </div> + </Dropdown.Item> + ))} </Dropdown.Menu> </Dropdown> @@ -154,32 +148,26 @@ class DualFunctionPicker extends Component { }`} disabled={disabled || activeTab == "super"} > - <Dropdown.Toggle - id="dropdown-custom" - className="button-config-style" - disabled={disabled || activeTab == "super" ? true : false} - > + <Dropdown.Toggle id="dropdown-custom" className="button-config-style" disabled={!!(disabled || activeTab == "super")}> <div className="dropdownItemSelected"> <div className="dropdownItem">Modifier</div> - <div className="badge-circle"></div> + <div className="badge-circle" /> </div> </Dropdown.Toggle> <Dropdown.Menu> - {this.modKey.map((item, id) => { - return ( - <Dropdown.Item - eventKey={item.keynum} - key={`itemDualFunctionMod-${id}`} - disabled={item.keynum == -1 || isMod} - className={`${keyCode.modified > 0 && item.keynum == keyCode.modified ? "active" : ""} + {this.modKey.map((item, id) => ( + <Dropdown.Item + eventKey={item.keynum} + key={`itemDualFunctionMod-${id}`} + disabled={item.keynum == -1 || isMod} + className={`${keyCode.modified > 0 && item.keynum == keyCode.modified ? "active" : ""} }`} - > - <div className="dropdownInner"> - <div className="dropdownItem">{item.name}</div> - </div> - </Dropdown.Item> - ); - })} + > + <div className="dropdownInner"> + <div className="dropdownItem">{item.name}</div> + </div> + </Dropdown.Item> + ))} </Dropdown.Menu> </Dropdown> </div> @@ -198,7 +186,7 @@ class DualFunctionPicker extends Component { key={`itemDualFunctionLayers-${id}`} buttonText={item.nameStd} onClick={e => onKeySelect(parseInt(item.keynum) + keyCode.base)} - selected={keyCode.modified > 0 && item.keynum == keyCode.modified ? true : false} + selected={!!(keyCode.modified > 0 && item.keynum == keyCode.modified)} disabled={disabled || activeTab == "super"} /> ); @@ -215,7 +203,7 @@ class DualFunctionPicker extends Component { key={`itemDualFunctionMod-${id}`} buttonText={item.nameStd} onClick={e => onKeySelect(parseInt(item.keynum) + keyCode.base)} - selected={keyCode.modified > 0 && item.keynum == keyCode.modified ? true : false} + selected={!!(keyCode.modified > 0 && item.keynum == keyCode.modified)} disabled={disabled || activeTab == "super"} /> ); diff --git a/src/renderer/modules/KeyPickerKeyboard/ENa.json b/src/renderer/modules/KeyPickerKeyboard/ENa.json index 41de2c847..39f2cdd85 100644 --- a/src/renderer/modules/KeyPickerKeyboard/ENa.json +++ b/src/renderer/modules/KeyPickerKeyboard/ENa.json @@ -1469,7 +1469,7 @@ "iconname": "", "content": { "type": "longBlock", - "first": "Intro", + "first": "Enter", "second": "", "third": "", "fourth": "" diff --git a/src/renderer/modules/KeyPickerKeyboard/ENi.json b/src/renderer/modules/KeyPickerKeyboard/ENi.json index 453d569a9..496fd6eae 100644 --- a/src/renderer/modules/KeyPickerKeyboard/ENi.json +++ b/src/renderer/modules/KeyPickerKeyboard/ENi.json @@ -1485,7 +1485,7 @@ "iconname": "", "content": { "type": "longBlock", - "first": "Intro", + "first": "Enter", "second": "", "third": "", "fourth": "" diff --git a/src/renderer/modules/KeyPickerKeyboard/EU.json b/src/renderer/modules/KeyPickerKeyboard/EU.json new file mode 100644 index 000000000..a0d186f6f --- /dev/null +++ b/src/renderer/modules/KeyPickerKeyboard/EU.json @@ -0,0 +1,1714 @@ +[ + { + "id": 41, + "x": 0, + "y": 0, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1UT", + "first": "ESC", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 58, + "x": 70, + "y": 0, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1UT", + "first": "F1", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 59, + "x": 119, + "y": 0, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1UT", + "first": "F2", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 60, + "x": 168, + "y": 0, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1UT", + "first": "F3", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 61, + "x": 218, + "y": 0, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1UT", + "first": "F4", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 62, + "x": 287, + "y": 0, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1UT", + "first": "F5", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 63, + "x": 336, + "y": 0, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1UT", + "first": "F6", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 64, + "x": 385, + "y": 0, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1UT", + "first": "F7", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 65, + "x": 435, + "y": 0, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1UT", + "first": "F8", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 66, + "x": 503, + "y": 0, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1UT", + "first": "F9", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 67, + "x": 552, + "y": 0, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1UT", + "first": "F10", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 68, + "x": 601, + "y": 0, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1UT", + "first": "F11", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 69, + "x": 651, + "y": 0, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1UT", + "first": "F12", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 70, + "x": 715, + "y": 38, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "specialBlock", + "first": "Print", + "second": "Scr", + "third": "", + "fourth": "" + } + }, + { + "id": 71, + "x": 765, + "y": 38, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "specialBlock", + "first": "Scroll", + "second": "Lock", + "third": "", + "fourth": "" + } + }, + { + "id": 72, + "x": 814, + "y": 38, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "specialBlock", + "first": "Pause", + "second": "Break", + "third": "", + "fourth": "" + } + }, + { + "id": 83, + "x": 877, + "y": 38, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "block", + "first": "Num", + "second": "Lock", + "third": "", + "fourth": "" + } + }, + { + "id": 84, + "x": 926, + "y": 38, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "block", + "first": "/", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 85, + "x": 975, + "y": 38, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "block", + "first": "*", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 86, + "x": 1024, + "y": 38, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "block", + "first": "-", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 53, + "x": 0, + "y": 38, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "`", + "second": "~", + "third": "`", + "fourth": "~" + } + }, + { + "id": 30, + "x": 49, + "y": 38, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "1", + "second": "!", + "third": "¡", + "fourth": "¹" + } + }, + { + "id": 31, + "x": 98, + "y": 38, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "2", + "second": "@", + "third": "ª", + "fourth": "²" + } + }, + { + "id": 32, + "x": 147, + "y": 38, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "3", + "second": "#", + "third": "º", + "fourth": "³" + } + }, + { + "id": 33, + "x": 196, + "y": 38, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "4", + "second": "$", + "third": "£", + "fourth": "¥" + } + }, + { + "id": 34, + "x": 245, + "y": 38, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "5", + "second": "%", + "third": "€", + "fourth": "¢" + } + }, + { + "id": 35, + "x": 294, + "y": 38, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "6", + "second": "^", + "third": "^", + "fourth": "ˇ" + } + }, + { + "id": 36, + "x": 343, + "y": 38, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "7", + "second": "&", + "third": "˚", + "fourth": "¯" + } + }, + { + "id": 37, + "x": 392, + "y": 38, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "8", + "second": "*", + "third": "„", + "fourth": "‚" + } + }, + { + "id": 38, + "x": 441, + "y": 38, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "9", + "second": "(", + "third": "“", + "fourth": "‘" + } + }, + { + "id": 39, + "x": 490, + "y": 38, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "0", + "second": ")", + "third": "”", + "fourth": "’" + } + }, + { + "id": 45, + "x": 539, + "y": 38, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "-", + "second": "_", + "third": "✓", + "fourth": "✗" + } + }, + { + "id": 46, + "x": 588, + "y": 38, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "=", + "second": "+", + "third": "×", + "fourth": "÷" + } + }, + { + "id": 42, + "x": 637, + "y": 38, + "centered": true, + "icon": true, + "iconsize": 16, + "iconx": 655, + "icony": 40, + "idArray": "", + "iconname": "Backspace", + "content": { + "type": "1U2", + "first": "", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 73, + "x": 715, + "y": 73, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "specialBlock", + "first": "Ins", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 74, + "x": 765, + "y": 73, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "specialBlock", + "first": "Home", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 75, + "x": 814, + "y": 73, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "specialBlock", + "first": "Page", + "second": "Up", + "third": "", + "fourth": "" + } + }, + { + "id": 95, + "x": 877, + "y": 73, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "block", + "first": "7", + "second": "Home", + "third": "", + "fourth": "" + } + }, + { + "id": 96, + "x": 926, + "y": 73, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "block", + "first": "8", + "second": "↑", + "third": "", + "fourth": "" + } + }, + { + "id": 97, + "x": 975, + "y": 73, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "block", + "first": "9", + "second": "PgUp", + "third": "", + "fourth": "" + } + }, + { + "id": 87, + "x": 1024, + "y": 73, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "longBlock", + "first": "+", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 43, + "x": 0, + "y": 73, + "centered": true, + "icon": true, + "iconsize": 15, + "iconx": 21, + "icony": 75, + "idArray": "", + "iconname": "Tab", + "content": { + "type": "1U2", + "first": "", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 20, + "x": 62, + "y": 73, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "q", + "second": "Q", + "third": "æ", + "fourth": "Æ" + } + }, + { + "id": 26, + "x": 111, + "y": 73, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "w", + "second": "W", + "third": "å", + "fourth": "Å" + } + }, + { + "id": 8, + "x": 160, + "y": 73, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "e", + "second": "E", + "third": "ë", + "fourth": "Ë" + } + }, + { + "id": 21, + "x": 209, + "y": 73, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "r", + "second": "R", + "third": "ý", + "fourth": "Ý" + } + }, + { + "id": 23, + "x": 258, + "y": 73, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "t", + "second": "T", + "third": "þ", + "fourth": "Þ" + } + }, + { + "id": 28, + "x": 307, + "y": 73, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "y", + "second": "Y", + "third": "ÿ", + "fourth": "Ÿ" + } + }, + { + "id": 24, + "x": 356, + "y": 73, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "u", + "second": "U", + "third": "ü", + "fourth": "Ü" + } + }, + { + "id": 12, + "x": 405, + "y": 73, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "i", + "second": "I", + "third": "ï", + "fourth": "Ï" + } + }, + { + "id": 18, + "x": 454, + "y": 73, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "o", + "second": "O", + "third": "ö", + "fourth": "Ö" + } + }, + { + "id": 19, + "x": 503, + "y": 73, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "p", + "second": "P", + "third": "œ", + "fourth": "Œ" + } + }, + { + "id": 47, + "x": 552, + "y": 73, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "[", + "second": "{", + "third": "«", + "fourth": "‹" + } + }, + { + "id": 48, + "x": 601, + "y": 73, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "]", + "second": "}", + "third": "»", + "fourth": "›" + } + }, + { + "id": 49, + "x": 650, + "y": 73, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "\\", + "second": "|", + "third": "¬", + "fourth": "¦" + } + }, + { + "id": 76, + "x": 715, + "y": 108, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "specialBlock", + "first": "Del", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 77, + "x": 765, + "y": 108, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "specialBlock", + "first": "End", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 78, + "x": 814, + "y": 108, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "specialBlock", + "first": "Page", + "second": "Dwn", + "third": "", + "fourth": "" + } + }, + { + "id": 57, + "x": 0, + "y": 108, + "centered": true, + "icon": true, + "iconsize": 22, + "iconx": 22, + "icony": 105, + "idArray": "", + "iconname": "CapsLock", + "content": { + "type": "1U5", + "first": "", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 4, + "x": 70, + "y": 108, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "a", + "second": "A", + "third": "ä", + "fourth": "Ä" + } + }, + { + "id": 22, + "x": 119, + "y": 108, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "s", + "second": "S", + "third": "ß", + "fourth": "ẞ" + } + }, + { + "id": 7, + "x": 168, + "y": 108, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "d", + "second": "D", + "third": "đ", + "fourth": "Đ" + } + }, + { + "id": 9, + "x": 218, + "y": 108, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "f", + "second": "F", + "third": "è", + "fourth": "È" + } + }, + { + "id": 10, + "x": 267, + "y": 108, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "g", + "second": "G", + "third": "é", + "fourth": "É" + } + }, + { + "id": 11, + "x": 316, + "y": 108, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "h", + "second": "H", + "third": "ù", + "fourth": "Ù" + } + }, + { + "id": 13, + "x": 366, + "y": 108, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "j", + "second": "J", + "third": "ú", + "fourth": "Ú" + } + }, + { + "id": 14, + "x": 414, + "y": 108, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "k", + "second": "K", + "third": "ij", + "fourth": "IJ" + } + }, + { + "id": 15, + "x": 464, + "y": 108, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "l", + "second": "L", + "third": "ø", + "fourth": "Ø" + } + }, + { + "id": 51, + "x": 514, + "y": 108, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": ";", + "second": ":", + "third": "°", + "fourth": "·" + } + }, + { + "id": 52, + "x": 563, + "y": 108, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "'", + "second": "\"", + "third": "´", + "fourth": "¨" + } + }, + { + "id": 40, + "x": 612, + "y": 108, + "centered": true, + "icon": true, + "iconsize": 20, + "iconx": 640, + "icony": 106, + "idArray": "", + "iconname": "Enter", + "content": { + "type": "1U6", + "first": "", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 92, + "x": 877, + "y": 108, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "block", + "first": "4", + "second": "←", + "third": "", + "fourth": "" + } + }, + { + "id": 93, + "x": 926, + "y": 108, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "block", + "first": "5", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 94, + "x": 975, + "y": 108, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "block", + "first": "6", + "second": "→", + "third": "", + "fourth": "" + } + }, + { + "id": 225, + "x": 0, + "y": 143, + "centered": true, + "icon": true, + "iconsize": 18, + "iconx": 42, + "icony": 142, + "idArray": "", + "iconname": "Shift", + "content": { + "type": "1U8", + "first": "", + "second": "", + "third": "", + "fourth": "" + }, + "mod": true + }, + { + "id": 29, + "x": 103, + "y": 143, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "z", + "second": "Z", + "third": "à", + "fourth": "À" + } + }, + { + "id": 27, + "x": 152, + "y": 143, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "x", + "second": "X", + "third": "á", + "fourth": "Á" + } + }, + { + "id": 6, + "x": 201, + "y": 143, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "c", + "second": "C", + "third": "ç", + "fourth": "Ç" + } + }, + { + "id": 25, + "x": 250, + "y": 143, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "v", + "second": "V", + "third": "ì", + "fourth": "Ì" + } + }, + { + "id": 5, + "x": 300, + "y": 143, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "b", + "second": "B", + "third": "í", + "fourth": "Í" + } + }, + { + "id": 17, + "x": 349, + "y": 143, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "n", + "second": "N", + "third": "ñ", + "fourth": "Ñ" + } + }, + { + "id": 16, + "x": 397, + "y": 143, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "m", + "second": "M", + "third": "α", + "fourth": "√" + } + }, + { + "id": 54, + "x": 446, + "y": 143, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": ",", + "second": "<", + "third": "ò", + "fourth": "Ò" + } + }, + { + "id": 55, + "x": 495, + "y": 143, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": ".", + "second": ">", + "third": "ó", + "fourth": "Ó" + } + }, + { + "id": 56, + "x": 544, + "y": 143, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "/", + "second": "?", + "third": "¿", + "fourth": "…" + } + }, + { + "id": 229, + "x": 593, + "y": 143, + "centered": true, + "icon": true, + "iconsize": 18, + "iconx": 632, + "icony": 142, + "idArray": "", + "iconname": "Shift", + "content": { + "type": "2U", + "first": "", + "second": "", + "third": "", + "fourth": "" + }, + "mod": true + }, + { + "id": 82, + "x": 765, + "y": 143, + "centered": true, + "icon": true, + "idArray": "", + "iconname": "ArrUp", + "content": { + "type": "specialBlock", + "first": "", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 89, + "x": 877, + "y": 143, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "block", + "first": "1", + "second": "End", + "third": "", + "fourth": "" + } + }, + { + "id": 90, + "x": 926, + "y": 143, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "block", + "first": "2", + "second": "↓", + "third": "", + "fourth": "" + } + }, + { + "id": 91, + "x": 975, + "y": 143, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "block", + "first": "3", + "second": "PgDw", + "third": "", + "fourth": "" + } + }, + { + "id": 88, + "x": 1024, + "y": 143, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "longBlock", + "first": "Enter", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 224, + "x": 0, + "y": 178, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "2U2", + "first": "Ctrl", + "second": "", + "third": "", + "fourth": "" + }, + "mod": true + }, + { + "id": 227, + "x": 59, + "y": 178, + "centered": true, + "icon": true, + "idArray": "", + "iconname": "Win", + "content": { + "type": "2U2", + "first": "", + "second": "", + "third": "", + "fourth": "" + }, + "mod": true + }, + { + "id": 226, + "x": 118, + "y": 178, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "2U2", + "first": "Alt", + "second": "", + "third": "", + "fourth": "" + }, + "mod": true + }, + { + "id": 44, + "x": 177, + "y": 178, + "centered": true, + "icon": true, + "iconsize": 20, + "iconx": 310, + "icony": 177, + "idArray": "", + "iconname": "Space", + "content": { + "type": "6U2", + "first": "", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 230, + "x": 463, + "y": 178, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "2U2", + "first": "Alt", + "second": "", + "third": "", + "fourth": "" + }, + "mod": true + }, + { + "id": 231, + "x": 522, + "y": 178, + "centered": true, + "icon": true, + "idArray": "", + "iconname": "Win", + "content": { + "type": "2U2", + "first": "", + "second": "", + "third": "", + "fourth": "" + }, + "mod": true + }, + { + "id": 101, + "x": 581, + "y": 178, + "centered": true, + "icon": true, + "iconsize": 19, + "iconx": 587, + "icony": 177, + "idArray": "", + "iconname": "App", + "content": { + "type": "2U2", + "first": "", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 228, + "x": 640, + "y": 178, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "2U2", + "first": "Ctrl", + "second": "", + "third": "", + "fourth": "" + }, + "mod": true + }, + { + "id": 80, + "x": 715, + "y": 178, + "centered": true, + "icon": true, + "idArray": "", + "iconname": "ArrLeft", + "content": { + "type": "specialBlock", + "first": "", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 81, + "x": 765, + "y": 178, + "centered": true, + "icon": true, + "idArray": "", + "iconname": "ArrDwn", + "content": { + "type": "specialBlock", + "first": "", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 79, + "x": 814, + "y": 178, + "centered": true, + "icon": true, + "idArray": "", + "iconname": "ArrRight", + "content": { + "type": "specialBlock", + "first": "", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 98, + "x": 877, + "y": 178, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "wideBlock", + "first": "0", + "second": "Ins", + "third": "", + "fourth": "" + } + }, + { + "id": 99, + "x": 975, + "y": 178, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "block", + "first": ".", + "second": "Del", + "third": "", + "fourth": "" + } + }, + { + "id": 104, + "x": 715, + "y": 0, + "centered": true, + "icon": false, + "idArray": [104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115], + "iconname": "", + "content": { + "type": "specialBlockDropdown", + "first": "F13+", + "second": "", + "third": "", + "fourth": "" + } + } +] diff --git a/src/renderer/modules/KeyPickerKeyboard/FR-BEPO.json b/src/renderer/modules/KeyPickerKeyboard/FR-BEPO.json new file mode 100644 index 000000000..f80de7af6 --- /dev/null +++ b/src/renderer/modules/KeyPickerKeyboard/FR-BEPO.json @@ -0,0 +1,1730 @@ +[ + { + "id": 41, + "x": 0, + "y": 0, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1UT", + "first": "Échap", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 58, + "x": 70, + "y": 0, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1UT", + "first": "F1", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 59, + "x": 119, + "y": 0, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1UT", + "first": "F2", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 60, + "x": 168, + "y": 0, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1UT", + "first": "F3", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 61, + "x": 218, + "y": 0, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1UT", + "first": "F4", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 62, + "x": 287, + "y": 0, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1UT", + "first": "F5", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 63, + "x": 336, + "y": 0, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1UT", + "first": "F6", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 64, + "x": 385, + "y": 0, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1UT", + "first": "F7", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 65, + "x": 435, + "y": 0, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1UT", + "first": "F8", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 66, + "x": 503, + "y": 0, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1UT", + "first": "F9", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 67, + "x": 552, + "y": 0, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1UT", + "first": "F10", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 68, + "x": 601, + "y": 0, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1UT", + "first": "F11", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 69, + "x": 651, + "y": 0, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1UT", + "first": "F12", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 70, + "x": 715, + "y": 38, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "specialBlock", + "first": "Impr.", + "second": "écran", + "third": "", + "fourth": "" + } + }, + { + "id": 71, + "x": 765, + "y": 38, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "specialBlock", + "first": "Arrêt", + "second": "défil.", + "third": "", + "fourth": "" + } + }, + { + "id": 72, + "x": 814, + "y": 38, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "specialBlock", + "first": "Pause", + "second": "Attn", + "third": "", + "fourth": "" + } + }, + { + "id": 83, + "x": 877, + "y": 38, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "block", + "first": "Num", + "second": "Lock", + "third": "", + "fourth": "" + } + }, + { + "id": 84, + "x": 926, + "y": 38, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "block", + "first": "/", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 85, + "x": 975, + "y": 38, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "block", + "first": "*", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 86, + "x": 1024, + "y": 38, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "block", + "first": "-", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 53, + "x": 0, + "y": 38, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "$", + "second": "#", + "third": "–", + "fourth": "¶" + } + }, + { + "id": 30, + "x": 49, + "y": 38, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "\"", + "second": "1", + "third": "—", + "fourth": "„" + } + }, + { + "id": 31, + "x": 98, + "y": 38, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "«", + "second": "2", + "third": "<", + "fourth": "“" + } + }, + { + "id": 32, + "x": 147, + "y": 38, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "»", + "second": "3", + "third": ">", + "fourth": "”" + } + }, + { + "id": 33, + "x": 196, + "y": 38, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "(", + "second": "4", + "third": "[", + "fourth": "⩽" + } + }, + { + "id": 34, + "x": 245, + "y": 38, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": ")", + "second": "5", + "third": "]", + "fourth": "⩾" + } + }, + { + "id": 35, + "x": 294, + "y": 38, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "@", + "second": "6", + "third": "^", + "fourth": "⚠" + } + }, + { + "id": 36, + "x": 343, + "y": 38, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "+", + "second": "7", + "third": "±", + "fourth": "¬" + } + }, + { + "id": 37, + "x": 392, + "y": 38, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "-", + "second": "8", + "third": "−", + "fourth": "¼" + } + }, + { + "id": 38, + "x": 441, + "y": 38, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "/", + "second": "9", + "third": "÷", + "fourth": "½" + } + }, + { + "id": 39, + "x": 490, + "y": 38, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "*", + "second": "0", + "third": "×", + "fourth": "¾" + } + }, + { + "id": 45, + "x": 539, + "y": 38, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "=", + "second": "°", + "third": "≠", + "fourth": "′" + } + }, + { + "id": 46, + "x": 588, + "y": 38, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "%", + "second": "`", + "third": "‰", + "fourth": "″" + } + }, + { + "id": 42, + "x": 637, + "y": 38, + "centered": true, + "icon": true, + "iconsize": 16, + "iconx": 655, + "icony": 40, + "idArray": "", + "iconname": "Backspace", + "content": { + "type": "1U2", + "first": "", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 73, + "x": 715, + "y": 73, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "specialBlock", + "first": "Ins", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 74, + "x": 765, + "y": 73, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "specialBlock", + "first": "Home", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 75, + "x": 814, + "y": 73, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "specialBlock", + "first": "Page", + "second": "Up", + "third": "", + "fourth": "" + } + }, + { + "id": 95, + "x": 877, + "y": 73, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "block", + "first": "7", + "second": "Home", + "third": "", + "fourth": "" + } + }, + { + "id": 96, + "x": 926, + "y": 73, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "block", + "first": "8", + "second": "↑", + "third": "", + "fourth": "" + } + }, + { + "id": 97, + "x": 975, + "y": 73, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "block", + "first": "9", + "second": "PgUp", + "third": "", + "fourth": "" + } + }, + { + "id": 87, + "x": 1024, + "y": 73, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "longBlock", + "first": "+", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 43, + "x": 0, + "y": 73, + "centered": true, + "icon": true, + "iconsize": 15, + "iconx": 21, + "icony": 75, + "idArray": "", + "iconname": "Tab", + "content": { + "type": "1U2", + "first": "", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 20, + "x": 62, + "y": 73, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "b", + "second": "B", + "third": "|", + "fourth": "_" + } + }, + { + "id": 26, + "x": 111, + "y": 73, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "é", + "second": "É", + "third": "´", + "fourth": "" + } + }, + { + "id": 8, + "x": 160, + "y": 73, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "p", + "second": "P", + "third": "&", + "fourth": "§" + } + }, + { + "id": 21, + "x": 209, + "y": 73, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "o", + "second": "O", + "third": "œ", + "fourth": "Œ" + } + }, + { + "id": 23, + "x": 258, + "y": 73, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "è", + "second": "È", + "third": "`", + "fourth": "`" + } + }, + { + "id": 28, + "x": 307, + "y": 73, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "^", + "second": "!", + "third": "¡", + "fourth": "" + } + }, + { + "id": 24, + "x": 356, + "y": 73, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "v", + "second": "V", + "third": "ˇ", + "fourth": "" + } + }, + { + "id": 12, + "x": 405, + "y": 73, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "d", + "second": "D", + "third": "∞", + "fourth": "" + } + }, + { + "id": 18, + "x": 454, + "y": 73, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "l", + "second": "L", + "third": "/", + "fourth": "£" + } + }, + { + "id": 19, + "x": 503, + "y": 73, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "j", + "second": "J", + "third": "", + "fourth": "" + } + }, + { + "id": 47, + "x": 552, + "y": 73, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "z", + "second": "Z", + "third": "-", + "fourth": "" + } + }, + { + "id": 48, + "x": 601, + "y": 73, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "w", + "second": "W", + "third": "", + "fourth": "" + } + }, + { + "id": 40, + "x": 653, + "y": 73, + "centered": true, + "icon": true, + "iconsize": 20, + "iconx": 660, + "icony": 73, + "idArray": "", + "iconname": "Enter", + "content": { + "type": "enter", + "first": "", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 76, + "x": 715, + "y": 108, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "specialBlock", + "first": "Suppr.", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 77, + "x": 765, + "y": 108, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "specialBlock", + "first": "Fin", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 78, + "x": 814, + "y": 108, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "specialBlock", + "first": "Page", + "second": "Dwn", + "third": "", + "fourth": "" + } + }, + { + "id": 57, + "x": 0, + "y": 108, + "centered": true, + "icon": true, + "iconsize": 22, + "iconx": 22, + "icony": 105, + "idArray": "", + "iconname": "CapsLock", + "content": { + "type": "1U5", + "first": "", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 4, + "x": 70, + "y": 108, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "a", + "second": "A", + "third": "æ", + "fourth": "Æ" + } + }, + { + "id": 22, + "x": 119, + "y": 108, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "u", + "second": "U", + "third": "ù", + "fourth": "Ù" + } + }, + { + "id": 7, + "x": 168, + "y": 108, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "i", + "second": "I", + "third": "¨", + "fourth": "˙" + } + }, + { + "id": 9, + "x": 218, + "y": 108, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "e", + "second": "E", + "third": "€", + "fourth": "¤" + } + }, + { + "id": 10, + "x": 267, + "y": 108, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": ",", + "second": ";", + "third": "'", + "fourth": "," + } + }, + { + "id": 11, + "x": 316, + "y": 108, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "c", + "second": "C", + "third": "¸", + "fourth": "©" + } + }, + { + "id": 13, + "x": 365, + "y": 108, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "t", + "second": "T", + "third": "ᵉ", + "fourth": "™" + } + }, + { + "id": 14, + "x": 414, + "y": 108, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "s", + "second": "S", + "third": "ß", + "fourth": "ſ" + } + }, + { + "id": 15, + "x": 464, + "y": 108, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "r", + "second": "R", + "third": "˘", + "fourth": "®" + } + }, + { + "id": 51, + "x": 514, + "y": 108, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "n", + "second": "N", + "third": "~", + "fourth": "" + } + }, + { + "id": 52, + "x": 563, + "y": 108, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "m", + "second": "M", + "third": "¯", + "fourth": "" + } + }, + { + "id": 49, + "x": 612, + "y": 108, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "ç", + "second": "Ç", + "third": "", + "fourth": "" + } + }, + { + "id": 92, + "x": 877, + "y": 108, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "block", + "first": "4", + "second": "←", + "third": "", + "fourth": "" + } + }, + { + "id": 93, + "x": 926, + "y": 108, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "block", + "first": "5", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 94, + "x": 975, + "y": 108, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "block", + "first": "6", + "second": "→", + "third": "", + "fourth": "" + } + }, + { + "id": 225, + "x": 0, + "y": 143, + "centered": true, + "icon": true, + "iconsize": 18, + "iconx": 12, + "icony": 142, + "idArray": "", + "iconname": "Shift", + "content": { + "type": "1US", + "first": "", + "second": "", + "third": "", + "fourth": "" + }, + "mod": true + }, + { + "id": 100, + "x": 49, + "y": 143, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "ê", + "second": "Ê", + "third": "/", + "fourth": "^" + } + }, + { + "id": 29, + "x": 98, + "y": 143, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "à", + "second": "À", + "third": "\\", + "fourth": "‚" + } + }, + { + "id": 27, + "x": 147, + "y": 143, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "y", + "second": "Y", + "third": "{", + "fourth": "‘" + } + }, + { + "id": 6, + "x": 196, + "y": 143, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "x", + "second": "X", + "third": "}", + "fourth": "’" + } + }, + { + "id": 25, + "x": 246, + "y": 143, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": ".", + "second": ":", + "third": "…", + "fourth": "·" + } + }, + { + "id": 5, + "x": 296, + "y": 143, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "k", + "second": "K", + "third": "~", + "fourth": "‑" + } + }, + { + "id": 17, + "x": 345, + "y": 143, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "’", + "second": "?", + "third": "¿", + "fourth": " ̉" + } + }, + { + "id": 16, + "x": 394, + "y": 143, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "q", + "second": "Q", + "third": "°", + "fourth": " ̛" + } + }, + { + "id": 54, + "x": 443, + "y": 143, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "g", + "second": "G", + "third": "µ", + "fourth": "†" + } + }, + { + "id": 55, + "x": 492, + "y": 143, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "h", + "second": "H", + "third": ".", + "fourth": "‡" + } + }, + { + "id": 56, + "x": 542, + "y": 143, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1US", + "first": "f", + "second": "F", + "third": "˛", + "fourth": "" + } + }, + { + "id": 229, + "x": 592, + "y": 143, + "centered": true, + "icon": true, + "iconsize": 18, + "iconx": 630, + "icony": 142, + "idArray": "", + "iconname": "Shift", + "content": { + "type": "2U", + "first": "", + "second": "", + "third": "", + "fourth": "" + }, + "mod": true + }, + { + "id": 82, + "x": 765, + "y": 143, + "centered": true, + "icon": true, + "idArray": "", + "iconname": "ArrUp", + "content": { + "type": "specialBlock", + "first": "", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 89, + "x": 877, + "y": 143, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "block", + "first": "1", + "second": "End", + "third": "", + "fourth": "" + } + }, + { + "id": 90, + "x": 926, + "y": 143, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "block", + "first": "2", + "second": "↓", + "third": "", + "fourth": "" + } + }, + { + "id": 91, + "x": 975, + "y": 143, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "block", + "first": "3", + "second": "PgDw", + "third": "", + "fourth": "" + } + }, + { + "id": 88, + "x": 1024, + "y": 143, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "longBlock", + "first": "Enter", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 224, + "x": 0, + "y": 178, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "2U2", + "first": "Ctrl", + "second": "", + "third": "", + "fourth": "" + }, + "mod": true + }, + { + "id": 227, + "x": 59, + "y": 178, + "centered": true, + "icon": true, + "idArray": "", + "iconname": "Win", + "content": { + "type": "2U2", + "first": "", + "second": "", + "third": "", + "fourth": "" + }, + "mod": true + }, + { + "id": 226, + "x": 118, + "y": 178, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "2U2", + "first": "Alt", + "second": "", + "third": "", + "fourth": "" + }, + "mod": true + }, + { + "id": 44, + "x": 177, + "y": 178, + "centered": true, + "icon": true, + "iconsize": 20, + "iconx": 310, + "icony": 173, + "idArray": "", + "iconname": "Space", + "content": { + "type": "6U2", + "first": "", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 230, + "x": 463, + "y": 178, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "2U2", + "first": "Alt Gr", + "second": "", + "third": "", + "fourth": "" + }, + "mod": true + }, + { + "id": 231, + "x": 521, + "y": 178, + "centered": true, + "icon": true, + "idArray": "", + "iconname": "Win", + "content": { + "type": "2U2", + "first": "", + "second": "", + "third": "", + "fourth": "" + }, + "mod": true + }, + { + "id": 101, + "x": 580, + "y": 178, + "centered": true, + "icon": true, + "iconsize": 19, + "iconx": 584, + "icony": 176, + "idArray": "", + "iconname": "App", + "content": { + "type": "2U2", + "first": "", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 228, + "x": 639, + "y": 178, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "2U2", + "first": "Ctrl", + "second": "", + "third": "", + "fourth": "" + }, + "mod": true + }, + { + "id": 80, + "x": 715, + "y": 178, + "centered": true, + "icon": true, + "idArray": "", + "iconname": "ArrLeft", + "content": { + "type": "specialBlock", + "first": "", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 81, + "x": 765, + "y": 178, + "centered": true, + "icon": true, + "idArray": "", + "iconname": "ArrDwn", + "content": { + "type": "specialBlock", + "first": "", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 79, + "x": 814, + "y": 178, + "centered": true, + "icon": true, + "idArray": "", + "iconname": "ArrRight", + "content": { + "type": "specialBlock", + "first": "", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 98, + "x": 877, + "y": 178, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "wideBlock", + "first": "0", + "second": "Ins", + "third": "", + "fourth": "" + } + }, + { + "id": 99, + "x": 975, + "y": 178, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "block", + "first": ".", + "second": "Del", + "third": "", + "fourth": "" + } + }, + { + "id": 104, + "x": 715, + "y": 0, + "centered": true, + "icon": false, + "idArray": [104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115], + "iconname": "", + "content": { + "type": "specialBlockDropdown", + "first": "F13+", + "second": "", + "third": "", + "fourth": "" + } + } +] diff --git a/src/renderer/modules/KeyPickerKeyboard/FR.json b/src/renderer/modules/KeyPickerKeyboard/FR.json index 5273e081f..aaf532a59 100644 --- a/src/renderer/modules/KeyPickerKeyboard/FR.json +++ b/src/renderer/modules/KeyPickerKeyboard/FR.json @@ -1485,7 +1485,7 @@ "iconname": "", "content": { "type": "longBlock", - "first": "Intro", + "first": "Enter", "second": "", "third": "", "fourth": "" diff --git a/src/renderer/modules/KeyPickerKeyboard/GR.json b/src/renderer/modules/KeyPickerKeyboard/GR.json index 967865595..1d0dc2e4d 100644 --- a/src/renderer/modules/KeyPickerKeyboard/GR.json +++ b/src/renderer/modules/KeyPickerKeyboard/GR.json @@ -1485,7 +1485,7 @@ "iconname": "", "content": { "type": "longBlock", - "first": "Intro", + "first": "Enter", "second": "", "third": "", "fourth": "" diff --git a/src/renderer/modules/KeyPickerKeyboard/IC.json b/src/renderer/modules/KeyPickerKeyboard/IC.json index a28c15c55..032d65fcd 100644 --- a/src/renderer/modules/KeyPickerKeyboard/IC.json +++ b/src/renderer/modules/KeyPickerKeyboard/IC.json @@ -1485,7 +1485,7 @@ "iconname": "", "content": { "type": "longBlock", - "first": "Intro", + "first": "Enter", "second": "", "third": "", "fourth": "" diff --git a/src/renderer/modules/KeyPickerKeyboard/JP.json b/src/renderer/modules/KeyPickerKeyboard/JP.json index 45c2a7969..4fb74d58d 100644 --- a/src/renderer/modules/KeyPickerKeyboard/JP.json +++ b/src/renderer/modules/KeyPickerKeyboard/JP.json @@ -1484,7 +1484,7 @@ "iconname": "", "content": { "type": "longBlock", - "first": "Intro", + "first": "Enter", "second": "", "third": "", "fourth": "" diff --git a/src/renderer/modules/KeyPickerKeyboard/KR.json b/src/renderer/modules/KeyPickerKeyboard/KR.json new file mode 100644 index 000000000..cdaab61b0 --- /dev/null +++ b/src/renderer/modules/KeyPickerKeyboard/KR.json @@ -0,0 +1,1730 @@ +[ + { + "id": 41, + "x": 0, + "y": 0, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1UT", + "first": "ESC", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 58, + "x": 70, + "y": 0, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1UT", + "first": "F1", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 59, + "x": 119, + "y": 0, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1UT", + "first": "F2", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 60, + "x": 168, + "y": 0, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1UT", + "first": "F3", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 61, + "x": 218, + "y": 0, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1UT", + "first": "F4", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 62, + "x": 287, + "y": 0, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1UT", + "first": "F5", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 63, + "x": 336, + "y": 0, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1UT", + "first": "F6", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 64, + "x": 385, + "y": 0, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1UT", + "first": "F7", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 65, + "x": 435, + "y": 0, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1UT", + "first": "F8", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 66, + "x": 503, + "y": 0, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1UT", + "first": "F9", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 67, + "x": 552, + "y": 0, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1UT", + "first": "F10", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 68, + "x": 601, + "y": 0, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1UT", + "first": "F11", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 69, + "x": 651, + "y": 0, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1UT", + "first": "F12", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 70, + "x": 715, + "y": 38, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "specialBlock", + "first": "Print", + "second": "Scr", + "third": "", + "fourth": "" + } + }, + { + "id": 71, + "x": 765, + "y": 38, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "specialBlock", + "first": "Scroll", + "second": "Lock", + "third": "", + "fourth": "" + } + }, + { + "id": 72, + "x": 814, + "y": 38, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "specialBlock", + "first": "Pause", + "second": "Break", + "third": "", + "fourth": "" + } + }, + { + "id": 83, + "x": 877, + "y": 38, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "block", + "first": "Num", + "second": "Lock", + "third": "", + "fourth": "" + } + }, + { + "id": 84, + "x": 926, + "y": 38, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "block", + "first": "/", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 85, + "x": 975, + "y": 38, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "block", + "first": "*", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 86, + "x": 1024, + "y": 38, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "block", + "first": "-", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 53, + "x": 0, + "y": 38, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": "`", + "second": "~", + "third": "", + "fourth": "" + } + }, + { + "id": 30, + "x": 49, + "y": 38, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": "1", + "second": "!", + "third": "", + "fourth": "" + } + }, + { + "id": 31, + "x": 98, + "y": 38, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": "2", + "second": "@", + "third": "", + "fourth": "" + } + }, + { + "id": 32, + "x": 147, + "y": 38, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": "3", + "second": "#", + "third": "", + "fourth": "" + } + }, + { + "id": 33, + "x": 196, + "y": 38, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": "4", + "second": "$", + "third": "", + "fourth": "" + } + }, + { + "id": 34, + "x": 245, + "y": 38, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": "5", + "second": "%", + "third": "", + "fourth": "" + } + }, + { + "id": 35, + "x": 294, + "y": 38, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": "6", + "second": "^", + "third": "", + "fourth": "" + } + }, + { + "id": 36, + "x": 343, + "y": 38, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": "7", + "second": "&", + "third": "", + "fourth": "" + } + }, + { + "id": 37, + "x": 392, + "y": 38, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": "8", + "second": "*", + "third": "", + "fourth": "" + } + }, + { + "id": 38, + "x": 441, + "y": 38, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": "9", + "second": "(", + "third": "", + "fourth": "" + } + }, + { + "id": 39, + "x": 490, + "y": 38, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": "0", + "second": ")", + "third": "", + "fourth": "" + } + }, + { + "id": 45, + "x": 539, + "y": 38, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": "-", + "second": "_", + "third": "", + "fourth": "" + } + }, + { + "id": 46, + "x": 588, + "y": 38, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": "=", + "second": "+", + "third": "", + "fourth": "" + } + }, + { + "id": 42, + "x": 637, + "y": 38, + "centered": true, + "icon": true, + "iconsize": 16, + "iconx": 655, + "icony": 40, + "idArray": "", + "iconname": "Backspace", + "content": { + "type": "1U2", + "first": "", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 73, + "x": 715, + "y": 73, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "specialBlock", + "first": "Ins", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 74, + "x": 765, + "y": 73, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "specialBlock", + "first": "Home", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 75, + "x": 814, + "y": 73, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "specialBlock", + "first": "Page", + "second": "Up", + "third": "", + "fourth": "" + } + }, + { + "id": 95, + "x": 877, + "y": 73, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "block", + "first": "7", + "second": "Home", + "third": "", + "fourth": "" + } + }, + { + "id": 96, + "x": 926, + "y": 73, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "block", + "first": "8", + "second": "↑", + "third": "", + "fourth": "" + } + }, + { + "id": 97, + "x": 975, + "y": 73, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "block", + "first": "9", + "second": "PgUp", + "third": "", + "fourth": "" + } + }, + { + "id": 87, + "x": 1024, + "y": 73, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "longBlock", + "first": "+", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 43, + "x": 0, + "y": 73, + "centered": true, + "icon": true, + "iconsize": 15, + "iconx": 21, + "icony": 75, + "idArray": "", + "iconname": "Tab", + "content": { + "type": "1U2", + "first": "", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 20, + "x": 62, + "y": 73, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": "Q", + "second": "ㅂ", + "third": "", + "fourth": "" + } + }, + { + "id": 26, + "x": 111, + "y": 73, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": "W", + "second": "ㅈ", + "third": "", + "fourth": "" + } + }, + { + "id": 8, + "x": 160, + "y": 73, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": "E", + "second": "ㄷ", + "third": "", + "fourth": "" + } + }, + { + "id": 21, + "x": 209, + "y": 73, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": "R", + "second": "ㄱ", + "third": "", + "fourth": "" + } + }, + { + "id": 23, + "x": 258, + "y": 73, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": "T", + "second": "ㅅ", + "third": "", + "fourth": "" + } + }, + { + "id": 28, + "x": 307, + "y": 73, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": "Y", + "second": "ㅛ", + "third": "", + "fourth": "" + } + }, + { + "id": 24, + "x": 356, + "y": 73, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": "U", + "second": "ㅕ", + "third": "", + "fourth": "" + } + }, + { + "id": 12, + "x": 405, + "y": 73, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": "I", + "second": "ㅑ", + "third": "", + "fourth": "" + } + }, + { + "id": 18, + "x": 454, + "y": 73, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": "O", + "second": "ㅐ", + "third": "", + "fourth": "" + } + }, + { + "id": 19, + "x": 503, + "y": 73, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": "P", + "second": "ㅔ", + "third": "", + "fourth": "" + } + }, + { + "id": 47, + "x": 552, + "y": 73, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": "[", + "second": "{", + "third": "", + "fourth": "" + } + }, + { + "id": 48, + "x": 601, + "y": 73, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": "]", + "second": "}", + "third": "", + "fourth": "" + } + }, + { + "id": 49, + "x": 650, + "y": 73, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": "\\", + "second": "|", + "third": "", + "fourth": "" + } + }, + { + "id": 76, + "x": 715, + "y": 108, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "specialBlock", + "first": "Del", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 77, + "x": 765, + "y": 108, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "specialBlock", + "first": "End", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 78, + "x": 814, + "y": 108, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "specialBlock", + "first": "Page", + "second": "Dwn", + "third": "", + "fourth": "" + } + }, + { + "id": 57, + "x": 0, + "y": 108, + "centered": true, + "icon": true, + "iconsize": 22, + "iconx": 22, + "icony": 105, + "idArray": "", + "iconname": "CapsLock", + "content": { + "type": "1U5", + "first": "", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 4, + "x": 70, + "y": 108, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": "A", + "second": "ㅁ", + "third": "", + "fourth": "" + } + }, + { + "id": 22, + "x": 119, + "y": 108, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": "S", + "second": "ㄴ", + "third": "", + "fourth": "" + } + }, + { + "id": 7, + "x": 168, + "y": 108, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": "D", + "second": "ㅇ", + "third": "", + "fourth": "" + } + }, + { + "id": 9, + "x": 218, + "y": 108, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": "F", + "second": "ㄹ", + "third": "", + "fourth": "" + } + }, + { + "id": 10, + "x": 267, + "y": 108, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": "G", + "second": "ㅎ", + "third": "", + "fourth": "" + } + }, + { + "id": 11, + "x": 316, + "y": 108, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": "H", + "second": "ㅗ", + "third": "", + "fourth": "" + } + }, + { + "id": 13, + "x": 366, + "y": 108, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": "J", + "second": "ㅓ", + "third": "", + "fourth": "" + } + }, + { + "id": 14, + "x": 414, + "y": 108, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": "K", + "second": "ㅏ", + "third": "", + "fourth": "" + } + }, + { + "id": 15, + "x": 464, + "y": 108, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": "L", + "second": "ㅣ", + "third": "", + "fourth": "" + } + }, + { + "id": 51, + "x": 514, + "y": 108, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": ";", + "second": ":", + "third": "", + "fourth": "" + } + }, + { + "id": 52, + "x": 563, + "y": 108, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": "'", + "second": "\"", + "third": "", + "fourth": "" + } + }, + { + "id": 40, + "x": 612, + "y": 108, + "centered": true, + "icon": true, + "iconsize": 20, + "iconx": 640, + "icony": 106, + "idArray": "", + "iconname": "Enter", + "content": { + "type": "1U6", + "first": "", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 92, + "x": 877, + "y": 108, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "block", + "first": "4", + "second": "←", + "third": "", + "fourth": "" + } + }, + { + "id": 93, + "x": 926, + "y": 108, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "block", + "first": "5", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 94, + "x": 975, + "y": 108, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "block", + "first": "6", + "second": "→", + "third": "", + "fourth": "" + } + }, + { + "id": 225, + "x": 0, + "y": 143, + "centered": true, + "icon": true, + "iconsize": 18, + "iconx": 42, + "icony": 142, + "idArray": "", + "iconname": "Shift", + "content": { + "type": "1U8", + "first": "", + "second": "", + "third": "", + "fourth": "" + }, + "mod": true + }, + { + "id": 29, + "x": 103, + "y": 143, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": "Z", + "second": "ㅋ", + "third": "", + "fourth": "" + } + }, + { + "id": 27, + "x": 152, + "y": 143, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": "X", + "second": "ㅌ", + "third": "", + "fourth": "" + } + }, + { + "id": 6, + "x": 201, + "y": 143, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": "C", + "second": "ㅊ", + "third": "", + "fourth": "" + } + }, + { + "id": 25, + "x": 250, + "y": 143, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": "V", + "second": "ㅍ", + "third": "", + "fourth": "" + } + }, + { + "id": 5, + "x": 300, + "y": 143, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": "B", + "second": "ㅠ", + "third": "", + "fourth": "" + } + }, + { + "id": 17, + "x": 349, + "y": 143, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": "N", + "second": "ㅜ", + "third": "", + "fourth": "" + } + }, + { + "id": 16, + "x": 397, + "y": 143, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": "M", + "second": "ㅡ", + "third": "", + "fourth": "" + } + }, + { + "id": 54, + "x": 446, + "y": 143, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": ",", + "second": "<", + "third": "", + "fourth": "" + } + }, + { + "id": 55, + "x": 495, + "y": 143, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": ".", + "second": ">", + "third": "", + "fourth": "" + } + }, + { + "id": 56, + "x": 544, + "y": 143, + "centered": false, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "1U", + "first": "/", + "second": "?", + "third": "", + "fourth": "" + } + }, + { + "id": 229, + "x": 593, + "y": 143, + "centered": true, + "icon": true, + "iconsize": 18, + "iconx": 632, + "icony": 142, + "idArray": "", + "iconname": "Shift", + "content": { + "type": "2U", + "first": "", + "second": "", + "third": "", + "fourth": "" + }, + "mod": true + }, + { + "id": 82, + "x": 765, + "y": 143, + "centered": true, + "icon": true, + "idArray": "", + "iconname": "ArrUp", + "content": { + "type": "specialBlock", + "first": "", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 89, + "x": 877, + "y": 143, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "block", + "first": "1", + "second": "End", + "third": "", + "fourth": "" + } + }, + { + "id": 90, + "x": 926, + "y": 143, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "block", + "first": "2", + "second": "↓", + "third": "", + "fourth": "" + } + }, + { + "id": 91, + "x": 975, + "y": 143, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "block", + "first": "3", + "second": "PgDw", + "third": "", + "fourth": "" + } + }, + { + "id": 88, + "x": 1024, + "y": 143, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "longBlock", + "first": "Intro", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 224, + "x": 0, + "y": 178, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "2U2", + "first": "Ctrl", + "second": "", + "third": "", + "fourth": "" + }, + "mod": true + }, + { + "id": 227, + "x": 59, + "y": 178, + "centered": true, + "icon": true, + "idArray": "", + "iconname": "Win", + "content": { + "type": "2U2", + "first": "", + "second": "", + "third": "", + "fourth": "" + }, + "mod": true + }, + { + "id": 226, + "x": 118, + "y": 178, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "2U2", + "first": "Alt", + "second": "", + "third": "", + "fourth": "" + }, + "mod": true + }, + { + "id": 44, + "x": 177, + "y": 178, + "centered": true, + "icon": true, + "iconsize": 20, + "iconx": 310, + "icony": 177, + "idArray": "", + "iconname": "Space", + "content": { + "type": "6U2", + "first": "", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 230, + "x": 463, + "y": 178, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "2U2", + "first": "Alt", + "second": "", + "third": "", + "fourth": "" + }, + "mod": true + }, + { + "id": 231, + "x": 522, + "y": 178, + "centered": true, + "icon": true, + "idArray": "", + "iconname": "Win", + "content": { + "type": "2U2", + "first": "", + "second": "", + "third": "", + "fourth": "" + }, + "mod": true + }, + { + "id": 101, + "x": 581, + "y": 178, + "centered": true, + "icon": true, + "iconsize": 19, + "iconx": 587, + "icony": 177, + "idArray": "", + "iconname": "App", + "content": { + "type": "2U2", + "first": "", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 228, + "x": 640, + "y": 178, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "2U2", + "first": "Ctrl", + "second": "", + "third": "", + "fourth": "" + }, + "mod": true + }, + { + "id": 80, + "x": 715, + "y": 178, + "centered": true, + "icon": true, + "idArray": "", + "iconname": "ArrLeft", + "content": { + "type": "specialBlock", + "first": "", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 81, + "x": 765, + "y": 178, + "centered": true, + "icon": true, + "idArray": "", + "iconname": "ArrDwn", + "content": { + "type": "specialBlock", + "first": "", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 79, + "x": 814, + "y": 178, + "centered": true, + "icon": true, + "idArray": "", + "iconname": "ArrRight", + "content": { + "type": "specialBlock", + "first": "", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 98, + "x": 877, + "y": 178, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "wideBlock", + "first": "0", + "second": "Ins", + "third": "", + "fourth": "" + } + }, + { + "id": 99, + "x": 975, + "y": 178, + "centered": true, + "icon": false, + "idArray": "", + "iconname": "", + "content": { + "type": "block", + "first": ".", + "second": "Del", + "third": "", + "fourth": "" + } + }, + { + "id": 104, + "x": 715, + "y": 0, + "centered": true, + "icon": false, + "idArray": [104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115], + "iconname": "", + "content": { + "type": "specialBlockDropdown", + "first": "F13+", + "second": "", + "third": "", + "fourth": "" + } + }, + { + "id": 136, + "x": 794, + "y": 0, + "centered": true, + "icon": false, + "idArray": [144, 145], + "iconname": "", + "content": { + "type": "genericBlockDropdown", + "first": "한글/한자", + "second": "", + "third": "", + "fourth": "" + } + } +] diff --git a/src/renderer/modules/KeyPickerKeyboard/Key.js b/src/renderer/modules/KeyPickerKeyboard/Key.js index 02578be68..f0f936d21 100644 --- a/src/renderer/modules/KeyPickerKeyboard/Key.js +++ b/src/renderer/modules/KeyPickerKeyboard/Key.js @@ -10,7 +10,6 @@ const Style = Styled.g` // will-change: fill, fill-opacity; transition-property: fill, fill-opacity; transition: 100ms ease-in-out; - } .shapeKey { stroke: ${({ theme }) => theme.styles.keyPicker.keyStrokeColor} @@ -78,8 +77,8 @@ const ksl = { b: { dx: 18, dy: 15, fs: 14 }, c: { dx: 28, dy: 15, fs: 14 }, d: { dx: 38, dy: 15, fs: 14 }, - letter: { dx: 18, dy: 16, ddx: 22, ddy: 16, fs: 13, fss: 13 } - } + letter: { dx: 18, dy: 16, ddx: 22, ddy: 16, fs: 13, fss: 13 }, + }, }, "2UT": { outb: { x: 94, y: 22, dx: 0, dy: 0 }, @@ -90,8 +89,20 @@ const ksl = { b: { dx: 60, dy: 16, fs: 16 }, c: { dx: 28, dy: 16, fs: 14 }, d: { dx: 38, dy: 16, fs: 14 }, - letter: { dx: 47, dy: 16, ddx: 47, ddy: 16, fs: 13, fss: 13 } - } + letter: { dx: 47, dy: 16, ddx: 47, ddy: 16, fs: 13, fss: 13 }, + }, + }, + "1US": { + outb: { x: keyCapRegularSize.width, y: keyCapRegularSize.height, dx: 0, dy: 0 }, + out: { x: 42, y: 24, dx: 1, dy: 1 }, + icon: { x: 12, y: -1, w: 30, h: 26 }, + text: { + a: { dx: 8, dy: 26, fs: 12 }, + b: { dx: 8, dy: 13, fs: 12 }, + c: { dx: 24, dy: 26, fs: 12 }, + d: { dx: 24, dy: 13, fs: 12 }, + letter: { dx: 22, dy: 19, ddx: 34, ddy: 7, fs: 13, fss: 13 }, + }, }, specialBlockDropdown: { outb: { x: 65, y: keyCapRegularSize.height, dx: 0, dy: 0 }, @@ -102,8 +113,8 @@ const ksl = { b: { dx: 18, dy: 15, fs: 14 }, c: { dx: 28, dy: 15, fs: 14 }, d: { dx: 38, dy: 15, fs: 14 }, - letter: { dx: 18, dy: 16, ddx: 22, ddy: 16, fs: 13, fss: 13 } - } + letter: { dx: 18, dy: 16, ddx: 22, ddy: 16, fs: 13, fss: 13 }, + }, }, genericBlockDropdown: { outb: { x: 200, y: keyCapRegularSize.height, dx: 0, dy: 0 }, @@ -114,8 +125,8 @@ const ksl = { b: { dx: 18, dy: 15, fs: 14 }, c: { dx: 28, dy: 15, fs: 14 }, d: { dx: 38, dy: 15, fs: 14 }, - letter: { dx: 18, dy: 16, ddx: 22, ddy: 16, fs: 13, fss: 13 } - } + letter: { dx: 18, dy: 16, ddx: 22, ddy: 16, fs: 13, fss: 13 }, + }, }, specialBlockT: { outb: { x: keyCapRegularSize.width, y: 22, dx: 0, dy: 0 }, @@ -126,8 +137,8 @@ const ksl = { b: { dx: 10, dy: 28, fs: 14 }, c: { dx: 128, dy: 19, fs: 14 }, d: { dx: 138, dy: 19, fs: 14 }, - letter: { dx: 22, dy: 17, ddx: 22, ddy: 17, fs: 13, fss: 13 } - } + letter: { dx: 22, dy: 17, ddx: 22, ddy: 17, fs: 13, fss: 13 }, + }, }, specialBlockT2: { outb: { x: keyCapRegularSize.width, y: 22, dx: 0, dy: 0 }, @@ -138,8 +149,8 @@ const ksl = { b: { dx: 10, dy: 28, fs: 14 }, c: { dx: 128, dy: 19, fs: 14 }, d: { dx: 138, dy: 19, fs: 14 }, - letter: { dx: 22, dy: 17, ddx: 22, ddy: 17, fs: 13, fss: 13 } - } + letter: { dx: 22, dy: 17, ddx: 22, ddy: 17, fs: 13, fss: 13 }, + }, }, "1U": { outb: { x: keyCapRegularSize.width, y: keyCapRegularSize.height, dx: 0, dy: 0 }, @@ -150,8 +161,8 @@ const ksl = { b: { dx: 18, dy: 22, fs: 13 }, c: { dx: 29, dy: 14, fs: 13 }, d: { dx: 38, dy: 15, fs: 13 }, - letter: { dx: 22, dy: 19, ddx: 34, ddy: 7, fs: 13, fss: 13 } - } + letter: { dx: 22, dy: 19, ddx: 34, ddy: 7, fs: 13, fss: 13 }, + }, }, "1U2": { outb: { x: 57, y: keyCapRegularSize.height, dx: 0, dy: 0 }, @@ -162,8 +173,8 @@ const ksl = { b: { dx: 16, dy: 19, fs: 14 }, c: { dx: 28, dy: 19, fs: 14 }, d: { dx: 38, dy: 19, fs: 14 }, - letter: { dx: 27, dy: 19, ddx: 27, ddy: 19, fs: 16, fss: 14 } - } + letter: { dx: 27, dy: 19, ddx: 27, ddy: 19, fs: 16, fss: 14 }, + }, }, "1U5": { outb: { x: 64, y: keyCapRegularSize.height, dx: 0, dy: 0 }, @@ -174,8 +185,8 @@ const ksl = { b: { dx: 16, dy: 19, fs: 14 }, c: { dx: 28, dy: 19, fs: 14 }, d: { dx: 38, dy: 19, fs: 14 }, - letter: { dx: 32, dy: 19, ddx: 32, ddy: 19, fs: 16, fss: 14 } - } + letter: { dx: 32, dy: 19, ddx: 32, ddy: 19, fs: 16, fss: 14 }, + }, }, "1U6": { outb: { x: 82, y: keyCapRegularSize.height, dx: 0, dy: 0 }, @@ -186,8 +197,8 @@ const ksl = { b: { dx: 16, dy: 19, fs: 14 }, c: { dx: 28, dy: 19, fs: 14 }, d: { dx: 38, dy: 19, fs: 14 }, - letter: { dx: 42, dy: 19, ddx: 42, ddy: 19, fs: 16, fss: 14 } - } + letter: { dx: 42, dy: 19, ddx: 42, ddy: 19, fs: 16, fss: 14 }, + }, }, "1U8": { outb: { x: 98, y: keyCapRegularSize.height, dx: 0, dy: 0 }, @@ -198,8 +209,8 @@ const ksl = { b: { dx: 16, dy: 19, fs: 14 }, c: { dx: 28, dy: 19, fs: 14 }, d: { dx: 38, dy: 19, fs: 14 }, - letter: { dx: 47, dy: 19, ddx: 47, ddy: 19, fs: 16, fss: 14 } - } + letter: { dx: 47, dy: 19, ddx: 47, ddy: 19, fs: 16, fss: 14 }, + }, }, "2U": { outb: { x: 101, y: keyCapRegularSize.height, dx: 0, dy: 0 }, @@ -210,8 +221,8 @@ const ksl = { b: { dx: 60, dy: 19, fs: 14 }, c: { dx: 28, dy: 19, fs: 14 }, d: { dx: 38, dy: 19, fs: 14 }, - letter: { dx: 52, dy: 19, ddx: 52, ddy: 19, fs: 14, fss: 14 } - } + letter: { dx: 52, dy: 19, ddx: 52, ddy: 19, fs: 14, fss: 14 }, + }, }, "2U2": { outb: { x: 54, y: keyCapRegularSize.height, dx: 0, dy: 0 }, @@ -222,8 +233,8 @@ const ksl = { b: { dx: 60, dy: 19, fs: 13 }, c: { dx: 28, dy: 19, fs: 13 }, d: { dx: 38, dy: 19, fs: 13 }, - letter: { dx: 22, dy: 19, ddx: 52, ddy: 19, fs: 13, fss: 13 } - } + letter: { dx: 22, dy: 19, ddx: 52, ddy: 19, fs: 13, fss: 13 }, + }, }, "3U": { outb: { x: 168, y: 26, dx: 0, dy: 0 }, @@ -234,8 +245,8 @@ const ksl = { b: { dx: 16, dy: 19, fs: 14 }, c: { dx: 28, dy: 19, fs: 14 }, d: { dx: 38, dy: 19, fs: 14 }, - letter: { dx: 84, dy: 19, ddx: 84, ddy: 19, fs: 20, fss: 14 } - } + letter: { dx: 84, dy: 19, ddx: 84, ddy: 19, fs: 20, fss: 14 }, + }, }, "6U2": { outb: { x: 281, y: keyCapRegularSize.height, dx: 0, dy: 0 }, @@ -246,8 +257,8 @@ const ksl = { b: { dx: 16, dy: 19, fs: 14 }, c: { dx: 28, dy: 19, fs: 14 }, d: { dx: 38, dy: 19, fs: 14 }, - letter: { dx: 142, dy: 19, ddx: 142, ddy: 19, fs: 20, fss: 14 } - } + letter: { dx: 142, dy: 19, ddx: 142, ddy: 19, fs: 20, fss: 14 }, + }, }, block: { outb: { x: keyCapRegularSize.width, y: keyCapRegularSize.height, dx: 0, dy: 0 }, @@ -258,8 +269,8 @@ const ksl = { b: { dx: 10, dy: 28, fs: 14 }, c: { dx: 128, dy: 19, fs: 14 }, d: { dx: 138, dy: 19, fs: 14 }, - letter: { dx: 22, dy: 14, ddx: 22, ddy: 17, fs: 11, fss: 11 } - } + letter: { dx: 22, dy: 14, ddx: 22, ddy: 17, fs: 11, fss: 11 }, + }, }, specialBlock: { outb: { x: keyCapRegularSize.width, y: keyCapRegularSize.height, dx: 0, dy: 0 }, @@ -270,8 +281,8 @@ const ksl = { b: { dx: 10, dy: 28, fs: 13 }, c: { dx: 128, dy: 19, fs: 13 }, d: { dx: 138, dy: 19, fs: 13 }, - letter: { dx: 22, dy: 14, ddx: 22, ddy: 17, fs: 11, fss: 11 } - } + letter: { dx: 22, dy: 14, ddx: 22, ddy: 17, fs: 11, fss: 11 }, + }, }, longBlock: { outb: { x: keyCapRegularSize.width, y: keyCapRegularSize.height * 2 + 5, dx: 0, dy: 0 }, @@ -282,8 +293,8 @@ const ksl = { b: { dx: 2, dy: 28, fs: 14 }, c: { dx: 28, dy: 19, fs: 14 }, d: { dx: 38, dy: 19, fs: 14 }, - letter: { dx: 22, dy: 38, ddx: 18, ddy: 38, fs: 11, fss: 11 } - } + letter: { dx: 22, dy: 38, ddx: 18, ddy: 38, fs: 11, fss: 11 }, + }, }, wideBlock: { outb: { x: 93, y: keyCapRegularSize.height, dx: 0, dy: 0 }, @@ -294,8 +305,8 @@ const ksl = { b: { dx: 2, dy: 28, fs: 14 }, c: { dx: 28, dy: 19, fs: 14 }, d: { dx: 38, dy: 19, fs: 14 }, - letter: { dx: 45, dy: 17, ddx: 45, ddy: 17, fs: 11, fss: 11 } - } + letter: { dx: 45, dy: 17, ddx: 45, ddy: 17, fs: 11, fss: 11 }, + }, }, enter: { outb: { x: keyCapRegularSize.width, y: 26, dx: 0, dy: 0 }, @@ -306,8 +317,8 @@ const ksl = { b: { dx: 16, dy: 19, fs: 14 }, c: { dx: 28, dy: 19, fs: 14 }, d: { dx: 38, dy: 19, fs: 14 }, - letter: { dx: 22, dy: 16, ddx: 22, ddy: 16, fs: 18, fss: 14 } - } + letter: { dx: 22, dy: 16, ddx: 22, ddy: 16, fs: 18, fss: 14 }, + }, }, title: { outb: { x: keyCapRegularSize.width, y: 26, dx: 0, dy: 0 }, @@ -318,9 +329,9 @@ const ksl = { b: { dx: 16, dy: 19, fs: 14 }, c: { dx: 28, dy: 19, fs: 14 }, d: { dx: 38, dy: 19, fs: 14 }, - letter: { dx: 0, dy: 16, ddx: 0, ddy: 16, fs: 16, fss: 16 } - } - } + letter: { dx: 0, dy: 16, ddx: 0, ddy: 16, fs: 16, fss: 16 }, + }, + }, }; class Key extends React.Component { @@ -341,14 +352,14 @@ class Key extends React.Component { icony, content, idArray, - disabled + disabled, } = this.props; return ( <Style> <g className={`keycap ${selected ? "active" : ""} ${disabled ? "disabled" : ""} ${content.type} id-${id}`}> {content.type === "enter" ? ( <> - <g filter={`url(#filter0_d_2211_181319)`}> + <g filter="url(#filter0_d_2211_181319)"> <path d="M0 3a3 3 0 013-3h38a3 3 0 013 3v60a3 3 0 01-3 3H14a3 3 0 01-3-3V33a3 3 0 00-3-3H3a3 3 0 01-3-3V3z" className="baseKey KeyPositionEnter" @@ -357,7 +368,7 @@ class Key extends React.Component { </g> <path d="M0 3a3 3 0 013-3h38a3 3 0 013 3v60a3 3 0 01-3 3H14a3 3 0 01-3-3V33a3 3 0 00-3-3H3a3 3 0 01-3-3V3z" - fill={`url(#paint_gradient)`} + fill="url(#paint_gradient)" fillOpacity={0.1} className="shapeKey KeyPositionEnter" onClick={clicked} @@ -371,7 +382,7 @@ class Key extends React.Component { content.type != "specialBlockDropdown" && content.type != "genericBlockDropdown" ? ( <> - <g filter={`url(#filter0_d_2211_181319)`}> + <g filter="url(#filter0_d_2211_181319)"> <rect x={x + ksl[content.type].outb.dx} y={y + ksl[content.type].outb.dy} @@ -404,7 +415,7 @@ class Key extends React.Component { // ? this.props.theme.keyboardPicker.keyActiveColor // : this.props.theme.keyboardPicker.keyColor // } - fill={`url(#paint_gradient)`} + fill="url(#paint_gradient)" fillOpacity={0.1} className="shapeKey" /> @@ -413,54 +424,50 @@ class Key extends React.Component { "" )} {content.type == "specialBlockDropdown" ? ( - <> - <foreignObject - width={ksl[content.type].outb.x} - height={ksl[content.type].outb.y} - x={x + ksl[content.type].outb.dx} - y={y + ksl[content.type].outb.dy} - style={{ overflow: "visible" }} - > - <div xmlns="http://www.w3.org/1999/xhtml"> - <SelectF13PlusKeys - x={x + ksl[content.type].outb.dx} - y={y + ksl[content.type].outb.dy} - onSelect={onKeyPress} - selected={selected} - value={id} - listElements={idArray} - content={content} - keyCode={keyCode} - /> - </div> - </foreignObject> - </> + <foreignObject + width={ksl[content.type].outb.x} + height={ksl[content.type].outb.y} + x={x + ksl[content.type].outb.dx} + y={y + ksl[content.type].outb.dy} + style={{ overflow: "visible" }} + > + <div xmlns="http://www.w3.org/1999/xhtml"> + <SelectF13PlusKeys + x={x + ksl[content.type].outb.dx} + y={y + ksl[content.type].outb.dy} + onSelect={onKeyPress} + selected={selected} + value={id} + listElements={idArray} + content={content} + keyCode={keyCode} + /> + </div> + </foreignObject> ) : ( "" )} {content.type == "genericBlockDropdown" ? ( - <> - <foreignObject - width={ksl[content.type].outb.x} - height={ksl[content.type].outb.y} - x={x + ksl[content.type].outb.dx} - y={y + ksl[content.type].outb.dy} - style={{ overflow: "visible" }} - > - <div xmlns="http://www.w3.org/1999/xhtml"> - <SelectGenericKeys - x={x + ksl[content.type].outb.dx} - y={y + ksl[content.type].outb.dy} - onSelect={onKeyPress} - selected={selected} - value={id} - listElements={idArray} - content={content} - keyCode={keyCode} - /> - </div> - </foreignObject> - </> + <foreignObject + width={ksl[content.type].outb.x} + height={ksl[content.type].outb.y} + x={x + ksl[content.type].outb.dx} + y={y + ksl[content.type].outb.dy} + style={{ overflow: "visible" }} + > + <div xmlns="http://www.w3.org/1999/xhtml"> + <SelectGenericKeys + x={x + ksl[content.type].outb.dx} + y={y + ksl[content.type].outb.dy} + onSelect={onKeyPress} + selected={selected} + value={id} + listElements={idArray} + content={content} + keyCode={keyCode} + /> + </div> + </foreignObject> ) : ( "" )} @@ -597,11 +604,11 @@ class Key extends React.Component { {iconpresent ? ( <foreignObject - x={iconx ? iconx : x + ksl[content.type].icon.x} - y={icony ? icony : y + ksl[content.type].icon.y} + x={iconx || x + ksl[content.type].icon.x} + y={icony || y + ksl[content.type].icon.y} width={ksl[content.type].icon.w} height={ksl[content.type].icon.h} - fontSize={iconsize ? iconsize : "inherit"} + fontSize={iconsize || "inherit"} onClick={clicked} > {icon} diff --git a/src/renderer/modules/KeyPickerKeyboard/KeyPicker.js b/src/renderer/modules/KeyPickerKeyboard/KeyPicker.js index eb8f11998..81b0b9787 100644 --- a/src/renderer/modules/KeyPickerKeyboard/KeyPicker.js +++ b/src/renderer/modules/KeyPickerKeyboard/KeyPicker.js @@ -1,4 +1,3 @@ -/* eslint-disable react/jsx-filename-extension */ /* * SVG keyboard representation for key picking * Made by Alejandro Parcet González From Dygma S.L. @@ -6,7 +5,6 @@ import React, { Component } from "react"; import Styled, { withTheme } from "styled-components"; -import i18n from "../../i18n"; import Tooltip from "react-bootstrap/Tooltip"; import OverlayTrigger from "react-bootstrap/OverlayTrigger"; @@ -28,7 +26,7 @@ import { BiLeftArrowCircle, BiMouseAlt, BiRightArrowCircle, - BiUpArrowCircle + BiUpArrowCircle, } from "react-icons/bi"; import { AiFillForward, @@ -39,18 +37,19 @@ import { AiOutlineArrowRight, AiOutlineArrowUp, AiOutlineBackward, - AiOutlineForward + AiOutlineForward, } from "react-icons/ai"; import { MdKeyboardReturn, MdSpaceBar, MdKeyboardCapslock, MdInfoOutline, MdEject } from "react-icons/md"; -import { ButtonConfig } from "../../component/Button"; +import { ButtonConfig } from "@Renderer/component/Button"; import { SelectMacroCustomDropdown, SelectSuperKeyCustomDropdown, SelectLayersCustomDropdown, SelectMouseCustomDropdown, - SelectShotModifierCustomDropdown -} from "../../component/Select"; + SelectShotModifierCustomDropdown, + SelectWirelessDropdown, +} from "@Renderer/component/Select"; import { IconLayersSm, @@ -77,25 +76,34 @@ import { IconSleepSm, IconShutdownSm, IconRobotSm, - IconWrenchSm -} from "../../component/Icon"; + IconWrenchSm, + IconWirelessSm, +} from "@Renderer/component/Icon"; -import Key from "./Key"; -import ES from "./ES.json"; -import ENi from "./ENi.json"; -import ENa from "./ENa.json"; -import GR from "./GR.json"; -import FR from "./FR.json"; -import SW from "./SW.json"; -import DN from "./DN.json"; -import NW from "./NW.json"; -import IC from "./IC.json"; -import JP from "./JP.json"; -import SWGR from "./SWGR.json"; -//import SelectSuperKeys from "../../component/Select/SelectSuperKey"; +import i18n from "@Renderer/i18n"; + +import Key from "@Renderer/modules/KeyPickerKeyboard/Key"; +import ES from "@Renderer/modules/KeyPickerKeyboard/ES.json"; +import ENi from "@Renderer/modules/KeyPickerKeyboard/ENi.json"; +import ENa from "@Renderer/modules/KeyPickerKeyboard/ENa.json"; +import GR from "@Renderer/modules/KeyPickerKeyboard/GR.json"; +import FR from "@Renderer/modules/KeyPickerKeyboard/FR.json"; +import FRBEPO from "@Renderer/modules/KeyPickerKeyboard/FR-BEPO.json"; +import SW from "@Renderer/modules/KeyPickerKeyboard/SW.json"; +import DN from "@Renderer/modules/KeyPickerKeyboard/DN.json"; +import NW from "@Renderer/modules/KeyPickerKeyboard/NW.json"; +import IC from "@Renderer/modules/KeyPickerKeyboard/IC.json"; +import JP from "@Renderer/modules/KeyPickerKeyboard/JP.json"; +import KR from "@Renderer/modules/KeyPickerKeyboard/KR.json"; +import SWGR from "@Renderer/modules/KeyPickerKeyboard/SWGR.json"; +import EU from "@Renderer/modules/KeyPickerKeyboard/EU.json"; const Style = Styled.div` width: 100%; +@media screen and (min-width: 1980px) and (min-height: 980px) { + max-width: 1860px; + margin: 0 auto; +} .keyboard { margin: 0; padding: 16px; @@ -119,7 +127,7 @@ width: 100%; } .svgStyle { overflow: visible; - max-width: 1170px; + max-width: 1170px; margin: 6px auto; } .keysOrdinaryKeyboard { @@ -200,7 +208,7 @@ width: 100%; .dropdown-toggle.btn.btn-primary { padding-right: 24px; padding-left: 12px; -} +} .dropdown-toggle::after { right: 6px; } @@ -220,22 +228,84 @@ width: 100%; justify-content: center; align-items: center; font-size: 12px; -} +} .keysMouseEvents .button-config { width: 58px; } .keysContainerGrid { - display: grid; - grid-template-columns: repeat(6, auto); - gap: 2px 4px; + display: grid; + grid-template-columns: repeat(12, 1fr); + grid-template-rows: repeat(2, 1fr); + gap: 2px 4px; +} + +.KeysWrapper.notWireless { + .keysSuperkeys { grid-area: 1 / 1 / 2 / 3; } + .keysMacros { grid-area: 1 / 3 / 2 / 5; } + .keysLayerLock { grid-area: 1 / 5 / 2 / 7; } + .keysOSM { grid-area: 1 / 7 / 2 / 9; } + .keysMouseEvents { grid-area: 1 / 9 / 2 / 11; } + .keysNoKey { grid-area: 1 / 11 / 2 / 13; } + .keysMedia { grid-area: 2 / 1 / 3 / 6; } + .keysTools { grid-area: 2 / 6 / 3 / 10; } + .keysLED { grid-area: 2 / 10 / 3 / 13; } +} +.KeysWrapper.super.notWireless { + .keysContainerGrid { + grid-template-columns: repeat(12, 1fr); + } + .keysMacros { grid-area: 1 / 1 / 2 / 5; } + .keysLayerLock { grid-area: 1 / 5 / 2 / 9; } + .keysMouseEvents { grid-area: 1 / 9 / 2 / 13; } + .keysMedia { grid-area: 2 / 1 / 3 / 6; } + .keysTools { grid-area: 2 / 6 / 3 / 10; } + .keysLED { grid-area: 2 / 10 / 3 / 13; } } -.keysContainerGrid2 { - display: grid; - grid-template-columns: repeat(3, auto); - gap: 2px 4px; +@media (max-width: 1460px) { + .KeysWrapper.notWireless { + .keysContainerGrid { + grid-template-rows: repeat(3, 1fr); + } + .keysSuperkeys { grid-area: 1 / 1 / 2 / 5; } + .keysMacros { grid-area: 1 / 5 / 2 / 9; } + .keysLayerLock { grid-area: 1 / 9 / 2 / 13; } + .keysOSM { grid-area: 2 / 1 / 3 / 4; } + .keysMouseEvents { grid-area: 2 / 4 / 3 / 7; } + .keysNoKey { grid-area: 2 / 7 / 3 / 10; } + .keysLED { grid-area: 2 / 10 / 3 / 13; } + .keysMedia { grid-area: 3 / 1 / 4 / 7; } + .keysTools { grid-area: 3 / 7 / 4 / 13; } + } } +.KeysWrapper.isWireless { + .keysContainerGrid { + grid-template-rows: repeat(3, 1fr); + } + .keysSuperkeys { grid-area: 1 / 1 / 2 / 4; } + .keysMacros { grid-area: 1 / 4 / 2 / 7; } + .keysLayerLock { grid-area: 1 / 7 / 2 / 10; } + .keysWireless { grid-area: 1 / 10 / 2 / 13; } + .keysOSM { grid-area: 2 / 1 / 3 / 4; } + .keysMouseEvents { grid-area: 2 / 4 / 3 / 7; } + .keysNoKey { grid-area: 2 / 7 / 3 / 10; } + .keysLED { grid-area: 2 / 10 / 3 / 13; } + .keysMedia { grid-area: 3 / 1 / 4 / 7; } + .keysTools { grid-area: 3 / 7 / 4 / 13; } +} +.KeysWrapper.super.isWireless { + .keysContainerGrid { + grid-template-columns: repeat(12, 1fr); + grid-template-rows: repeat(2, 1fr); + } + .keysMacros { grid-area: 1 / 1 / 2 / 5; } + .keysLayerLock { grid-area: 1 / 5 / 2 / 9; } + .keysMouseEvents { grid-area: 1 / 9 / 2 / 13; } + .keysMedia { grid-area: 2 / 1 / 3 / 6; } + .keysTools { grid-area: 2 / 6 / 3 / 10; } + .keysLED { grid-area: 2 / 10 / 3 / 13; } +} .editor { .dropdownLayerShift .dropdown-toggle.btn.btn-primary, @@ -251,10 +321,10 @@ width: 100%; } .super { .keysContainerGrid { - grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1fr); + grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1fr); } .keysContainerGrid2 { - grid-template-columns: auto auto auto; + grid-template-columns: auto auto auto; } } `; @@ -289,20 +359,18 @@ class KeyPicker extends Component { return ( <Tooltip id="select-tooltip" className="longtooltip"> <TooltipStyle> - {tooltips.map((tip, i) => { - return ( - <React.Fragment key={`Tip-${i}`}> - {i % 2 == 1 || !isNaN(tip[0]) || tip[0] == "-" ? ( - <p className="ttip-p">{tip}</p> - ) : ( - <React.Fragment> - {i == 0 ? "" : <br></br>} - <h5 className="ttip-h">{tip}</h5> - </React.Fragment> - )} - </React.Fragment> - ); - })} + {tooltips.map((tip, i) => ( + <React.Fragment key={`Tip-${i}`}> + {i % 2 == 1 || !isNaN(tip[0]) || tip[0] == "-" ? ( + <p className="ttip-p">{tip}</p> + ) : ( + <> + {i == 0 ? "" : <br />} + <h5 className="ttip-h">{tip}</h5> + </> + )} + </React.Fragment> + ))} </TooltipStyle> </Tooltip> ); @@ -323,40 +391,51 @@ class KeyPicker extends Component { macros, keyCode, onKeySelect, - activeTab + activeTab, + isWireless, + theme, } = this.props; - //let boxShadowMatrix = useTheme().styles.keyPicker.keyMatrixShadow; + // let boxShadowMatrix = useTheme().styles.keyPicker.keyMatrixShadow; const liso = { english: ENi, + british: ENi, spanish: ES, german: GR, french: FR, + frenchBepo: FRBEPO, swedish: SW, finnish: SW, danish: DN, norwegian: NW, icelandic: IC, japanese: JP, - swissGerman: SWGR + swissGerman: SWGR, + }; + const lansi = { + english: ENa, + korean: KR, + eurkey: EU, }; - const lansi = { english: ENa }; let Lang = ENa; - if (selectedlanguage == "english") { - if (kbtype == "ansi") { - if (lansi[selectedlanguage] != undefined) { + if (selectedlanguage === "english") { + if (kbtype === "ansi") { + if (lansi[selectedlanguage] !== undefined) { Lang = lansi[selectedlanguage]; } } else { Lang = liso[selectedlanguage]; } - } else { - if (selectedlanguage != "") { - if (liso[selectedlanguage] != undefined) Lang = liso[selectedlanguage]; + } else if (selectedlanguage !== "") { + if (liso[selectedlanguage] !== undefined) { + Lang = liso[selectedlanguage]; + } else if (lansi[selectedlanguage] !== undefined) { + Lang = lansi[selectedlanguage]; } } + const os = process.platform; const iconlist = { Backspace: <BsBackspace />, @@ -366,29 +445,28 @@ class KeyPicker extends Component { Tab: <ImTab />, Shift: <BsShift />, App: <FiMenu />, - Win: - os === "win32" ? ( - <AiFillWindows className="biggerWin" /> - ) : os === "darwin" ? ( - <AiFillApple className="biggerApple" /> - ) : ( - <FaLinux className="biggerLinux" /> - ), + Win: ( + <> + {os === "win32" ? <AiFillWindows className="biggerWin" /> : ""} + {os === "darwin" ? <AiFillApple className="biggerApple" /> : ""} + {os !== "win32" && os !== "darwin" ? <FaLinux className="biggerLinux" /> : ""} + </> + ), ArrUp: <AiOutlineArrowUp className="bigger" />, ArrDwn: <AiOutlineArrowDown className="bigger" />, ArrLeft: <AiOutlineArrowLeft className="bigger" />, ArrRight: <AiOutlineArrowRight className="bigger" />, LDToggl: ( - <React.Fragment> + <> <BsFillBrightnessAltLowFill className="bigger" /> <CgToggleOff className="" /> - </React.Fragment> + </> ), LDForward: ( - <React.Fragment> + <> <BsFillBrightnessAltLowFill className="bigger" /> <AiOutlineForward className="" /> - </React.Fragment> + </> ), VolAdd: <FaVolumeUp className="bigger" />, VolSub: <FaVolumeDown className="bigger" />, @@ -402,60 +480,60 @@ class KeyPicker extends Component { Backward: <AiOutlineBackward className="bigger" />, Cancel: <TiCancel className="bigger" />, ScrlUp: ( - <React.Fragment> + <> <BiMouseAlt className="bigger" /> <BiArrowFromBottom className="" /> - </React.Fragment> + </> ), ScrlDwn: ( - <React.Fragment> + <> <BiMouseAlt className="bigger" /> <BiArrowFromTop className="" /> - </React.Fragment> + </> ), ScrlLeft: ( - <React.Fragment> + <> <BiMouseAlt className="bigger" /> <BiArrowFromRight className="" /> - </React.Fragment> + </> ), ScrlRight: ( - <React.Fragment> + <> <BiMouseAlt className="bigger" /> <BiArrowFromLeft className="" /> - </React.Fragment> + </> ), MvUp: ( - <React.Fragment> + <> <BiMouseAlt className="bigger" /> <BiUpArrowCircle className="" /> - </React.Fragment> + </> ), MvDwn: ( - <React.Fragment> + <> <BiMouseAlt className="bigger" /> <BiDownArrowCircle className="" /> - </React.Fragment> + </> ), MvLeft: ( - <React.Fragment> + <> <BiMouseAlt className="bigger" /> <BiLeftArrowCircle className="" /> - </React.Fragment> + </> ), MvRight: ( - <React.Fragment> + <> <BiMouseAlt className="bigger" /> <BiRightArrowCircle className="" /> - </React.Fragment> - ) + </> + ), }; const keyboard = Lang.map((key, id) => { if (key.tooltip) { return ( <foreignObject key={`id-${key.content.first}-${id}`} x={key.x} y={key.y} width={25} height={25}> <OverlayTrigger rootClose placement="top" delay={{ show: 250, hide: 400 }} overlay={this.renderTooltip(key.tooltip)}> - <MdInfoOutline className={"info"} /> + <MdInfoOutline className="info" /> </OverlayTrigger> </foreignObject> ); @@ -476,12 +554,10 @@ class KeyPicker extends Component { (code.base + code.modified < 17450 || code.base + code.modified > 17501) && (code.base + code.modified < 49153 || code.base + code.modified > 49168) ? true - : code.modified > 0 && code.base + code.modified === key.id - ? true - : false + : !!(code.modified > 0 && code.base + code.modified === key.id) } clicked={() => { - key.mod == disableMods || key.move == disableMove ? {} : this.onKeyPress(key.id); + key.mod === disableMods || key.move === disableMove ? () => {} : this.onKeyPress(key.id); }} onKeyPress={this.onKeyPress} centered={key.centered} @@ -490,9 +566,9 @@ class KeyPicker extends Component { icon={ <IconColor color={ - key.mod == disableMods || key.move == disableMove - ? this.props.theme.keyboardPicker.keyTextDisabledColor - : this.props.theme.keyboardPicker.keyIconColor + key.mod === disableMods || key.move === disableMove + ? theme.keyboardPicker.keyTextDisabledColor + : theme.keyboardPicker.keyIconColor } > {iconlist[key.iconname]} @@ -501,7 +577,7 @@ class KeyPicker extends Component { iconx={key.iconx} icony={key.icony} iconsize={key.iconsize} - disabled={key.mod == disableMods || key.move == disableMove || disableAll} + disabled={key.mod === disableMods || key.move === disableMove || disableAll} idArray={key.idArray} keyCode={code} /> @@ -515,17 +591,17 @@ class KeyPicker extends Component { <svg className="svgStyle" viewBox="0 0 1070 208" preserveAspectRatio="xMidYMin slice"> {keyboard} <defs> - <linearGradient id={`paint_gradient`} x1="0%" y1="0%" x2="100%" y2="0%"> + <linearGradient id="paint_gradient" x1="0%" y1="0%" x2="100%" y2="0%"> <stop offset="5%" stopColor="#fff" /> <stop offset="95%" stopColor="#fff" stopOpacity={0} /> </linearGradient> - <filter id={`filter0_d_2211_181319`} x="0%" y="0%" width="200%" height="200%"> + <filter id="filter0_d_2211_181319" x="0%" y="0%" width="200%" height="200%"> <feOffset result="offOut" in="SourceGraphic" dx="0" dy="-2" /> <feColorMatrix result="matrixOut" in="offOut" type="matrix" - values={`0 0 0 0 0.552941 0 0 0 0 0.517647 0 0 0 0 0.737255 0 0 0 0.1 0`} + values="0 0 0 0 0.552941 0 0 0 0 0.517647 0 0 0 0 0.737255 0 0 0 0.1 0" /> <feGaussianBlur result="blurOut" in="matrixOut" stdDeviation="0" /> <feBlend in="SourceGraphic" in2="blurOut" mode="normal" /> @@ -535,10 +611,10 @@ class KeyPicker extends Component { </div> </div> </div> - <div className={`KeysWrapper KeysWrapperSpecialKeys ${activeTab}`}> + <div className={`KeysWrapper KeysWrapperSpecialKeys ${activeTab} ${isWireless ? "isWireless" : "notWireless"}`}> <div className="keysContainer keysContainerGrid"> - {activeTab == "super" ? ( - <></> + {activeTab === "super" ? ( + "" ) : ( <div className="keysRow keysSuperkeys keyRowsDropdowns"> <div className="keyIcon"> @@ -575,9 +651,18 @@ class KeyPicker extends Component { <SelectLayersCustomDropdown action={action} activeTab={activeTab} keyCode={code} onKeySelect={onKeySelect} /> </div> </div> - - {activeTab == "super" ? ( - <></> + {isWireless && ( + <div className="keysRow keysWireless keyRowsDropdowns"> + <div className="keyIcon"> + <IconWirelessSm /> + </div> + <div className="keysButtonsList"> + <SelectWirelessDropdown action={action} activeTab={activeTab} keyCode={code} onKeySelect={onKeySelect} /> + </div> + </div> + )} + {activeTab === "super" ? ( + "" ) : ( <div className="keysRow keysOSM keyRowsDropdowns"> <div className="keyIcon"> @@ -601,8 +686,8 @@ class KeyPicker extends Component { <SelectMouseCustomDropdown keyCode={code} onKeySelect={onKeySelect} /> </div> </div> - {activeTab == "super" ? ( - <></> + {activeTab === "super" ? ( + "" ) : ( <div className="keysRow keysNoKey keyRowsDropdowns"> <div className="keyIcon"> @@ -614,21 +699,19 @@ class KeyPicker extends Component { onClick={() => { onKeySelect(0); }} - selected={keyCode.base + keyCode.modified == 0 ? true : false} + selected={keyCode.base + keyCode.modified === 0} /> <ButtonConfig buttonText={i18n.editor.standardView.trans} onClick={() => { onKeySelect(65535); }} - selected={keyCode.base + keyCode.modified == 65535 ? true : false} + selected={keyCode.base + keyCode.modified === 65535} /> </div> </div> )} - </div> - <div className="keysContainer keysContainerGrid2"> <div className="keysRow keysMedia"> <div className="keyIcon"> <IconNoteSm /> @@ -638,8 +721,7 @@ class KeyPicker extends Component { tooltip={i18n.editor.superkeys.specialKeys.playPause} tooltipDelay={100} icoSVG={<IconMediaPlayPauseSm />} - onclick={e => this.onKeyPress()} - selected={keyCode.base + keyCode.modified == 22733 ? true : false} + selected={keyCode.base + keyCode.modified === 22733} onClick={() => { onKeySelect(22733); }} @@ -648,7 +730,7 @@ class KeyPicker extends Component { tooltip={i18n.editor.superkeys.specialKeys.stop} tooltipDelay={100} icoSVG={<IconMediaStopSm />} - selected={keyCode.base + keyCode.modified == 22711 ? true : false} + selected={keyCode.base + keyCode.modified === 22711} onClick={() => { onKeySelect(22711); }} @@ -657,7 +739,7 @@ class KeyPicker extends Component { tooltip={i18n.editor.superkeys.specialKeys.rewind} tooltipDelay={100} icoSVG={<IconMediaRewindSm />} - selected={keyCode.base + keyCode.modified == 22710 ? true : false} + selected={keyCode.base + keyCode.modified === 22710} onClick={() => { onKeySelect(22710); }} @@ -666,7 +748,7 @@ class KeyPicker extends Component { tooltip={i18n.editor.superkeys.specialKeys.forward} tooltipDelay={100} icoSVG={<IconMediaForwardSm />} - selected={keyCode.base + keyCode.modified == 22709 ? true : false} + selected={keyCode.base + keyCode.modified === 22709} onClick={() => { onKeySelect(22709); }} @@ -675,7 +757,7 @@ class KeyPicker extends Component { tooltip={i18n.editor.superkeys.specialKeys.shuffle} tooltipDelay={100} icoSVG={<IconMediaShuffleSm />} - selected={keyCode.base + keyCode.modified == 22713 ? true : false} + selected={keyCode.base + keyCode.modified === 22713} onClick={() => { onKeySelect(22713); }} @@ -684,7 +766,7 @@ class KeyPicker extends Component { tooltip={i18n.editor.superkeys.specialKeys.mute} tooltipDelay={100} icoSVG={<IconMediaSoundMuteSm />} - selected={keyCode.base + keyCode.modified == 19682 ? true : false} + selected={keyCode.base + keyCode.modified === 19682} onClick={() => { onKeySelect(19682); }} @@ -693,7 +775,7 @@ class KeyPicker extends Component { tooltip={i18n.editor.superkeys.specialKeys.soundLess} tooltipDelay={100} icoSVG={<IconMediaSoundLessSm />} - selected={keyCode.base + keyCode.modified == 23786 ? true : false} + selected={keyCode.base + keyCode.modified === 23786} onClick={() => { onKeySelect(23786); }} @@ -702,7 +784,7 @@ class KeyPicker extends Component { tooltip={i18n.editor.superkeys.specialKeys.soundMore} tooltipDelay={100} icoSVG={<IconMediaSoundMoreSm />} - selected={keyCode.base + keyCode.modified == 23785 ? true : false} + selected={keyCode.base + keyCode.modified === 23785} onClick={() => { onKeySelect(23785); }} @@ -719,7 +801,7 @@ class KeyPicker extends Component { tooltip={i18n.editor.superkeys.specialKeys.eject} tooltipDelay={100} icoSVG={<IconToolsEjectSm />} - selected={keyCode.base + keyCode.modified == 22712 ? true : false} + selected={keyCode.base + keyCode.modified === 22712} onClick={() => { onKeySelect(22712); }} @@ -728,7 +810,7 @@ class KeyPicker extends Component { tooltip={i18n.editor.superkeys.specialKeys.calculator} tooltipDelay={100} icoSVG={<IconToolsCalculatorSm />} - selected={keyCode.base + keyCode.modified == 18834 ? true : false} + selected={keyCode.base + keyCode.modified === 18834} onClick={() => { onKeySelect(18834); }} @@ -737,7 +819,7 @@ class KeyPicker extends Component { tooltip={i18n.editor.superkeys.specialKeys.camera} tooltipDelay={100} icoSVG={<IconToolsCameraSm />} - selected={keyCode.base + keyCode.modified == 18552 ? true : false} + selected={keyCode.base + keyCode.modified === 18552} onClick={() => { onKeySelect(18552); }} @@ -747,7 +829,7 @@ class KeyPicker extends Component { tooltip={i18n.editor.superkeys.specialKeys.brightnessLess} tooltipDelay={100} icoSVG={<IconToolsBrightnessLessSm />} - selected={keyCode.base + keyCode.modified == 23664 ? true : false} + selected={keyCode.base + keyCode.modified === 23664} onClick={() => { onKeySelect(23664); }} @@ -756,7 +838,7 @@ class KeyPicker extends Component { tooltip={i18n.editor.superkeys.specialKeys.brightnessMore} tooltipDelay={100} icoSVG={<IconToolsBrightnessMoreSm />} - selected={keyCode.base + keyCode.modified == 23663 ? true : false} + selected={keyCode.base + keyCode.modified === 23663} onClick={() => { onKeySelect(23663); }} @@ -765,7 +847,7 @@ class KeyPicker extends Component { tooltip={i18n.editor.superkeys.specialKeys.sleep} tooltipDelay={100} icoSVG={<IconSleepSm />} - selected={keyCode.base + keyCode.modified == 20866 ? true : false} + selected={keyCode.base + keyCode.modified === 20866} onClick={() => { onKeySelect(20866); }} @@ -774,7 +856,7 @@ class KeyPicker extends Component { tooltip={i18n.editor.superkeys.specialKeys.shutdown} tooltipDelay={100} icoSVG={<IconShutdownSm />} - selected={keyCode.base + keyCode.modified == 20865 ? true : false} + selected={keyCode.base + keyCode.modified === 20865} onClick={() => { onKeySelect(20865); }} @@ -794,7 +876,7 @@ class KeyPicker extends Component { onClick={() => { onKeySelect(17154); }} - selected={keyCode.base + keyCode.modified == 17154 ? true : false} + selected={keyCode.base + keyCode.modified === 17154} className="buttonConfigLED" /> <ButtonConfig @@ -804,7 +886,7 @@ class KeyPicker extends Component { onClick={() => { onKeySelect(17153); }} - selected={keyCode.base + keyCode.modified == 17153 ? true : false} + selected={keyCode.base + keyCode.modified === 17153} /> <ButtonConfig tooltip={i18n.editor.superkeys.specialKeys.ledNextEffectTootip} @@ -813,7 +895,7 @@ class KeyPicker extends Component { onClick={() => { onKeySelect(17152); }} - selected={keyCode.base + keyCode.modified == 17152 ? true : false} + selected={keyCode.base + keyCode.modified === 17152} /> </div> </div> diff --git a/src/renderer/modules/KeyPickerKeyboard/KeyPickerKeyboard.js b/src/renderer/modules/KeyPickerKeyboard/KeyPickerKeyboard.js index f9b5e0a4a..5f9f0c319 100644 --- a/src/renderer/modules/KeyPickerKeyboard/KeyPickerKeyboard.js +++ b/src/renderer/modules/KeyPickerKeyboard/KeyPickerKeyboard.js @@ -4,7 +4,7 @@ import i18n from "../../i18n"; // Internal components import { KeymapDB } from "../../../api/keymap"; -import { Picker } from "./../KeyPickerKeyboard"; +import { Picker } from "."; import ListModifiers from "../../component/ListModifiers/ListModifiers"; import ModPicker from "./ModPicker"; @@ -264,7 +264,7 @@ class KeyPickerKeyboard extends Component { this.keymapDB = new KeymapDB(); - let tempModifs = Array(5); + const tempModifs = Array(5); let tempActions = props.actions; if (props.actions === undefined) { tempActions = [[0], [0], [0], [0], [0]]; @@ -290,16 +290,18 @@ class KeyPickerKeyboard extends Component { layerData: 0, showKB: false, pastkeyindex: props.keyIndex, - superName: props.superName + superName: props.superName, }; this.parseAction = this.parseAction.bind(this); this.changeTab = this.changeTab.bind(this); } + componentDidMount() { this.updateSelectorPosition(); window.addEventListener("resize", this.updateSelectorPosition); } + componentDidUpdate() { let selectdual = 0; const disable = this.props.code === 0; @@ -321,7 +323,7 @@ class KeyPickerKeyboard extends Component { layerData = 0; } - let tempModifs = Array(5); + const tempModifs = Array(5); let tempActions; if (this.props.actions === undefined) { tempActions = [0, 0, 0, 0, 0]; @@ -359,10 +361,11 @@ class KeyPickerKeyboard extends Component { modifs: tempModifs, pastkeyindex: this.props.keyIndex, activeTab, - superName: this.props.superName + superName: this.props.superName, }); } } + componentWillUnmount() { window.removeEventListener("resize", this.updateSelectorPosition); } @@ -391,7 +394,7 @@ class KeyPickerKeyboard extends Component { } return this.props.code !== null ? this.keymapDB.parse(keycode).extraLabel != undefined - ? this.keymapDB.parse(keycode).extraLabel + "." + this.keymapDB.parse(keycode).label + ? `${this.keymapDB.parse(keycode).extraLabel}.${this.keymapDB.parse(keycode).label}` : this.keymapDB.parse(keycode).label : ""; } @@ -429,15 +432,15 @@ class KeyPickerKeyboard extends Component { } } if (aux.label) { - translatedAction = (aux.extraLabel != undefined ? aux.extraLabel + " " : "") + aux.label; + translatedAction = (aux.extraLabel != undefined ? `${aux.extraLabel} ` : "") + aux.label; } return translatedAction; }; render() { const { action, actions, showKB, modifs, superName, disable, Keymap, layoutSelectorPosition } = this.state; - const { selectedlanguage, kbtype, macros, actTab, superkeys, code, onKeySelect } = this.props; - const activeTab = actTab != undefined ? actTab : this.state.activeTab; + const { selectedlanguage, kbtype, macros, actTab, superkeys, code, onKeySelect, isWireless } = this.props; + const activeTab = actTab !== undefined ? actTab : this.state.activeTab; const selKey = this.parseKey(code.base + code.modified); const selKeys = actions.map((a, i) => this.parseAction(i)); @@ -446,7 +449,7 @@ class KeyPickerKeyboard extends Component { .fill() .map((_, i) => i + 53980); - let adjactions = actions; + const adjactions = actions; if (adjactions.length < 5) { while (adjactions.length < 5) { adjactions.push(0); @@ -456,24 +459,24 @@ class KeyPickerKeyboard extends Component { const superKeysActions = [ { title: "TAP", - icon: <IconKeysPress /> + icon: <IconKeysPress />, }, { title: "HOLD", - icon: <IconKeysTapHold /> + icon: <IconKeysTapHold />, }, { title: "TAP & HOLD", - icon: <IconKeysHold /> + icon: <IconKeysHold />, }, { title: "2TAP", - icon: <IconKeys2Tap /> + icon: <IconKeys2Tap />, }, { title: "2TAP & HOLD", - icon: <IconKeys2TapHold /> - } + icon: <IconKeys2TapHold />, + }, ]; return ( @@ -501,20 +504,18 @@ class KeyPickerKeyboard extends Component { <div className="ball-container"> <h5 className="ball-title">Preview macro</h5> <div className="ball-inner"> - {this.props.macros[KC - 53852].macro.split(" ").map((data, index) => { - return ( - <div className="ball" key={`LtrIdx-${index}`}> - {data} - </div> - ); - })} + {this.props.macros[KC - 53852].macro.split(" ").map((data, index) => ( + <div className="ball" key={`LtrIdx-${index}`}> + {data} + </div> + ))} </div> </div> ) : ( <> - <ModPicker key={code} keyCode={code} onKeySelect={onKeySelect}></ModPicker> + <ModPicker key={code} keyCode={code} onKeySelect={onKeySelect} /> {actTab == "editor" ? ( - <DualFunctionPicker keyCode={code} onKeySelect={onKeySelect} activeTab={activeTab}></DualFunctionPicker> + <DualFunctionPicker keyCode={code} onKeySelect={onKeySelect} activeTab={activeTab} /> ) : ( <></> )} @@ -538,6 +539,7 @@ class KeyPickerKeyboard extends Component { kbtype={kbtype} keyCode={code} macros={macros} + isWireless={isWireless} /> </div> </div> diff --git a/src/renderer/modules/KeyPickerKeyboard/KeyPickerReduced.js b/src/renderer/modules/KeyPickerKeyboard/KeyPickerReduced.js index cb832f9dc..7556e2202 100644 --- a/src/renderer/modules/KeyPickerKeyboard/KeyPickerReduced.js +++ b/src/renderer/modules/KeyPickerKeyboard/KeyPickerReduced.js @@ -6,7 +6,6 @@ import React, { Component } from "react"; import Styled, { withTheme } from "styled-components"; -import i18n from "../../i18n"; import Tooltip from "react-bootstrap/Tooltip"; import OverlayTrigger from "react-bootstrap/OverlayTrigger"; @@ -28,7 +27,7 @@ import { BiLeftArrowCircle, BiMouseAlt, BiRightArrowCircle, - BiUpArrowCircle + BiUpArrowCircle, } from "react-icons/bi"; import { AiFillForward, @@ -39,23 +38,28 @@ import { AiOutlineArrowRight, AiOutlineArrowUp, AiOutlineBackward, - AiOutlineForward + AiOutlineForward, } from "react-icons/ai"; import { MdKeyboardReturn, MdSpaceBar, MdKeyboardCapslock, MdInfoOutline, MdEject } from "react-icons/md"; -import Key from "./Key"; -import ES from "./ES.json"; -import ENi from "./ENi.json"; -import ENa from "./ENa.json"; -import GR from "./GR.json"; -import FR from "./FR.json"; -import SW from "./SW.json"; -import DN from "./DN.json"; -import NW from "./NW.json"; -import IC from "./IC.json"; -import JP from "./JP.json"; -import SWGR from "./SWGR.json"; -//import SelectSuperKeys from "../../component/Select/SelectSuperKey"; +import i18n from "@Renderer/i18n"; + +import Key from "@Renderer/modules/KeyPickerKeyboard/Key"; +import ES from "@Renderer/modules/KeyPickerKeyboard/ES.json"; +import ENi from "@Renderer/modules/KeyPickerKeyboard/ENi.json"; +import ENa from "@Renderer/modules/KeyPickerKeyboard/ENa.json"; +import GR from "@Renderer/modules/KeyPickerKeyboard/GR.json"; +import FR from "@Renderer/modules/KeyPickerKeyboard/FR.json"; +import FRBEPO from "@Renderer/modules/KeyPickerKeyboard/FR-BEPO.json"; +import SW from "@Renderer/modules/KeyPickerKeyboard/SW.json"; +import DN from "@Renderer/modules/KeyPickerKeyboard/DN.json"; +import NW from "@Renderer/modules/KeyPickerKeyboard/NW.json"; +import IC from "@Renderer/modules/KeyPickerKeyboard/IC.json"; +import JP from "@Renderer/modules/KeyPickerKeyboard/JP.json"; +import KR from "@Renderer/modules/KeyPickerKeyboard/KR.json"; +import SWGR from "@Renderer/modules/KeyPickerKeyboard/SWGR.json"; +import EU from "@Renderer/modules/KeyPickerKeyboard/EU.json"; +// import SelectSuperKeys from "../../component/Select/SelectSuperKey"; const Style = Styled.div` width: 100%; @@ -82,7 +86,7 @@ width: 100%; } .svgStyle { overflow: visible; - max-width: 1170px; + max-width: 1170px; margin: 6px auto; } .keysOrdinaryKeyboard { @@ -104,7 +108,7 @@ width: 100%; .keysRow { display: flex; flex-wrap: nowrap; - + border-radius: 6px; padding: 5px; &.keysOrdinaryKeyboard { @@ -161,7 +165,7 @@ width: 100%; .dropdown-toggle.btn.btn-primary { padding-right: 24px; padding-left: 8px; -} +} .dropdown-toggle::after { right: 12px; } @@ -184,7 +188,7 @@ width: 100%; padding: 5px 3px; justify-content: center; font-size: 14px; -} +} .keysMouseEvents .button-config { width: 58px; } @@ -202,7 +206,7 @@ width: 100%; height: 190px; } -.editor { +.editor { .keysLED .button-config { svg { margin-right: 0; @@ -212,31 +216,31 @@ width: 100%; } } .keysContainerGrid { - display: grid; - grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1fr); - grid-template-rows: 1fr 1fr 1fr; - gap: 8px 16px; - grid-template-areas: + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1fr); + grid-template-rows: 1fr 1fr 1fr; + gap: 8px 16px; + grid-template-areas: "colSuperKeysMacros colSuperKeysMacros colLayers colLayers" "colNoKeyLED colNoKeyLED colOneShotModifiers colOneShotModifiers" - "colMedia colMedia colTools colTools"; - - .colSuperKeysMacros { - display: grid; - grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); - grid-template-rows: 1fr; - gap: 0px 16px; - grid-area: colSuperKeysMacros; + "colMedia colMedia colTools colTools"; + + .colSuperKeysMacros { + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); + grid-template-rows: 1fr; + gap: 0px 16px; + grid-area: colSuperKeysMacros; } - .colLayers { - grid-area: colLayers; + .colLayers { + grid-area: colLayers; } - .colNoKeyLED { - display: grid; - grid-template-columns: 1fr 1fr; - grid-template-rows: 1fr; - gap: 0px 16px; - grid-area: colNoKeyLED; + .colNoKeyLED { + display: grid; + grid-template-columns: 1fr 1fr; + grid-template-rows: 1fr; + gap: 0px 16px; + grid-area: colNoKeyLED; } .colOneShotModifiers { grid-area: colOneShotModifiers; } .colMedia { grid-area: colMedia; } @@ -255,14 +259,14 @@ width: 100%; } .super { .keysContainerGrid { - display: grid; - grid-template-columns: 0.8fr 1fr 1fr 1fr 1.2fr 0.25fr 1.75fr 1fr; - - grid-template-rows: 1fr 1fr; - gap: 8px 16px; - grid-template-areas: + display: grid; + grid-template-columns: 0.8fr 1fr 1fr 1fr 1.2fr 0.25fr 1.75fr 1fr; + + grid-template-rows: 1fr 1fr; + gap: 8px 16px; + grid-template-areas: "colSuperKeysMacros colSuperKeysMacros colSuperKeysMacros colLayers colLayers colLayers colNoKeyLED colNoKeyLED" - "colMedia colMedia colMedia colMedia colTools colTools colTools colTools"; + "colMedia colMedia colMedia colMedia colTools colTools colTools colTools"; } .keysRow { height: 100%; @@ -299,40 +303,48 @@ class KeyPickerReduced extends Component { keyCode, onKeySelect, activeTab, - showSelected + showSelected, } = this.props; - //let boxShadowMatrix = useTheme().styles.keyPicker.keyMatrixShadow; + // let boxShadowMatrix = useTheme().styles.keyPicker.keyMatrixShadow; const liso = { english: ENi, spanish: ES, german: GR, french: FR, + frenchBepo: FRBEPO, swedish: SW, finnish: SW, danish: DN, norwegian: NW, icelandic: IC, japanese: JP, - swissGerman: SWGR + swissGerman: SWGR, + }; + const lansi = { + english: ENa, + korean: KR, + eurkey: EU, }; - const lansi = { english: ENa }; let Lang = ENa; - if (selectedlanguage == "english") { - if (kbtype == "ansi") { - if (lansi[selectedlanguage] != undefined) { + if (selectedlanguage === "english") { + if (kbtype === "ansi") { + if (lansi[selectedlanguage] !== undefined) { Lang = lansi[selectedlanguage]; } } else { Lang = liso[selectedlanguage]; } - } else { - if (selectedlanguage != "") { - if (liso[selectedlanguage] != undefined) Lang = liso[selectedlanguage]; + } else if (selectedlanguage !== "") { + if (liso[selectedlanguage] !== undefined) { + Lang = liso[selectedlanguage]; + } else if (lansi[selectedlanguage] !== undefined) { + Lang = lansi[selectedlanguage]; } } + const os = process.platform; const iconlist = { Backspace: <BsBackspace />, @@ -355,16 +367,16 @@ class KeyPickerReduced extends Component { ArrLeft: <AiOutlineArrowLeft className="bigger" />, ArrRight: <AiOutlineArrowRight className="bigger" />, LDToggl: ( - <React.Fragment> + <> <BsFillBrightnessAltLowFill className="bigger" /> <CgToggleOff className="" /> - </React.Fragment> + </> ), LDForward: ( - <React.Fragment> + <> <BsFillBrightnessAltLowFill className="bigger" /> <AiOutlineForward className="" /> - </React.Fragment> + </> ), VolAdd: <FaVolumeUp className="bigger" />, VolSub: <FaVolumeDown className="bigger" />, @@ -378,60 +390,60 @@ class KeyPickerReduced extends Component { Backward: <AiOutlineBackward className="bigger" />, Cancel: <TiCancel className="bigger" />, ScrlUp: ( - <React.Fragment> + <> <BiMouseAlt className="bigger" /> <BiArrowFromBottom className="" /> - </React.Fragment> + </> ), ScrlDwn: ( - <React.Fragment> + <> <BiMouseAlt className="bigger" /> <BiArrowFromTop className="" /> - </React.Fragment> + </> ), ScrlLeft: ( - <React.Fragment> + <> <BiMouseAlt className="bigger" /> <BiArrowFromRight className="" /> - </React.Fragment> + </> ), ScrlRight: ( - <React.Fragment> + <> <BiMouseAlt className="bigger" /> <BiArrowFromLeft className="" /> - </React.Fragment> + </> ), MvUp: ( - <React.Fragment> + <> <BiMouseAlt className="bigger" /> <BiUpArrowCircle className="" /> - </React.Fragment> + </> ), MvDwn: ( - <React.Fragment> + <> <BiMouseAlt className="bigger" /> <BiDownArrowCircle className="" /> - </React.Fragment> + </> ), MvLeft: ( - <React.Fragment> + <> <BiMouseAlt className="bigger" /> <BiLeftArrowCircle className="" /> - </React.Fragment> + </> ), MvRight: ( - <React.Fragment> + <> <BiMouseAlt className="bigger" /> <BiRightArrowCircle className="" /> - </React.Fragment> - ) + </> + ), }; const keyboard = Lang.map((key, id) => { if (key.tooltip) { return ( <foreignObject key={`id-${key.content.first}-${id}`} x={key.x} y={key.y} width={25} height={25}> <OverlayTrigger rootClose placement="top" delay={{ show: 250, hide: 400 }} overlay={this.renderTooltip(key.tooltip)}> - <MdInfoOutline className={"info"} /> + <MdInfoOutline className="info" /> </OverlayTrigger> </foreignObject> ); @@ -453,9 +465,7 @@ class KeyPickerReduced extends Component { (code.base + code.modified < 17450 || code.base + code.modified > 17501) && (code.base + code.modified < 49153 || code.base + code.modified > 49168) ? true - : code.modified > 0 && code.base + code.modified === key.id - ? true - : false + : !!(code.modified > 0 && code.base + code.modified === key.id) : false } clicked={() => { @@ -480,7 +490,7 @@ class KeyPickerReduced extends Component { icony={key.icony} iconsize={key.iconsize} disabled={key.mod == disableMods || key.move == disableMove || disableAll} - // disabled={false} + tabIndex={-1} idArray={key.idArray} keyCode={code} /> @@ -494,17 +504,17 @@ class KeyPickerReduced extends Component { <svg className="svgStyle" viewBox="0 0 1070 208" preserveAspectRatio="xMidYMin slice"> {keyboard} <defs> - <linearGradient id={`paint_gradient`} x1="0%" y1="0%" x2="100%" y2="0%"> + <linearGradient id="paint_gradient" x1="0%" y1="0%" x2="100%" y2="0%"> <stop offset="5%" stopColor="#fff" /> <stop offset="95%" stopColor="#fff" stopOpacity={0} /> </linearGradient> - <filter id={`filter0_d_2211_181319`} x="0%" y="0%" width="200%" height="200%"> + <filter id="filter0_d_2211_181319" x="0%" y="0%" width="200%" height="200%"> <feOffset result="offOut" in="SourceGraphic" dx="0" dy="-2" /> <feColorMatrix result="matrixOut" in="offOut" type="matrix" - values={`0 0 0 0 0.552941 0 0 0 0 0.517647 0 0 0 0 0.737255 0 0 0 0.1 0`} + values="0 0 0 0 0.552941 0 0 0 0 0.517647 0 0 0 0 0.737255 0 0 0 0.1 0" /> <feGaussianBlur result="blurOut" in="matrixOut" stdDeviation="0" /> <feBlend in="SourceGraphic" in2="blurOut" mode="normal" /> diff --git a/src/renderer/modules/KeyPickerKeyboard/ModPicker.js b/src/renderer/modules/KeyPickerKeyboard/ModPicker.js index 0eca3c636..e4ee01df9 100644 --- a/src/renderer/modules/KeyPickerKeyboard/ModPicker.js +++ b/src/renderer/modules/KeyPickerKeyboard/ModPicker.js @@ -2,7 +2,7 @@ import React, { Component } from "react"; import Styled from "styled-components"; import i18n from "../../i18n"; -//Components +// Components import Title from "../../component/Title"; import { ButtonConfig } from "../../component/Button"; @@ -38,14 +38,14 @@ class ModPicker extends Component { super(props); this.state = { - modifs: [] + modifs: [], }; } componentDidMount() { if (this.props.keyCode.base + this.props.keyCode.modified > 10000) return; this.setState({ - modifs: this.parseModifs(this.props.keyCode.base + this.props.keyCode.modified) + modifs: this.parseModifs(this.props.keyCode.base + this.props.keyCode.modified), }); } @@ -56,18 +56,18 @@ class ModPicker extends Component { ) { if (this.props.keyCode.base + this.props.keyCode.modified > 10000) { this.setState({ - modifs: [] + modifs: [], }); } else { this.setState({ - modifs: this.parseModifs(this.props.keyCode.base + this.props.keyCode.modified) + modifs: this.parseModifs(this.props.keyCode.base + this.props.keyCode.modified), }); } } } parseModifs(keycode) { - let modifs = []; + const modifs = []; if (keycode & 0b100000000) { // Ctrl Decoder modifs.push(1); @@ -139,9 +139,8 @@ class ModPicker extends Component { this.props.keyCode.base + this.props.keyCode.modified >= 8192 ) { return true; - } else { - return false; } + return false; } render() { diff --git a/src/renderer/modules/KeyPickerKeyboard/NW.json b/src/renderer/modules/KeyPickerKeyboard/NW.json index cd5c761ce..ff0abbe8e 100644 --- a/src/renderer/modules/KeyPickerKeyboard/NW.json +++ b/src/renderer/modules/KeyPickerKeyboard/NW.json @@ -1485,7 +1485,7 @@ "iconname": "", "content": { "type": "longBlock", - "first": "Intro", + "first": "Enter", "second": "", "third": "", "fourth": "" diff --git a/src/renderer/modules/KeyPickerKeyboard/Picker.js b/src/renderer/modules/KeyPickerKeyboard/Picker.js index fef4fb103..9d1168aab 100644 --- a/src/renderer/modules/KeyPickerKeyboard/Picker.js +++ b/src/renderer/modules/KeyPickerKeyboard/Picker.js @@ -1,6 +1,6 @@ import React, { Component } from "react"; import Styled from "styled-components"; -import { KeyPicker } from "../KeyPickerKeyboard"; +import { KeyPicker } from "."; const Style = Styled.div` @@ -27,7 +27,8 @@ class Picker extends Component { disable, macros, superkeys, - keyCode + keyCode, + isWireless, } = this.props; return ( @@ -36,7 +37,7 @@ class Picker extends Component { onKeySelect={e => onKeySelect(e)} code={{ base: actions[action] > 255 ? baseCode : actions[action], - modified: modCode + modified: modCode, }} disableMods={[0, 3].includes(action) && activeTab == "super"} disableMove={![0, 3].includes(action) && activeTab == "super"} @@ -49,6 +50,7 @@ class Picker extends Component { activeTab={activeTab} action={action} actions={actions} + isWireless={isWireless} /> </Style> ); diff --git a/src/renderer/modules/KeyPickerKeyboard/SW.json b/src/renderer/modules/KeyPickerKeyboard/SW.json index 82857e319..99604b79c 100644 --- a/src/renderer/modules/KeyPickerKeyboard/SW.json +++ b/src/renderer/modules/KeyPickerKeyboard/SW.json @@ -1485,7 +1485,7 @@ "iconname": "", "content": { "type": "longBlock", - "first": "Intro", + "first": "Enter", "second": "", "third": "", "fourth": "" diff --git a/src/renderer/modules/KeyPickerKeyboard/SWGR.json b/src/renderer/modules/KeyPickerKeyboard/SWGR.json index a3512cc9d..78ee84772 100644 --- a/src/renderer/modules/KeyPickerKeyboard/SWGR.json +++ b/src/renderer/modules/KeyPickerKeyboard/SWGR.json @@ -1485,7 +1485,7 @@ "iconname": "", "content": { "type": "longBlock", - "first": "Intro", + "first": "Enter", "second": "", "third": "", "fourth": "" diff --git a/src/renderer/modules/KeyVisualizer/KeyVisualizer.js b/src/renderer/modules/KeyVisualizer/KeyVisualizer.js index bf7f8c24a..9dd39a97a 100644 --- a/src/renderer/modules/KeyVisualizer/KeyVisualizer.js +++ b/src/renderer/modules/KeyVisualizer/KeyVisualizer.js @@ -108,18 +108,18 @@ const Style = Styled.div` } `; -//}= ({ oldValue, newValue, keyCode }) => { +// }= ({ oldValue, newValue, keyCode }) => { class KeyVisualizer extends React.Component { constructor(props) { super(props); this.state = { - //modifs: [] + // modifs: [] }; } parseModifs(keycode) { - let modifs = []; + const modifs = []; if (keycode & 0b100000000) { // Ctrl Decoder modifs.push(1); @@ -152,23 +152,23 @@ class KeyVisualizer extends React.Component { const { keyCode, oldKeyCode, newValue, oldValue, isStandardView, superkeyAction } = this.props; const rows = [ { - title: `<strong>${i18n.editor.superkeys.actions.tapLabel}:</strong> Selected value` + title: `<strong>${i18n.editor.superkeys.actions.tapLabel}:</strong> Selected value`, }, { - title: `<strong>${i18n.editor.superkeys.actions.holdLabel}:</strong> Selected value` + title: `<strong>${i18n.editor.superkeys.actions.holdLabel}:</strong> Selected value`, }, { - title: `<strong>${i18n.editor.superkeys.actions.tapAndHoldLabel}:</strong> Selected value` + title: `<strong>${i18n.editor.superkeys.actions.tapAndHoldLabel}:</strong> Selected value`, }, { - title: `<strong>${i18n.editor.superkeys.actions.doubleTapLabel}:</strong> Selected value` + title: `<strong>${i18n.editor.superkeys.actions.doubleTapLabel}:</strong> Selected value`, }, { - title: `<strong>${i18n.editor.superkeys.actions.doubleTapAndHoldLabel}:</strong> Selected value` + title: `<strong>${i18n.editor.superkeys.actions.doubleTapAndHoldLabel}:</strong> Selected value`, }, { - title: `Selected value` - } + title: `Selected value`, + }, ]; return ( diff --git a/src/renderer/modules/KeysTabs/DelayTab.js b/src/renderer/modules/KeysTabs/DelayTab.js index c27e57974..d2c630bf0 100644 --- a/src/renderer/modules/KeysTabs/DelayTab.js +++ b/src/renderer/modules/KeysTabs/DelayTab.js @@ -106,7 +106,7 @@ class DelayTab extends Component { this.state = { fixedSelected: true, fixedValue: 0, - randomValue: { min: 0, max: 0 } + randomValue: { min: 0, max: 0 }, }; } @@ -119,44 +119,46 @@ class DelayTab extends Component { }; updateFixed = e => { - const value = parseInt(e.target.value); + const value = parseInt(e.target.value, 10); this.setState({ fixedValue: value > 65535 ? 65535 : value }); }; updateRandomMin = e => { - let randomValue = this.state.randomValue; - let valueMin = parseInt(e.target.value); + const { randomValue } = this.state; + let valueMin = parseInt(e.target.value, 10); valueMin = valueMin > 65535 ? 65535 : valueMin; if (valueMin > randomValue.max) { randomValue.max = valueMin; } randomValue.min = valueMin; - this.setState({ randomValue: randomValue }); + this.setState({ randomValue }); }; updateRandomMax = e => { - let randomValue = this.state.randomValue; - let valueMax = parseInt(e.target.value); + const { randomValue } = this.state; + let valueMax = parseInt(e.target.value, 10); valueMax = valueMax > 65535 ? 65535 : valueMax; if (valueMax < randomValue.min) { randomValue.min = valueMax; } randomValue.max = valueMax; - this.setState({ randomValue: randomValue }); + this.setState({ randomValue }); }; addDelay = () => { - console.log("add delay", this.state.fixedSelected, this.state.fixedValue, this.state.randomValue); - if (this.state.fixedSelected) { - this.props.onAddDelay(this.state.fixedValue, 2); + const { fixedSelected, fixedValue, randomValue } = this.state; + const { onAddDelay, onAddDelayRnd } = this.props; + console.log("add delay", fixedSelected, fixedValue, randomValue); + if (fixedSelected) { + onAddDelay(fixedValue, 2); } else { - this.props.onAddDelayRnd(this.state.randomValue.min, this.state.randomValue.max, 1); + onAddDelayRnd(randomValue.min, randomValue.max, 1); } // clean state this.setState({ fixedSelected: true, fixedValue: 0, - randomValue: { min: 0, max: 0 } + randomValue: { min: 0, max: 0 }, }); }; @@ -188,7 +190,7 @@ class DelayTab extends Component { /> </div> <div className="inputsWrapper mt-3"> - {this.state.fixedSelected ? ( + {fixedSelected ? ( <div className="inputGroupFixed"> <InputGroup> <Form.Control @@ -233,7 +235,7 @@ class DelayTab extends Component { <div className="tabSaveButton"> <RegularButton buttonText={i18n.editor.macros.textTabs.buttonText} - style="outline gradient" + styles="outline gradient" onClick={this.addDelay} icoSVG={<IconArrowInBoxUp />} icoPosition="right" diff --git a/src/renderer/modules/KeysTabs/KeysTab.js b/src/renderer/modules/KeysTabs/KeysTab.js index 331b35887..86a6a85b0 100644 --- a/src/renderer/modules/KeysTabs/KeysTab.js +++ b/src/renderer/modules/KeysTabs/KeysTab.js @@ -1,35 +1,13 @@ import React, { Component } from "react"; import Styled from "styled-components"; -import i18n from "../../i18n"; +import i18n from "@Renderer/i18n"; -import Title from "../../component/Title"; -import CallOut from "../../component/Callout"; -import { KeyPickerReduced } from "../../modules/KeyPickerKeyboard"; -import ModPicker from "../KeyPickerKeyboard/ModPicker"; -import DualFunctionPicker from "../KeyPickerKeyboard/DualFunctionPicker"; -import { RegularButton, ButtonConfig, ButtonMouse } from "../../component/Button"; - -import { - IconMediaPlayPause, - IconMediaStop, - IconMediaRewind, - IconMediaForward, - IconMediaShuffle, - IconMediaSoundMute, - IconMediaSoundLess, - IconMediaSoundMore, - IconArrowInBoxUp, - IconToolsBrightnessMore, - IconToolsBrightnessLess, - IconToolsCamera, - IconToolsCalculator, - IconToolsEject, - IconLEDSwitchLeft, - IconLEDPreviousEffect, - IconLEDNextEffect -} from "../../component/Icon"; -import Callout from "../../component/Callout"; +import Title from "@Renderer/component/Title"; +import CallOut from "@Renderer/component/Callout"; +import { KeyPickerReduced } from "@Renderer/modules/KeyPickerKeyboard"; +import ModPicker from "@Renderer/modules/KeyPickerKeyboard/ModPicker"; +import DualFunctionPicker from "@Renderer/modules/KeyPickerKeyboard/DualFunctionPicker"; const Styles = Styled.div` display: flex; @@ -100,7 +78,8 @@ class KeysTab extends Component { } render() { - const { action, actions, keyCode, code, isStandardView, actTab, superkeyAction, selectedlanguage, kbtype } = this.props; + const { action, actions, keyCode, code, isStandardView, actTab, superkeyAction, selectedlanguage, kbtype, onKeyPress } = + this.props; return ( <Styles className={`${isStandardView ? "standardViewTab" : ""} tabsKey`}> <div className="tabContentWrapper"> @@ -119,39 +98,48 @@ class KeysTab extends Component { <KeyPickerReduced actions={actions} action={action} - onKeySelect={this.props.onKeyPress} + onKeySelect={onKeyPress} code={isStandardView ? code : { base: 4, modified: 0 }} showSelected={isStandardView} keyCode={keyCode} disableMove={false} // disableMods={false} - disableMods={(superkeyAction == 0 || superkeyAction == 3) && actTab == "super" ? true : false} - //disableMove={![0, 3].includes(actions) && actTab == "super"} + disableMods={!!((superkeyAction === 0 || superkeyAction === 3) && actTab === "super")} + // disableMove={![0, 3].includes(actions) && actTab == "super"} actTab={actTab} - superName={"superName"} + superName="superName" selectedlanguage={selectedlanguage} kbtype={kbtype} /> {isStandardView ? ( - <div className={`enhanceKeys ${(superkeyAction == 0 || superkeyAction == 3) && actTab == "super" ? "disabled" : ""}`}> + <div + className={`enhanceKeys ${(superkeyAction === 0 || superkeyAction === 3) && actTab === "super" ? "disabled" : ""}`} + > <Title text={i18n.editor.standardView.keys.enhanceTitle} headingLevel={3} className="counterIndicator counter2 mt-2" /> - <CallOut content={i18n.editor.standardView.keys.callOutEnhance} size="sm" /> + <CallOut + content={i18n.editor.standardView.keys.callOutEnhance} + size="sm" + hasVideo + media="Yk8S0TJuZ8A" + videoTitle="These keys have a SECRET function" + videoDuration="3:57" + /> <div className="cardButtons cardButtonsModifier"> <Title text={i18n.editor.standardView.keys.addModifiers} headingLevel={4} /> <p>{i18n.editor.standardView.keys.descriptionModifiers}</p> - <ModPicker keyCode={code} onKeySelect={this.props.onKeyPress} isStandardView={isStandardView} /> + <ModPicker keyCode={code} onKeySelect={onKeyPress} isStandardView={isStandardView} /> </div> - {actTab != "super" ? ( + {actTab !== "super" ? ( <div className="cardButtons cardButtonsDual"> <Title text={i18n.editor.standardView.keys.addDualFunction} headingLevel={4} /> <p>{i18n.editor.standardView.keys.dualFunctionDescription}</p> <DualFunctionPicker keyCode={code} - onKeySelect={this.props.onKeyPress} + onKeySelect={onKeyPress} activeTab={actTab} isStandardView={isStandardView} /> diff --git a/src/renderer/modules/KeysTabs/LayersTab.js b/src/renderer/modules/KeysTabs/LayersTab.js index 99fcd50ec..3f700dfd5 100644 --- a/src/renderer/modules/KeysTabs/LayersTab.js +++ b/src/renderer/modules/KeysTabs/LayersTab.js @@ -55,7 +55,17 @@ class LayersTab extends Component { <Styles className={`${isStandardView ? "standardViewTab" : ""} tabsLayer`}> <div className="tabContentWrapper"> <Title text={i18n.editor.layers.title} headingLevel={isStandardView ? 3 : 4} /> - {isStandardView ? <Callout content={i18n.editor.standardView.layers.callOut} size="sm" /> : null} + + {isStandardView ? ( + <Callout + content={i18n.editor.standardView.layers.callOut} + size="sm" + hasVideo + media="wsx0OtkKXXg" + videoTitle="This 60% keyboard can have +2500 keys!" + videoDuration="6:50" + /> + ) : null} {showLayerSwitch ? ( <div className="cardButtons"> <Title text={i18n.editor.standardView.layers.layerSwitch} headingLevel={4} /> @@ -66,70 +76,70 @@ class LayersTab extends Component { onClick={() => { this.props.onLayerPress(layerDeltaSwitch + 0); }} - selected={layerDeltaSwitch + 0 == keyCode ? true : false} + selected={layerDeltaSwitch + 0 == keyCode} /> <ButtonConfig buttonText="2" onClick={() => { this.props.onLayerPress(layerDeltaSwitch + 1); }} - selected={layerDeltaSwitch + 1 == keyCode ? true : false} + selected={layerDeltaSwitch + 1 == keyCode} /> <ButtonConfig buttonText="3" onClick={() => { this.props.onLayerPress(layerDeltaSwitch + 2); }} - selected={layerDeltaSwitch + 2 == keyCode ? true : false} + selected={layerDeltaSwitch + 2 == keyCode} /> <ButtonConfig buttonText="4" onClick={() => { this.props.onLayerPress(layerDeltaSwitch + 3); }} - selected={layerDeltaSwitch + 3 == keyCode ? true : false} + selected={layerDeltaSwitch + 3 == keyCode} /> <ButtonConfig buttonText="5" onClick={() => { this.props.onLayerPress(layerDeltaSwitch + 4); }} - selected={layerDeltaSwitch + 4 == keyCode ? true : false} + selected={layerDeltaSwitch + 4 == keyCode} /> <ButtonConfig buttonText="6" onClick={() => { this.props.onLayerPress(layerDeltaSwitch + 5); }} - selected={layerDeltaSwitch + 5 == keyCode ? true : false} + selected={layerDeltaSwitch + 5 == keyCode} /> <ButtonConfig buttonText="7" onClick={() => { this.props.onLayerPress(layerDeltaSwitch + 6); }} - selected={layerDeltaSwitch + 6 == keyCode ? true : false} + selected={layerDeltaSwitch + 6 == keyCode} /> <ButtonConfig buttonText="8" onClick={() => { this.props.onLayerPress(layerDeltaSwitch + 7); }} - selected={layerDeltaSwitch + 7 == keyCode ? true : false} + selected={layerDeltaSwitch + 7 == keyCode} /> <ButtonConfig buttonText="9" onClick={() => { this.props.onLayerPress(layerDeltaSwitch + 8); }} - selected={layerDeltaSwitch + 8 == keyCode ? true : false} + selected={layerDeltaSwitch + 8 == keyCode} /> <ButtonConfig buttonText="10" onClick={() => { this.props.onLayerPress(layerDeltaSwitch + 9); }} - selected={layerDeltaSwitch + 9 == keyCode ? true : false} + selected={layerDeltaSwitch + 9 == keyCode} /> </div> </div> @@ -145,70 +155,70 @@ class LayersTab extends Component { onClick={() => { this.props.onLayerPress(layerDelta + 0); }} - selected={layerDelta + 0 == keyCode ? true : false} + selected={layerDelta + 0 == keyCode} /> <ButtonConfig buttonText="2" onClick={() => { this.props.onLayerPress(layerDelta + 1); }} - selected={layerDelta + 1 == keyCode ? true : false} + selected={layerDelta + 1 == keyCode} /> <ButtonConfig buttonText="3" onClick={() => { this.props.onLayerPress(layerDelta + 2); }} - selected={layerDelta + 2 == keyCode ? true : false} + selected={layerDelta + 2 == keyCode} /> <ButtonConfig buttonText="4" onClick={() => { this.props.onLayerPress(layerDelta + 3); }} - selected={layerDelta + 3 == keyCode ? true : false} + selected={layerDelta + 3 == keyCode} /> <ButtonConfig buttonText="5" onClick={() => { this.props.onLayerPress(layerDelta + 4); }} - selected={layerDelta + 4 == keyCode ? true : false} + selected={layerDelta + 4 == keyCode} /> <ButtonConfig buttonText="6" onClick={() => { this.props.onLayerPress(layerDelta + 5); }} - selected={layerDelta + 5 == keyCode ? true : false} + selected={layerDelta + 5 == keyCode} /> <ButtonConfig buttonText="7" onClick={() => { this.props.onLayerPress(layerDelta + 6); }} - selected={layerDelta + 6 == keyCode ? true : false} + selected={layerDelta + 6 == keyCode} /> <ButtonConfig buttonText="8" onClick={() => { this.props.onLayerPress(layerDelta + 7); }} - selected={layerDelta + 7 == keyCode ? true : false} + selected={layerDelta + 7 == keyCode} /> <ButtonConfig buttonText="9" onClick={() => { this.props.onLayerPress(layerDelta + 8); }} - selected={layerDelta + 8 == keyCode ? true : false} + selected={layerDelta + 8 == keyCode} /> <ButtonConfig buttonText="10" onClick={() => { this.props.onLayerPress(layerDelta + 9); }} - selected={layerDelta + 9 == keyCode ? true : false} + selected={layerDelta + 9 == keyCode} /> </div> </div> diff --git a/src/renderer/modules/KeysTabs/MacroTab.js b/src/renderer/modules/KeysTabs/MacroTab.js index c950a2bda..0e4284670 100644 --- a/src/renderer/modules/KeysTabs/MacroTab.js +++ b/src/renderer/modules/KeysTabs/MacroTab.js @@ -36,18 +36,18 @@ class MacroTab extends Component { constructor(props) { super(props); this.state = { - selected: 0 === props.selectedMacro ? 1 : 0 + selected: 0, }; } // update value when dropdown is changed changeSelected = selected => { - this.setState({ selected }); + this.setState({ selected: parseInt(selected, 10) }); }; changeSelectedStd = selected => { - this.setState({ selected }); - this.props.onMacrosPress(parseInt(selected) + 53852); + this.setState({ selected: parseInt(selected, 10) }); + this.props.onMacrosPress(parseInt(selected, 10) + 53852); }; // sendMacro function to props onMacrosPress function to send macro to MacroCreator @@ -57,9 +57,10 @@ class MacroTab extends Component { render() { const { macros, selectedMacro, keyCode, isStandardView } = this.props; + const { selected } = this.state; const macrosAux = macros.map((item, index) => { const macrosContainer = {}; - if (item.name == "") { + if (item.name === "") { macrosContainer.text = i18n.general.noname; } else { macrosContainer.text = item.name; @@ -75,7 +76,16 @@ class MacroTab extends Component { {isStandardView ? ( <> <Title text={i18n.editor.standardView.macros.title} headingLevel={3} /> - <Callout content={i18n.editor.standardView.macros.callOut} size="sm" className="w100" /> + + <Callout + content={i18n.editor.standardView.macros.callOut} + size="sm" + className="w100" + hasVideo + media="MfTUvFrHLsE" + videoTitle="13 Time-saving MACROS For Your Keyboard" + videoDuration="5:24" + /> </> ) : ( <Callout content={i18n.editor.macros.macroTab.callout} className="w100" size="sm" /> @@ -85,7 +95,7 @@ class MacroTab extends Component { <Select value={ macrosAux.length > 0 && macrosAux[this.state.selected] !== undefined && macrosAux[this.state.selected].text - ? macrosAux[this.state.selected].text + ? macrosAux[this.state.selected].value : "Loading" } listElements={macrosAux} @@ -97,7 +107,7 @@ class MacroTab extends Component { <div className="tabSaveButton"> <RegularButton buttonText={i18n.editor.macros.textTabs.buttonText} - style="outline gradient" + styles="outline gradient" onClick={this.sendMacro} icoSVG={<IconArrowInBoxUp />} icoPosition="right" diff --git a/src/renderer/modules/KeysTabs/MediaAndLightTab.js b/src/renderer/modules/KeysTabs/MediaAndLightTab.js index 4c9dfec57..0fc008541 100644 --- a/src/renderer/modules/KeysTabs/MediaAndLightTab.js +++ b/src/renderer/modules/KeysTabs/MediaAndLightTab.js @@ -1,11 +1,10 @@ import React, { Component } from "react"; import Styled from "styled-components"; +import i18n from "@Renderer/i18n"; -import i18n from "../../i18n"; - -import Title from "../../component/Title"; -import Callout from "../../component/Callout"; -import { RegularButton, ButtonConfig } from "../../component/Button"; +import Title from "@Renderer/component/Title"; +import Callout from "@Renderer/component/Callout"; +import { ButtonConfig } from "@Renderer/component/Button"; import { IconMediaPlayPauseSm, @@ -16,7 +15,6 @@ import { IconMediaSoundMuteSm, IconMediaSoundLessSm, IconMediaSoundMoreSm, - IconArrowInBoxUp, IconToolsBrightnessMoreSm, IconToolsBrightnessLessSm, IconToolsCameraSm, @@ -25,8 +23,8 @@ import { IconLEDPreviousEffectSm, IconLEDNextEffectSm, IconSleepSm, - IconShutdownSm -} from "../../component/Icon"; + IconShutdownSm, +} from "@Renderer/component/Icon"; const Styles = Styled.div` display: flex; @@ -91,13 +89,10 @@ h4 { `; class MediaAndLightTab extends Component { - constructor(props) { - super(props); - } - // function to handle button click with integer parameter and call to props.onAddSpecial handleAddSpecial = special => { - this.props.onAddSpecial(special, 5); + const { onAddSpecial } = this.props; + onAddSpecial(special, 5); }; render() { @@ -124,56 +119,56 @@ class MediaAndLightTab extends Component { tooltipDelay={100} icoSVG={<IconMediaPlayPauseSm />} onClick={() => this.handleAddSpecial(22733)} - selected={isStandardView ? (keyCode === 22733 ? true : false) : false} + selected={isStandardView ? keyCode === 22733 : false} /> <ButtonConfig tooltip={i18n.editor.superkeys.specialKeys.stop} tooltipDelay={100} icoSVG={<IconMediaStopSm />} onClick={() => this.handleAddSpecial(22711)} - selected={isStandardView ? (keyCode === 22711 ? true : false) : false} + selected={isStandardView ? keyCode === 22711 : false} /> <ButtonConfig tooltip={i18n.editor.superkeys.specialKeys.rewind} tooltipDelay={100} icoSVG={<IconMediaRewindSm />} onClick={() => this.handleAddSpecial(22710)} - selected={isStandardView ? (keyCode === 22710 ? true : false) : false} + selected={isStandardView ? keyCode === 22710 : false} /> <ButtonConfig tooltip={i18n.editor.superkeys.specialKeys.forward} tooltipDelay={100} icoSVG={<IconMediaForwardSm />} onClick={() => this.handleAddSpecial(22709)} - selected={isStandardView ? (keyCode === 22709 ? true : false) : false} + selected={isStandardView ? keyCode === 22709 : false} /> <ButtonConfig tooltip={i18n.editor.superkeys.specialKeys.shuffle} tooltipDelay={100} icoSVG={<IconMediaShuffleSm />} onClick={() => this.handleAddSpecial(22713)} - selected={isStandardView ? (keyCode === 22713 ? true : false) : false} + selected={isStandardView ? keyCode === 22713 : false} /> <ButtonConfig tooltip={i18n.editor.superkeys.specialKeys.mute} tooltipDelay={100} icoSVG={<IconMediaSoundMuteSm />} onClick={() => this.handleAddSpecial(19682)} - selected={isStandardView ? (keyCode === 19682 ? true : false) : false} + selected={isStandardView ? keyCode === 19682 : false} /> <ButtonConfig tooltip={i18n.editor.superkeys.specialKeys.soundLess} tooltipDelay={100} icoSVG={<IconMediaSoundLessSm />} onClick={() => this.handleAddSpecial(23786)} - selected={isStandardView ? (keyCode === 23786 ? true : false) : false} + selected={isStandardView ? keyCode === 23786 : false} /> <ButtonConfig tooltip={i18n.editor.superkeys.specialKeys.soundMore} tooltipDelay={100} icoSVG={<IconMediaSoundMoreSm />} onClick={() => this.handleAddSpecial(23785)} - selected={isStandardView ? (keyCode === 23785 ? true : false) : false} + selected={isStandardView ? keyCode === 23785 : false} /> </div> </div> @@ -187,7 +182,7 @@ class MediaAndLightTab extends Component { tooltipDelay={300} className="buttonConfigLED" onClick={() => this.handleAddSpecial(17154)} - selected={isStandardView ? (keyCode === 17154 ? true : false) : false} + selected={isStandardView ? keyCode === 17154 : false} /> <ButtonConfig tooltip={i18n.editor.superkeys.specialKeys.ledPreviousEffectTootip} @@ -195,14 +190,14 @@ class MediaAndLightTab extends Component { icoSVG={<IconLEDPreviousEffectSm />} className="buttonConfigLED" onClick={() => this.handleAddSpecial(17153)} - selected={isStandardView ? (keyCode === 17153 ? true : false) : false} + selected={isStandardView ? keyCode === 17153 : false} /> <ButtonConfig tooltip={i18n.editor.superkeys.specialKeys.ledNextEffectTootip} tooltipDelay={300} icoSVG={<IconLEDNextEffectSm />} onClick={() => this.handleAddSpecial(17152)} - selected={isStandardView ? (keyCode === 17152 ? true : false) : false} + selected={isStandardView ? keyCode === 17152 : false} /> </div> </div> @@ -217,7 +212,7 @@ class MediaAndLightTab extends Component { tooltipDelay={100} icoSVG={<IconToolsEjectSm />} onClick={() => this.handleAddSpecial(22712)} - selected={isStandardView ? (keyCode === 22712 ? true : false) : false} + selected={isStandardView ? keyCode === 22712 : false} /> <ButtonConfig @@ -225,7 +220,7 @@ class MediaAndLightTab extends Component { tooltipDelay={100} icoSVG={<IconToolsCalculatorSm />} onClick={() => this.handleAddSpecial(18834)} - selected={isStandardView ? (keyCode === 18834 ? true : false) : false} + selected={isStandardView ? keyCode === 18834 : false} /> <ButtonConfig @@ -233,7 +228,7 @@ class MediaAndLightTab extends Component { tooltipDelay={100} icoSVG={<IconToolsCameraSm />} onClick={() => this.handleAddSpecial(18552)} - selected={isStandardView ? (keyCode === 18552 ? true : false) : false} + selected={isStandardView ? keyCode === 18552 : false} /> <ButtonConfig @@ -241,28 +236,28 @@ class MediaAndLightTab extends Component { tooltipDelay={100} icoSVG={<IconToolsBrightnessLessSm />} onClick={() => this.handleAddSpecial(23664)} - selected={isStandardView ? (keyCode === 23664 ? true : false) : false} + selected={isStandardView ? keyCode === 23664 : false} /> <ButtonConfig tooltip={i18n.editor.superkeys.specialKeys.brightnessMore} tooltipDelay={100} icoSVG={<IconToolsBrightnessMoreSm />} onClick={() => this.handleAddSpecial(23663)} - selected={isStandardView ? (keyCode === 23663 ? true : false) : false} + selected={isStandardView ? keyCode === 23663 : false} /> <ButtonConfig tooltip={i18n.editor.superkeys.specialKeys.sleep} tooltipDelay={100} icoSVG={<IconSleepSm />} onClick={() => this.handleAddSpecial(20866)} - selected={isStandardView ? (keyCode === 20866 ? true : false) : false} + selected={isStandardView ? keyCode === 20866 : false} /> <ButtonConfig tooltip={i18n.editor.superkeys.specialKeys.shutdown} tooltipDelay={100} icoSVG={<IconShutdownSm />} onClick={() => this.handleAddSpecial(20865)} - selected={isStandardView ? (keyCode === 20865 ? true : false) : false} + selected={isStandardView ? keyCode === 20865 : false} /> </div> </div> diff --git a/src/renderer/modules/KeysTabs/MouseTab.js b/src/renderer/modules/KeysTabs/MouseTab.js index 3022f10d1..f5686fc15 100644 --- a/src/renderer/modules/KeysTabs/MouseTab.js +++ b/src/renderer/modules/KeysTabs/MouseTab.js @@ -133,7 +133,7 @@ h4 { } `; -const MouseTab = ({ isStandardView, keyCode, onAddSpecial }) => { +function MouseTab({ isStandardView, keyCode, onAddSpecial }) { const [isHovering, setIsHovering] = React.useState(false); const clickLeft = React.useRef(null); @@ -172,7 +172,7 @@ const MouseTab = ({ isStandardView, keyCode, onAddSpecial }) => { buttonText={i18n.mouse.clickLeft} tooltipDelay={100} onClick={() => handleClick(20545)} - selected={isStandardView ? (keyCode === 20545 ? true : false) : false} + selected={isStandardView ? keyCode === 20545 : false} onMouseEnter={() => handleClick(20545)} onMouseLeave={() => handleLeaveAnimations("Trigger OUT - Left")} /> @@ -180,7 +180,7 @@ const MouseTab = ({ isStandardView, keyCode, onAddSpecial }) => { buttonText={i18n.mouse.clickMiddle} tooltipDelay={100} onClick={() => handleClick(20548)} - selected={isStandardView ? (keyCode === 20548 ? true : false) : false} + selected={isStandardView ? keyCode === 20548 : false} onMouseEnter={() => handleClick(20545)} onMouseLeave={() => handleLeaveAnimations("Trigger OUT - Middle")} /> @@ -188,19 +188,19 @@ const MouseTab = ({ isStandardView, keyCode, onAddSpecial }) => { buttonText={i18n.mouse.clickRight} tooltipDelay={100} onClick={() => handleClick(20546)} - selected={isStandardView ? (keyCode === 20546 ? true : false) : false} + selected={isStandardView ? keyCode === 20546 : false} /> <ButtonConfig buttonText={i18n.mouse.clickBack} tooltipDelay={100} onClick={() => handleClick(20552)} - selected={isStandardView ? (keyCode === 20552 ? true : false) : false} + selected={isStandardView ? keyCode === 20552 : false} /> <ButtonConfig buttonText={i18n.mouse.clickForward} tooltipDelay={100} onClick={() => handleClick(20560)} - selected={isStandardView ? (keyCode === 20560 ? true : false) : false} + selected={isStandardView ? keyCode === 20560 : false} /> </div> </div> @@ -213,25 +213,25 @@ const MouseTab = ({ isStandardView, keyCode, onAddSpecial }) => { eventType="movement" direction="up" onClick={() => handleClick(20481)} - selected={isStandardView ? (keyCode === 20481 ? true : false) : false} + selected={isStandardView ? keyCode === 20481 : false} /> <ButtonMouse eventType="movement" direction="right" onClick={() => handleClick(20488)} - selected={isStandardView ? (keyCode === 20488 ? true : false) : false} + selected={isStandardView ? keyCode === 20488 : false} /> <ButtonMouse eventType="movement" direction="down" onClick={() => handleClick(20482)} - selected={isStandardView ? (keyCode === 20482 ? true : false) : false} + selected={isStandardView ? keyCode === 20482 : false} /> <ButtonMouse eventType="movement" direction="left" onClick={() => handleClick(20484)} - selected={isStandardView ? (keyCode === 20484 ? true : false) : false} + selected={isStandardView ? keyCode === 20484 : false} /> </div> </div> @@ -245,25 +245,25 @@ const MouseTab = ({ isStandardView, keyCode, onAddSpecial }) => { eventType="wheel" direction="up" onClick={() => handleClick(20497)} - selected={isStandardView ? (keyCode === 20497 ? true : false) : false} + selected={isStandardView ? keyCode === 20497 : false} /> <ButtonMouse eventType="wheel" direction="right" onClick={() => handleClick(20504)} - selected={isStandardView ? (keyCode === 20504 ? true : false) : false} + selected={isStandardView ? keyCode === 20504 : false} /> <ButtonMouse eventType="wheel" direction="down" onClick={() => handleClick(20498)} - selected={isStandardView ? (keyCode === 20498 ? true : false) : false} + selected={isStandardView ? keyCode === 20498 : false} /> <ButtonMouse eventType="wheel" direction="left" onClick={() => handleClick(20500)} - selected={isStandardView ? (keyCode === 20500 ? true : false) : false} + selected={isStandardView ? keyCode === 20500 : false} /> </div> </div> @@ -274,6 +274,6 @@ const MouseTab = ({ isStandardView, keyCode, onAddSpecial }) => { </div> </Styles> ); -}; +} export default MouseTab; diff --git a/src/renderer/modules/KeysTabs/NoKeyTransparentTab.js b/src/renderer/modules/KeysTabs/NoKeyTransparentTab.js index 6eb3d825c..a56cfbd3d 100644 --- a/src/renderer/modules/KeysTabs/NoKeyTransparentTab.js +++ b/src/renderer/modules/KeysTabs/NoKeyTransparentTab.js @@ -54,15 +54,7 @@ class NoKeyTransparentTab extends Component { onClick={() => { onKeySelect(0); }} - selected={ - keyCode !== undefined && keyCode.base - ? keyCode.base + keyCode.modified == 0 - ? true - : false - : keyCode == 0 - ? true - : false - } + selected={keyCode !== undefined && keyCode.base ? keyCode.base + keyCode.modified == 0 : keyCode == 0} /> </div> <div className="keysButtonsList"> @@ -73,15 +65,7 @@ class NoKeyTransparentTab extends Component { onClick={() => { onKeySelect(65535); }} - selected={ - keyCode !== undefined && keyCode.base - ? keyCode.base + keyCode.modified == 65535 - ? true - : false - : keyCode == 65535 - ? true - : false - } + selected={keyCode !== undefined && keyCode.base ? keyCode.base + keyCode.modified == 65535 : keyCode == 65535} /> </div> </div> diff --git a/src/renderer/modules/KeysTabs/OneShotTab.js b/src/renderer/modules/KeysTabs/OneShotTab.js index 57428eca2..882ee1b11 100644 --- a/src/renderer/modules/KeysTabs/OneShotTab.js +++ b/src/renderer/modules/KeysTabs/OneShotTab.js @@ -63,42 +63,42 @@ class OneShotTab extends Component { <ButtonConfig buttonText={i18n.editor.standardView.oneShot.leftControl} onClick={() => onKeySelect(OneShotDeltaMod + 0)} - selected={isStandardView ? (keyCode === OneShotDeltaMod + 0 ? true : false) : false} + selected={isStandardView ? keyCode === OneShotDeltaMod + 0 : false} /> <ButtonConfig buttonText={i18n.editor.standardView.oneShot.leftShift} onClick={() => onKeySelect(OneShotDeltaMod + 1)} - selected={isStandardView ? (keyCode === OneShotDeltaMod + 1 ? true : false) : false} + selected={isStandardView ? keyCode === OneShotDeltaMod + 1 : false} /> <ButtonConfig buttonText={i18n.editor.standardView.oneShot.leftAlt} onClick={() => onKeySelect(OneShotDeltaMod + 2)} - selected={isStandardView ? (keyCode === OneShotDeltaMod + 2 ? true : false) : false} + selected={isStandardView ? keyCode === OneShotDeltaMod + 2 : false} /> <ButtonConfig buttonText={i18n.editor.standardView.oneShot.leftOS} onClick={() => onKeySelect(OneShotDeltaMod + 3)} - selected={isStandardView ? (keyCode === OneShotDeltaMod + 3 ? true : false) : false} + selected={isStandardView ? keyCode === OneShotDeltaMod + 3 : false} /> <ButtonConfig buttonText={i18n.editor.standardView.oneShot.rightControl} onClick={() => onKeySelect(OneShotDeltaMod + 4)} - selected={isStandardView ? (keyCode === OneShotDeltaMod + 4 ? true : false) : false} + selected={isStandardView ? keyCode === OneShotDeltaMod + 4 : false} /> <ButtonConfig buttonText={i18n.editor.standardView.oneShot.rightShift} onClick={() => onKeySelect(OneShotDeltaMod + 5)} - selected={isStandardView ? (keyCode === OneShotDeltaMod + 5 ? true : false) : false} + selected={isStandardView ? keyCode === OneShotDeltaMod + 5 : false} /> <ButtonConfig buttonText={i18n.editor.standardView.oneShot.altGr} onClick={() => onKeySelect(OneShotDeltaMod + 6)} - selected={isStandardView ? (keyCode === OneShotDeltaMod + 6 ? true : false) : false} + selected={isStandardView ? keyCode === OneShotDeltaMod + 6 : false} /> <ButtonConfig buttonText={i18n.editor.standardView.oneShot.rightOS} onClick={() => onKeySelect(OneShotDeltaMod + 7)} - selected={isStandardView ? (keyCode === OneShotDeltaMod + 7 ? true : false) : false} + selected={isStandardView ? keyCode === OneShotDeltaMod + 7 : false} /> </div> </div> @@ -110,42 +110,42 @@ class OneShotTab extends Component { <ButtonConfig buttonText="1" onClick={() => onKeySelect(OneShotDeltaLayer + 0)} - selected={isStandardView ? (keyCode === OneShotDeltaLayer + 0 ? true : false) : false} + selected={isStandardView ? keyCode === OneShotDeltaLayer + 0 : false} /> <ButtonConfig buttonText="2" onClick={() => onKeySelect(OneShotDeltaLayer + 1)} - selected={isStandardView ? (keyCode === OneShotDeltaLayer + 1 ? true : false) : false} + selected={isStandardView ? keyCode === OneShotDeltaLayer + 1 : false} /> <ButtonConfig buttonText="3" onClick={() => onKeySelect(OneShotDeltaLayer + 2)} - selected={isStandardView ? (keyCode === OneShotDeltaLayer + 2 ? true : false) : false} + selected={isStandardView ? keyCode === OneShotDeltaLayer + 2 : false} /> <ButtonConfig buttonText="4" onClick={() => onKeySelect(OneShotDeltaLayer + 3)} - selected={isStandardView ? (keyCode === OneShotDeltaLayer + 3 ? true : false) : false} + selected={isStandardView ? keyCode === OneShotDeltaLayer + 3 : false} /> <ButtonConfig buttonText="5" onClick={() => onKeySelect(OneShotDeltaLayer + 4)} - selected={isStandardView ? (keyCode === OneShotDeltaLayer + 4 ? true : false) : false} + selected={isStandardView ? keyCode === OneShotDeltaLayer + 4 : false} /> <ButtonConfig buttonText="6" onClick={() => onKeySelect(OneShotDeltaLayer + 5)} - selected={isStandardView ? (keyCode === OneShotDeltaLayer + 5 ? true : false) : false} + selected={isStandardView ? keyCode === OneShotDeltaLayer + 5 : false} /> <ButtonConfig buttonText="7" onClick={() => onKeySelect(OneShotDeltaLayer + 6)} - selected={isStandardView ? (keyCode === OneShotDeltaLayer + 6 ? true : false) : false} + selected={isStandardView ? keyCode === OneShotDeltaLayer + 6 : false} /> <ButtonConfig buttonText="8" onClick={() => onKeySelect(OneShotDeltaLayer + 7)} - selected={isStandardView ? (keyCode === OneShotDeltaLayer + 7 ? true : false) : false} + selected={isStandardView ? keyCode === OneShotDeltaLayer + 7 : false} /> {/* <ButtonConfig buttonText="9" diff --git a/src/renderer/modules/KeysTabs/SuperkeysTab.js b/src/renderer/modules/KeysTabs/SuperkeysTab.js index 58cf56a72..e3fef1879 100644 --- a/src/renderer/modules/KeysTabs/SuperkeysTab.js +++ b/src/renderer/modules/KeysTabs/SuperkeysTab.js @@ -2,11 +2,11 @@ import React, { Component } from "react"; import ReactDOM from "react-dom"; import Styled from "styled-components"; +import Dropdown from "react-bootstrap/Dropdown"; import i18n from "../../i18n"; import Title from "../../component/Title"; import Callout from "../../component/Callout"; -import Dropdown from "react-bootstrap/Dropdown"; import ListModifiers from "../../component/ListModifiers/ListModifiers"; @@ -121,7 +121,7 @@ class SuperkeysTab extends Component { constructor(props) { super(props); this.state = { - keyContent: "Loading..." + keyContent: "Loading...", }; this.keymapDB = new KeymapDB(); } @@ -145,7 +145,7 @@ class SuperkeysTab extends Component { } } if (aux.label) { - translatedAction = (aux.extraLabel != undefined ? aux.extraLabel + " " : "") + aux.label; + translatedAction = (aux.extraLabel != undefined ? `${aux.extraLabel} ` : "") + aux.label; } return translatedAction; }; @@ -158,7 +158,7 @@ class SuperkeysTab extends Component { .fill() .map((_, i) => i + 53980); - let adjactions = actions; + const adjactions = actions; if (adjactions.length < 5) { while (adjactions.length < 5) { adjactions.push(0); @@ -168,31 +168,38 @@ class SuperkeysTab extends Component { const superKeysActions = [ { title: i18n.editor.superkeys.actions.tapLabel, - description: i18n.editor.superkeys.actions.tap + description: i18n.editor.superkeys.actions.tap, }, { title: i18n.editor.superkeys.actions.holdLabel, - description: i18n.editor.superkeys.actions.hold + description: i18n.editor.superkeys.actions.hold, }, { title: i18n.editor.superkeys.actions.tapAndHoldLabel, - description: i18n.editor.superkeys.actions.tapAndHold + description: i18n.editor.superkeys.actions.tapAndHold, }, { title: i18n.editor.superkeys.actions.doubleTapLabel, - description: i18n.editor.superkeys.actions.doubleTap + description: i18n.editor.superkeys.actions.doubleTap, }, { title: i18n.editor.superkeys.actions.doubleTapAndHoldLabel, - description: i18n.editor.superkeys.actions.doubleTapAndHold - } + description: i18n.editor.superkeys.actions.doubleTapAndHold, + }, ]; return ( <Styles className={`${isStandardView ? "standardViewTab" : ""} tabsSuperkeys`}> <div className="tabContentWrapper"> <Title text={i18n.editor.standardView.superkeys.title} headingLevel={3} /> - <Callout content={i18n.editor.standardView.superkeys.callOut} size="sm" /> + <Callout + content={i18n.editor.standardView.superkeys.callOut} + size="sm" + hasVideo + media="6Az05_Yl6AU" + videoTitle="The Greatest Keyboard Feature Of All Time: SUPERKEYS! 🦹‍♀️" + videoDuration="5:34" + /> <Title text={i18n.editor.standardView.superkeys.label} headingLevel={4} /> <div className="superKeyGroup"> @@ -214,15 +221,13 @@ class SuperkeysTab extends Component { </div> </Dropdown.Toggle> <Dropdown.Menu> - {superk.map((x, id) => { - return ( - <Dropdown.Item eventKey={x} key={`super-${id}`} disabled={x == -1}> - <div className="dropdownInner"> - <div className="dropdownItem">{`${id + 1}. ${superkeys[id].name}`}</div> - </div> - </Dropdown.Item> - ); - })} + {superk.map((x, id) => ( + <Dropdown.Item eventKey={x} key={`super-${id}`} disabled={x == -1}> + <div className="dropdownInner"> + <div className="dropdownItem">{`${id + 1}. ${superkeys[id].name}`}</div> + </div> + </Dropdown.Item> + ))} </Dropdown.Menu> </Dropdown> </div> diff --git a/src/renderer/modules/KeysTabs/TextTab.js b/src/renderer/modules/KeysTabs/TextTab.js index 73231594f..3cb0790a4 100644 --- a/src/renderer/modules/KeysTabs/TextTab.js +++ b/src/renderer/modules/KeysTabs/TextTab.js @@ -64,7 +64,7 @@ class TextTab extends Component { <div className="tabSaveButton"> <RegularButton buttonText={i18n.editor.macros.textTabs.buttonText} - style="outline gradient" + styles="outline gradient" onClick={this.props.onAddText} icoSVG={<IconArrowInBoxUp />} icoPosition="right" diff --git a/src/renderer/modules/KeysTabs/WirelessTab.tsx b/src/renderer/modules/KeysTabs/WirelessTab.tsx new file mode 100644 index 000000000..1f78800f1 --- /dev/null +++ b/src/renderer/modules/KeysTabs/WirelessTab.tsx @@ -0,0 +1,95 @@ +import React from "react"; +import Styled from "styled-components"; + +import { TabLayoutEditorProps } from "@Renderer/types/pages"; + +import i18n from "@Renderer/i18n"; + +import Title from "@Renderer/component/Title"; +import Callout from "@Renderer/component/Callout"; +import { ButtonConfig } from "@Renderer/component/Button"; +import { BatteryCodes } from "@Renderer/../hw/battery"; +import { BluetoothCodes } from "@Renderer/../hw/bluetooth"; + +const Styles = Styled.div` +width: 100%; +h3 { + margin-bottom: 16px; +} +h4 { + font-size: 16px; + flex: 0 0 100%; + width: 100%; + margin-top: 24px; +} +.description { + font-size: 14px; + color: ${({ theme }) => theme.styles.macro.descriptionColor}; + font-weight: 500; +} +.keysButtonsList { + margin-top: 8px; +} +.button-config { + max-width: 116px; + text-align: center; +} +`; + +function WirelessTab(props: TabLayoutEditorProps) { + const { keyCode, onKeySelect, isStandardView } = props; + return ( + <Styles className={`${isStandardView ? "standardViewTab" : ""} tabsWireless`}> + <div className="tabContentWrapper"> + <div className="buttonsRow"> + <Title text={i18n.app.menu.wireless} headingLevel={3} /> + <Callout content={i18n.editor.standardView.wireless.callOut} size="sm" /> + <div className="keysButtonsList"> + <Title text={i18n.editor.standardView.wireless.batteryPowerStatus} headingLevel={4} /> + <p className="description">{i18n.editor.standardView.wireless.batteryLevelDescription}</p> + <ButtonConfig + buttonText={i18n.editor.standardView.wireless.batteryLevel} + onClick={() => { + onKeySelect(BatteryCodes.STATUS); + }} + selected={isStandardView ? keyCode === BatteryCodes.STATUS : false} + size={undefined} + tooltip={undefined} + tooltipPlacement={undefined} + tooltipClassName={undefined} + variation={undefined} + icoSVG={undefined} + icoPosition={undefined} + tooltipDelay={undefined} + disabled={undefined} + dataAnimate={undefined} + /> + </div> + <div className="keysButtonsList"> + <Title text={i18n.wireless.bluetooth.pairingMode} headingLevel={4} /> + <p className="description">{i18n.wireless.bluetooth.pairingModeDescription}</p> + <ButtonConfig + buttonText={i18n.wireless.bluetooth.pair} + onClick={() => { + onKeySelect(BluetoothCodes.PAIRING); + }} + selected={isStandardView ? keyCode === BluetoothCodes.PAIRING : false} + size={undefined} + tooltip={undefined} + tooltipPlacement={undefined} + tooltipClassName={undefined} + variation={undefined} + icoSVG={undefined} + icoPosition={undefined} + tooltipDelay={undefined} + disabled={undefined} + dataAnimate={undefined} + /> + </div> + </div> + </div> + </Styles> + ); +} + +export default WirelessTab; diff --git a/src/renderer/modules/Macros/AnimatedTimelineRecording.js b/src/renderer/modules/Macros/AnimatedTimelineRecording.js index ad1b8098c..e32caf12f 100644 --- a/src/renderer/modules/Macros/AnimatedTimelineRecording.js +++ b/src/renderer/modules/Macros/AnimatedTimelineRecording.js @@ -75,7 +75,7 @@ const Styles = Styled.div` } `; -const AnimatedTimelineRecording = ({ isRecording }) => { +function AnimatedTimelineRecording({ isRecording }) { let generateBars = ""; for (let i = 1; i < 30; i++) { for (let i = 1; i < 5; i++) { @@ -89,18 +89,18 @@ const AnimatedTimelineRecording = ({ isRecording }) => { <Styles className={`AnimatedTimelineRecording ${isRecording ? "isRecording" : "noRecording"}`}> <div className="marquee"> <div className="marqueeInner"> - <div className={"blockRect"} dangerouslySetInnerHTML={{ __html: generateBars }} /> - <div className={"blockRect"} dangerouslySetInnerHTML={{ __html: generateBars }} /> - <div className={"blockRect"} dangerouslySetInnerHTML={{ __html: generateBars }} /> - <div className={"blockRect"} dangerouslySetInnerHTML={{ __html: generateBars }} /> + <div className="blockRect" dangerouslySetInnerHTML={{ __html: generateBars }} /> + <div className="blockRect" dangerouslySetInnerHTML={{ __html: generateBars }} /> + <div className="blockRect" dangerouslySetInnerHTML={{ __html: generateBars }} /> + <div className="blockRect" dangerouslySetInnerHTML={{ __html: generateBars }} /> </div> </div> </Styles> ); -}; +} AnimatedTimelineRecording.propTypes = { - isRecording: PropTypes.bool + isRecording: PropTypes.bool, }; export default AnimatedTimelineRecording; diff --git a/src/renderer/modules/Macros/DotsProgressBar.js b/src/renderer/modules/Macros/DotsProgressBar.js index 0ac584cfd..e37f53a91 100644 --- a/src/renderer/modules/Macros/DotsProgressBar.js +++ b/src/renderer/modules/Macros/DotsProgressBar.js @@ -6,7 +6,7 @@ function DotsProgressBar({ progressWidth }) { <mask id="prefix__maskDotsProgress" style={{ - maskType: "alpha" + maskType: "alpha", }} maskUnits="userSpaceOnUse" x={0} diff --git a/src/renderer/modules/Macros/KeyMacro.js b/src/renderer/modules/Macros/KeyMacro.js index 6bf74d0df..1a4c592e5 100644 --- a/src/renderer/modules/Macros/KeyMacro.js +++ b/src/renderer/modules/Macros/KeyMacro.js @@ -3,6 +3,8 @@ import React, { Component } from "react"; import Styled, { withTheme } from "styled-components"; import Dropdown from "react-bootstrap/Dropdown"; +import { FaLinux } from "react-icons/fa"; +import { AiFillWindows, AiFillApple } from "react-icons/ai"; import i18n from "../../i18n"; import Title from "../../component/Title"; @@ -17,10 +19,8 @@ import { IconReleaseSm, IconPressAndReleaseSm, IconDelete, - IconStopWatchSm + IconStopWatchSm, } from "../../component/Icon"; -import { FaLinux } from "react-icons/fa"; -import { AiFillWindows, AiFillApple } from "react-icons/ai"; const Styles = Styled.div` .chip { @@ -69,17 +69,17 @@ class KeyMacro extends Component { backgroundImage: this.props.theme.styles.macroKey.backgroundDrag, backgroundSize: "56.57px 56.57px", borderRadius: "6px", - boxShadow: this.props.theme.styles.macroKey.boxShadowOnDrag - }) + boxShadow: this.props.theme.styles.macroKey.boxShadowOnDrag, + }), }); shadeColor(color, percent) { if (color === "transparent") { return color; } - var R = parseInt(color.substring(1, 3), 16); - var G = parseInt(color.substring(3, 5), 16); - var B = parseInt(color.substring(5, 7), 16); + let R = parseInt(color.substring(1, 3), 16); + let G = parseInt(color.substring(3, 5), 16); + let B = parseInt(color.substring(5, 7), 16); R = parseInt((R * (100 - percent)) / 100); G = parseInt((G * (100 - percent)) / 100); @@ -89,11 +89,11 @@ class KeyMacro extends Component { G = Math.round((G * 255) / (G + 5)); B = Math.round((B * 255) / (B + 5)); - var RR = R.toString(16).length == 1 ? "0" + R.toString(16) : R.toString(16); - var GG = G.toString(16).length == 1 ? "0" + G.toString(16) : G.toString(16); - var BB = B.toString(16).length == 1 ? "0" + B.toString(16) : B.toString(16); + const RR = R.toString(16).length == 1 ? `0${R.toString(16)}` : R.toString(16); + const GG = G.toString(16).length == 1 ? `0${G.toString(16)}` : G.toString(16); + const BB = B.toString(16).length == 1 ? `0${B.toString(16)}` : B.toString(16); - return "#" + RR + GG + BB; + return `#${RR}${GG}${BB}`; } render() { @@ -106,35 +106,33 @@ class KeyMacro extends Component { control: "Control ^", os: { icon: false, - text: "⌘" + text: "⌘", }, alt: "⌥", - altGr: "Right ⌥" + altGr: "Right ⌥", + }; + } else if (operationSystem === "win32") { + operationSystemIcons = { + shift: "Shift", + control: "Control", + os: { + icon: <AiFillWindows />, + text: false, + }, + alt: "Alt", + altGr: "Alt Gr.", }; } else { - if (operationSystem === "win32") { - operationSystemIcons = { - shift: "Shift", - control: "Control", - os: { - icon: <AiFillWindows />, - text: false - }, - alt: "Alt", - altGr: "Alt Gr." - }; - } else { - operationSystemIcons = { - shift: "Shift", - control: "Control", - os: { - icon: <FaLinux />, - text: false - }, - alt: "Alt", - altGr: "Alt Gr." - }; - } + operationSystemIcons = { + shift: "Shift", + control: "Control", + os: { + icon: <FaLinux />, + text: false, + }, + alt: "Alt", + altGr: "Alt Gr.", + }; } let isModifier = false; if (item.keyCode > 223 && item.keyCode < 232 && item.action != 2) { @@ -160,7 +158,7 @@ class KeyMacro extends Component { <IconDragAndDrop /> </div> <div className="moreOptions"> - <Dropdown label={i18n.editor.macros.insertModifiers} value="" size="small" className={"keyMacroOptions"}> + <Dropdown label={i18n.editor.macros.insertModifiers} value="" size="small" className="keyMacroOptions"> <Dropdown.Toggle variant="primary" id="dropdown-basic" drop="up" align="end"> <IconThreeDots /> </Dropdown.Toggle> @@ -184,27 +182,27 @@ class KeyMacro extends Component { <Title headingLevel={5} text="Edit function" /> <div className="keyFunctionsButtons"> <ButtonConfig - buttonText={"Press"} + buttonText="Press" icoPosition="left" icoSVG={<IconPressSm />} - selected={actionTypes[item.action].name == "Key Press" ? true : false} - disabled={item.action == 1 || item.action == 2 ? true : false} + selected={actionTypes[item.action].name == "Key Press"} + disabled={!!(item.action == 1 || item.action == 2)} onClick={() => updateAction(item.id, 6)} /> <ButtonConfig - buttonText={"Release"} + buttonText="Release" icoPosition="left" icoSVG={<IconReleaseSm />} - selected={actionTypes[item.action].name == "Key Release" ? true : false} - disabled={item.action == 1 || item.action == 2 ? true : false} + selected={actionTypes[item.action].name == "Key Release"} + disabled={!!(item.action == 1 || item.action == 2)} onClick={() => updateAction(item.id, 7)} /> <ButtonConfig - buttonText={"Press & Release"} + buttonText="Press & Release" icoPosition="left" icoSVG={<IconPressAndReleaseSm />} - selected={actionTypes[item.action].name == "Key Press & Rel." ? true : false} - disabled={item.action == 1 || item.action == 2 ? true : false} + selected={actionTypes[item.action].name == "Key Press & Rel."} + disabled={!!(item.action == 1 || item.action == 2)} onClick={() => updateAction(item.id, 8)} /> </div> @@ -312,7 +310,7 @@ class KeyMacro extends Component { </div> </div> <div className="keyMacroItemOptions"> - <Dropdown.Item key={`item-clone`} className="compact"> + <Dropdown.Item key="item-clone" className="compact"> <div onClick={() => { this.props.onCloneRow(item.id); @@ -325,7 +323,7 @@ class KeyMacro extends Component { <div className="dropdownItem">Clone</div> </div> </Dropdown.Item> - <Dropdown.Item key={`item-delete`} className="compact"> + <Dropdown.Item key="item-delete" className="compact"> <div onClick={() => { this.props.onDeleteRow(item.id); @@ -349,11 +347,11 @@ class KeyMacro extends Component { className="chip" style={ { - //backgroundColor: item.color, - //borderColor: item.color, + // backgroundColor: item.color, + // borderColor: item.color, // HACK allow the text to be visible on darkTheme // without completely rewriting the code which assigns the background colors - //color: "#000" + // color: "#000" } } > @@ -374,7 +372,7 @@ class KeyMacro extends Component { </div> </div> </div> - <div className="keyMacro keyMacroFreeSlot"></div> + <div className="keyMacro keyMacroFreeSlot" /> </div> </div> </Styles> diff --git a/src/renderer/modules/Macros/MacroCreator.js b/src/renderer/modules/Macros/MacroCreator.js index 7e1cba409..3b2a1fc29 100644 --- a/src/renderer/modules/Macros/MacroCreator.js +++ b/src/renderer/modules/Macros/MacroCreator.js @@ -20,6 +20,7 @@ import Styled from "styled-components"; import Tab from "react-bootstrap/Tab"; import Nav from "react-bootstrap/Nav"; +import { MdUnfoldLess, MdKeyboardArrowUp, MdKeyboardArrowDown, MdTimer } from "react-icons/md"; import i18n from "../../i18n"; import Title from "../../component/Title"; @@ -41,9 +42,8 @@ import { IconRobot, IconNote, IconStopWatch, - IconMagicStick + IconMagicStick, } from "../../component/Icon"; -import { MdUnfoldLess, MdKeyboardArrowUp, MdKeyboardArrowDown, MdTimer } from "react-icons/md"; const Styles = Styled.div` .card { @@ -189,7 +189,7 @@ class MacroCreator extends Component { this.state = { addText: "", - rows: [] + rows: [], }; this.keymapDB = props.keymapDB; this.modifiers = [ @@ -200,108 +200,102 @@ class MacroCreator extends Component { { name: "LEFT ALT", keyCode: 226, color: "#faf8e1" }, { name: "RIGHT ALT", keyCode: 230, color: "#f2e7f5" }, { name: "LEFT OS", keyCode: 227, color: "#e6f0e4" }, - { name: "RIGHT OS", keyCode: 231, color: "#e6f0e4" } + { name: "RIGHT OS", keyCode: 231, color: "#e6f0e4" }, ]; this.actionTypes = [ { enum: "MACRO_ACTION_END", name: "End macro", - icon: <React.Fragment />, - smallIcon: <React.Fragment /> + icon: <></>, + smallIcon: <></>, }, { enum: "MACRO_ACTION_STEP_INTERVAL", name: "Set Interval", icon: <MdTimer fontSize="large" />, - smallIcon: <MdTimer /> + smallIcon: <MdTimer />, }, { enum: "MACRO_ACTION_STEP_WAIT", name: "Delay", icon: <MdTimer fontSize="large" />, - smallIcon: <MdTimer /> + smallIcon: <MdTimer />, }, { enum: "MACRO_ACTION_STEP_KEYDOWN", name: "Function Key Press", icon: <MdKeyboardArrowDown fontSize="large" />, - smallIcon: <MdKeyboardArrowDown /> + smallIcon: <MdKeyboardArrowDown />, }, { enum: "MACRO_ACTION_STEP_KEYUP", name: "Function Key Release", icon: <MdKeyboardArrowUp fontSize="large" />, - smallIcon: <MdKeyboardArrowUp /> + smallIcon: <MdKeyboardArrowUp />, }, { enum: "MACRO_ACTION_STEP_TAP", name: "Fn. Press & Release", icon: <MdUnfoldLess fontSize="large" />, - smallIcon: <MdUnfoldLess /> + smallIcon: <MdUnfoldLess />, }, { enum: "MACRO_ACTION_STEP_KEYCODEDOWN", name: "Key Press", icon: <MdKeyboardArrowDown fontSize="large" />, - smallIcon: <MdKeyboardArrowDown /> + smallIcon: <MdKeyboardArrowDown />, }, { enum: "MACRO_ACTION_STEP_KEYCODEUP", name: "Key Release", icon: <MdKeyboardArrowUp fontSize="large" />, - smallIcon: <MdKeyboardArrowUp /> + smallIcon: <MdKeyboardArrowUp />, }, { enum: "MACRO_ACTION_STEP_TAPCODE", name: "Key Press & Rel.", icon: <MdUnfoldLess fontSize="large" />, - smallIcon: <MdUnfoldLess /> + smallIcon: <MdUnfoldLess />, }, { enum: "MACRO_ACTION_STEP_EXPLICIT_REPORT", name: "Explicit Report", - icon: <React.Fragment />, - smallIcon: <React.Fragment /> + icon: <></>, + smallIcon: <></>, }, { enum: "MACRO_ACTION_STEP_IMPLICIT_REPORT", name: "Implicit Report", - icon: <React.Fragment />, - smallIcon: <React.Fragment /> + icon: <></>, + smallIcon: <></>, }, { enum: "MACRO_ACTION_STEP_SEND_REPORT", id: 11, name: "Send Report" }, { enum: "MACRO_ACTION_STEP_TAP_SEQUENCE", name: "Intervaled Special Keys", - icon: <React.Fragment />, - smallIcon: <React.Fragment /> + icon: <></>, + smallIcon: <></>, }, { enum: "MACRO_ACTION_STEP_TAP_CODE_SEQUENCE", name: "Intervaled Key Press & Release", - icon: <React.Fragment />, - smallIcon: <React.Fragment /> - } + icon: <></>, + smallIcon: <></>, + }, ]; } componentDidUpdate(prevProps, prevState) { try { - const prevAux = prevProps.macro.actions.map((x, id) => { - return { keyCode: x.keyCode, type: x.type, id: id }; - }); - const propAux = this.props.macro.actions.map((x, id) => { - return { keyCode: x.keyCode, type: x.type, id: id }; - }); + const prevAux = prevProps.macro.actions.map((x, id) => ({ keyCode: x.keyCode, type: x.type, id })); + const propAux = this.props.macro.actions.map((x, id) => ({ keyCode: x.keyCode, type: x.type, id })); // console.log("Testing: ", JSON.parse(JSON.stringify(prevAux)), JSON.parse(JSON.stringify(propAux))); if (JSON.stringify(prevAux) !== JSON.stringify(propAux)) { console.log("Updating"); - let auxConv = this.createConversion(this.props.macro.actions); - let newRows = auxConv.map((item, index) => { - return { ...item, id: index }; - }); + const auxConv = this.createConversion(this.props.macro.actions); + const newRows = auxConv.map((item, index) => ({ ...item, id: index })); this.setState({ - rows: newRows + rows: newRows, }); } } catch (e) { @@ -333,7 +327,7 @@ class MacroCreator extends Component { const randID = new Date().getTime() + Math.floor(Math.random() * 1000); let keyCode = this.keymapDB.reverse(item); if (upper) { - keyCode = keyCode + 2048; + keyCode += 2048; } let actions = [ { @@ -343,37 +337,37 @@ class MacroCreator extends Component { id: index + newRows.length, color: this.assignColor(keyCode), uid: randID, - ucolor: "transparent" - } + ucolor: "transparent", + }, ]; switch (true) { case (keyCode & 256) === 256 && (keyCode & 512) === 512: - //Control pressed to modify (2) + // Control pressed to modify (2) actions = this.addModToKey(actions, 5, 256); break; case (keyCode & 256) === 256: - //Control pressed to modify (2) + // Control pressed to modify (2) actions = this.addModToKey(actions, 2, 256); break; case (keyCode & 512) === 512: - //Left Alt pressed to modify (4) + // Left Alt pressed to modify (4) actions = this.addModToKey(actions, 4, 512); break; case (keyCode & 1024) === 1024: - //Right alt pressed to modify (5) + // Right alt pressed to modify (5) actions = this.addModToKey(actions, 5, 1024); break; case (keyCode & 2048) === 2048: - //Shift pressed to modify (0) + // Shift pressed to modify (0) actions = this.addModToKey(actions, 0, 2048); break; case (keyCode & 4096) === 4096: - //Gui pressed to modify (6) + // Gui pressed to modify (6) actions = this.addModToKey(actions, 6, 4096); break; @@ -381,34 +375,33 @@ class MacroCreator extends Component { break; } return actions; - }) + }), ); // console.log("TEST", JSON.stringify(newRows), JSON.stringify(this.props.macros)); this.setState({ - addText: "" + addText: "", }); this.updateRows(newRows); }; onAddRecorded = recorded => { console.log("MacroCreator onAddRecorded", recorded, this.props.macro); - let actions = this.props.macro.actions; + let { actions } = this.props.macro; actions = actions.concat( - recorded.map((item, index) => { - return { - keyCode: item.keycode, - type: item.action - }; - }) + recorded.map((item, index) => ({ + keyCode: item.keycode, + type: item.action, + })), ); - let newRows = this.createConversion(actions); + const newRows = this.createConversion(actions); this.updateRows(newRows); }; createConversion = actions => { - let converted = actions.map((action, i) => { + const converted = actions.map((action, i) => { const randID = new Date().getTime() + Math.floor(Math.random() * 1000); - let km, txt; + let km; + let txt; switch (action.type) { case 1: case 2: @@ -419,14 +412,14 @@ class MacroCreator extends Component { id: i, color: "#faf0e3", uid: randID, - ucolor: "transparent" + ucolor: "transparent", }; case 3: case 4: case 5: km = this.keymapDB.parse(action.keyCode); if (km.extraLabel !== undefined) { - txt = km.extraLabel + " " + km.label; + txt = `${km.extraLabel} ${km.label}`; } else { txt = km.label; } @@ -437,7 +430,7 @@ class MacroCreator extends Component { id: i, color: this.assignColor(action.keyCode), uid: randID, - ucolor: "transparent" + ucolor: "transparent", }; case 6: case 7: @@ -449,7 +442,7 @@ class MacroCreator extends Component { id: i, color: this.assignColor(action.keyCode), uid: randID, - ucolor: "transparent" + ucolor: "transparent", }; default: break; @@ -459,27 +452,25 @@ class MacroCreator extends Component { }; revertConversion = actions => { - let converted = actions.map(({ keyCode, action, id }) => { - return { - keyCode: keyCode, - type: action, - id: id - }; - }); + const converted = actions.map(({ keyCode, action, id }) => ({ + keyCode, + type: action, + id, + })); return converted; }; updateRows = rows => { console.log("Macro creator updaterows", rows); - let texted = rows.map(k => this.keymapDB.parse(k.keyCode).label).join(" "); - let newRows = rows.map((item, index) => { - let aux = item; + const texted = rows.map(k => this.keymapDB.parse(k.keyCode).label).join(" "); + const newRows = rows.map((item, index) => { + const aux = item; aux.id = index; return aux; }); this.setState({ rows: newRows, - macro: texted + macro: texted, }); this.props.addToActions(this.revertConversion(rows)); @@ -487,8 +478,8 @@ class MacroCreator extends Component { onAddSymbol = (keyCode, action) => { const randID = new Date().getTime() + Math.floor(Math.random() * 1000); - let newRows = this.state.rows; - let symbol = this.keymapDB.parse(keyCode).label; + const newRows = this.state.rows; + const symbol = this.keymapDB.parse(keyCode).label; newRows.push({ symbol, keyCode, @@ -496,14 +487,14 @@ class MacroCreator extends Component { id: newRows.length, color: this.assignColor(keyCode), uid: randID, - ucolor: "transparent" + ucolor: "transparent", }); this.updateRows(newRows); }; onAddDelay = (delay, action) => { const randID = new Date().getTime() + Math.floor(Math.random() * 1000); - let newRows = this.state.rows; + const newRows = this.state.rows; newRows.push({ symbol: parseInt(delay), keyCode: parseInt(delay), @@ -511,32 +502,32 @@ class MacroCreator extends Component { id: newRows.length, color: "#faf0e3", uid: randID, - ucolor: "transparent" + ucolor: "transparent", }); this.updateRows(newRows); }; onAddDelayRnd = (delayMin, delayMax, action) => { const randID = new Date().getTime() + Math.floor(Math.random() * 1000); - let newRows = this.state.rows; + const newRows = this.state.rows; newRows.push({ symbol: `${delayMin} - ${delayMax}`, keyCode: [delayMin, delayMax], - action: action, + action, id: newRows.length, color: "#faf0e3", uid: randID, - ucolor: "transparent" + ucolor: "transparent", }); this.updateRows(newRows); }; onAddSpecial = (keyCode, action) => { const randID = new Date().getTime() + Math.floor(Math.random() * 1000); - let newRows = this.state.rows; + const newRows = this.state.rows; let symbol = this.keymapDB.parse(keyCode); if (symbol.extraLabel !== undefined) { - symbol = symbol.extraLabel + " " + symbol.label; + symbol = `${symbol.extraLabel} ${symbol.label}`; } else { symbol = symbol.label; } @@ -547,7 +538,7 @@ class MacroCreator extends Component { id: newRows.length, color: this.assignColor(keyCode), uid: randID, - ucolor: "transparent" + ucolor: "transparent", }); this.updateRows(newRows); }; @@ -555,8 +546,8 @@ class MacroCreator extends Component { addModifier = (rowID, modifierID) => { const { name, keyCode, color } = this.modifiers[modifierID]; const randID = new Date().getTime() + Math.floor(Math.random() * 1000); - const randColor = "#" + Math.floor(Math.abs(Math.sin(randID) * 16777215) % 16777215).toString(16); - let newRows = this.state.rows; + const randColor = `#${Math.floor(Math.abs(Math.sin(randID) * 16777215) % 16777215).toString(16)}`; + const newRows = this.state.rows; newRows.splice(rowID + 1, 0, { symbol: name, keyCode, @@ -564,7 +555,7 @@ class MacroCreator extends Component { id: rowID + 1, color, uid: randID, - ucolor: randColor + ucolor: randColor, }); newRows.splice(rowID, 0, { symbol: name, @@ -573,7 +564,7 @@ class MacroCreator extends Component { id: rowID, color, uid: randID, - ucolor: randColor + ucolor: randColor, }); this.updateRows(newRows); }; @@ -581,25 +572,25 @@ class MacroCreator extends Component { addModToKey = (rows, modID, modBit) => { const { name, keyCode, color } = this.modifiers[modID]; const randID = new Date().getTime() + Math.floor(Math.random() * 1000); - const randColor = "#" + Math.floor(Math.abs(Math.sin(randID) * 16777215) % 16777215).toString(16); - let actions = rows; + const randColor = `#${Math.floor(Math.abs(Math.sin(randID) * 16777215) % 16777215).toString(16)}`; + const actions = rows; actions.splice(1, 0, { symbol: name, - keyCode: keyCode, + keyCode, action: 7, id: 2, - color: color, + color, uid: randID, - ucolor: randColor + ucolor: randColor, }); actions.splice(0, 0, { symbol: name, - keyCode: keyCode, + keyCode, action: 6, id: 0, - color: color, + color, uid: randID, - ucolor: randColor + ucolor: randColor, }); actions[1].keyCode = actions[1].keyCode ^ modBit; actions[1].symbol = this.keymapDB.parse(actions[1].keyCode).label; diff --git a/src/renderer/modules/Macros/MacroRecorder.js b/src/renderer/modules/Macros/MacroRecorder.js index 5cb28efc9..49325f32a 100644 --- a/src/renderer/modules/Macros/MacroRecorder.js +++ b/src/renderer/modules/Macros/MacroRecorder.js @@ -16,12 +16,12 @@ */ document.onkeyup = keyup; document.onkeydown = keydown; -var inputs = []; -var timer = 0; -var timercap = null; -var on = 0; -var playing = 0; -var order = 0; +let inputs = []; +let timer = 0; +let timercap = null; +let on = 0; +let playing = 0; +let order = 0; function keydown(event) { event = event || window.event; if (event.keyCode === 191) { @@ -60,14 +60,14 @@ function play() { order = 0; } } -var maintime = setInterval(function () { +const maintime = setInterval(() => { timer++; if (playing == 1) { while (inputs[order][2] < timer) { - var evnt = new KeyboardEvent(inputs[order][1], { keyCode: inputs[order][0], which: inputs[order][0] }); - //for (var x = 0; x < document.all.length; x++) { - //document.all[x].dispatchEvent(evnt); - //} + const evnt = new KeyboardEvent(inputs[order][1], { keyCode: inputs[order][0], which: inputs[order][0] }); + // for (var x = 0; x < document.all.length; x++) { + // document.all[x].dispatchEvent(evnt); + // } window.dispatchEvent(evnt); order++; } diff --git a/src/renderer/modules/Macros/MacrosMemoryUsage.js b/src/renderer/modules/Macros/MacrosMemoryUsage.js index 2fa27e119..9811f2b9f 100644 --- a/src/renderer/modules/Macros/MacrosMemoryUsage.js +++ b/src/renderer/modules/Macros/MacrosMemoryUsage.js @@ -19,8 +19,8 @@ import React from "react"; import Styled from "styled-components"; import PropTypes from "prop-types"; -import i18n from "../../i18n"; import { toast } from "react-toastify"; +import i18n from "../../i18n"; import Title from "../../component/Title"; import DotsProgressBar from "./DotsProgressBar"; @@ -95,7 +95,7 @@ const MacrosMemoryUsage = ({ mem, tMem }) => { content={i18n.editor.macros.memoryUsage.alertBody} icon={<IconFloppyDisk />} />, - { icon: "" } + { icon: "" }, ); } if (mem > tMem - 20) { @@ -113,8 +113,8 @@ const MacrosMemoryUsage = ({ mem, tMem }) => { pauseOnHover: true, draggable: true, progress: undefined, - icon: "" - } + icon: "", + }, ); } }, [mem, tMem]); @@ -132,7 +132,7 @@ const MacrosMemoryUsage = ({ mem, tMem }) => { </div> </Styles> ); -}; +} MacrosMemoryUsage.propTypes = { mem: PropTypes.number, diff --git a/src/renderer/modules/Macros/RecordMacroModal.js b/src/renderer/modules/Macros/RecordMacroModal.js index 7b2b5c828..fcf8dd0d9 100644 --- a/src/renderer/modules/Macros/RecordMacroModal.js +++ b/src/renderer/modules/Macros/RecordMacroModal.js @@ -2,9 +2,10 @@ import React from "react"; import Styled from "styled-components"; import Modal from "react-bootstrap/Modal"; +import { ipcRenderer } from "electron"; import i18n from "../../i18n"; -import { RegularButton, ButtonConfig } from "../../component/Button"; +import { RegularButton, RegularButtonFwRef, ButtonConfig } from "../../component/Button"; import Title from "../../component/Title"; import { IconRecord, @@ -12,10 +13,9 @@ import { IconPauseXl, IconUndoRestart, IconStopWatch, - IconStopWatchCrossed + IconStopWatchCrossed, } from "../../component/Icon"; import AnimatedTimelineRecording from "./AnimatedTimelineRecording"; -const { ipcRenderer } = require("electron"); const Styles = Styled.div` @@ -31,6 +31,7 @@ const Styles = Styled.div` align-items: center; margin-bottom: 2px; white-space: nowrap; + width: 100%; svg { color: ${({ theme }) => theme.styles.tabButton.svgColor}; } @@ -48,11 +49,12 @@ const Styles = Styled.div` export default class RecordMacroModal extends React.Component { constructor(props) { super(props); + this.buttonRecord = React.createRef(); this.state = { showModal: false, isRecording: false, isDelayActive: true, - recorded: [] + recorded: [], }; this.translator = { 0x000e: 42, @@ -169,23 +171,23 @@ export default class RecordMacroModal extends React.Component { 0x002a: 225, // Left 0x0036: 229, 0x0e5b: 227, - 0x0e5c: 231 + 0x0e5c: 231, }; } componentDidMount() { ipcRenderer.on("recorded-key-down", (event, response) => { console.log("Check key-down", response); - let newRecorded = this.state.recorded; + const newRecorded = this.state.recorded; newRecorded.push({ char: response.name, keycode: this.translator[response.event.keycode], action: 6, time: response.time, - isMod: this.translator[response.event.keycode] >= 224 && this.translator[response.event.keycode] <= 231 + isMod: this.translator[response.event.keycode] >= 224 && this.translator[response.event.keycode] <= 231, }); this.setState({ - recorded: newRecorded + recorded: newRecorded, }); }); ipcRenderer.on("recorded-key-up", (event, response) => { @@ -193,16 +195,16 @@ export default class RecordMacroModal extends React.Component { if (response.event.keycode === 29 && !response.event.ctrlKey) { return; } - let newRecorded = this.state.recorded; + const newRecorded = this.state.recorded; newRecorded.push({ char: response.name, keycode: this.translator[response.event.keycode], action: 7, time: response.time, - isMod: this.translator[response.event.keycode] >= 224 && this.translator[response.event.keycode] <= 231 + isMod: this.translator[response.event.keycode] >= 224 && this.translator[response.event.keycode] <= 231, }); this.setState({ - recorded: newRecorded + recorded: newRecorded, }); }); // ipcRenderer.on("recorded-mouse-move", (event, response) => { @@ -227,44 +229,48 @@ export default class RecordMacroModal extends React.Component { toggleShow = () => { this.setState({ showModal: !this.state.showModal, - recorded: [] + recorded: [], }); }; toggleIsRecording = () => { + if (this.buttonRecord.current && this.buttonRecord.current instanceof HTMLButtonElement) { + this.buttonRecord.current.blur(); + } if (!this.state.isRecording) { ipcRenderer.send("start-recording", ""); } else { ipcRenderer.send("stop-recording", ""); } this.setState({ - isRecording: !this.state.isRecording + isRecording: !this.state.isRecording, }); }; undoRecording = () => { this.setState({ - recorded: [] + recorded: [], }); }; setDelayOn = () => { this.setState({ - isDelayActive: true + isDelayActive: true, }); }; + setDelayOff = () => { this.setState({ - isDelayActive: false + isDelayActive: false, }); }; cleanRecorded = recorded => { console.log("Clean recorded", recorded); - let newRecorded = []; - let previous = 0; + const newRecorded = []; + const previous = 0; for (let i = 1; i < recorded.length; i++) { - let p = i - 1; + const p = i - 1; console.log(`pressed key: ${recorded[i].char}`, recorded[p], recorded[i]); if (recorded[p].isMod) { console.log(`Modifier detected: ${recorded[p].char}`); @@ -273,7 +279,7 @@ export default class RecordMacroModal extends React.Component { } if (recorded[p].keycode === recorded[i].keycode && recorded[p].action === 6 && recorded[i].action === 7) { console.log( - `pressRelease joining ${recorded[i].char} as 1 with ${recorded[p].action} as p action and ${recorded[i].action} as i action` + `pressRelease joining ${recorded[i].char} as 1 with ${recorded[p].action} as p action and ${recorded[i].action} as i action`, ); recorded[p].action = 8; newRecorded.push(recorded[p]); @@ -318,7 +324,7 @@ export default class RecordMacroModal extends React.Component { <Styles> <RegularButton buttonText={i18n.editor.macros.recordMacro} - style="tabButton" + styles="tabButton" icoSVG={<IconRecord />} icoPosition="left" onClick={this.toggleShow} @@ -345,7 +351,7 @@ export default class RecordMacroModal extends React.Component { icoSVG={<IconStopWatch />} icoPosition="left" buttonText={i18n.editor.macros.recordDelays} - style={`buttonConfigMinimal ${isDelayActive ? "config-active" : ""}`} + variation={`buttonConfigMinimal ${isDelayActive ? "config-active" : ""}`} onClick={this.setDelayOn} disabled={isRecording} /> @@ -353,7 +359,7 @@ export default class RecordMacroModal extends React.Component { icoSVG={<IconStopWatchCrossed />} icoPosition="left" buttonText={i18n.editor.macros.ignoreDelays} - style={`buttonConfigMinimal ${!isDelayActive ? "config-active" : ""}`} + variation={`buttonConfigMinimal ${!isDelayActive ? "config-active" : ""}`} onClick={this.setDelayOff} disabled={isRecording} /> @@ -365,12 +371,10 @@ export default class RecordMacroModal extends React.Component { ) : ( <div className={`timelineRecordSequence ${isRecording ? "isRecording" : "isPaused"}`}> <div className="timelineRecordSequenceInner"> - {recorded.map((item, index) => { - return item.char; - })} + {recorded.map((item, index) => item.char)} {/* Lotem ipsum dolor aemet sit <div className="keySpecial">500 ms</div> waiting */} </div> - <div className="timelinePointeText"></div> + <div className="timelinePointeText" /> </div> )} @@ -381,28 +385,30 @@ export default class RecordMacroModal extends React.Component { <ButtonConfig tooltip={i18n.editor.macros.recordingDiscard} icoSVG={<IconUndoRestart />} - style={`undoRecording`} + variation="undoRecording" onClick={this.undoRecording} /> ) : ( "" )} - <RegularButton - buttonText={recorded.length === 0 ? i18n.editor.macros.startRecord : isRecording ? "Pause icon" : "Resume"} + <RegularButtonFwRef icoSVG={<IconPauseXl />} - style={`recordButton ${isRecording ? "isRecording" : ""} ${ + variation={`recordButton ${isRecording ? "isRecording" : ""} ${ recorded.length > 0 && !isRecording ? "isResume" : "" }`} onClick={this.toggleIsRecording} - /> + ref={this.buttonRecord} + > + {recorded.length === 0 ? i18n.editor.macros.startRecord : isRecording ? "Pause icon" : "Resume"} + </RegularButtonFwRef> </div> <div className="tabSaveButton"> <RegularButton buttonText={i18n.editor.macros.textTabs.buttonText} - style="outline gradient" + styles="outline gradient" icoSVG={<IconArrowInBoxDown />} icoPosition="right" - disabled={recorded.length === 0 || isRecording ? true : false} + disabled={!!(recorded.length === 0 || isRecording)} onClick={this.sendMacro} /> </div> diff --git a/src/renderer/modules/Macros/TimelineEditor.js b/src/renderer/modules/Macros/TimelineEditor.js index 5df5ed21f..c303296d8 100644 --- a/src/renderer/modules/Macros/TimelineEditor.js +++ b/src/renderer/modules/Macros/TimelineEditor.js @@ -59,7 +59,7 @@ class TimelineEditor extends Component { this.state = { addText: "", rows: [], - macro: props.macro === undefined ? "" : props.macro.macro + macro: props.macro === undefined ? "" : props.macro.macro, }; this.keymapDB = props.keymapDB; this.modifiers = [ @@ -70,88 +70,88 @@ class TimelineEditor extends Component { { name: "LEFT ALT", keyCode: 226, color: "#faf8e1" }, { name: "RIGHT ALT", keyCode: 230, color: "#f2e7f5" }, { name: "LEFT OS", keyCode: 227, color: "#e6f0e4" }, - { name: "RIGHT OS", keyCode: 231, color: "#e6f0e4" } + { name: "RIGHT OS", keyCode: 231, color: "#e6f0e4" }, ]; this.actionTypes = [ { enum: "MACRO_ACTION_END", name: "End macro", - icon: <React.Fragment />, - smallIcon: <React.Fragment /> + icon: <></>, + smallIcon: <></>, }, { enum: "MACRO_ACTION_STEP_INTERVAL", name: "Set Interval", icon: <MdTimer fontSize="large" />, - smallIcon: <MdTimer /> + smallIcon: <MdTimer />, }, { enum: "MACRO_ACTION_STEP_WAIT", name: "Delay", icon: <MdTimer fontSize="large" />, - smallIcon: <MdTimer /> + smallIcon: <MdTimer />, }, { enum: "MACRO_ACTION_STEP_KEYDOWN", name: "Function Key Press", icon: <MdKeyboardArrowDown fontSize="large" />, - smallIcon: <MdKeyboardArrowDown /> + smallIcon: <MdKeyboardArrowDown />, }, { enum: "MACRO_ACTION_STEP_KEYUP", name: "Function Key Release", icon: <MdKeyboardArrowUp fontSize="large" />, - smallIcon: <MdKeyboardArrowUp /> + smallIcon: <MdKeyboardArrowUp />, }, { enum: "MACRO_ACTION_STEP_TAP", name: "Fn. Press & Release", icon: <MdUnfoldLess fontSize="large" />, - smallIcon: <MdUnfoldLess /> + smallIcon: <MdUnfoldLess />, }, { enum: "MACRO_ACTION_STEP_KEYCODEDOWN", name: "Key Press", icon: <MdKeyboardArrowDown fontSize="large" />, - smallIcon: <MdKeyboardArrowDown /> + smallIcon: <MdKeyboardArrowDown />, }, { enum: "MACRO_ACTION_STEP_KEYCODEUP", name: "Key Release", icon: <MdKeyboardArrowUp fontSize="large" />, - smallIcon: <MdKeyboardArrowUp /> + smallIcon: <MdKeyboardArrowUp />, }, { enum: "MACRO_ACTION_STEP_TAPCODE", name: "Key Press & Rel.", icon: <MdUnfoldLess fontSize="large" />, - smallIcon: <MdUnfoldLess /> + smallIcon: <MdUnfoldLess />, }, { enum: "MACRO_ACTION_STEP_EXPLICIT_REPORT", name: "Explicit Report", - icon: <React.Fragment />, - smallIcon: <React.Fragment /> + icon: <></>, + smallIcon: <></>, }, { enum: "MACRO_ACTION_STEP_IMPLICIT_REPORT", name: "Implicit Report", - icon: <React.Fragment />, - smallIcon: <React.Fragment /> + icon: <></>, + smallIcon: <></>, }, { enum: "MACRO_ACTION_STEP_SEND_REPORT", id: 11, name: "Send Report" }, { enum: "MACRO_ACTION_STEP_TAP_SEQUENCE", name: "Intervaled Special Keys", - icon: <React.Fragment />, - smallIcon: <React.Fragment /> + icon: <></>, + smallIcon: <></>, }, { enum: "MACRO_ACTION_STEP_TAP_CODE_SEQUENCE", name: "Intervaled Key Press & Release", - icon: <React.Fragment />, - smallIcon: <React.Fragment /> - } + icon: <></>, + smallIcon: <></>, + }, ]; this.onDragEnd = this.onDragEnd.bind(this); @@ -174,9 +174,10 @@ class TimelineEditor extends Component { } createConversion(actions) { - let converted = actions.map((action, i) => { + const converted = actions.map((action, i) => { const randID = new Date().getTime() + Math.floor(Math.random() * 1000); - let km, txt; + let km; + let txt; switch (action.type) { case 1: case 2: @@ -187,14 +188,14 @@ class TimelineEditor extends Component { id: i, color: "#faf0e3", uid: randID, - ucolor: "transparent" + ucolor: "transparent", }; case 3: case 4: case 5: km = this.keymapDB.parse(action.keyCode); if (km.extraLabel !== undefined) { - txt = km.extraLabel + " " + km.label; + txt = `${km.extraLabel} ${km.label}`; } else { txt = km.label; } @@ -205,7 +206,7 @@ class TimelineEditor extends Component { id: i, color: this.assignColor(action.keyCode), uid: randID, - ucolor: "transparent" + ucolor: "transparent", }; case 6: case 7: @@ -217,7 +218,7 @@ class TimelineEditor extends Component { id: i, color: this.assignColor(action.keyCode), uid: randID, - ucolor: "transparent" + ucolor: "transparent", }; default: break; @@ -227,13 +228,11 @@ class TimelineEditor extends Component { } revertConversion(actions) { - let converted = actions.map(({ keyCode, action, id }) => { - return { - keyCode: keyCode, - type: action, - id: id - }; - }); + const converted = actions.map(({ keyCode, action, id }) => ({ + keyCode, + type: action, + id, + })); return converted; } @@ -249,28 +248,28 @@ class TimelineEditor extends Component { assignSymbol(macro) { // TODO: redo the function as assignColor to replace keycodes that are not represented (space, enter, tab, etc.. per icons or altcodes to be shown in their stead) - let action = []; + const action = []; for (const char of macro.split("")) { let keyCode = this.keymapDB.reverse(char.toUpperCase()); if (char === " ") { keyCode = 44; } - action.push({ keyCode: keyCode, type: 8 }); + action.push({ keyCode, type: 8 }); } return action; } updateRows(rows) { console.log("TimelineEditor updaterows", rows); - let texted = rows.map(k => this.keymapDB.parse(k.keyCode).label).join(" "); - let newRows = rows.map((item, index) => { - let aux = item; + const texted = rows.map(k => this.keymapDB.parse(k.keyCode).label).join(" "); + const newRows = rows.map((item, index) => { + const aux = item; aux.id = index; return aux; }); this.setState({ rows: newRows, - macro: texted + macro: texted, }); this.props.updateActions(this.revertConversion(rows), texted); @@ -287,8 +286,8 @@ class TimelineEditor extends Component { addModifier(rowID, modifierID) { const { name, keyCode, color } = this.modifiers[modifierID]; const randID = new Date().getTime() + Math.floor(Math.random() * 1000); - const randColor = "#" + Math.floor(Math.abs(Math.sin(randID) * 16777215) % 16777215).toString(16); - let newRows = this.state.rows; + const randColor = `#${Math.floor(Math.abs(Math.sin(randID) * 16777215) % 16777215).toString(16)}`; + const newRows = this.state.rows; newRows.splice(rowID + 1, 0, { symbol: name, keyCode, @@ -296,7 +295,7 @@ class TimelineEditor extends Component { id: rowID + 1, color, uid: randID, - ucolor: randColor + ucolor: randColor, }); newRows.splice(rowID, 0, { symbol: name, @@ -305,7 +304,7 @@ class TimelineEditor extends Component { id: rowID, color, uid: randID, - ucolor: randColor + ucolor: randColor, }); this.updateRows(newRows); } @@ -313,25 +312,25 @@ class TimelineEditor extends Component { addModToKey(rows, modID, modBit) { const { name, keyCode, color } = this.modifiers[modID]; const randID = new Date().getTime() + Math.floor(Math.random() * 1000); - const randColor = "#" + Math.floor(Math.abs(Math.sin(randID) * 16777215) % 16777215).toString(16); - let actions = rows; + const randColor = `#${Math.floor(Math.abs(Math.sin(randID) * 16777215) % 16777215).toString(16)}`; + const actions = rows; actions.splice(1, 0, { symbol: name, - keyCode: keyCode, + keyCode, action: 7, id: 2, - color: color, + color, uid: randID, - ucolor: randColor + ucolor: randColor, }); actions.splice(0, 0, { symbol: name, - keyCode: keyCode, + keyCode, action: 6, id: 0, - color: color, + color, uid: randID, - ucolor: randColor + ucolor: randColor, }); actions[1].keyCode = actions[1].keyCode ^ modBit; actions[1].symbol = this.keymapDB.parse(actions[1].keyCode).label; @@ -350,8 +349,8 @@ class TimelineEditor extends Component { } onDeleteRow(id) { - let uid = this.state.rows.filter(x => x.id === id)[0].uid; - let aux = this.state.rows.filter(x => x.uid !== uid); + const { uid } = this.state.rows.filter(x => x.id === id)[0]; + const aux = this.state.rows.filter(x => x.uid !== uid); this.updateRows(aux); } @@ -378,7 +377,7 @@ class TimelineEditor extends Component { const randID = new Date().getTime() + Math.floor(Math.random() * 1000); let keyCode = this.keymapDB.reverse(item); if (upper) { - keyCode = keyCode + 2048; + keyCode += 2048; } let actions = [ { @@ -388,37 +387,37 @@ class TimelineEditor extends Component { id: index + newRows.length, color: this.assignColor(keyCode), uid: randID, - ucolor: "transparent" - } + ucolor: "transparent", + }, ]; switch (true) { case (keyCode & 256) === 256 && (keyCode & 512) === 512: - //Control pressed to modify (2) + // Control pressed to modify (2) actions = this.addModToKey(actions, 5, 256); break; case (keyCode & 256) === 256: - //Control pressed to modify (2) + // Control pressed to modify (2) actions = this.addModToKey(actions, 2, 256); break; case (keyCode & 512) === 512: - //Left Alt pressed to modify (4) + // Left Alt pressed to modify (4) actions = this.addModToKey(actions, 4, 512); break; case (keyCode & 1024) === 1024: - //Right alt pressed to modify (5) + // Right alt pressed to modify (5) actions = this.addModToKey(actions, 5, 1024); break; case (keyCode & 2048) === 2048: - //Shift pressed to modify (0) + // Shift pressed to modify (0) actions = this.addModToKey(actions, 0, 2048); break; case (keyCode & 4096) === 4096: - //Gui pressed to modify (6) + // Gui pressed to modify (6) actions = this.addModToKey(actions, 6, 4096); break; @@ -426,18 +425,18 @@ class TimelineEditor extends Component { break; } return actions; - }) + }), ); this.setState({ - addText: "" + addText: "", }); this.updateRows(newRows); } onAddSymbol(keyCode, action) { const randID = new Date().getTime() + Math.floor(Math.random() * 1000); - let newRows = this.state.rows; - let symbol = this.keymapDB.parse(keyCode).label; + const newRows = this.state.rows; + const symbol = this.keymapDB.parse(keyCode).label; newRows.push({ symbol, keyCode, @@ -445,14 +444,14 @@ class TimelineEditor extends Component { id: newRows.length, color: this.assignColor(keyCode), uid: randID, - ucolor: "transparent" + ucolor: "transparent", }); this.updateRows(newRows); } onAddDelay(delay, action) { const randID = new Date().getTime() + Math.floor(Math.random() * 1000); - let newRows = this.state.rows; + const newRows = this.state.rows; newRows.push({ symbol: delay, keyCode: delay, @@ -460,17 +459,17 @@ class TimelineEditor extends Component { id: newRows.length, color: "#faf0e3", uid: randID, - ucolor: "transparent" + ucolor: "transparent", }); this.updateRows(newRows); } onAddSpecial(keyCode, action) { const randID = new Date().getTime() + Math.floor(Math.random() * 1000); - let newRows = this.state.rows; + const newRows = this.state.rows; let symbol = this.keymapDB.parse(keyCode); if (symbol.extraLabel !== undefined) { - symbol = symbol.extraLabel + " " + symbol.label; + symbol = `${symbol.extraLabel} ${symbol.label}`; } else { symbol = symbol.label; } @@ -481,7 +480,7 @@ class TimelineEditor extends Component { id: newRows.length, color: this.assignColor(keyCode), uid: randID, - ucolor: "transparent" + ucolor: "transparent", }); this.updateRows(newRows); } @@ -495,7 +494,7 @@ class TimelineEditor extends Component { <Droppable droppableId="droppable"> {provided => ( <div ref={provided.innerRef}> - <ListGroup className={"list margin padding border whitebg"}> + <ListGroup className="list margin padding border whitebg"> {this.state.rows.map((item, index) => ( <Draggable key={index} draggableId={String(index)} index={index}> {(provided, snapshot) => ( diff --git a/src/renderer/modules/Macros/TimelineEditorMacroTable.js b/src/renderer/modules/Macros/TimelineEditorMacroTable.js index 2d5b0e7dd..7077f298c 100644 --- a/src/renderer/modules/Macros/TimelineEditorMacroTable.js +++ b/src/renderer/modules/Macros/TimelineEditorMacroTable.js @@ -1,11 +1,11 @@ import React, { Component } from "react"; -import KeyMacro from "./KeyMacro"; -import { PreviewMacroModal } from "../../component/Modal"; import Styled from "styled-components"; import { MdUnfoldLess, MdKeyboardArrowUp, MdKeyboardArrowDown, MdTimer } from "react-icons/md"; import { DragDropContext, Droppable, Draggable } from "react-beautiful-dnd"; +import { PreviewMacroModal } from "../../component/Modal"; +import KeyMacro from "./KeyMacro"; import { IconStopWatchXs } from "../../component/Icon"; @@ -85,7 +85,7 @@ class TimelineEditorMacroTable extends Component { this.state = { addText: "", rows: [], - macro: props.macro + macro: props.macro, }; this.keymapDB = props.keymapDB; this.modifiers = [ @@ -96,88 +96,88 @@ class TimelineEditorMacroTable extends Component { { name: "LEFT ALT", keyCode: 226, color: "#faf8e1" }, { name: "RIGHT ALT", keyCode: 230, color: "#f2e7f5" }, { name: "LEFT OS", keyCode: 227, color: "#e6f0e4" }, - { name: "RIGHT OS", keyCode: 231, color: "#e6f0e4" } + { name: "RIGHT OS", keyCode: 231, color: "#e6f0e4" }, ]; this.actionTypes = [ { enum: "MACRO_ACTION_END", name: "End macro", - icon: <React.Fragment />, - smallIcon: <React.Fragment /> + icon: <></>, + smallIcon: <></>, }, { enum: "MACRO_ACTION_STEP_INTERVAL", name: "Delay", icon: <MdTimer fontSize="large" />, - smallIcon: <MdTimer /> + smallIcon: <MdTimer />, }, { enum: "MACRO_ACTION_STEP_WAIT", name: "Delay", icon: <MdTimer fontSize="large" />, - smallIcon: <MdTimer /> + smallIcon: <MdTimer />, }, { enum: "MACRO_ACTION_STEP_KEYDOWN", name: "Function Key Press", icon: <MdKeyboardArrowDown fontSize="large" />, - smallIcon: <MdKeyboardArrowDown /> + smallIcon: <MdKeyboardArrowDown />, }, { enum: "MACRO_ACTION_STEP_KEYUP", name: "Function Key Release", icon: <MdKeyboardArrowUp fontSize="large" />, - smallIcon: <MdKeyboardArrowUp /> + smallIcon: <MdKeyboardArrowUp />, }, { enum: "MACRO_ACTION_STEP_TAP", name: "Fn. Press & Release", icon: <MdUnfoldLess fontSize="large" />, - smallIcon: <MdUnfoldLess /> + smallIcon: <MdUnfoldLess />, }, { enum: "MACRO_ACTION_STEP_KEYCODEDOWN", name: "Key Press", icon: <MdKeyboardArrowDown fontSize="large" />, - smallIcon: <MdKeyboardArrowDown /> + smallIcon: <MdKeyboardArrowDown />, }, { enum: "MACRO_ACTION_STEP_KEYCODEUP", name: "Key Release", icon: <MdKeyboardArrowUp fontSize="large" />, - smallIcon: <MdKeyboardArrowUp /> + smallIcon: <MdKeyboardArrowUp />, }, { enum: "MACRO_ACTION_STEP_TAPCODE", name: "Key Press & Rel.", icon: <MdUnfoldLess fontSize="large" />, - smallIcon: <MdUnfoldLess /> + smallIcon: <MdUnfoldLess />, }, { enum: "MACRO_ACTION_STEP_EXPLICIT_REPORT", name: "Explicit Report", - icon: <React.Fragment />, - smallIcon: <React.Fragment /> + icon: <></>, + smallIcon: <></>, }, { enum: "MACRO_ACTION_STEP_IMPLICIT_REPORT", name: "Implicit Report", - icon: <React.Fragment />, - smallIcon: <React.Fragment /> + icon: <></>, + smallIcon: <></>, }, { enum: "MACRO_ACTION_STEP_SEND_REPORT", id: 11, name: "Send Report" }, { enum: "MACRO_ACTION_STEP_TAP_SEQUENCE", name: "Intervaled Special Keys", - icon: <React.Fragment />, - smallIcon: <React.Fragment /> + icon: <></>, + smallIcon: <></>, }, { enum: "MACRO_ACTION_STEP_TAP_CODE_SEQUENCE", name: "Intervaled Key Press & Release", - icon: <React.Fragment />, - smallIcon: <React.Fragment /> - } + icon: <></>, + smallIcon: <></>, + }, ]; this.onDragEnd = this.onDragEnd.bind(this); @@ -189,16 +189,16 @@ class TimelineEditorMacroTable extends Component { componentDidMount() { if (this.props.macro !== null && this.props.macro.actions !== null && this.props.macro.actions.length > 0) { - let conv = this.createConversion(this.props.macro.actions); - let texted = conv.map(k => this.keymapDB.parse(k.keyCode).label).join(" "); - let newRows = conv.map((item, index) => { - let aux = item; + const conv = this.createConversion(this.props.macro.actions); + const texted = conv.map(k => this.keymapDB.parse(k.keyCode).label).join(" "); + const newRows = conv.map((item, index) => { + const aux = item; aux.id = index; return aux; }); this.setState({ rows: newRows, - macro: texted + macro: texted, }); } if (this.state.rows.length !== 0) { @@ -222,17 +222,17 @@ class TimelineEditorMacroTable extends Component { scrollContainer.scrollLeft = this.props.scrollPos; } if (this.props.macro !== prevProps.macro) { - let rows = this.createConversion(this.props.macro.actions); + const rows = this.createConversion(this.props.macro.actions); console.log("TiEMTa CompDidUpdate", rows); - let texted = rows.map(k => this.keymapDB.parse(k.keyCode).label).join(" "); - let newRows = rows.map((item, index) => { - let aux = item; + const texted = rows.map(k => this.keymapDB.parse(k.keyCode).label).join(" "); + const newRows = rows.map((item, index) => { + const aux = item; aux.id = index; return aux; }); this.setState({ rows: newRows, - macro: texted + macro: texted, }); } } @@ -252,9 +252,10 @@ class TimelineEditorMacroTable extends Component { }; createConversion(actions) { - let converted = actions.map((action, i) => { + const converted = actions.map((action, i) => { const randID = new Date().getTime() + Math.floor(Math.random() * 1000); - let km, txt; + let km; + let txt; switch (action.type) { case 1: return { @@ -264,7 +265,7 @@ class TimelineEditorMacroTable extends Component { id: i, color: "#faf0e3", uid: randID, - ucolor: "transparent" + ucolor: "transparent", }; case 2: return { @@ -274,14 +275,14 @@ class TimelineEditorMacroTable extends Component { id: i, color: "#faf0e3", uid: randID, - ucolor: "transparent" + ucolor: "transparent", }; case 3: case 4: case 5: km = this.keymapDB.parse(action.keyCode); if (km.extraLabel !== undefined) { - txt = km.extraLabel + " " + km.label; + txt = `${km.extraLabel} ${km.label}`; } else { txt = km.label; } @@ -292,7 +293,7 @@ class TimelineEditorMacroTable extends Component { id: i, color: this.assignColor(action.keyCode), uid: randID, - ucolor: "transparent" + ucolor: "transparent", }; case 6: case 7: @@ -304,7 +305,7 @@ class TimelineEditorMacroTable extends Component { id: i, color: this.assignColor(action.keyCode), uid: randID, - ucolor: "transparent" + ucolor: "transparent", }; default: break; @@ -314,13 +315,11 @@ class TimelineEditorMacroTable extends Component { } revertConversion(actions) { - let converted = actions.map(({ keyCode, action, id }) => { - return { - keyCode: keyCode, - type: action, - id: id - }; - }); + const converted = actions.map(({ keyCode, action, id }) => ({ + keyCode, + type: action, + id, + })); return converted; } @@ -336,17 +335,17 @@ class TimelineEditorMacroTable extends Component { updateRows(rows) { console.log("TiEMTa updaterows", rows); - let texted = rows.map(k => this.keymapDB.parse(k.keyCode).label).join(" "); - let newRows = rows.map((item, index) => { - let aux = item; + const texted = rows.map(k => this.keymapDB.parse(k.keyCode).label).join(" "); + const newRows = rows.map((item, index) => { + const aux = item; aux.id = index; return aux; }); this.setState({ rows: newRows, - macro: texted + macro: texted, }); - let revConv = this.revertConversion(rows); + const revConv = this.revertConversion(rows); // console.log("TiEMTa revConv", revConv); this.props.updateActions(revConv); } @@ -363,8 +362,8 @@ class TimelineEditorMacroTable extends Component { console.log("Called addModifier", rowID, modifierID); const { name, keyCode, color } = this.modifiers[modifierID]; const randID = new Date().getTime() + Math.floor(Math.random() * 1000); - const randColor = "#" + Math.floor(Math.abs(Math.sin(randID) * 16777215) % 16777215).toString(16); - let newRows = this.state.rows; + const randColor = `#${Math.floor(Math.abs(Math.sin(randID) * 16777215) % 16777215).toString(16)}`; + const newRows = this.state.rows; newRows.splice(rowID + 1, 0, { symbol: name, keyCode, @@ -372,7 +371,7 @@ class TimelineEditorMacroTable extends Component { id: rowID + 1, color, uid: randID, - ucolor: randColor + ucolor: randColor, }); newRows.splice(rowID, 0, { symbol: name, @@ -381,7 +380,7 @@ class TimelineEditorMacroTable extends Component { id: rowID, color, uid: randID, - ucolor: randColor + ucolor: randColor, }); this.updateRows(newRows); } @@ -398,21 +397,21 @@ class TimelineEditorMacroTable extends Component { } onDeleteRow = id => { - let uid = this.state.rows.filter(x => x.id === id)[0].uid; - let aux = this.state.rows.filter(x => x.uid !== uid); + const { uid } = this.state.rows.filter(x => x.id === id)[0]; + const aux = this.state.rows.filter(x => x.uid !== uid); this.updateRows(aux); }; onCloneRow = id => { - let uid = this.state.rows.filter(x => x.id === id)[0]; - let preAux = this.state.rows.slice(0, id); - let postAux = this.state.rows.slice(id); + const uid = this.state.rows.filter(x => x.id === id)[0]; + const preAux = this.state.rows.slice(0, id); + const postAux = this.state.rows.slice(id); preAux.push(uid); this.updateRows(preAux.concat(postAux)); }; updateAction = (id, action) => { - let aux = this.state.rows; + const aux = this.state.rows; aux[id].action = action; this.updateRows(aux); }; @@ -424,7 +423,7 @@ class TimelineEditorMacroTable extends Component { render() { // const {} = this.props; const cssObjectWidth = { - width: this.props.componentWidth + width: this.props.componentWidth, }; // console.log("Timeline.ed.M.Table Rows", this.state.rows); if (this.state.rows.length === 0) { @@ -436,7 +435,7 @@ class TimelineEditorMacroTable extends Component { <Droppable droppableId="droppable" direction="horizontal"> {provided => ( <div ref={provided.innerRef}> - <div className={"timelinetracking"}> + <div className="timelinetracking"> {this.state.rows.map((item, index) => ( <Draggable key={index} draggableId={String(index)} index={index}> {(provided, snapshot) => ( diff --git a/src/renderer/modules/Macros/TimelineEditorManager.js b/src/renderer/modules/Macros/TimelineEditorManager.js index 0a0f642ae..5757400d0 100644 --- a/src/renderer/modules/Macros/TimelineEditorManager.js +++ b/src/renderer/modules/Macros/TimelineEditorManager.js @@ -17,8 +17,8 @@ import React, { Component } from "react"; import Styled from "styled-components"; -import i18n from "../../i18n"; import Spinner from "react-bootstrap/Spinner"; +import i18n from "../../i18n"; import Keymap, { KeymapDB } from "../../../api/keymap"; @@ -140,7 +140,7 @@ class MacroManager extends Component { open: false, componentWidth: 0, rows: [], - scrollPos: 0 + scrollPos: 0, }; this.keymapDB = new KeymapDB(); @@ -151,26 +151,26 @@ class MacroManager extends Component { const macro = this.props.macros[parseInt(this.keymapDB.parse(keycode).label)]; let macroName; try { - macroName = this.props.macros[parseInt(this.keymapDB.parse(keycode).label)].name.substr(0, 5); + macroName = this.props.macros[parseInt(this.keymapDB.parse(keycode).label)]?.name.substr(0, 5); } catch (error) { macroName = "*NotFound*"; } if (keycode >= 53852 && keycode <= 53852 + 128) { - if (this.props.code !== null) return this.keymapDB.parse(keycode).extraLabel + "." + macroName; + if (this.props.code !== null) return `${this.keymapDB.parse(keycode).extraLabel}.${macroName}`; } return this.props.code !== null ? this.keymapDB.parse(keycode).extraLabel != undefined - ? this.keymapDB.parse(keycode).extraLabel + "." + this.keymapDB.parse(keycode).label + ? `${this.keymapDB.parse(keycode).extraLabel}.${this.keymapDB.parse(keycode).label}` : this.keymapDB.parse(keycode).label : ""; } updateWidth = () => { this.setState({ - componentWidth: 50 + componentWidth: 50, }); this.setState({ - componentWidth: this.trackingWidth.current.clientWidth + componentWidth: this.trackingWidth.current.clientWidth, }); }; @@ -190,14 +190,14 @@ class MacroManager extends Component { render() { const { keymapDB, macro, macros, updateActions } = this.props; - //console.log("Macro on TimelineEditorManager", macro); + // console.log("Macro on TimelineEditorManager", macro); return ( <Styles className="timelineWrapper"> <div className="timelineHeaderWrapper"> <div className="timelineHeader"> <div className="timelineHeaderContent"> <Title text={i18n.editor.macros.timelineTitle} headingLevel={4} /> - <div id="portalPreviewMacroModal" ref={this.portal}></div> + <div id="portalPreviewMacroModal" ref={this.portal} /> {this.portal.current !== null ? ( <PreviewMacroModal hookref={this.portal}> {macro.actions.length > 0 @@ -242,7 +242,7 @@ class MacroManager extends Component { scrollPos={this.state.scrollPos} /> )} - <div id="portalMacro"></div> + <div id="portalMacro" /> </div> </Styles> ); diff --git a/src/renderer/modules/NavigationMenu/NavigationMenu.js b/src/renderer/modules/NavigationMenu/NavigationMenu.js deleted file mode 100644 index 5cc231fb0..000000000 --- a/src/renderer/modules/NavigationMenu/NavigationMenu.js +++ /dev/null @@ -1,335 +0,0 @@ -/* eslint-disable react/jsx-filename-extension */ -// -*- mode: js-jsx -*- -/* Bazecor - * Copyright (C) 2022 Dygmalab, Inc. - * - * This program is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by the Free Software - * Foundation, version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -import React, { Component, version } from "react"; -import { Link, withRouter } from "react-router-dom"; -import PropTypes from "prop-types"; -import SemVer from "semver"; -import { Octokit } from "octokit"; -import Focus from "../../../api/focus"; -import i18n from "../../i18n"; - -// Compoments -import Nav from "react-bootstrap/Nav"; -import Navbar from "react-bootstrap/Navbar"; -import NavbarBrand from "react-bootstrap/NavbarBrand"; -import Tooltip from "react-bootstrap/Tooltip"; -import Styled from "styled-components"; - -// Custom components -import { NavigationButton } from "../../component/Button"; -import { IconKeyboardSelector } from "../../component/Icon"; -import { IconKeyboard2Stroke } from "../../component/Icon"; -import { IconMemory2Stroke } from "../../component/Icon"; -import { IconRobot2Stroke } from "../../component/Icon"; -import { IconThunder2Stroke } from "../../component/Icon"; -import { IconPreferences2Stroke } from "../../component/Icon"; - -// Assets -import DygmaLogo from "../../../../static/logo.svg"; - -// Store loading -const Store = require("electron-store"); -const store = new Store(); - -const drawerWidth = 64; - -const Styles = Styled.div` -.disabled { - pointer-events: none; -} -.brand-image { - padding: 0 !important; - margin-left: 0; - margin-top: 20px; - margin-bottom: 32px; - display: block; - width: 100%; - text-align: center; - -webkit-app-region: drag; - img { - margin: 0; - height: ${({ theme }) => theme.drawerWidth - 16}px; - width: ${({ theme }) => theme.drawerWidth - 16}px; - } -} -.left-navbar { - width: ${({ theme }) => theme.drawerWidth}px; - width: 120px; - height: 100%; - display: block !important; - - position: fixed !important; - z-index: 1100; - padding: 12px !important; - background-color: ${({ theme }) => theme.styles.navbar.background}; - - .navbar-nav { - flex-wrap: wrap; - height: calc(100% - 98px); - .bottomMenu { - margin-top: auto; - } - } -} -.list-link { - display: flex; - &:hover { - text-decoration: none; - } -} -.list-link+.list-link { - margin-top: 8px; -} -.select { - background-color: ${({ theme }) => theme.card.backgroundActive}; - border-radius: 8px; - width: 100%; -} -@media screen and (max-width: 999px) { - .left-navbar { - width: 90px; - } -} -@media screen and (max-height: 719px) { - .left-navbar { - width: 90px; - } -} -`; - -class NavigationMenu extends Component { - constructor(props) { - super(props); - - this.state = { - versions: null, - flashing: props.flashing, - isUpdated: true, - isBeta: false - }; - } - - async componentDidMount() { - await this.contextUpdater(); - } - - async componentDidUpdate(previousProps, previousState) { - if (this.props.flashing != previousProps.flashing) { - this.setState({ flashing: this.props.flashing }); - } - if ( - this.props.allowBeta === previousProps.allowBeta && - this.state.versions !== null && - this.state.versions.bazecor.length > 0 && - this.state.flashing === previousState.flashing - ) { - return; - } - await this.contextUpdater(); - } - - contextUpdater = async () => { - const focus = new Focus(); - if (focus.device.bootloader) return; - let parts = await focus.command("version"); - parts = parts.split(" "); - let versions = { - bazecor: parts[0], - kaleidoscope: parts[1], - firmware: parts[2] - }; - let fwList = await this.getGitHubFW(focus.device.info.product); - let isBeta = versions.bazecor.includes("beta"); - let cleanedVersion = versions.bazecor; - if (isBeta) cleanedVersion = versions.bazecor.replace("beta", ""); - let isUpdated = SemVer.compare(fwList[0].version, cleanedVersion); - isBeta = isBeta || focus.device.info.product !== "Raise"; - this.setState({ - versions: versions, - flashing: this.props.flashing, - virtual: focus.file, - fwList: fwList, - isUpdated: isUpdated, - isBeta: isBeta - }); - }; - - getGitHubFW = async product => { - let Releases = []; - const octokit = new Octokit(); - let data = await octokit.request("GET /repos/{owner}/{repo}/releases", { - owner: "Dygmalab", - repo: "Firmware-releases", - headers: { - "X-GitHub-Api-Version": "2022-11-28" - } - }); - data.data.forEach(release => { - const releaseData = release.name.split(" "); - const newRelease = { name: releaseData[0], version: releaseData[1] }; - if (!releaseData[1].includes("beta") || this.props.allowBeta) Releases.push(newRelease); - }); - let finalReleases = Releases.filter(release => release.name === product); - finalReleases.sort((a, b) => { - return SemVer.lt(SemVer.clean(a.version), SemVer.clean(b.version)) ? 1 : -1; - }); - // console.log("data retrieved: ", finalReleases); - return finalReleases; - }; - - renderTooltip(text) { - return <Tooltip id="button-tooltip">{text}</Tooltip>; - } - - render() { - const { connected, pages, history, fwUpdate } = this.props; - const { isUpdated, isBeta, versions, fwList } = this.state; - const currentPage = history.location.pathname; - - // console.log("new checker for navigation", fwList, versions, isUpdated, isBeta); - - return ( - <Styles> - <Navbar className={`left-navbar sidebar`} sticky="top"> - <NavbarBrand as={Link} to="/" className="brand-image d-lg-block"> - <img alt="" src={DygmaLogo} className="d-inline-block align-top" /> - </NavbarBrand> - <Nav> - {/* <Link to="/welcome" className={`list-link ${fwUpdate ? "disabled" : ""}`}> - <WelcomeMenu - selected={currentPage === "/welcome"} - userMenu={i18n.app.menu.userMenu} - drawerWidth={drawerWidth} - onClick={() => setCurrentPage("/welcome")} - /> - </Link> */} - <div className="topMenu"> - {connected && ( - <> - {pages.keymap && ( - <React.Fragment> - <Link to="/editor" className={`list-link ${fwUpdate ? "disabled" : ""}`}> - <NavigationButton - selected={currentPage === "/editor"} - drawerWidth={drawerWidth} - buttonText={i18n.app.menu.editor} - icoSVG={<IconKeyboard2Stroke />} - disabled={fwUpdate} - /> - </Link> - <Link to="/macros" className={`list-link ${fwUpdate ? "disabled" : ""}`}> - <NavigationButton - selected={currentPage === "/macros"} - drawerWidth={drawerWidth} - buttonText={i18n.app.menu.macros} - icoSVG={<IconRobot2Stroke />} - disabled={fwUpdate} - /> - </Link> - <Link to="/superkeys" className={`list-link ${fwUpdate || !isBeta ? "disabled" : ""}`}> - <NavigationButton - selected={currentPage === "/superkeys"} - drawerWidth={drawerWidth} - buttonText={i18n.app.menu.superkeys} - icoSVG={<IconThunder2Stroke />} - showNotif={isBeta} - notifText="BETA" - disabled={fwUpdate || !isBeta} - /> - </Link> - </React.Fragment> - )} - <Link to="/firmware-update" className={`list-link ${fwUpdate || this.state.virtual ? "disabled" : ""}`}> - <NavigationButton - selected={currentPage === "/firmware-update"} - drawerWidth={drawerWidth} - showNotif={isUpdated != 0 ? (isUpdated > 0 ? true : false) : false} - buttonText={i18n.app.menu.firmwareUpdate} - icoSVG={<IconMemory2Stroke />} - disabled={fwUpdate || this.state.virtual} - /> - </Link> - </> - )} - <Link to="/keyboard-select" className={`list-link ${fwUpdate ? "disabled" : ""}`}> - <NavigationButton - keyboardSelectText={connected ? i18n.app.menu.selectAnotherKeyboard : i18n.app.menu.selectAKeyboard} - drawerWidth={drawerWidth} - selected={currentPage === "/keyboard-select"} - buttonText={i18n.app.menu.selectAKeyboard} - icoSVG={<IconKeyboardSelector />} - disabled={fwUpdate} - /> - </Link> - - {/* <OverlayTrigger - rootClose - placement="right" - delay={{ show: 250, hide: 400 }} - overlay={this.renderTooltip("Update Bazecor")} - > - <div className={`list-link ${fwUpdate ? "disabled" : ""}`}> - <SoftwareUpdateMenuItem - keyboardSelectText={i18n.app.menu.softwareUpdate} - drawerWidth={drawerWidth} - selected={currentPage === "/software-update"} - onClick={event => event.stopPropagation()} - /> - </div> - </OverlayTrigger> */} - {/* <OverlayTrigger - rootClose - placement="right" - delay={{ show: 250, hide: 400 }} - overlay={this.renderTooltip("Exit Bazecor")} - > - <div className={`list-link ${fwUpdate ? "disabled" : ""}`}> - <ExitMenuItem - drawerWidth={drawerWidth} - onClick={() => return} - /> - </div> - </OverlayTrigger> */} - </div> - <div className="bottomMenu"> - <Link to="/preferences" className={`list-link ${fwUpdate ? "disabled" : ""}`}> - <NavigationButton - drawerWidth={drawerWidth} - selected={currentPage === "/preferences"} - buttonText={i18n.app.menu.preferences} - icoSVG={<IconPreferences2Stroke />} - disabled={fwUpdate} - /> - </Link> - </div> - </Nav> - </Navbar> - </Styles> - ); - } -} -NavigationMenu.propTypes = { - connected: PropTypes.bool.isRequired, - // eslint-disable-next-line react/forbid-prop-types - pages: PropTypes.object.isRequired, - // eslint-disable-next-line react/forbid-prop-types - history: PropTypes.object.isRequired -}; - -export default withRouter(NavigationMenu); diff --git a/src/renderer/modules/NavigationMenu/NavigationMenu.tsx b/src/renderer/modules/NavigationMenu/NavigationMenu.tsx new file mode 100644 index 000000000..f179441a6 --- /dev/null +++ b/src/renderer/modules/NavigationMenu/NavigationMenu.tsx @@ -0,0 +1,273 @@ +// -*- mode: js-jsx -*- +/* Bazecor + * Copyright (C) 2022 Dygmalab, Inc. + * + * This program is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free Software + * Foundation, version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +import React, { useEffect, useState } from "react"; +import { Link, useLocation } from "react-router-dom"; +import SemVer from "semver"; +import { Octokit } from "@octokit/core"; + +import { Nav, Navbar, NavbarBrand } from "react-bootstrap"; +import Styled from "styled-components"; + +import Version from "@Types/version"; +import Pages from "@Types/pages"; +import DygmaLogo from "@Assets/logo.svg"; +import { BatteryStatus } from "../Battery"; +import i18n from "../../i18n"; +import Focus from "../../../api/focus"; +import { NavigationButton } from "../../component/Button"; + +import { + IconKeyboardSelector, + IconKeyboard2Stroke, + IconMemory2Stroke, + IconRobot2Stroke, + IconThunder2Stroke, + IconPreferences2Stroke, + IconWireless, +} from "../../component/Icon"; + +const Styles = Styled.div` +.disabled { + pointer-events: none; +} +.brand-image { + margin: 20px 0 32px 0; + padding: 0 !important; + display: block; + width: 100%; + text-align: center; + -webkit-app-region: drag; + img { + display: block; + margin: 0 auto; + width: 42px; + aspect-ratio: 1; + } +} +.left-navbar { + width: var(--sidebarWidth); + height: 100%; + position: fixed !important; + z-index: 1100; + padding: 12px !important; + background-color: ${({ theme }) => theme.styles.navbar.background}; + display: flex; + flex-direction: column; + .navbar-nav { + flex-wrap: wrap; + height: inherit; + .bottomMenu { + margin-top: auto; + } + .topMenu, + .bottomMenu { + width: 100%; + } + } +} +.list-link { + display: flex; + &:hover { + text-decoration: none; + } +} +.list-link+.list-link { + margin-top: 8px; +} +.select { + background-color: ${({ theme }) => theme.card.backgroundActive}; + border-radius: 8px; + width: 100%; +} +`; + +interface NavigationMenuProps { + connected: boolean; + flashing: boolean; + pages: Pages; + fwUpdate: boolean; + allowBeta: boolean; +} + +interface Device { + vendor: any; + product: any; + keyboardType: any; + displayName: any; + urls: any; +} + +function NavigationMenu(props: NavigationMenuProps): React.JSX.Element { + const [versions, setVersions] = useState(null); + const [isUpdated, setIsUpdated] = useState(true); + const [isBeta, setIsBeta] = useState(false); + const [device, setDevice] = useState<Record<string, Device>>({}); + const [virtual, setVirtual] = useState(false); + const location = useLocation(); + const currentPage = location.pathname; + const { connected, pages, fwUpdate, flashing, allowBeta } = props; + + const getGitHubFW = async (product: any) => { + const releases: any[] = []; + const octokit = new Octokit(); + const data = await octokit.request("GET /repos/{owner}/{repo}/releases", { + owner: "Dygmalab", + repo: "Firmware-releases", + headers: { + "X-GitHub-Api-Version": "2022-11-28", + }, + }); + data.data.forEach(release => { + const releaseData = release.name.split(" "); + const newRelease = { name: releaseData[0], version: releaseData[1] }; + if (!releaseData[1].includes("beta") || allowBeta) releases.push(newRelease); + }); + const finalReleases = releases.filter(release => release.name === product); + finalReleases.sort((a, b) => (SemVer.lt(SemVer.clean(a.version), SemVer.clean(b.version)) ? 1 : -1)); + // console.log("data retrieved: ", finalReleases); + return finalReleases; + }; + + async function checkKeyboardMetadata() { + const focus = new Focus(); + setDevice(focus.device); + if (focus.device === undefined || focus.device.bootloader) return; + let parts = await focus.command("version"); + parts = parts.split(" "); + const getVersions: Version = { + bazecor: parts[0], + kaleidoscope: parts[1], + firmware: parts[2], + }; + const fwList = await getGitHubFW(focus.device.info.product); + let Beta = getVersions.bazecor.includes("beta"); + let cleanedVersion = getVersions.bazecor; + if (Beta && !getVersions.bazecor.includes("-beta")) cleanedVersion = getVersions.bazecor.replace("beta", ""); + const semVerCheck = SemVer.compare(fwList[0].version, cleanedVersion); + Beta = Beta || focus.device.info.product !== "Raise"; + setVersions(getVersions); + setIsUpdated(semVerCheck > 0); + setIsBeta(Beta); + setVirtual(focus.file); + } + + useEffect(() => { + if (!flashing && connected) { + checkKeyboardMetadata(); + } + }, [flashing, connected]); + + return ( + <Styles> + <Navbar + className={`left-navbar sidebar ${ + connected && device && device.info && device.info.keyboardType === "wireless" && versions !== null + ? "isWireless" + : "wired" + }`} + sticky="top" + > + <NavbarBrand as={Link} to="/" className="brand-image d-lg-block"> + <img alt="" src={DygmaLogo} className="d-inline-block align-top" /> + </NavbarBrand> + <Nav> + <div className="topMenu"> + {connected && ( + <> + {pages.keymap && ( + <> + <Link to="/editor" className={`list-link ${fwUpdate ? "disabled" : ""}`}> + <NavigationButton + selected={currentPage === "/editor"} + buttonText={i18n.app.menu.editor} + icoSVG={<IconKeyboard2Stroke />} + disabled={fwUpdate} + /> + </Link> + <Link to="/macros" className={`list-link ${fwUpdate ? "disabled" : ""}`}> + <NavigationButton + selected={currentPage === "/macros"} + buttonText={i18n.app.menu.macros} + icoSVG={<IconRobot2Stroke />} + disabled={fwUpdate} + /> + </Link> + <Link to="/superkeys" className={`list-link ${fwUpdate || !isBeta ? "disabled" : ""}`}> + <NavigationButton + selected={currentPage === "/superkeys"} + buttonText={i18n.app.menu.superkeys} + icoSVG={<IconThunder2Stroke />} + showNotif={isBeta} + notifText="BETA" + disabled={fwUpdate || !isBeta} + /> + </Link> + </> + )} + <Link to="/firmware-update" className={`list-link ${fwUpdate || virtual ? "disabled" : ""}`}> + <NavigationButton + selected={currentPage === "/firmware-update"} + showNotif={isUpdated} + buttonText={i18n.app.menu.firmwareUpdate} + icoSVG={<IconMemory2Stroke />} + disabled={fwUpdate || virtual} + /> + </Link> + </> + )} + <Link to="/keyboard-select" className={`list-link ${fwUpdate ? "disabled" : ""}`}> + <NavigationButton + selected={currentPage === "/keyboard-select"} + buttonText={i18n.app.menu.selectAKeyboard} + icoSVG={<IconKeyboardSelector />} + disabled={fwUpdate} + /> + </Link> + </div> + <div className="bottomMenu"> + <Link to="/preferences" className={`list-link ${fwUpdate ? "disabled" : ""}`}> + <NavigationButton + selected={currentPage === "/preferences"} + buttonText={i18n.app.menu.preferences} + icoSVG={<IconPreferences2Stroke />} + disabled={fwUpdate} + /> + </Link> + {connected && device && device.info && device.info.keyboardType === "wireless" && versions !== null ? ( + <> + <Link to="/wireless" className={`list-link ${fwUpdate ? "disabled" : ""}`}> + <NavigationButton + selected={currentPage === "/wireless"} + buttonText={i18n.app.menu.wireless} + icoSVG={<IconWireless width={42} height={42} strokeWidth={2} />} + disabled={fwUpdate} + /> + </Link> + <BatteryStatus disable={fwUpdate || virtual} /> + </> + ) : ( + <></> + )} + </div> + </Nav> + </Navbar> + </Styles> + ); +} + +export default NavigationMenu; diff --git a/src/renderer/modules/NavigationMenu/NavigationMenuWrapper.js b/src/renderer/modules/NavigationMenu/NavigationMenuWrapper.js index 10bf68dea..482210aa4 100644 --- a/src/renderer/modules/NavigationMenu/NavigationMenuWrapper.js +++ b/src/renderer/modules/NavigationMenu/NavigationMenuWrapper.js @@ -15,38 +15,21 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ -import React, { Component } from "react"; - +import React from "react"; +import PropTypes from "prop-types"; import NavigationMenu from "./NavigationMenu"; -class Header extends Component { - constructor(props) { - super(props); - - this.state = { - NMenu: true - }; - } - - closeNMenu() { - this.setState({ NMenu: false }); - } - render() { - const { connected, pages, theme, flashing, fwUpdate, allowBeta } = this.props; - const { NMenu } = this.state; +function Header(props) { + const { connected, pages, flashing, fwUpdate, allowBeta } = props; - return ( - <NavigationMenu - connected={connected} - pages={pages} - open={NavigationMenu} - closeMenu={this.closeNavigationMenu} - flashing={flashing} - fwUpdate={fwUpdate} - allowBeta={allowBeta} - /> - ); - } + return <NavigationMenu connected={connected} pages={pages} flashing={flashing} fwUpdate={fwUpdate} allowBeta={allowBeta} />; } +Header.propTypes = { + connected: PropTypes.bool.isRequired, + pages: PropTypes.object.isRequired, + flashing: PropTypes.bool.isRequired, + fwUpdate: PropTypes.bool.isRequired, + allowBeta: PropTypes.any.isRequired, +}; export default Header; diff --git a/src/renderer/modules/NeuronConnection/NeuronConnection.js b/src/renderer/modules/NeuronConnection/NeuronConnection.jsx similarity index 83% rename from src/renderer/modules/NeuronConnection/NeuronConnection.js rename to src/renderer/modules/NeuronConnection/NeuronConnection.jsx index 4df3fabd8..bd721b51f 100644 --- a/src/renderer/modules/NeuronConnection/NeuronConnection.js +++ b/src/renderer/modules/NeuronConnection/NeuronConnection.jsx @@ -1,3 +1,4 @@ +/* eslint-disable react/prop-types */ // -*- mode: js-jsx -*- /* Bazecor * Copyright (C) 2022 Dygmalab, Inc. @@ -17,15 +18,14 @@ import React from "react"; import Styled from "styled-components"; +import { ToastContainer } from "react-toastify"; import Title from "../../component/Title"; import { RegularButton } from "../../component/Button"; import NeuronStatus from "../../component/NeuronStatus"; import { SelectKeyboardDropdown } from "../../component/Select"; import i18n from "../../i18n"; -import { ToastContainer, toast } from "react-toastify"; import "react-toastify/dist/ReactToastify.css"; -import ToastMessage from "../../component/ToastMessage"; import { IconConnected } from "../../component/Icon"; const Style = Styled.div` @@ -106,28 +106,31 @@ const Style = Styled.div` } } `; -const NeuronConnection = ({ +function NeuronConnection({ loading, scanFoundDevices, scanDevices, onKeyboardConnect, - cantConnect, connected, onDisconnect, + onDisconnectConnect, selectPort, selectedPortIndex, deviceItems, isVirtual, - virtualDevice -}) => { + virtualDevice, + connectedDevice, +}) { return ( <Style> <div className="neuronConnection"> <NeuronStatus loading={loading ? "loading" : undefined} connected={connected} + connectedDevice={connectedDevice} scanFoundDevices={scanFoundDevices} deviceItems={deviceItems.length} + selectedPortIndex={selectedPortIndex} isVirtual={isVirtual} /> {isVirtual ? ( @@ -147,7 +150,7 @@ const NeuronConnection = ({ <div className="buttons"> <RegularButton buttonText={i18n.keyboardSelect.disconnect} - style={"primary"} + styles="secondary" onClick={onDisconnect} disabled={false} /> @@ -157,8 +160,8 @@ const NeuronConnection = ({ <div className="neuronInformation"> {!deviceItems.length ? ( <> - <Title text={i18n.keyboardSelect.noDevices} headingLevel={2} type={"warning"} /> - <p className={"neuronSubtileText"}>{i18n.keyboardSelect.noDevicesSubtitle}</p> + <Title text={i18n.keyboardSelect.noDevices} headingLevel={2} type="warning" /> + <p className="neuronSubtileText">{i18n.keyboardSelect.noDevicesSubtitle}</p> </> ) : ( "" @@ -172,6 +175,7 @@ const NeuronConnection = ({ selectPort={selectPort} selectedPortIndex={selectedPortIndex} connected={connected} + connectedDevice={connectedDevice} /> </> ) : ( @@ -181,35 +185,41 @@ const NeuronConnection = ({ <RegularButton onClick={scanDevices} buttonText={i18n.keyboardSelect.scan} - style={`${connected || deviceItems.length > 0 ? "outline" : "primary"}`} + styles={`${connected || deviceItems.length > 0 ? "outline transp-bg" : "primary"}`} disabled={scanFoundDevices} /> - {connected ? ( + {connected && connectedDevice === selectedPortIndex ? ( <RegularButton buttonText={i18n.keyboardSelect.disconnect} - style={"primary"} + styles="secondary" onClick={onDisconnect} disabled={false} /> ) : ( "" )} - {!connected && deviceItems.length > 0 ? ( + {connected && connectedDevice !== selectedPortIndex ? ( <RegularButton buttonText={i18n.keyboardSelect.connect} - style={"primary"} - onClick={onKeyboardConnect} + styles="primary" + onClick={onDisconnectConnect} disabled={false} /> ) : ( "" )} - - {!deviceItems.length ? ( - <RegularButton buttonText={i18n.keyboardSelect.connect} style={"primary"} disabled={true} /> + {!connected && deviceItems.length > 0 ? ( + <RegularButton + buttonText={i18n.keyboardSelect.connect} + styles="primary" + onClick={onKeyboardConnect} + disabled={false} + /> ) : ( "" )} + + {!deviceItems.length ? <RegularButton buttonText={i18n.keyboardSelect.connect} styles="primary" disabled /> : ""} </div> </div> )} @@ -218,6 +228,6 @@ const NeuronConnection = ({ <ToastContainer /> </Style> ); -}; +} export default NeuronConnection; diff --git a/src/renderer/modules/NeuronData/NeuronData.js b/src/renderer/modules/NeuronData/NeuronData.js index 2fe770f97..13ac8c7cf 100644 --- a/src/renderer/modules/NeuronData/NeuronData.js +++ b/src/renderer/modules/NeuronData/NeuronData.js @@ -17,15 +17,12 @@ import React from "react"; import Styled from "styled-components"; +import Card from "react-bootstrap/Card"; +import Accordion from "react-bootstrap/Accordion"; import Title from "../../component/Title"; import i18n from "../../i18n"; import NeuronTitle from "../NeuronTitle"; -import Card from "react-bootstrap/Card"; -import Accordion from "react-bootstrap/Accordion"; -import { IconPlus } from "../../component/Icon"; -import { IconRobot } from "../../component/Icon"; -import { IconLayers } from "../../component/Icon"; -import { IconThunder } from "../../component/Icon"; +import { IconPlus, IconRobot, IconLayers, IconThunder } from "../../component/Icon"; const Style = Styled.div` .cardContentNeuronData { @@ -73,7 +70,7 @@ const Style = Styled.div` padding-left: 12px; } `; -const NeuronData = ({ neurons, selectedNeuron }) => { +function NeuronData({ neurons, selectedNeuron }) { return ( <Style> <div className="cardContentNeuronData"> @@ -149,6 +146,6 @@ const NeuronData = ({ neurons, selectedNeuron }) => { </div> </Style> ); -}; +} export default NeuronData; diff --git a/src/renderer/modules/NeuronTitle/NeuronTitle.js b/src/renderer/modules/NeuronTitle/NeuronTitle.js index 1b9dc3411..2a7a32b85 100644 --- a/src/renderer/modules/NeuronTitle/NeuronTitle.js +++ b/src/renderer/modules/NeuronTitle/NeuronTitle.js @@ -31,15 +31,15 @@ h4 { color: ${({ theme }) => theme.styles.neuronTitle.heading4Color}; } `; -const NeuronTitle = ({ neuronName, neuronID }) => { +function NeuronTitle({ neuronName, neuronID }) { return ( <Style> - <div className={`backupFolderConfigurator`}> + <div className="backupFolderConfigurator"> <Title text={`${i18n.keyboardSettings.neuronManager.nameTitle}: ${neuronName}`} headingLevel={3} /> <Title text={`ID: ${neuronID}`} headingLevel={4} /> </div> </Style> ); -}; +} export default NeuronTitle; diff --git a/src/renderer/modules/PageHeader/PageHeader.js b/src/renderer/modules/PageHeader/PageHeader.tsx similarity index 90% rename from src/renderer/modules/PageHeader/PageHeader.js rename to src/renderer/modules/PageHeader/PageHeader.tsx index c55389234..714b24155 100644 --- a/src/renderer/modules/PageHeader/PageHeader.js +++ b/src/renderer/modules/PageHeader/PageHeader.tsx @@ -17,6 +17,7 @@ import React from "react"; import Styled from "styled-components"; +import { PageHeaderType } from "./Types"; import Title from "../../component/Title"; import Saving from "../Saving"; @@ -94,18 +95,9 @@ z-index: 300; } `; -const PageHeader = ({ - size, - text, - style, - contentSelector, - colorEditor, - isColorActive, - showSaving, - saveContext, - destroyContext, - inContext -}) => { +function PageHeader(props: PageHeaderType) { + const { size, text, style, contentSelector, colorEditor, isColorActive, showSaving, saveContext, destroyContext, inContext } = + props; return ( <Style className={`${style === "pageHeaderFlatBottom" ? "pageHeaderSticky" : ""}`}> <div className={`pageHeader ${size && size} ${style && style} ${isColorActive ? "extraPanelActive" : ""}`}> @@ -113,14 +105,13 @@ const PageHeader = ({ <Title text={text} headingLevel={2} /> </div> <div className="pageTools"> - {/* //onSelect, itemList, selectedItem, deleteItem, subtitle */} - {contentSelector ? contentSelector : ""} + {contentSelector || ""} {showSaving ? <Saving saveContext={saveContext} destroyContext={destroyContext} inContext={inContext} /> : ""} </div> </div> {isColorActive ? colorEditor : ""} </Style> ); -}; +} export default PageHeader; diff --git a/src/renderer/modules/PageHeader/Types.ts b/src/renderer/modules/PageHeader/Types.ts new file mode 100644 index 000000000..bed49855e --- /dev/null +++ b/src/renderer/modules/PageHeader/Types.ts @@ -0,0 +1,14 @@ +import { ReactNode } from "react"; + +export interface PageHeaderType { + size?: number; + text: string; + style?: string; + contentSelector?: ReactNode | undefined; + colorEditor?: ReactNode | undefined; + isColorActive?: boolean; + showSaving?: boolean; + saveContext?: unknown | undefined; + destroyContext?: unknown | undefined; + inContext?: boolean; +} diff --git a/src/renderer/modules/PageHeader/index.js b/src/renderer/modules/PageHeader/index.ts similarity index 89% rename from src/renderer/modules/PageHeader/index.js rename to src/renderer/modules/PageHeader/index.ts index 16cf1968d..185171e58 100644 --- a/src/renderer/modules/PageHeader/index.js +++ b/src/renderer/modules/PageHeader/index.ts @@ -15,5 +15,6 @@ */ import PageHeader from "./PageHeader"; +import { PageHeaderType } from "./Types"; -export { PageHeader as default }; +export { PageHeader, PageHeaderType }; diff --git a/src/renderer/modules/Saving/Saving.js b/src/renderer/modules/Saving/Saving.js index a1e951816..0458189ca 100644 --- a/src/renderer/modules/Saving/Saving.js +++ b/src/renderer/modules/Saving/Saving.js @@ -23,25 +23,25 @@ import { RegularButton } from "../../component/Button"; const Style = Styled.div` `; -const Saving = ({ saveContext, destroyContext, inContext }) => { +function Saving({ saveContext, destroyContext, inContext }) { return ( <Style className="savingButtons"> <RegularButton onClick={destroyContext} buttonText={i18n.app.cancelPending.button} - style="outline" + styles="outline transp-bg" size="sm" disabled={!inContext} /> <RegularButton onClick={saveContext} buttonText={i18n.components.save.button} - style="primary" + styles="primary" size="sm" disabled={!inContext} /> </Style> ); -}; +} export default Saving; diff --git a/src/renderer/modules/Settings/AdvancedSettings.js b/src/renderer/modules/Settings/AdvancedSettings.js index 7e7e75dcf..b1786af62 100644 --- a/src/renderer/modules/Settings/AdvancedSettings.js +++ b/src/renderer/modules/Settings/AdvancedSettings.js @@ -1,14 +1,14 @@ import PropTypes from "prop-types"; import React, { Component } from "react"; import Styled from "styled-components"; -import i18n from "../../i18n"; -import Focus from "../../../api/focus"; // React Bootstrap Components import Card from "react-bootstrap/Card"; import Form from "react-bootstrap/Form"; import Row from "react-bootstrap/Row"; import Col from "react-bootstrap/Col"; +import Focus from "../../../api/focus"; +import i18n from "../../i18n"; // Own Components import Title from "../../component/Title"; @@ -85,7 +85,7 @@ export default class AdvancedSettings extends Component { class AdvancedKeyboardSettings extends React.Component { state = { - EEPROMClearConfirmationOpen: false + EEPROMClearConfirmationOpen: false, }; clearEEPROM = async () => { @@ -103,19 +103,21 @@ class AdvancedKeyboardSettings extends React.Component { await focus.command("eeprom.contents", eeprom); this.setState({ working: false }); }; + openEEPROMClearConfirmation = () => { this.setState({ EEPROMClearConfirmationOpen: true }); }; + closeEEPROMClearConfirmation = () => { this.setState({ EEPROMClearConfirmationOpen: false }); }; render() { return ( - <React.Fragment> + <> <RegularButton buttonText={i18n.keyboardSettings.resetEEPROM.button} - style="short danger" + styles="short danger" onClick={this.openEEPROMClearConfirmation} disabled={this.state.working} /> @@ -127,7 +129,7 @@ class AdvancedKeyboardSettings extends React.Component { > {i18n.keyboardSettings.resetEEPROM.dialogContents} </ConfirmationDialog> - </React.Fragment> + </> ); } } @@ -135,5 +137,5 @@ class AdvancedKeyboardSettings extends React.Component { AdvancedSettings.propTypes = { devToolsSwitch: PropTypes.object.isRequired, verboseSwitch: PropTypes.object.isRequired, - connected: PropTypes.bool.isRequired + connected: PropTypes.bool.isRequired, }; diff --git a/src/renderer/modules/Settings/BackupSettings.js b/src/renderer/modules/Settings/BackupSettings.js index 1a11da1bb..77922a42f 100644 --- a/src/renderer/modules/Settings/BackupSettings.js +++ b/src/renderer/modules/Settings/BackupSettings.js @@ -5,7 +5,8 @@ import Slider from "@appigram/react-rangeslider"; import Focus from "../../../api/focus"; import Backup from "../../../api/backup"; import { isArray } from "lodash"; -const { ipcRenderer } = require("electron"); +import { ipcRenderer } from "electron"; +import fs from "fs"; // React Bootstrap Components import Card from "react-bootstrap/Card"; @@ -15,13 +16,14 @@ import Col from "react-bootstrap/Col"; // Own Components import Title from "../../component/Title"; -import BackupFolderConfigurator from "../../modules/BackupFolderConfigurator"; +import BackupFolderConfigurator from "../BackupFolderConfigurator"; // Icons Imports import { IconFloppyDisk } from "../../component/Icon"; -const Store = require("electron-store"); -const store = new Store(); +import Store from "../../utils/Store"; + +const store = Store.getStore(); export default class BackupSettings extends Component { constructor(props) { @@ -31,25 +33,25 @@ export default class BackupSettings extends Component { this.state = { backupFolder: "", - storeBackups: 13 + storeBackups: 13, }; } componentDidMount() { this.setState({ - backupFolder: store.get("settings.backupFolder") + backupFolder: store.get("settings.backupFolder"), }); this.setState({ - storeBackups: store.get("settings.backupFrequency") + storeBackups: store.get("settings.backupFrequency"), }); } ChooseBackupFolder = async () => { - let options = { + const options = { title: i18n.keyboardSettings.backupFolder.title, buttonLabel: i18n.keyboardSettings.backupFolder.windowButton, - properties: ["openDirectory"] + properties: ["openDirectory"], }; const resp = await ipcRenderer.invoke("open-dialog", options); @@ -57,7 +59,7 @@ export default class BackupSettings extends Component { if (!resp.canceled) { console.log(resp.filePaths); this.setState({ - backupFolder: resp.filePaths[0] + backupFolder: resp.filePaths[0], }); store.set("settings.backupFolder", `${resp.filePaths[0]}`); } else { @@ -66,14 +68,14 @@ export default class BackupSettings extends Component { }; GetBackup = async () => { - let options = { + const options = { title: i18n.keyboardSettings.backupFolder.restoreTitle, buttonLabel: i18n.keyboardSettings.backupFolder.windowRestore, defaultPath: this.state.backupFolder, filters: [ { name: "Json", extensions: ["json"] }, - { name: i18n.dialog.allFiles, extensions: ["*"] } - ] + { name: i18n.dialog.allFiles, extensions: ["*"] }, + ], }; const resp = await ipcRenderer.invoke("open-dialog", options); @@ -82,7 +84,7 @@ export default class BackupSettings extends Component { console.log(resp.filePaths); let loadedFile; try { - loadedFile = JSON.parse(require("fs").readFileSync(resp.filePaths[0])); + loadedFile = JSON.parse(fs.readFileSync(resp.filePaths[0])); if (loadedFile.virtual !== undefined) { this.restoreVirtual(loadedFile.virtual); console.log("Restored Virtual backup"); @@ -91,12 +93,10 @@ export default class BackupSettings extends Component { if (loadedFile.backup !== undefined || loadedFile[0].command !== undefined) { this.restoreBackup(loadedFile); console.log("Restored normal backup"); - return; } } catch (e) { console.error(e); alert("The file is not a valid global backup"); - return; } } else { console.log("user closed SaveDialog"); @@ -106,13 +106,13 @@ export default class BackupSettings extends Component { setStoreBackups = value => { console.log("changed backup period to: ", value); this.setState({ - storeBackups: value + storeBackups: value, }); store.set("settings.backupFrequency", value); }; async restoreBackup(backup) { - let focus = new Focus(); + const focus = new Focus(); let data = []; if (isArray(backup)) { data = backup; @@ -131,7 +131,7 @@ export default class BackupSettings extends Component { if (typeof val === "boolean") { val = +val; } - //TODO: remove this block when necessary + // TODO: remove this block when necessary if (focus.device.info.product == "Defy") { // if (data[i].command.includes("macros") || data[i].command.includes("superkeys")) continue; } @@ -149,10 +149,10 @@ export default class BackupSettings extends Component { } async restoreVirtual(virtual) { - let focus = new Focus(); + const focus = new Focus(); try { console.log("Restoring all settings"); - for (let command in virtual) { + for (const command in virtual) { if (virtual[command].eraseable === true) { console.log(`Going to send ${command} to keyboard`); await focus.command(`${command} ${virtual[command].data}`.trim()); @@ -214,5 +214,5 @@ BackupSettings.propTypes = { neurons: PropTypes.array.isRequired, selectedNeuron: PropTypes.number.isRequired, neuronID: PropTypes.string.isRequired, - connected: PropTypes.bool.isRequired + connected: PropTypes.bool.isRequired, }; diff --git a/src/renderer/modules/Settings/BatterySettings.tsx b/src/renderer/modules/Settings/BatterySettings.tsx new file mode 100644 index 000000000..bb3de8c25 --- /dev/null +++ b/src/renderer/modules/Settings/BatterySettings.tsx @@ -0,0 +1,65 @@ +import React from "react"; + +// Bootstrap components +import Styled from "styled-components"; +import Card from "react-bootstrap/Card"; + +// Import Types for wireless +import { BatterySettingsProps } from "../../types/wireless"; + +import i18n from "../../i18n"; + +// Custom components +import Title from "../../component/Title"; +import { BatteryStatusSide, SavingModeIndicator } from "../../component/Battery"; + +// Assets +import { IconBattery } from "../../component/Icon"; + +const Styles = Styled.div` +padding-top: 24px; +.card { + height: inherit; +} +.battery-defy--indicator { + display: flex; + grid-gap: 8px; + margin-bottom: 42px; + position: relative; + max-width: 202px; +} +`; + +function BatterySettings(props: BatterySettingsProps) { + const { wireless } = props; + return ( + <Styles> + <Card className="overflowFix card-preferences"> + <Card.Title> + <Title text={i18n.wireless.batteryPreferences.battery} headingLevel={3} svgICO={<IconBattery />} /> + </Card.Title> + <Card.Body className="py-0"> + <div className="battery-defy--indicator"> + <BatteryStatusSide + side="left" + batteryLevel={wireless.battery ? wireless.battery.LeftLevel : 100} + isSavingMode={wireless.battery ? wireless.battery.savingMode : false} + batteryStatus={wireless.battery ? wireless.battery.LeftState : 0} + size="lg" + /> + <BatteryStatusSide + side="right" + batteryLevel={wireless.battery ? wireless.battery.RightLevel : 100} + isSavingMode={wireless.battery ? wireless.battery.savingMode : false} + batteryStatus={wireless.battery ? wireless.battery.RightState : 0} + size="lg" + /> + <SavingModeIndicator isSavingMode={wireless.battery ? wireless.battery.savingMode : false} /> + </div> + </Card.Body> + </Card> + </Styles> + ); +} + +export default BatterySettings; diff --git a/src/renderer/modules/Settings/EnergyManagement.tsx b/src/renderer/modules/Settings/EnergyManagement.tsx new file mode 100644 index 000000000..9bdc02364 --- /dev/null +++ b/src/renderer/modules/Settings/EnergyManagement.tsx @@ -0,0 +1,64 @@ +import React from "react"; + +// Bootstrap components +import Styled from "styled-components"; +import Card from "react-bootstrap/Card"; + +// Modules +import { AdvancedBatterySettings, SavingMode } from "@Renderer/modules/Battery"; +// Internal components +import Title from "@Renderer/component/Title"; +import { IconThunder } from "@Renderer/component/Icon"; +import i18n from "@Renderer/i18n"; + +// Import Types for wireless +import { EnergyManagementProps } from "@Renderer/types/wireless"; + +const Styles = Styled.div` +padding-top: 24px; +.card { + height: inherit; +} +.battery-defy--indicator { + display: flex; + grid-gap: 8px; + margin-bottom: 42px; + position: relative; + max-width: 202px; +} +.custom-switch { + min-height: 36px; +} +.savingModedescription { + margin-top: 24px; + p { + font-size: 0.75rem; + font-weight: 401; + letter-spacing: -0.01em; + color: ${({ theme }) => theme.styles.batterySettings.descriptionColor}; + strong { + font-weight: 401; + color: ${({ theme }) => theme.styles.batterySettings.descriptionHighlightColor}; + } + } +} +`; + +function EnergyManagement(props: EnergyManagementProps) { + const { wireless, changeWireless } = props; + return ( + <Styles> + <Card className="overflowFix card-preferences"> + <Card.Title> + <Title text={i18n.wireless.energyManagement.title} headingLevel={3} svgICO={<IconThunder />} /> + </Card.Title> + <Card.Body className="py-0"> + <AdvancedBatterySettings wireless={wireless} changeWireless={changeWireless} /> + <SavingMode wireless={wireless} changeWireless={changeWireless} /> + </Card.Body> + </Card> + </Styles> + ); +} + +export default EnergyManagement; diff --git a/src/renderer/modules/Settings/GeneralSettings.js b/src/renderer/modules/Settings/GeneralSettings.js index e6740e2de..2bccf4256 100644 --- a/src/renderer/modules/Settings/GeneralSettings.js +++ b/src/renderer/modules/Settings/GeneralSettings.js @@ -1,8 +1,6 @@ import PropTypes from "prop-types"; import React, { Component } from "react"; -import i18n from "../../i18n"; -import Focus from "../../../api/focus"; -import Keymap from "../../../api/keymap"; +import Styled from "styled-components"; // React Bootstrap Components import Card from "react-bootstrap/Card"; @@ -11,41 +9,54 @@ import Row from "react-bootstrap/Row"; import Col from "react-bootstrap/Col"; // Own Components -import Title from "../../component/Title"; -import { Select } from "../../component/Select"; -import { ToggleButtons } from "../../component/ToggleButtons"; // Icons Imports -import { IconWrench, IconSun, IconMoon, IconScreen } from "../../component/Icon"; // Flags imports -import frenchF from "../../../../static/flags/france.png"; -import germanF from "../../../../static/flags/germany.png"; -import japaneseF from "../../../../static/flags/japan.png"; -import spanishF from "../../../../static/flags/spain.png"; -import englishUSUKF from "../../../../static/flags/english.png"; -import danishF from "../../../../static/flags/denmark.png"; -import swedishF from "../../../../static/flags/sweden.png"; -import finnishF from "../../../../static/flags/finland.png"; -import icelandicF from "../../../../static/flags/iceland.png"; -import norwegianF from "../../../../static/flags/norway.png"; -import swissF from "../../../../static/flags/switzerland.png"; - -const Store = require("electron-store"); -const store = new Store(); +import frenchF from "@Assets/flags/france.png"; +import germanF from "@Assets/flags/germany.png"; +import japaneseF from "@Assets/flags/japan.png"; +import koreanF from "@Assets/flags/korean.png"; +import spanishF from "@Assets/flags/spain.png"; +import englishUSF from "@Assets/flags/englishUS.png"; +import englishUKF from "@Assets/flags/englishUK.png"; +import danishF from "@Assets/flags/denmark.png"; +import swedishF from "@Assets/flags/sweden.png"; +import finnishF from "@Assets/flags/finland.png"; +import icelandicF from "@Assets/flags/iceland.png"; +import norwegianF from "@Assets/flags/norway.png"; +import swissF from "@Assets/flags/switzerland.png"; +import eurkeyF from "@Assets/flags/eurkey.png"; +import { IconWrench, IconSun, IconMoon, IconScreen } from "../../component/Icon"; +import { ToggleButtons } from "../../component/ToggleButtons"; +import { Select } from "../../component/Select"; +import Title from "../../component/Title"; +import Keymap from "../../../api/keymap"; +import Focus from "../../../api/focus"; +import i18n from "../../i18n"; + +import Store from "../../utils/Store"; + +const GeneraslSettihngsWrapper = Styled.div` +.dropdown-menu { + min-width: 13rem; +} +`; + +const store = Store.getStore(); export default class GeneralSettings extends Component { constructor(props) { super(props); this.state = { - selectedLanguage: "" + selectedLanguage: "", }; } async componentDidMount() { this.setState({ - selectedLanguage: store.get("settings.language") + selectedLanguage: store.get("settings.language"), }); } @@ -53,9 +64,9 @@ export default class GeneralSettings extends Component { this.setState({ selectedLanguage: language }); store.set("settings.language", `${language}`); - let focus = new Focus(); + const focus = new Focus(); if (!focus.closed) { - let deviceLang = { ...focus.device, language: true }; + const deviceLang = { ...focus.device, language: true }; focus.commands.keymap = new Keymap(deviceLang); } }; @@ -63,101 +74,133 @@ export default class GeneralSettings extends Component { render() { const { selectDarkMode, darkMode, neurons, selectedNeuron, connected, defaultLayer, selectDefaultLayer } = this.props; const { selectedLanguage } = this.state; - let layersNames = neurons[selectedNeuron].layers; - let flags = [ - englishUSUKF, + let layersNames = neurons[selectedNeuron] ? neurons[selectedNeuron].layers : []; + const flags = [ + englishUSF, + englishUKF, spanishF, germanF, frenchF, + frenchF, swedishF, finnishF, danishF, norwegianF, icelandicF, japaneseF, - swissF + koreanF, + swissF, + eurkeyF, ]; let language = [ "english", + "british", "spanish", "german", "french", + "frenchBepo", "swedish", "finnish", "danish", "norwegian", "icelandic", "japanese", - "swissGerman" + "korean", + "swissGerman", + "eurkey", ]; - language = language.map((item, index) => { - return { text: item, value: item, icon: flags[index], index }; - }); + const languageNames = [ + "English US", + "English UK", + "Spanish", + "German", + "French", + "French Bépo", + "Swedish", + "Finnish", + "Danish", + "Norwegian", + "Icelandic", + "Japanese", + "Korean", + "Swiss (German)", + "EurKEY (1.3)", + ]; + language = language.map((item, index) => ({ + text: languageNames[index], + value: item, + icon: flags[index], + index, + })); - layersNames = layersNames.map((item, index) => { - return { text: item.name != "" ? item.name : `Layer ${index + 1}`, value: index, index }; - }); + layersNames = layersNames.map((item, index) => ({ + text: item.name !== "" ? item.name : `Layer ${index + 1}`, + value: index, + index, + })); layersNames.push({ text: i18n.keyboardSettings.keymap.noDefault, value: 126, index: 126 }); - let layoutsModes = [ + const layoutsModes = [ { name: "System", value: "system", icon: <IconScreen />, - index: 0 + index: 0, }, { name: "Dark", value: "dark", icon: <IconMoon />, - index: 1 + index: 1, }, { name: "Light", value: "light", icon: <IconSun />, - index: 2 - } + index: 2, + }, ]; return ( - <Card className="overflowFix card-preferences mt-4"> - <Card.Title> - <Title text={i18n.keyboardSettings.keymap.title} headingLevel={3} svgICO={<IconWrench />} /> - </Card.Title> - <Card.Body> - <Form> - <Row> - <Col lg={6} md={12}> - <Form.Group controlId="selectLanguage" className="mb-3"> - <Form.Label>{i18n.preferences.language}</Form.Label> - <Select onSelect={this.changeLanguage} value={selectedLanguage} listElements={language} /> - </Form.Group> - </Col> - <Col lg={6} md={12}> - <Form.Group controlId="defaultLayer" className="mb-3"> - <Form.Label>{i18n.keyboardSettings.keymap.defaultLayer}</Form.Label> - <Select onSelect={selectDefaultLayer} value={defaultLayer} listElements={layersNames} disabled={!connected} /> - </Form.Group> - </Col> - </Row> - <Row> - <Col md={12}> - <Form.Group controlId="DarkMode" className="m-0"> - <Form.Label>{i18n.preferences.darkMode.label}</Form.Label> - <ToggleButtons - selectDarkMode={selectDarkMode} - value={darkMode} - listElements={layoutsModes} - style={"flex"} - size={"sm"} - /> - </Form.Group> - </Col> - </Row> - </Form> - </Card.Body> - </Card> + <GeneraslSettihngsWrapper> + <Card className="overflowFix card-preferences mt-4"> + <Card.Title> + <Title text={i18n.keyboardSettings.keymap.title} headingLevel={3} svgICO={<IconWrench />} /> + </Card.Title> + <Card.Body> + <Form> + <Row> + <Col lg={6} md={12}> + <Form.Group controlId="selectLanguage" className="mb-3"> + <Form.Label>{i18n.preferences.language}</Form.Label> + <Select onSelect={this.changeLanguage} value={selectedLanguage} listElements={language} /> + </Form.Group> + </Col> + <Col lg={6} md={12}> + <Form.Group controlId="defaultLayer" className="mb-3"> + <Form.Label>{i18n.keyboardSettings.keymap.defaultLayer}</Form.Label> + <Select onSelect={selectDefaultLayer} value={defaultLayer} listElements={layersNames} disabled={!connected} /> + </Form.Group> + </Col> + </Row> + <Row> + <Col md={12}> + <Form.Group controlId="DarkMode" className="m-0"> + <Form.Label>{i18n.preferences.darkMode.label}</Form.Label> + <ToggleButtons + selectDarkMode={selectDarkMode} + value={darkMode} + listElements={layoutsModes} + style="flex" + size="sm" + /> + </Form.Group> + </Col> + </Row> + </Form> + </Card.Body> + </Card> + </GeneraslSettihngsWrapper> ); } } @@ -167,5 +210,5 @@ GeneralSettings.propTypes = { darkMode: PropTypes.string.isRequired, neurons: PropTypes.array.isRequired, selectedNeuron: PropTypes.number.isRequired, - connected: PropTypes.bool.isRequired + connected: PropTypes.bool.isRequired, }; diff --git a/src/renderer/modules/Settings/KeyboardSettings.js b/src/renderer/modules/Settings/KeyboardSettings.js index 235c75c92..85b26392a 100644 --- a/src/renderer/modules/Settings/KeyboardSettings.js +++ b/src/renderer/modules/Settings/KeyboardSettings.js @@ -19,39 +19,21 @@ import React from "react"; import Styled from "styled-components"; -import Button from "react-bootstrap/Button"; import Card from "react-bootstrap/Card"; -import Dropdown from "react-bootstrap/Dropdown"; import Form from "react-bootstrap/Form"; import Row from "react-bootstrap/Row"; import Col from "react-bootstrap/Col"; -import Container from "react-bootstrap/Container"; import Tooltip from "react-bootstrap/Tooltip"; -import OverlayTrigger from "react-bootstrap/OverlayTrigger"; -import Spinner from "react-bootstrap/Spinner"; import Slider from "@appigram/react-rangeslider"; -import Focus from "../../../api/focus"; -import Backup from "../../../api/backup"; +import { isArray } from "lodash"; import i18n from "../../i18n"; import Title from "../../component/Title"; -import { Select } from "../../component/Select"; -import { RegularButton } from "../../component/Button"; -import ToggleButtons from "../../component/ToggleButtons"; - -import { IconFlashlight, IconTypo, IconChip, IconMouse } from "../../component/Icon"; - -import { MdDeleteForever, MdSave } from "react-icons/md"; -import { BsType, BsBrightnessHigh } from "react-icons/bs"; -import { BiMouse, BiCodeAlt, BiWrench, BiChip } from "react-icons/bi"; -import { isArray } from "lodash"; -import BackupFolderConfigurator from "../BackupFolderConfigurator"; -const Store = require("electron-store"); -const store = new Store(); +import { IconFlashlight, IconTypo, IconMouse } from "../../component/Icon"; const Styles = Styled.div` @@ -186,23 +168,24 @@ class KeyboardSettings extends React.Component { this.state = props.kbData; } + delay = ms => new Promise(res => setTimeout(res, ms)); - componentDidUpdate = previousProps => { + componentDidUpdate(previousProps) { if (this.props.kbData != previousProps.kbData) { this.setState({ ...this.props.kbData }); } - }; + } setOnlyCustom = async event => { - const checked = event.target.checked; + const { checked } = event.target; await this.setState(state => ({ modified: true, keymap: { custom: state.keymap.custom, default: state.keymap.default, - onlyCustom: checked - } + onlyCustom: checked, + }, })); this.props.setKbData(this.state); }; @@ -210,7 +193,7 @@ class KeyboardSettings extends React.Component { selectIdleLEDTime = async value => { await this.setState(state => ({ ledIdleTimeLimit: value * 60, - modified: true + modified: true, })); this.props.setKbData(this.state); }; @@ -218,7 +201,7 @@ class KeyboardSettings extends React.Component { setShowDefaults = async event => { await this.setState(state => ({ showDefaults: event.target.checked, - modified: true + modified: true, })); this.props.setKbData(this.state); }; @@ -226,14 +209,23 @@ class KeyboardSettings extends React.Component { setBrightness = async value => { await this.setState(state => ({ ledBrightness: (value * 255) / 100, - modified: true + modified: true, })); this.props.setKbData(this.state); }; + + setBrightnessUG = async value => { + await this.setState(state => ({ + ledBrightnessUG: (value * 255) / 100, + modified: true, + })); + this.props.setKbData(this.state); + }; + setHoldTimeout = async value => { await this.setState(state => ({ qukeysHoldTimeout: value, - modified: true + modified: true, })); this.props.setKbData(this.state); }; @@ -241,7 +233,7 @@ class KeyboardSettings extends React.Component { setOverlapThreshold = async value => { await this.setState(state => ({ qukeysOverlapThreshold: value, - modified: true + modified: true, })); this.props.setKbData(this.state); }; @@ -249,7 +241,7 @@ class KeyboardSettings extends React.Component { setSuperTimeout = async value => { await this.setState(state => ({ SuperTimeout: value, - modified: true + modified: true, })); this.props.setKbData(this.state); }; @@ -275,7 +267,7 @@ class KeyboardSettings extends React.Component { setSuperHoldstart = async value => { await this.setState(event => ({ SuperHoldstart: value, - modified: true + modified: true, })); this.props.setKbData(this.state); }; @@ -297,7 +289,7 @@ class KeyboardSettings extends React.Component { SuperTimeout: valueTyping, SuperHoldstart: valueTyping - 20, qukeysHoldTimeout: valueTyping - 20, - modified: true + modified: true, })); this.props.setKbData(this.state); }; @@ -305,7 +297,7 @@ class KeyboardSettings extends React.Component { setChording = async value => { await this.setState(state => ({ qukeysOverlapThreshold: value, - modified: true + modified: true, })); this.props.setKbData(this.state); }; @@ -324,7 +316,7 @@ class KeyboardSettings extends React.Component { await this.setState(state => ({ mouseSpeed: parseInt(value), mouseSpeedDelay: 10, - modified: true + modified: true, })); this.props.setKbData(this.state); }; @@ -343,7 +335,7 @@ class KeyboardSettings extends React.Component { await this.setState(state => ({ mouseAccelSpeed: parseInt(value), mouseAccelDelay: 600, - modified: true + modified: true, })); this.props.setKbData(this.state); }; @@ -372,7 +364,7 @@ class KeyboardSettings extends React.Component { await this.setState(state => ({ mouseWheelSpeed: value, mouseWheelDelay: 100, - modified: true + modified: true, })); this.props.setKbData(this.state); }; @@ -390,7 +382,7 @@ class KeyboardSettings extends React.Component { setSpeedLimit = async value => { await this.setState(state => ({ mouseSpeedLimit: parseInt(value), - modified: true + modified: true, })); this.props.setKbData(this.state); }; @@ -399,20 +391,18 @@ class KeyboardSettings extends React.Component { return ( <Tooltip id="select-tooltip" className="longtooltip"> <TooltipStyle> - {tooltips.map((tip, i) => { - return ( - <React.Fragment key={`Tip-${i}`}> - {i % 2 == 1 || !isNaN(tip[0]) || tip[0] == "-" ? ( - <p className="ttip-p">{tip}</p> - ) : ( - <React.Fragment> - {i == 0 ? "" : <br></br>} - <h5 className="ttip-h">{tip}</h5> - </React.Fragment> - )} - </React.Fragment> - ); - })} + {tooltips.map((tip, i) => ( + <React.Fragment key={`Tip-${i}`}> + {i % 2 == 1 || !isNaN(tip[0]) || tip[0] == "-" ? ( + <p className="ttip-p">{tip}</p> + ) : ( + <> + {i == 0 ? "" : <br />} + <h5 className="ttip-h">{tip}</h5> + </> + )} + </React.Fragment> + ))} </TooltipStyle> </Tooltip> ); @@ -424,6 +414,7 @@ class KeyboardSettings extends React.Component { modified, showDefaults, ledBrightness, + ledBrightnessUG, ledIdleTimeLimit, qukeysHoldTimeout, qukeysOverlapThreshold, @@ -438,7 +429,7 @@ class KeyboardSettings extends React.Component { // mouseAccelDelay, mouseWheelSpeed, // mouseWheelDelay, - mouseSpeedLimit + mouseSpeedLimit, } = this.state; const mSpeed = ( @@ -518,7 +509,7 @@ class KeyboardSettings extends React.Component { return ( <Styles> {this.props.connected && ( - <React.Fragment> + <> <Card className="overflowFix card-preferences mt-4"> <Card.Title> <Title text={i18n.keyboardSettings.led.title} headingLevel={3} svgICO={<IconFlashlight />} /> @@ -570,6 +561,32 @@ class KeyboardSettings extends React.Component { </Row> </Form.Group> )} + {ledBrightnessUG >= 0 && ( + <Form.Group controlId="brightnessUGControl" className="formGroup"> + <Row> + <Col> + <Form.Label>{i18n.keyboardSettings.led.brightnessUG}</Form.Label> + </Col> + </Row> + <Row> + <Col xs={2} md={1} className="p-0 text-center align-self-center"> + <span className="tagsfix">None</span> + </Col> + <Col xs={8} md={10} className="px-2"> + <Slider + min={0} + max={100} + step={5} + value={Math.round((ledBrightnessUG * 100) / 255)} + onChange={this.setBrightnessUG} + /> + </Col> + <Col xs={2} md={1} className="p-0 text-center align-self-center"> + <span className="tagsfix">Max</span> + </Col> + </Row> + </Form.Group> + )} </Card.Body> </Card> <Card className="overflowFix card-preferences mt-4"> @@ -738,7 +755,7 @@ class KeyboardSettings extends React.Component { )} </Card.Body> </Card> - </React.Fragment> + </> )} </Styles> ); diff --git a/src/renderer/modules/Settings/NeuronSettings.js b/src/renderer/modules/Settings/NeuronSettings.js index 66a92b6fd..ae3b9c9e5 100644 --- a/src/renderer/modules/Settings/NeuronSettings.js +++ b/src/renderer/modules/Settings/NeuronSettings.js @@ -1,17 +1,17 @@ import PropTypes from "prop-types"; import React, { Component } from "react"; -import i18n from "../../i18n"; // React Bootstrap Components import Card from "react-bootstrap/Card"; import Form from "react-bootstrap/Form"; import Row from "react-bootstrap/Row"; import Col from "react-bootstrap/Col"; +import i18n from "../../i18n"; // Own Components import Title from "../../component/Title"; import { NeuronSelector } from "../../component/Select"; -import NeuronData from "../../modules/NeuronData"; +import NeuronData from "../NeuronData"; // Icons Imports import { IconNeuronManager } from "../../component/Icon"; @@ -40,7 +40,11 @@ export default class NeuronSettings extends Component { /> <Row className="mb-4 mt-4"> <Col> - <NeuronData neurons={neurons} selectedNeuron={selectedNeuron} /> + {Array.isArray(neurons) && neurons.length > 0 ? ( + <NeuronData neurons={neurons} selectedNeuron={selectedNeuron} /> + ) : ( + "" + )} </Col> </Row> </Form.Group> @@ -55,5 +59,5 @@ NeuronSettings.propTypes = { selectedNeuron: PropTypes.number.isRequired, selectNeuron: PropTypes.func.isRequired, updateNeuronName: PropTypes.func.isRequired, - deleteNeuron: PropTypes.func.isRequired + deleteNeuron: PropTypes.func.isRequired, }; diff --git a/src/renderer/modules/Settings/RFSettings.tsx b/src/renderer/modules/Settings/RFSettings.tsx new file mode 100644 index 000000000..daac19a47 --- /dev/null +++ b/src/renderer/modules/Settings/RFSettings.tsx @@ -0,0 +1,64 @@ +import React from "react"; +import i18n from "@Renderer/i18n"; + +// Bootstrap components +import Styled from "styled-components"; +import Card from "react-bootstrap/Card"; + +// Custom components +import Title from "@Renderer/component/Title"; +import { RegularButton } from "@Renderer/component/Button"; + +// Assets +import { IconSignal } from "@Renderer/component/Icon"; +import { RFSettingsProps } from "@Renderer/types/wireless"; + +const Styles = Styled.div` +height: 100%; +padding-top: 24px; +.card { + height: inherit; +} +.RFdescription { + margin-top: 24px; + p { + font-size: 0.75rem; + font-weight: 401; + color: ${({ theme }) => theme.styles.batterySettings.descriptionColor}; + strong { + font-weight: 401; + color: ${({ theme }) => theme.styles.batterySettings.descriptionHighlightColor}; + } + } +} +.button.outline { + margin-top: 4px; +} +`; + +function RFSettings(props: RFSettingsProps) { + const { sendRePair } = props; + return ( + <Styles> + <Card className="overflowFix card-preferences"> + <Card.Title> + <Title text={i18n.wireless.RFPreferences.RFSettings} headingLevel={3} svgICO={<IconSignal />} /> + </Card.Title> + <Card.Body className="py-0"> + <Title text={i18n.wireless.RFPreferences.repairChannel} headingLevel={4} /> + <RegularButton + buttonText={i18n.wireless.RFPreferences.reconnectSides} + onClick={sendRePair} + styles="outline gradient" + size="sm" + /> + <div className="RFdescription"> + <p>{i18n.wireless.RFPreferences.repairChannelDescription}</p> + </div> + </Card.Body> + </Card> + </Styles> + ); +} + +export default RFSettings; diff --git a/src/renderer/modules/Settings/WirelessSettings.js b/src/renderer/modules/Settings/WirelessSettings.js new file mode 100644 index 000000000..8c51dde74 --- /dev/null +++ b/src/renderer/modules/Settings/WirelessSettings.js @@ -0,0 +1,7 @@ +import React from "react"; + +const WirelessSettings = props => { + return <div></div>; +}; + +export default WirelessSettings; diff --git a/src/renderer/modules/Settings/index.js b/src/renderer/modules/Settings/index.js index 7ac9b98e0..73928aeb3 100644 --- a/src/renderer/modules/Settings/index.js +++ b/src/renderer/modules/Settings/index.js @@ -14,9 +14,12 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ -import GeneralSettings from "./GeneralSettings"; +import AdvancedSettings from "./AdvancedSettings"; import BackupSettings from "./BackupSettings"; +import BatterySettings from "./BatterySettings"; +import EnergyManagement from "./EnergyManagement"; +import GeneralSettings from "./GeneralSettings"; import NeuronSettings from "./NeuronSettings"; -import AdvancedSettings from "./AdvancedSettings"; +import RFSettings from "./RFSettings"; -export { GeneralSettings, BackupSettings, NeuronSettings, AdvancedSettings }; +export { AdvancedSettings, BackupSettings, BatterySettings, EnergyManagement, GeneralSettings, NeuronSettings, RFSettings }; diff --git a/src/renderer/modules/StandardView/StandardView.js b/src/renderer/modules/StandardView/StandardView.js index 2c9798fde..f24816017 100644 --- a/src/renderer/modules/StandardView/StandardView.js +++ b/src/renderer/modules/StandardView/StandardView.js @@ -1,26 +1,28 @@ import React from "react"; import Styled from "styled-components"; -import i18n from "../../i18n"; import Tab from "react-bootstrap/Tab"; import Nav from "react-bootstrap/Nav"; import Keymap, { KeymapDB } from "../../../api/keymap"; -//component -import { RegularButton } from "../../component/Button"; -import KeyVisualizer from "../KeyVisualizer"; -import CustomTab from "../../component/Tab"; -import KeysTab from "../KeysTabs/KeysTab"; -import NoKeyTransparentTab from "../KeysTabs/NoKeyTransparentTab"; -import LayersTab from "../KeysTabs/LayersTab"; -import MacroTab from "../KeysTabs/MacroTab"; -import SuperkeysTab from "../KeysTabs/SuperkeysTab"; -import MediaAndLightTab from "../KeysTabs/MediaAndLightTab"; -import OneShotTab from "../KeysTabs/OneShotTab"; -import MouseTab from "../KeysTabs/MouseTab"; +// component +import { RegularButton } from "@Renderer/component/Button"; +import KeyVisualizer from "@Renderer/modules/KeyVisualizer"; +import CustomTab from "@Renderer/component/Tab"; +import KeysTab from "@Renderer/modules/KeysTabs/KeysTab"; +import NoKeyTransparentTab from "@Renderer/modules/KeysTabs/NoKeyTransparentTab"; +import LayersTab from "@Renderer/modules/KeysTabs/LayersTab"; +import MacroTab from "@Renderer/modules/KeysTabs/MacroTab"; +import SuperkeysTab from "@Renderer/modules/KeysTabs/SuperkeysTab"; +import MediaAndLightTab from "@Renderer/modules/KeysTabs/MediaAndLightTab"; +import OneShotTab from "@Renderer/modules/KeysTabs/OneShotTab"; +import MouseTab from "@Renderer/modules/KeysTabs/MouseTab"; +import WirelessTab from "@Renderer/modules/KeysTabs/WirelessTab"; -//Icons +import i18n from "@Renderer/i18n"; + +// Icons import { IconKeyboard, IconNoKey, @@ -29,8 +31,9 @@ import { IconRobot, IconNote, IconOneShot, - IconThunder -} from "../../component/Icon"; + IconThunder, + IconWirelessMd, +} from "@Renderer/component/Icon"; const Styles = Styled.div` .standardView { @@ -226,13 +229,13 @@ export default class StandardView extends React.Component { this.inputText = React.createRef(); this.state = { name: props.name, - code: 0 + code: 0, }; this.keymapDB = new KeymapDB(); } componentDidUpdate(prevProps) { - //console.log("StandardView componentDidUpdate", prevProps.keyIndex, this.props.keyIndex); + // console.log("StandardView componentDidUpdate", prevProps.keyIndex, this.props.keyIndex); // if(this.props.actTab == "editor") { // } @@ -258,11 +261,11 @@ export default class StandardView extends React.Component { macroName = "*NotFound*"; } if (keycode >= 53852 && keycode <= 53852 + 128) { - if (this.props.code !== null) return this.keymapDB.parse(keycode).extraLabel + "." + macroName; + if (this.props.code !== null) return `${this.keymapDB.parse(keycode).extraLabel}.${macroName}`; } return this.props.code !== null ? this.keymapDB.parse(keycode).extraLabel != undefined - ? this.keymapDB.parse(keycode).extraLabel + "." + this.keymapDB.parse(keycode).label + ? `${this.keymapDB.parse(keycode).extraLabel}.${this.keymapDB.parse(keycode).label}` : this.keymapDB.parse(keycode).label : ""; } @@ -289,7 +292,8 @@ export default class StandardView extends React.Component { onKeySelect, selectedlanguage, showStandardView, - superkeys + superkeys, + isWireless, } = this.props; let keyCode; if (actTab == "super") { @@ -313,14 +317,14 @@ export default class StandardView extends React.Component { oldValue={oldKey} newValue={selKey} isStandardView={isStandardView} - superkeyAction={`${actTab == "super" ? keyIndex : 5}`} + superkeyAction={`${actTab === "super" ? keyIndex : 5}`} /> <Nav className="flex-column tabsWrapper"> <CustomTab eventKey="tabKeys" text="Keys" icon={<IconKeyboard />} /> <CustomTab eventKey="tabNoKeys" text={i18n.editor.standardView.noKeyTransparent} icon={<IconNoKey />} /> <CustomTab eventKey="tabLayers" text={i18n.editor.standardView.layers.title} icon={<IconLayers />} /> <CustomTab eventKey="tabMacro" text={i18n.editor.standardView.macros.title} icon={<IconRobot />} /> - {actTab != "super" ? ( + {actTab !== "super" ? ( <> <CustomTab eventKey="tabSuperKeys" @@ -335,6 +339,9 @@ export default class StandardView extends React.Component { )} <CustomTab eventKey="tabMedia" text={i18n.editor.standardView.mediaAndLED.title} icon={<IconNote />} /> <CustomTab eventKey="tabMouse" text={i18n.editor.standardView.mouse.title} icon={<IconMouse />} /> + {isWireless && ( + <CustomTab eventKey="tabWireless" text={i18n.app.menu.wireless} icon={<IconWirelessMd strokeWidth={1.2} />} /> + )} </Nav> </div> <div className="colContentTabs"> @@ -359,7 +366,7 @@ export default class StandardView extends React.Component { <LayersTab onLayerPress={onKeySelect} keyCode={keyCode} - showLayerSwitch={actTab == "super" ? false : true} + showLayerSwitch={actTab !== "super"} isStandardView={isStandardView} actTab={actTab} /> @@ -373,7 +380,7 @@ export default class StandardView extends React.Component { isStandardView={isStandardView} /> </Tab.Pane> - {actTab != "super" ? ( + {actTab !== "super" ? ( <Tab.Pane eventKey="tabSuperKeys"> <SuperkeysTab actions={actions} @@ -387,7 +394,7 @@ export default class StandardView extends React.Component { ) : ( "" )} - {actTab != "super" ? ( + {actTab !== "super" ? ( <Tab.Pane eventKey="tabOneShot"> <OneShotTab keyCode={keyCode} onKeySelect={onKeySelect} isStandardView={isStandardView} /> </Tab.Pane> @@ -400,19 +407,24 @@ export default class StandardView extends React.Component { <Tab.Pane eventKey="tabMouse"> <MouseTab onAddSpecial={this.onAddSpecial} keyCode={keyCode} isStandardView={isStandardView} /> </Tab.Pane> + {isWireless && ( + <Tab.Pane eventKey="tabWireless"> + <WirelessTab keyCode={keyCode} onKeySelect={onKeySelect} isStandardView={isStandardView} /> + </Tab.Pane> + )} </Tab.Content> </div> <div className="contentFooter"> <div className="d-flex justify-content-end"> <RegularButton onClick={() => closeStandardView(this.state.code)} - style={"outline"} + styles="outline transp-bg" size="sm" buttonText={i18n.app.cancelPending.button} /> <RegularButton onClick={handleSave} - style={"outline gradient"} + styles="outline gradient" size="sm" buttonText={i18n.dialog.applyChanges} /> diff --git a/src/renderer/modules/Superkeys/SuperKeysFeatures.js b/src/renderer/modules/Superkeys/SuperKeysFeatures.js index 0e63074f7..bc6a75480 100644 --- a/src/renderer/modules/Superkeys/SuperKeysFeatures.js +++ b/src/renderer/modules/Superkeys/SuperKeysFeatures.js @@ -2,10 +2,9 @@ import React from "react"; import Styled from "styled-components"; import Card from "react-bootstrap/Card"; import Accordion from "react-bootstrap/Accordion"; +import IconCheckmarkSm from "@Assets/base/icon-checkmark-green.svg"; import i18n from "../../i18n"; -import IconCheckmarkSm from "../../../../static/base/icon-checkmark-green.svg"; - const Style = Styled.div` .card-header:hover { cursor: pointer; @@ -68,7 +67,7 @@ h5 { } `; -const SuperKeysFeatures = () => { +function SuperKeysFeatures() { return ( <Style> <Accordion className="simpleAccordion" defaultActiveKey="0"> @@ -167,6 +166,6 @@ const SuperKeysFeatures = () => { </Accordion> </Style> ); -}; +} export default SuperKeysFeatures; diff --git a/src/renderer/modules/Superkeys/SuperkeyActions.js b/src/renderer/modules/Superkeys/SuperkeyActions.js index 63ab24d0b..17a970054 100644 --- a/src/renderer/modules/Superkeys/SuperkeyActions.js +++ b/src/renderer/modules/Superkeys/SuperkeyActions.js @@ -20,7 +20,7 @@ const Style = Styled.div` } `; -const SuperkeyActions = ({ +function SuperkeyActions({ isStandardViewSuperkeys, superkeys, selected, @@ -30,34 +30,34 @@ const SuperkeyActions = ({ macros, updateAction, changeAction, - keymapDB -}) => { + keymapDB, +}) { const rows = [ { icon: <IconKeysPress />, title: i18n.editor.superkeys.actions.tapLabel, - description: i18n.editor.superkeys.actions.tap + description: i18n.editor.superkeys.actions.tap, }, { icon: <IconKeysHold />, title: i18n.editor.superkeys.actions.holdLabel, - description: i18n.editor.superkeys.actions.hold + description: i18n.editor.superkeys.actions.hold, }, { icon: <IconKeysTapHold />, title: i18n.editor.superkeys.actions.tapAndHoldLabel, - description: i18n.editor.superkeys.actions.tapAndHold + description: i18n.editor.superkeys.actions.tapAndHold, }, { icon: <IconKeys2Tap />, title: i18n.editor.superkeys.actions.doubleTapLabel, - description: i18n.editor.superkeys.actions.doubleTap + description: i18n.editor.superkeys.actions.doubleTap, }, { icon: <IconKeys2TapHold />, title: i18n.editor.superkeys.actions.doubleTapAndHoldLabel, - description: i18n.editor.superkeys.actions.doubleTapAndHold - } + description: i18n.editor.superkeys.actions.doubleTapAndHold, + }, ]; return ( @@ -74,7 +74,7 @@ const SuperkeyActions = ({ key={`skA-${index}`} title={item.title} description={item.description} - elementActive={selectedAction == index ? true : false} + elementActive={selectedAction == index} isStandardViewSuperkeys={isStandardViewSuperkeys} changeSelected={changeSelected} onClick={changeAction} @@ -88,10 +88,10 @@ const SuperkeyActions = ({ </div> </Style> ); -}; +} SuperkeyActions.propTypes = { - isStandardViewSuperkeys: PropTypes.bool.isRequired + isStandardViewSuperkeys: PropTypes.bool.isRequired, }; export default SuperkeyActions; diff --git a/src/renderer/modules/WhatsNew/WhatsNew.js b/src/renderer/modules/WhatsNew/WhatsNew.js index a932eefd6..6efbc7b96 100644 --- a/src/renderer/modules/WhatsNew/WhatsNew.js +++ b/src/renderer/modules/WhatsNew/WhatsNew.js @@ -37,19 +37,19 @@ h5 { } `; -const WhatsNew = () => { +function WhatsNew() { const [contentRelease, setContentRelease] = React.useState(null); const [loading, setLoading] = React.useState(true); const [error, setError] = React.useState(false); const [datePublished, setDatePublished] = React.useState(null); - let dateOptions = { year: "numeric", month: "long", day: "numeric" }; + const dateOptions = { year: "numeric", month: "long", day: "numeric" }; const fetchContentOnClick = () => { async function fetchContent(url) { try { const response = await fetch(url); const json = await response.json(); - let d = new Date(json.published_at); + const d = new Date(json.published_at); setDatePublished(d.toLocaleDateString("en-US", dateOptions)); setContentRelease(json); } catch (error) { @@ -93,6 +93,6 @@ const WhatsNew = () => { </Accordion> </Style> ); -}; +} export default WhatsNew; diff --git a/src/renderer/tests/renderer.test.ts b/src/renderer/tests/renderer.test.ts new file mode 100644 index 000000000..37b739c0c --- /dev/null +++ b/src/renderer/tests/renderer.test.ts @@ -0,0 +1,5 @@ +import { expect, test } from "vitest"; + +test("Renderer core test", () => { + expect(true).toBe(true); +}); diff --git a/src/renderer/theme/DarkTheme.js b/src/renderer/theme/DarkTheme.ts similarity index 79% rename from src/renderer/theme/DarkTheme.js rename to src/renderer/theme/DarkTheme.ts index 346d2940f..57b19dd1a 100644 --- a/src/renderer/theme/DarkTheme.js +++ b/src/renderer/theme/DarkTheme.ts @@ -1,41 +1,43 @@ -import BackgroundImageDark from "../../../static/dark/darkBackground.png"; -import BackgroundImageDark2x from "../../../static/dark/darkBackground-2x.png"; -import CheckedIconDark from "../../../static/dark/icon-check-animated.gif"; -import NeuronLoaderDark from "../../../static/dark/neuron-loader.jpg"; -import closeButton from "../../../static/dark/X.svg"; -import IconPlusXS from "../../../static/dark/plusIcon.svg"; -import RaiseFirmwareUpgrade from "../../../static/dark/raiseFirmwareupgrade.svg"; -import DefyFirmwareUpgrade from "../../../static/dark/defyFirmwareupgrade.svg"; -import neuronDefyWirelessImage from "../../../static/base/neuron-defy--black.png"; -import mouseWheelBackgroundDark from "../../../static/dark/mouseWheel.png"; -import oldToNew from "../../../static/dark/oldValueToNewValue.svg"; +import { DefaultTheme } from "styled-components"; + +import BackgroundImageDark from "@Assets/dark/darkBackground.png"; +import BackgroundImageDark2x from "@Assets/dark/darkBackground-2x.png"; +import CheckedIconDark from "@Assets/dark/icon-check-animated.gif"; +import NeuronLoaderDark from "@Assets/dark/neuron-loader.jpg"; +import closeButton from "@Assets/dark/X.svg"; +import IconPlusXS from "@Assets/dark/plusIcon.svg"; +import RaiseFirmwareUpgrade from "@Assets/dark/raiseFirmwareupgrade.svg"; +import DefyFirmwareUpgrade from "@Assets/dark/defyFirmwareupgrade.svg"; +import neuronDefyWirelessImage from "@Assets/base/neuron-defy--black.png"; +import mouseWheelBackgroundDark from "@Assets/dark/mouseWheel.png"; +import oldToNew from "@Assets/dark/oldValueToNewValue.svg"; import Tokens from "./Tokens"; -import { RiGitBranchFill } from "react-icons/ri"; -const settingColorOpacity = (color, opacity) => { - let newColorArray = color; - let newColor; - newColorArray = newColorArray.replace(/[^\d,]/g, "").split(","); - newColor = `rgba(${newColorArray[0]}, ${newColorArray[1]}, ${newColorArray[2]}, ${opacity})`; +const settingColorOpacity = (color: string, opacity: number) => { + // let newColorArray = color; + const newColorArray = color.replace(/[^\d,]/g, "").split(","); + const newColor = `rgba(${newColorArray[0]}, ${newColorArray[1]}, ${newColorArray[2]}, ${opacity})`; return newColor; }; -const settingColorMatrix = (color, opacity) => { - let newColorArray = color; - let newColor; - newColorArray = newColorArray.replace(/[^\d,]/g, "").split(","); - newColor = `0 0 0 0 ${(newColorArray[0] / 255).toFixed(2)} 0 0 0 0 ${(newColorArray[1] / 255).toFixed(2)} 0 0 0 0 ${( - newColorArray[2] / 255 - ).toFixed(2)} 0 0 0 ${opacity} 0`; +const settingColorMatrix = (color: string, opacity: number) => { + // let newColorArray = color; + const newColorArray = color.replace(/[^\d,]/g, "").split(","); + const newColor = `0 0 0 0 ${(parseInt(newColorArray[0], 10) / 255).toFixed(2)} 0 0 0 0 ${( + parseInt(newColorArray[1], 10) / 255 + ).toFixed(2)} 0 0 0 0 ${(parseInt(newColorArray[2], 10) / 255).toFixed(2)} 0 0 0 ${opacity} 0`; return newColor; }; -const Dark = { +const Dark: DefaultTheme = { name: "Dark", drawerWidth: 64, + sidebarWidthLarge: Tokens.sizes.sidebarWidthLarge, + sidebarWidthMedium: Tokens.sizes.sidebarWidthMedium, + sidebarWidthSmall: Tokens.sizes.sidebarWidthSmall, body: { backgroundImage: BackgroundImageDark, - backgroundImage2x: BackgroundImageDark2x + backgroundImage2x: BackgroundImageDark2x, }, keyboardPicker: { keyColor: "#252525", @@ -47,7 +49,7 @@ const Dark = { keyActiveSubTextColor: "#FFFFFF", keyTextDisabledColor: "#BBBBBB", titleColor: "#FFFFFF", - subTitleColor: "#959595" + subTitleColor: "#959595", }, colors: { gardient: "linear-gradient(180deg, rgba(65,147,199,1) 0%, rgba(90,100,140,1) 63%, rgba(0,0,0,1) 100%);", @@ -105,12 +107,12 @@ const Dark = { activeText: "#000", deselectedText: "#454545", boxShadow: "0 0 0 0.2rem rgba(150,150,150,.5)", - borderColor: "#30b1b1" + borderColor: "#30b1b1", }, link: { text: "#6ecfff", - opacity: 1 - } + opacity: 1, + }, }, card: { color: "#fff", @@ -125,32 +127,69 @@ const Dark = { icon: "#DDD", altIcon: "#DDD", radius: "10", - boxShadow: "0 0 0.5rem 0.3rem rgba(0,0,0,0.1)" + boxShadow: "0 0 0.5rem 0.3rem rgba(0,0,0,0.1)", }, slider: { - color: "#30b1b1" + color: "#30b1b1", }, font: "Libre Franklin", + accessibility: { + focusWithinColor: Tokens.colors.gray25, + }, styles: { accordion: { - background: settingColorOpacity(Tokens.colors.gray500, 0.2) + background: settingColorOpacity(Tokens.colors.gray500, 0.2), }, accordionFirmware: { background: Tokens.colors.gray700, headerBackground: "rgba(0, 0, 0, 0.03)", - colorTitle: Tokens.colors.gray100 + colorTitle: Tokens.colors.gray100, }, backupConfiguratorFolder: { headingColor: Tokens.colors.gray100, inputColor: Tokens.colors.gray50, inputBackground: settingColorOpacity(Tokens.colors.gray900, 0.2), - border: Tokens.colors.gray600 + border: Tokens.colors.gray600, + }, + badge: { + textColor: Tokens.colors.gray25, + dangerLowBG: settingColorOpacity(Tokens.colors.brandPrimary, 0.35), + dangerLowText: Tokens.colors.gray50, + subtleColor: Tokens.colors.gray100, + subtleBGColor: Tokens.colors.gray700, + }, + batteryIndicator: { + pileBackgroundColor: Tokens.colors.gray800, + pileBackgroundSavingMode: settingColorOpacity(Tokens.colors.brandWarning, 0.15), + pileBackgroundFatalError: settingColorOpacity(Tokens.colors.brandPrimary, 0.15), + titleColor: Tokens.colors.gray25, + panelBackgroundColor: Tokens.colors.gray800, + largeIndicatorPercentageColor: Tokens.colors.gray25, + largeIndicatorStrokeColor: settingColorOpacity(Tokens.colors.gray600, 0.8), + largeIndicatorFillColor: settingColorOpacity(Tokens.colors.gray600, 0.5), + largeIndicatorDisconnectedColor: Tokens.colors.gray600, + lineDisconnectedColor: Tokens.colors.gray600, + fillShapeColor: Tokens.colors.purple200, + fillShapeOpacity: 0.5, + fillShapeDefaultOpacity: 0.5, + strokeShapeColor: settingColorOpacity(Tokens.colors.gray600, 0.8), + alertWarningBackground: settingColorOpacity(Tokens.colors.brandWarning, 0.2), + alertWarningText: Tokens.colors.brandWarning, + alertErrorBackground: settingColorOpacity(Tokens.colors.brandPrimary, 0.25), + alertErrorText: Tokens.colors.brandPrimary, + alertDisconnectedBackground: Tokens.colors.gray600, + alertDisconnectedText: Tokens.colors.gray100, + shapeIndicatorOpacity: 0.2, + }, + batterySettings: { + descriptionColor: Tokens.colors.gray200, + descriptionHighlightColor: Tokens.colors.gray50, }, button: { primary: { backgroundColor: Tokens.colors.gradient, disabledTextColor: Tokens.colors.gray300, - disabledBackgroundColor: Tokens.colors.gradientDisabled + disabledBackgroundColor: Tokens.colors.gradientDisabled, }, outline: { color: "#fff", @@ -162,36 +201,36 @@ const Dark = { disabledTextColor: Tokens.colors.gray400, disabledBorderColor: Tokens.colors.gray400, disabledBoxShadowColor: Tokens.colors.gray400, - disabledOpacity: 0.35 + disabledOpacity: 0.35, }, outlineGradient: { color: "#fff", background: `linear-gradient(98.12deg, #555769 0%, #303349 56.24%) padding-box, - ${Tokens.colors.gradient} border-box` + linear-gradient(90deg,#FE007C,#6B14F6,#6B14F9,#FE007c) border-box`, }, previewButton: { color: Tokens.colors.gray300, borderColor: Tokens.colors.gray600, colorHover: Tokens.colors.gray200, borderHover: Tokens.colors.gray500, - backgroundHover: settingColorOpacity(Tokens.colors.gray100, 0.05) + backgroundHover: settingColorOpacity(Tokens.colors.gray100, 0.05), }, danger: { color: Tokens.colors.gray25, backgroundColor: Tokens.colors.brandDanger, - backgroundColorHover: Tokens.colors.brandDangerLighter + backgroundColorHover: Tokens.colors.brandDangerLighter, }, config: { background: `linear-gradient(90deg, rgba(255, 255, 255, 0.1) -22.96%, rgba(255, 255, 255, 0) 123.24%), linear-gradient(0deg, ${settingColorOpacity( Tokens.colors.gray500, - 0.25 + 0.25, )}, ${settingColorOpacity(Tokens.colors.gray500, 0.25)}), ${settingColorOpacity(Tokens.colors.gray900, 0.2)}`, boxShadow: "0px 2px 0px rgba(0, 0, 0, 0.1)", border: "none", color: Tokens.colors.gray50, backgroundHover: `linear-gradient(90deg, rgba(255, 255, 255, 0.15) -22.96%, rgba(255, 255, 255, 0) 123.24%), ${settingColorOpacity( Tokens.colors.gray500, - 0.6 + 0.6, )}`, backgroundActive: Tokens.colors.purple300, colorHover: Tokens.colors.gray25, @@ -199,8 +238,8 @@ const Dark = { boxShadowHover: "0px 2px 0px rgba(0, 0, 0, 0.1)", boxShadowActive: `0px 3px 0px ${settingColorOpacity( Tokens.colors.gray800, - 0.25 - )}, 0px 16px 16px -8px ${settingColorOpacity(Tokens.colors.gray500, 0.3)}` + 0.25, + )}, 0px 16px 16px -8px ${settingColorOpacity(Tokens.colors.gray500, 0.3)}`, }, configMinimal: { border: Tokens.colors.gray600, @@ -209,24 +248,24 @@ const Dark = { colorActive: Tokens.colors.gray50, iconColorActive: Tokens.colors.brandSuccess, background: "transparent", - backgroundActive: "linear-gradient(90deg, rgba(255, 255, 255, 0.1) -22.96%, rgba(255, 255, 255, 0) 123.24%)" + backgroundActive: "linear-gradient(90deg, rgba(255, 255, 255, 0.1) -22.96%, rgba(255, 255, 255, 0) 123.24%)", }, settings: { color: Tokens.colors.gray100, colorHover: Tokens.colors.gray50, background: Tokens.colors.gray600, - backgroundHover: Tokens.colors.gray500 + backgroundHover: Tokens.colors.gray500, }, short: { color: Tokens.colors.gray50, border: "none", background: Tokens.colors.gray600, - backgroundHover: Tokens.colors.gray400 + backgroundHover: Tokens.colors.gray400, }, buttonColor: { color: Tokens.colors.gray100, subtitleColor: Tokens.colors.gray200, - borderColor: "#2B2B2B" + borderColor: "#2B2B2B", }, buttonMouse: { backgroundColor: "linear-gradient(-90deg, rgba(11, 2, 25, 0.25) 0.39%, rgba(49, 50, 74, 0.25) 74.37%)", @@ -235,15 +274,15 @@ const Dark = { backgroundColorActive: Tokens.colors.purple300, color: "#fff", colorHover: "#fff", - colorActive: "#fff" + colorActive: "#fff", }, recordButton: { background: settingColorOpacity(Tokens.colors.gray700, 0.3), backgroundHover: "linear-gradient(0deg, rgba(254, 0, 124, 0.05), rgba(254, 0, 124, 0.05)), rgba(48, 51, 73, 0.5)", borderColor: Tokens.colors.brandPrimary, borderColorResume: Tokens.colors.gray700, - color: Tokens.colors.brandPrimary - } + color: Tokens.colors.brandPrimary, + }, }, colorPanel: { colorTitle: Tokens.colors.gray100, @@ -253,14 +292,14 @@ const Dark = { colorPickerBorderActive: Tokens.colors.purple300, colorPickerBorderHover: settingColorOpacity(Tokens.colors.gray300, 0.4), addButtonBackground: settingColorOpacity(Tokens.colors.gray600, 0.6), - addButtonColor: Tokens.colors.gray100 + addButtonColor: Tokens.colors.gray100, }, collpase: { iconBackgroud: IconPlusXS, gridItemBackground: settingColorOpacity(Tokens.colors.gray500, 0.2), gridItemTitle: Tokens.colors.gray100, gridItemBody: Tokens.colors.gray300, - gridItemCaret: Tokens.colors.gray600 + gridItemCaret: Tokens.colors.gray600, }, callout: { iconInfo: "white", @@ -269,7 +308,7 @@ const Dark = { iconInfoShadowColor: settingColorOpacity(Tokens.colors.gray800, 0.2), calloutColor: "white", calloutBackground: "Transparent", - calloutBorderColor: settingColorOpacity(Tokens.colors.gray600, 0.7) + calloutBorderColor: settingColorOpacity(Tokens.colors.gray600, 0.7), }, card: { color: "#fff", @@ -285,23 +324,26 @@ const Dark = { icon: "#DDD", altIcon: "#DDD", radius: "10", - boxShadow: "0 0 0.5rem 0.3rem rgba(0,0,0,0.1)" + boxShadow: "0 0 0.5rem 0.3rem rgba(0,0,0,0.1)", + cardBattery: { + backgroundColor: settingColorOpacity(Tokens.colors.gray900, 0.25), + }, }, cardButtons: { background: settingColorOpacity(Tokens.colors.gray700, 0.5), color: Tokens.colors.gray200, titleColor: Tokens.colors.gray50, subTitleColor: Tokens.colors.gray50, - groupButtonsBackground: settingColorOpacity(Tokens.colors.gray900, 0.2) + groupButtonsBackground: settingColorOpacity(Tokens.colors.gray900, 0.2), }, circleLoader: { - strokeColor: Tokens.colors.brandSuccess + strokeColor: Tokens.colors.brandSuccess, }, customCheckbox: { background: Tokens.colors.gray700, borderColor: Tokens.colors.gray400, backgroundActive: Tokens.colors.brandSuccess, - borderColorActive: Tokens.colors.brandSuccess + borderColorActive: Tokens.colors.brandSuccess, }, dropdown: { backgroundButtonColor: settingColorOpacity(Tokens.colors.gray900, 0.2), @@ -319,7 +361,7 @@ const Dark = { backgroundColor: "#3F425A", boxShadow: `16px 32px 32px -16px ${settingColorOpacity( Tokens.colors.gray900, - 0.2 + 0.2, )}, 0px 32px 72px -32px rgba(26, 17, 46, 0.5)`, itemTextColor: Tokens.colors.gray50, itemTextColorHover: Tokens.colors.gray25, @@ -327,22 +369,31 @@ const Dark = { itemBackgroundColorActive: Tokens.colors.purple200, linkColor: Tokens.colors.purple200, textColor: Tokens.colors.gray25, - dropdownDivider: Tokens.colors.gray500 + dropdownDivider: Tokens.colors.gray500, }, largeDropdown: { background: Tokens.colors.gray800, backgroundInner: Tokens.colors.gray800, border: "none", title: Tokens.colors.gray300, - titleStrong: Tokens.colors.gray50 + titleStrong: Tokens.colors.gray50, }, selector: { numberColor: Tokens.colors.gray200, separatorColor: settingColorOpacity(Tokens.colors.gray500, 0.5), labelColor: Tokens.colors.gray200, color: Tokens.colors.gray100, - arrowsColor: Tokens.colors.gray300 - } + arrowsColor: Tokens.colors.gray300, + }, + }, + energyManagement: { + connectionBGColor: settingColorOpacity(Tokens.colors.gray600, 0.25), + connectionColor: Tokens.colors.gray25, + borderColor: Tokens.colors.gray700, + titleColor: Tokens.colors.gray25, + descriptionColor: Tokens.colors.gray200, + lowPowerModeTitleColor: Tokens.colors.gray300, + shortButtonColor: Tokens.colors.gray25, }, raiseKeyboard: { keyBase: "#303949", @@ -353,8 +404,8 @@ const Dark = { modifier: { color: Tokens.colors.gray600, background: "rgba(255, 255, 255, 0.6)", - boxShadow: "0px 1px 0px rgba(0, 0, 0, 0.15)" - } + boxShadow: "0px 1px 0px rgba(0, 0, 0, 0.15)", + }, }, keyPicker: { iconColor: Tokens.colors.gray200, @@ -368,7 +419,7 @@ const Dark = { keyColorSecondary: Tokens.colors.gray200, keyColorActive: Tokens.colors.gray25, keyStrokeColor: "transparent", - keyStrokeColorActive: "transparent" + keyStrokeColorActive: "transparent", }, keyboardPicker: { keyBoardPickerBackground: "#25273B", @@ -379,7 +430,7 @@ const Dark = { modPickerBoxShadow: "0 0 0 1px inset rgba(63, 66, 90, 0.3)", modPickerAlignAdjust: "-1px", keysRowBackground: "rgba(48, 51, 73, 0.6)", - keysRowBoxShadow: "none" + keysRowBoxShadow: "none", }, keyVisualizer: { background: "linear-gradient(90deg, rgba(255, 255, 255, 0.2) 21.15%, rgba(63, 66, 90, 0.2) 100%), #303949", @@ -395,15 +446,15 @@ const Dark = { labelModifierBackgroundSm: settingColorOpacity(Tokens.colors.gray600, 0.6), labelModifierColorSm: Tokens.colors.gray200, labelBorderSm: "none", - bgOldToNew: oldToNew + bgOldToNew: oldToNew, }, firmwareErrorPanel: { - textColor: Tokens.colors.gray25 + textColor: Tokens.colors.gray25, }, firmwareUpdatePanel: { backgroundContent: Tokens.colors.gray800, backgroundSidebar: settingColorOpacity(Tokens.colors.gray400, 0.05), - neuronDefyWirelessImage: neuronDefyWirelessImage, + neuronDefyWirelessImage, neuronStatusLineColor: Tokens.colors.gray500, neuronStatusLineWarning: Tokens.colors.brandWarning, neuronStatusLineSuccess: Tokens.colors.brandSuccess, @@ -421,7 +472,7 @@ const Dark = { backgroundStripeGradientColor: "linear-gradient(90deg, #3F425A -136.64%, #25273B 94.29%)", caretColor: "#25273B", disclaimerTitle: "white", - fileSelected: "rgba(255,255,255,0.05)" + fileSelected: "rgba(255,255,255,0.05)", }, firmwareUpdateProcess: { raiseSVG: RaiseFirmwareUpgrade, @@ -430,7 +481,7 @@ const Dark = { processImageBackground: settingColorOpacity(Tokens.colors.gray100, 0.05), processNeuronBackground: Tokens.colors.gray800, neuronLineColor: Tokens.colors.gray600, - neuronSleepingMode: Tokens.colors.gray600 + neuronSleepingMode: Tokens.colors.gray600, }, form: { formLabelTextcolor: Tokens.colors.gray100, @@ -443,8 +494,8 @@ const Dark = { inputGroupColor: Tokens.colors.gray300, inputGroupBackground: "rgba(11, 2, 25, 0.2)", inputGroup: { - background: "#202033" - } + background: "#202033", + }, }, listGroup: { listItem: { @@ -456,8 +507,8 @@ const Dark = { colorSelected: Tokens.colors.gray25, colorSelectedSpan: Tokens.colors.gray50, colorDisabled: Tokens.colors.gray300, - colorDisabledSpan: Tokens.colors.gray200 - } + colorDisabledSpan: Tokens.colors.gray200, + }, }, macro: { tabCategoriesBackground: "rgba(43, 44, 67, 1)", @@ -489,7 +540,7 @@ const Dark = { timelinePointeText: Tokens.colors.gray50, recordMacroOptionsBackground: settingColorOpacity(Tokens.colors.gray900, 0.1), recordMacroOptionsBoxShadow: "0 4px 0 rgba(11, 2, 25, 0.05)", - recordMacroOptionsTitle: Tokens.colors.gray300 + recordMacroOptionsTitle: Tokens.colors.gray300, }, macroKey: { background: Tokens.colors.gray500, @@ -509,25 +560,28 @@ const Dark = { dropdownIconColor: Tokens.colors.purple100, dropdownIconColorModifier: Tokens.colors.gray25, alt: { - background: Tokens.colors.pink200 + background: Tokens.colors.pink200, + }, + altGr: { + background: Tokens.colors.pink200, }, control: { - background: Tokens.colors.pastelShadesGreen300 + background: Tokens.colors.pastelShadesGreen300, }, delay: { background: Tokens.colors.brandDangerLighter, color: Tokens.colors.gray700, borderColor: "rgba(63, 66, 90, 0.3)", - actionIconColor: settingColorOpacity(Tokens.colors.gray25, 0.85) + actionIconColor: settingColorOpacity(Tokens.colors.gray25, 0.85), }, os: { - background: "rgba(120, 121, 241, 1)" + background: "rgba(120, 121, 241, 1)", }, shift: { background: Tokens.colors.brandWarningLighter, color: Tokens.colors.gray600, - actionColor: settingColorOpacity(Tokens.colors.gray600, 0.6) - } + actionColor: settingColorOpacity(Tokens.colors.gray600, 0.6), + }, }, memoryUsage: { color: Tokens.colors.gray300, @@ -536,20 +590,20 @@ const Dark = { progressBaseColor: Tokens.colors.gray600, progressFill: Tokens.colors.brandSuccess, colorWarning: Tokens.colors.brandWarningLighter, - colorError: Tokens.colors.brandDangerLighter + colorError: Tokens.colors.brandDangerLighter, }, modal: { - closeButton: closeButton, + closeButton, backdropColor: "rgba(43,44,67,0.85)", background: Tokens.colors.gray800, backgroundInner: "#2B2C43", titleColor: Tokens.colors.gray25, - footerBackground: settingColorOpacity(Tokens.colors.gray900, 0.1) + footerBackground: settingColorOpacity(Tokens.colors.gray900, 0.1), }, mouseButtons: { background: "#2B2B42", backgroundWheelCircle: Tokens.colors.gray600, - mouseWheel: mouseWheelBackgroundDark + mouseWheel: mouseWheelBackgroundDark, }, navbar: { color: "#555", @@ -562,13 +616,13 @@ const Dark = { svgColorActive: Tokens.colors.gray50, svgColorHover: Tokens.colors.gray50, lightingOpacity: 1, - gradient: "linear-gradient(237.13deg, rgba(39, 27, 58, 0.32) 1.37%, rgba(123, 134, 158, 0.32) 99.24%)" - } + gradient: "linear-gradient(237.13deg, rgba(39, 27, 58, 0.32) 1.37%, rgba(123, 134, 158, 0.32) 99.24%)", + }, }, neuronConnection: { backgroundColor: Tokens.colors.gray800, titleColor: Tokens.colors.gray25, - subTitleColor: Tokens.colors.gray200 + subTitleColor: Tokens.colors.gray200, }, neuronData: { neuronInfoBackground: settingColorOpacity(Tokens.colors.gray900, 0.2), @@ -578,7 +632,7 @@ const Dark = { accordionCardBodyBackground: settingColorOpacity(Tokens.colors.gray900, 0.2), accordionCardHeaderColor: Tokens.colors.gray50, accordionCardHeaderBorderColor: settingColorOpacity(Tokens.colors.gray100, 0.2), - plusOpacity: 0.5 + plusOpacity: 0.5, }, neuronStatus: { neuronStatusBackgroundColor: settingColorOpacity(Tokens.colors.gray400, 0.05), @@ -590,23 +644,23 @@ const Dark = { neuronNotFoundedColor: Tokens.colors.gray50, connectionStrokeOpacity: 0.15, neuronLoader: NeuronLoaderDark, - checkedIcon: CheckedIconDark + checkedIcon: CheckedIconDark, }, neuronStatusDefy: { - statusWaiting: Tokens.colors.gray500 + statusWaiting: Tokens.colors.gray500, }, neuronTitle: { heading3Color: Tokens.colors.gray25, - heading4Color: Tokens.colors.gray200 + heading4Color: Tokens.colors.gray200, }, pageHeader: { backgroundColor: settingColorOpacity(Tokens.colors.gray400, 0.15), - titleColor: Tokens.colors.gray50 + titleColor: Tokens.colors.gray50, }, progress: { progressBackground: Tokens.colors.gray600, progressBarBackground: Tokens.colors.gray600, - boxShadow: "0px 0px 4px rgba(50, 238, 238, 0)" + boxShadow: "0px 0px 4px rgba(50, 238, 238, 0)", }, slider: { trackColor: Tokens.colors.gray400, @@ -614,7 +668,7 @@ const Dark = { handleBorderColor: Tokens.colors.gray25, handleBackgroundColor: Tokens.colors.purple300, handleBoxShadow: Tokens.colors.purple300, - labelColor: Tokens.colors.gray200 + labelColor: Tokens.colors.gray200, }, standardView: { modalBackground: "rgba(18, 17, 28, 0.95)", @@ -624,24 +678,24 @@ const Dark = { superkeys: { info: { background: "#2D3245", - titleColor: Tokens.colors.gray25 + titleColor: Tokens.colors.gray25, }, item: { titleColor: Tokens.colors.gray25, descriptionColor: Tokens.colors.gray100, background: settingColorOpacity(Tokens.colors.gray500, 0.2), - boxShadow: "none" + boxShadow: "none", }, key: { background: settingColorOpacity(Tokens.colors.gray300, 0.15), - border: Tokens.colors.gray800 - } + border: Tokens.colors.gray800, + }, }, keyVisualizer: { background: "#25273B", border: "1px solid rgba(63, 66, 90, 0.3)", - boxShadow: "32px 32px 64px -12px rgba(11, 2, 25, 0.4), 32px 32px 72px -32px rgba(26, 17, 46, 0.5)" - } + boxShadow: "32px 32px 64px -12px rgba(11, 2, 25, 0.4), 32px 32px 72px -32px rgba(26, 17, 46, 0.5)", + }, }, stepsBar: { stepBarBackground: Tokens.colors.gray600, @@ -652,7 +706,7 @@ const Dark = { bulletBorder: Tokens.colors.gray800, bulletBorderActive: Tokens.colors.purple200, bulletBoxShadow: "0px 4px 12px #303949", - bulletBoxShadowActive: "0px 4px 12px #303949" + bulletBoxShadowActive: "0px 4px 12px #303949", }, stepsProgressBar: { stepBarBackground: Tokens.colors.gray600, @@ -660,14 +714,14 @@ const Dark = { bulletBackground: Tokens.colors.gray600, bulletBackgroundActive: Tokens.colors.brandSuccess, bulletBorderActive: Tokens.colors.brandSuccessLighter, - stepBarBackgroundActive: Tokens.colors.brandSuccess + stepBarBackgroundActive: Tokens.colors.brandSuccess, }, superkeyAction: { color: Tokens.colors.gray500, background: settingColorOpacity(Tokens.colors.gray500, 0.2), backgroundActive: settingColorOpacity(Tokens.colors.gray500, 0.4), titleColor: Tokens.colors.gray25, - descriptionColor: Tokens.colors.gray100 + descriptionColor: Tokens.colors.gray100, }, superkeyButton: { backgroundColor: @@ -684,7 +738,7 @@ const Dark = { backgroundColorInnerActive: "linear-gradient(0deg, rgba(108, 92, 231, 0.3), rgba(108, 92, 231, 0.3)), linear-gradient(90deg, rgba(255, 255, 255, 0.2) 21.15%, rgba(255, 255, 255, 0) 100%), #303949", boxShadowInner: "0px 4px 24px rgba(108, 92, 231, 0.65)", - colorInner: Tokens.colors.gray25 + colorInner: Tokens.colors.gray25, }, switch: { background: Tokens.colors.gray600, @@ -694,7 +748,7 @@ const Dark = { thumbBorderColor: Tokens.colors.gray700, thumbBorderColorActive: Tokens.colors.purple200, thumbBoxShadow: "0px 4px 12px rgba(97, 32, 234, 0)", - thumbBoxShadowActive: "0px 4px 12px rgba(97, 32, 234, 1)" + thumbBoxShadowActive: "0px 4px 12px rgba(97, 32, 234, 1)", }, tab: { color: Tokens.colors.gray200, @@ -704,7 +758,7 @@ const Dark = { "linear-gradient(260.58deg, rgba(240, 242, 244, 0.05) -23.66%, rgba(255, 255, 255, 0) 38.79%), rgba(18, 19, 36, 0.15)", backgroundActive: "linear-gradient(278.53deg, rgba(240, 242, 244, 0.12) -19.7%, rgba(255, 255, 255, 0) 41.94%), rgba(18, 19, 36, 0.6)", - lightOpacity: 1 + lightOpacity: 1, }, tabButton: { background: "rgba(28, 29, 48, 0.2)", @@ -712,10 +766,10 @@ const Dark = { color: Tokens.colors.gray50, colorHover: Tokens.colors.gray25, svgColor: Tokens.colors.gray300, - svgHover: Tokens.colors.brandDanger + svgHover: Tokens.colors.brandDanger, }, title: { - counterColor: Tokens.colors.gray400 + counterColor: Tokens.colors.gray400, }, toast: { boxShadow: "0px 32px 32px -32px rgba(0, 0, 0, 0.25), 0px 0px 32px rgba(0, 0, 0, 0.25)", @@ -724,20 +778,20 @@ const Dark = { backgroundSuccess: `linear-gradient(90deg, rgba(0, 206, 201, 0.25) -10.33%, rgba(0, 206, 201, 0) 41.03%), ${Tokens.colors.gray800}`, backgroundDanger: `linear-gradient(90deg, ${settingColorOpacity( Tokens.colors.brandDanger, - 0.25 + 0.25, )} -10.33%, ${settingColorOpacity(Tokens.colors.brandDanger, 0)} 41.03%), ${Tokens.colors.gray800}`, backgroundWarning: `linear-gradient(90deg, ${settingColorOpacity( Tokens.colors.brandWarning, - 0.25 + 0.25, )} -10.33%, ${settingColorOpacity(Tokens.colors.brandWarning, 0)} 41.03%), ${Tokens.colors.gray800}`, defaultColorTitle: Tokens.colors.gray25, defaultColorBody: Tokens.colors.gray50, warningColorTitle: Tokens.colors.brandWarningLighter, dangerColorTitle: Tokens.colors.brandPrimary, - successColorTitle: Tokens.colors.brandSuccess + successColorTitle: Tokens.colors.brandSuccess, }, toggleButton: { - background: settingColorOpacity(Tokens.colors.gray900, 0.2) + background: settingColorOpacity(Tokens.colors.gray900, 0.2), }, toggleEditMode: { titleColor: Tokens.colors.gray500, @@ -749,7 +803,7 @@ const Dark = { buttonBackground: "linear-gradient(90deg, rgba(255, 255, 255, 0.02) -11.11%, rgba(255, 255, 255, 0) 73.86%)", buttonBackgroundHover: "linear-gradient(90deg, rgba(255, 255, 255, 0.1) -11.11%, rgba(255, 255, 255, 0) 73.86%)", buttonBackgroundActive: "linear-gradient(90deg, rgba(255, 255, 255, 0.1) -11.11%, rgba(255, 255, 255, 0) 73.86%), #57617E", - buttonBoxShadow: "0px 12px 24px -12px rgba(93, 95, 239, 0.1)" + buttonBoxShadow: "0px 12px 24px -12px rgba(93, 95, 239, 0.1)", }, virtualKeyboard: { cardButtonDivider: Tokens.colors.gray800, @@ -764,12 +818,12 @@ const Dark = { cardTextColor: Tokens.colors.gray100, orBgColor: Tokens.colors.gray800, orTextColor: Tokens.colors.gray100, - orLineColor: Tokens.colors.gray600 + orLineColor: Tokens.colors.gray600, }, wrapper: { - background: settingColorOpacity(Tokens.colors.gray400, 0.15) - } - } + background: settingColorOpacity(Tokens.colors.gray400, 0.15), + }, + }, }; export default Dark; diff --git a/src/renderer/theme/GlobalStyles.js b/src/renderer/theme/GlobalStyles.ts similarity index 92% rename from src/renderer/theme/GlobalStyles.js rename to src/renderer/theme/GlobalStyles.ts index e3caa86ec..88ca291d3 100644 --- a/src/renderer/theme/GlobalStyles.js +++ b/src/renderer/theme/GlobalStyles.ts @@ -1,15 +1,11 @@ -import { createGlobalStyle } from "styled-components"; +import { DefaultTheme, createGlobalStyle } from "styled-components"; +import iconChevronDown from "@Assets/base/icon-arrow--chevron-down.svg"; +import iconChevronDownWhite from "@Assets/base/icon-arrow--chevron-down_white.svg"; import LibreFranklin from "./fonts/LibreFranklin/LibreFranklin-VariableFont_wght.ttf"; import LibreFranklinItalic from "./fonts/LibreFranklin/LibreFranklin-Italic-VariableFont_wght.ttf"; -import iconChevronDown from "../../../static/base/icon-arrow--chevron-down.svg"; -import iconChevronDownWhite from "../../../static/base/icon-arrow--chevron-down_white.svg"; - -const NavWidth = "64"; - -const GlobalStyles = createGlobalStyle` - +const GlobalStyles = createGlobalStyle<{ theme: DefaultTheme }>` @font-face { font-family: "Libre Franklin"; font-weight: 100 900; @@ -53,10 +49,12 @@ const GlobalStyles = createGlobalStyle` background-image: url(${({ theme }) => theme.body.backgroundImage2x}); } } - #app { + #root { display: grid; - grid-template-columns: 90px auto; + --sidebarWidth: ${({ theme }) => theme.sidebarWidthMedium}px; + grid-template-columns: var(--sidebarWidth) auto; } + div.main-container { padding-left: calc(90px + 8px); padding-left: 8px; @@ -71,7 +69,7 @@ const GlobalStyles = createGlobalStyle` padding-right: 17px; } .wrapperBackground { - background-color: ${({ theme }) => theme.styles.wrapper.background}; + background: ${({ theme }) => theme.styles.wrapper.background}; padding-bottom: 8px; margin-bottom: 32px; border-radius: 0 0 16px 16px; @@ -103,6 +101,11 @@ const GlobalStyles = createGlobalStyle` } } + +.transp-bg { + background-color: transparent; +} + .loading { color: ${({ theme }) => theme.colors.purple300}; &.text-center { @@ -247,6 +250,7 @@ svg text{ // // Components // + .simpleAccordion { background-color: ${({ theme }) => theme.styles.accordion.background}; border-radius: 3px; @@ -313,6 +317,14 @@ svg text{ .button:hover { cursor: pointer; } +button:focus, button:focus-within, +.button:focus,.button:focus-within { + outline: none; +} +button:focus-visible, +.button:focus-visible { + outline: 2px solid ${({ theme }) => theme.accessibility.focusWithinColor}; +} .button[disabled]:hover { cursor: not-allowed; } @@ -337,7 +349,16 @@ svg text{ background-position: right; } } -.button.primary[disabled] { +.button.secondary { + color: #fff; + background: ${({ theme }) => theme.colors.purple300}; + transition: 300ms background ease-in-out; + &:hover { + background: ${({ theme }) => theme.colors.purple200}; + } +} +.button.primary[disabled], +.button.secondary[disabled] { background: ${({ theme }) => theme.styles.button.primary.disabledBackgroundColor}; color: ${({ theme }) => theme.styles.button.primary.disabledTextColor}; } @@ -390,6 +411,13 @@ svg text{ border-radius: 6px; background: ${({ theme }) => theme.styles.button.outlineGradient.background}; border: 2px solid transparent; + background-position: 308% 0; + background-size: 149%; + transition: 200ms all ease-in-out; +} +.button.outline.gradient:hover:before { + background-position: 300% 0; + background-size: 190%; } .buttonFX { @@ -497,6 +525,22 @@ svg text{ .button-config.icon-left svg { margin-right: 10px; } +.button-config.button-settings { + height: 36px; + width: 36px; + padding: 0; + display: flex; + align-items: center; + justify-content: center; + box-shadow: none; + border-radius: 4px; + color: ${({ theme }) => theme.styles.button.settings.color}; + background: ${({ theme }) => theme.styles.button.settings.background}; + &:hover { + color: ${({ theme }) => theme.styles.button.settings.colorHover}; + background: ${({ theme }) => theme.styles.button.settings.backgroundHover}; + } +} .button.short { @@ -838,9 +882,11 @@ svg text{ } .tooltip .tooltip-inner{ padding: 12px; + font-family: ${({ theme }) => theme.font}; /* background-color: ${({ theme }) => theme.styles.card.background}; */ - font-weight: 600; + font-weight: 601; font-size: 13px; + letter-spacing: -0.02em; } .tooltip .tooltip-inner h5{ font-weight: 600; @@ -862,6 +908,9 @@ svg text{ font-weight: 500; font-size: 14px; } +#tooltip-top-savingMode .tooltip-inner { + padding: 8px; +} } // @@ -873,6 +922,39 @@ div.card { box-shadow: none; border-radius: 14px; background-color: ${({ theme }) => theme.styles.card.background}; + &.card-preferences--battery { + padding: 1rem 1.5rem; + background-color: ${({ theme }) => theme.styles.card.cardBattery.backgroundColor}; + border-radius: 0.375rem; + .card-title { + display: flex; + justify-content: space-between; + align-items: center; + h4 { + margin-bottom: 0; + } + } + .card-body h6 { + line-height: 1.5em; + margin-bottom: 0; + font-weight: 401; + color: ${({ theme }) => theme.styles.form.formLabelTextcolor}; + } + .custom-switch { + width: 60px; + padding-left: 1.4rem; + } + .card-preferences--option + .card-preferences--option { + margin-top: 1rem; + } + .justify-between { + justify-content: space-between; + align-items: center; + } + .toggleButtonsContainer { + margin: 4px 14px; + } + } } div.card-body { padding-left: 0; @@ -944,6 +1026,16 @@ div.card.card-preferences .card-body { font-weight:600; color: ${({ theme }) => theme.styles.modal.titleColor}; } +@media (min-width: 1200px) { + .modal-xl { + max-width: 1080px; + } +} +@media (min-width: 1360px) { + .modal-xl { + max-width: 1240px; + } +} // // Recording Macro @@ -1132,7 +1224,7 @@ div.card.card-preferences .card-body { font-size: 14px; border-radius: 3px; color: ${({ theme }) => theme.styles.macro.previewColor}; - border: 1px solid ${({ theme }) => theme.colors.previewColor}; + border: 1px solid ${({ theme }) => theme.styles.macro.previewColor}; padding: 0 6px; margin: 2px; } @@ -1200,7 +1292,7 @@ div.card.card-preferences .card-body { &.keyCode-113, &.keyCode-114, &.keyCode-115 { - border: 1px solid ${({ theme }) => theme.colors.previewColor}; + border: 1px solid ${({ theme }) => theme.styles.macro.previewColor}; padding: 0 6px; margin: 2px; } @@ -1254,6 +1346,10 @@ div.card.card-preferences .card-body { .Toastify__toast-container { padding: 0; width: 368px; + .Toastify__toast-icon { + display: none; + visibility: hidden; + } } .Toastify__toast--default, .Toastify__toast { @@ -1329,6 +1425,7 @@ div.card.card-preferences .card-body { .Toastify__progress-bar { margin: 8px 24px; + width: calc(100% - 42px); height: 3px; border-radius: 3px; background: ${({ theme }) => theme.styles.toast.backgroundNoStatus}; @@ -1686,6 +1783,14 @@ div.card.card-preferences .card-body { font-size: 13px; letter-spacing; -0.03em; } +.slider-wrapper { + display: grid; + align-items: center; + grid-template-columns: 52px 1fr 52px; + .slider-label { + text-align: center; + } +} .tagsfix { color: ${({ theme }) => theme.styles.slider.labelColor}; font-weight: 200; @@ -1715,8 +1820,8 @@ div.card.card-preferences .card-body { } } @media screen and (min-width: 1000px) { - #app { - grid-template-columns: 120px auto; + #root { + --sidebarWidth: ${({ theme }) => theme.sidebarWidthLarge}px; } .bs-tooltip-right.tooltipMenu { display: none!important; @@ -1734,12 +1839,11 @@ div.card.card-preferences .card-body { } } -@media screen and (max-height: 719px) { - #app { - grid-template-columns: 90px auto; +@media screen and (max-height: 870px) { + #root { + --sidebarWidth: ${({ theme }) => theme.sidebarWidthMedium}px; } div.main-container { - padding-left: calc(90px + 8px); padding-left: 8px; padding-right: 8px; } @@ -1748,6 +1852,12 @@ div.card.card-preferences .card-body { } } +@media screen and (max-height: 670px) { + #root { + --sidebarWidth: ${({ theme }) => theme.sidebarWidthSmall}px; + } +} + .animOpacity { opacity: 0; animation: animOpacity 0.3s forwards; @@ -1809,7 +1919,6 @@ div.card.card-preferences .card-body { opacity: 0; } } - .animInCheck { animation: animInCheck 0.3s forwards; animation-timing-function: cubic-bezier(0.75, -1.27, 0.3, 2.33); @@ -1952,7 +2061,7 @@ div.card.card-preferences .card-body { height: calc(100vh - 104px); } body .singleViewMode .dygma-keyboard-editor { - margin-top: 40px!important; + margin-top: auto; } body .ordinary-keyboard-editor { margin-top: auto!important; @@ -1973,6 +2082,24 @@ div.card.card-preferences .card-body { max-width: 1580px; } } +@media (min-width: 2220px) and (min-height: 980px) { + body .layoutEditor .LayerHolder { + max-width: 2220px; + } + .singleViewMode.keyboard .raiseKeyboard { + max-height: initial; + } + body .layoutEditor .KeysWrapper { + max-width: 100%; + } + .svgStyle { + max-width: 100%!important; + width: 100%; + } + #standardViewCointainer-tabpane-tabKeys .svgStyle { + max-width: 1640px!important; + } +} .virtualKeyboards-wrapper { display: flex; diff --git a/src/renderer/theme/LightTheme.js b/src/renderer/theme/LightTheme.ts similarity index 80% rename from src/renderer/theme/LightTheme.js rename to src/renderer/theme/LightTheme.ts index 4be769c5f..3e4cb2e58 100644 --- a/src/renderer/theme/LightTheme.js +++ b/src/renderer/theme/LightTheme.ts @@ -1,40 +1,43 @@ -import BackgroundImageLight from "../../../static/light/lightBackground.png"; -import BackgroundImageLight2x from "../../../static/light/lightBackground-2x.png"; -import NeuronLoaderLight from "../../../static/light/neuron-loader.jpg"; -import CheckedIconLight from "../../../static/dark/icon-check-animated.gif"; -import closeButton from "../../../static/light/X.svg"; -import IconPlusXS from "../../../static/light/plusIcon.svg"; -import RaiseFirmwareUpgrade from "../../../static/light/raiseFirmwareupgrade.svg"; -import DefyFirmwareUpgrade from "../../../static/light/defyFirmwareupgrade.svg"; -import neuronDefyWirelessImage from "../../../static/base/neuron-defy--white.png"; -import mouseWheelBackground from "../../../static/light/mouseWheel.png"; -import oldToNew from "../../../static/light/oldValueToNewValue.svg"; +import { DefaultTheme } from "styled-components"; + +import BackgroundImageLight from "@Assets/light/lightBackground.png"; +import BackgroundImageLight2x from "@Assets/light/lightBackground-2x.png"; +import NeuronLoaderLight from "@Assets/light/neuron-loader.jpg"; +import CheckedIconLight from "@Assets/dark/icon-check-animated.gif"; +import closeButton from "@Assets/light/X.svg"; +import IconPlusXS from "@Assets/light/plusIcon.svg"; +import RaiseFirmwareUpgrade from "@Assets/light/raiseFirmwareupgrade.svg"; +import DefyFirmwareUpgrade from "@Assets/light/defyFirmwareupgrade.svg"; +import neuronDefyWirelessImage from "@Assets/base/neuron-defy--white.png"; +import mouseWheelBackground from "@Assets/light/mouseWheel.png"; +import oldToNew from "@Assets/light/oldValueToNewValue.svg"; import Tokens from "./Tokens"; -const settingColorOpacity = (color, opacity) => { - let newColorArray = color; - let newColor; - newColorArray = newColorArray.replace(/[^\d,]/g, "").split(","); - newColor = `rgba(${newColorArray[0]}, ${newColorArray[1]}, ${newColorArray[2]}, ${opacity})`; +const settingColorOpacity = (color: string, opacity: number) => { + // let newColorArray = color; + const newColorArray = color.replace(/[^\d,]/g, "").split(","); + const newColor = `rgba(${newColorArray[0]}, ${newColorArray[1]}, ${newColorArray[2]}, ${opacity})`; return newColor; }; -const settingColorMatrix = (color, opacity) => { - let newColorArray = color; - let newColor; - newColorArray = newColorArray.replace(/[^\d,]/g, "").split(","); - newColor = `0 0 0 0 ${(newColorArray[0] / 255).toFixed(2)} 0 0 0 0 ${(newColorArray[1] / 255).toFixed(2)} 0 0 0 0 ${( - newColorArray[2] / 255 - ).toFixed(2)} 0 0 0 ${opacity} 0`; +const settingColorMatrix = (color: string, opacity: number) => { + // let newColorArray = color; + const newColorArray = color.replace(/[^\d,]/g, "").split(","); + const newColor = `0 0 0 0 ${(parseInt(newColorArray[0], 10) / 255).toFixed(2)} 0 0 0 0 ${( + parseInt(newColorArray[1], 10) / 255 + ).toFixed(2)} 0 0 0 0 ${(parseInt(newColorArray[2], 10) / 255).toFixed(2)} 0 0 0 ${opacity} 0`; return newColor; }; -const Light = { +const Light: DefaultTheme = { name: "Light", drawerWidth: 64, + sidebarWidthLarge: Tokens.sizes.sidebarWidthLarge, + sidebarWidthMedium: Tokens.sizes.sidebarWidthMedium, + sidebarWidthSmall: Tokens.sizes.sidebarWidthSmall, body: { backgroundImage: BackgroundImageLight, - backgroundImage2x: BackgroundImageLight2x + backgroundImage2x: BackgroundImageLight2x, }, keyboardPicker: { keyColor: "#f3f3f3", @@ -46,7 +49,7 @@ const Light = { keyActiveSubTextColor: "#000000", keyTextDisabledColor: "#BBBBBB", titleColor: "#666666", - subTitleColor: "#808080" + subTitleColor: "#808080", }, colors: { gardient: "linear-gradient(180deg, rgba(131,58,180,1) 0%, rgba(189,38,38,1) 63%, rgba(252,112,42,1) 100%);", @@ -104,12 +107,12 @@ const Light = { activeText: "#FFF", deselectedText: "#AAA", boxShadow: "0 0 0 0.2rem rgba(203,237,255,.5)", - borderColor: "#44c0ff" + borderColor: "#44c0ff", }, link: { text: "teal", - opacity: 1 - } + opacity: 1, + }, }, card: { color: "#000", @@ -124,32 +127,69 @@ const Light = { icon: "#666", altIcon: "#DDD", radius: "10", - boxShadow: "0 0 0.5rem 0.3rem rgba(0,0,0,0.1)" + boxShadow: "0 0 0.5rem 0.3rem rgba(0,0,0,0.1)", }, slider: { - color: "#2AD2C9" + color: "#2AD2C9", }, font: "Libre Franklin", + accessibility: { + focusWithinColor: Tokens.colors.purple300, + }, styles: { accordion: { - background: settingColorOpacity(Tokens.colors.gray25, 0.8) + background: settingColorOpacity(Tokens.colors.gray25, 0.8), }, accordionFirmware: { background: "white", headerBackground: "transparent", - colorTitle: Tokens.colors.gray500 + colorTitle: Tokens.colors.gray500, }, backupConfiguratorFolder: { headingColor: Tokens.colors.gray500, inputColor: Tokens.colors.gray300, inputBackground: "rgba(255, 255, 255, 0.4)", - border: settingColorOpacity(Tokens.colors.gray100, 0.6) + border: settingColorOpacity(Tokens.colors.gray100, 0.6), + }, + badge: { + textColor: Tokens.colors.gray500, + dangerLowBG: settingColorOpacity(Tokens.colors.brandPrimary, 0.15), + dangerLowText: settingColorOpacity(Tokens.colors.brandPrimary, 0.75), + subtleColor: Tokens.colors.gray400, + subtleBGColor: Tokens.colors.gray50, + }, + batteryIndicator: { + pileBackgroundColor: Tokens.colors.gray50, + pileBackgroundSavingMode: settingColorOpacity(Tokens.colors.brandWarning, 0.25), + pileBackgroundFatalError: settingColorOpacity(Tokens.colors.brandPrimary, 0.15), + titleColor: Tokens.colors.gray500, + panelBackgroundColor: "rgb(240, 242, 244), rgb(255, 255, 255, 0.6)", + largeIndicatorPercentageColor: "white", + largeIndicatorStrokeColor: Tokens.colors.gray50, + largeIndicatorFillColor: Tokens.colors.gray300, + largeIndicatorDisconnectedColor: Tokens.colors.gray100, + lineDisconnectedColor: Tokens.colors.gray100, + fillShapeColor: Tokens.colors.purple200, + fillShapeOpacity: 0.2, + fillShapeDefaultOpacity: 0.5, + strokeShapeColor: Tokens.colors.gray50, + alertWarningBackground: settingColorOpacity(Tokens.colors.brandWarning, 0.25), + alertWarningText: Tokens.colors.gray600, + alertErrorBackground: settingColorOpacity(Tokens.colors.brandPrimary, 0.25), + alertErrorText: Tokens.colors.gray600, + alertDisconnectedBackground: Tokens.colors.gray50, + alertDisconnectedText: Tokens.colors.gray300, + shapeIndicatorOpacity: 0.1, + }, + batterySettings: { + descriptionColor: Tokens.colors.gray400, + descriptionHighlightColor: Tokens.colors.gray700, }, button: { primary: { backgroundColor: Tokens.colors.gradient, disabledTextColor: Tokens.colors.gray100, - disabledBackgroundColor: Tokens.colors.gradientDisabledLight + disabledBackgroundColor: Tokens.colors.gradientDisabledLight, }, outline: { color: Tokens.colors.gray400, @@ -161,24 +201,24 @@ const Light = { disabledTextColor: Tokens.colors.gray100, disabledBorderColor: Tokens.colors.gray50, disabledBoxShadowColor: Tokens.colors.gray50, - disabledOpacity: 1 + disabledOpacity: 1, }, outlineGradient: { color: Tokens.colors.brandPrimary, background: `linear-gradient(98.12deg, #F0DDE9 0%, #F0F2F4 56.24%) padding-box, - ${Tokens.colors.gradient} border-box` + ${Tokens.colors.gradient} border-box`, }, previewButton: { color: Tokens.colors.gray400, borderColor: Tokens.colors.gray50, colorHover: Tokens.colors.gray600, borderHover: Tokens.colors.gray100, - backgroundHover: settingColorOpacity(Tokens.colors.gray100, 0.05) + backgroundHover: settingColorOpacity(Tokens.colors.gray100, 0.05), }, danger: { color: Tokens.colors.gray25, backgroundColor: Tokens.colors.brandDanger, - backgroundColorHover: Tokens.colors.brandDangerLighter + backgroundColorHover: Tokens.colors.brandDangerLighter, }, config: { background: @@ -192,7 +232,7 @@ const Light = { colorHover: Tokens.colors.gray600, colorActive: Tokens.colors.gray25, boxShadowHover: "0px 2px 0px rgba(141, 132, 188, 0.4)", - boxShadowActive: "0px 3px 0px rgba(37, 39, 59, 0.05), 0px 16px 16px -8px rgba(76, 102, 177, 0.3)" + boxShadowActive: "0px 3px 0px rgba(37, 39, 59, 0.05), 0px 16px 16px -8px rgba(76, 102, 177, 0.3)", }, configMinimal: { border: Tokens.colors.gray100, @@ -201,7 +241,7 @@ const Light = { colorActive: Tokens.colors.purple200, iconColorActive: Tokens.colors.purple200, background: "transparent", - backgroundActive: "linear-gradient(90deg, rgba(255, 255, 255, 0.1) -22.96%, rgba(255, 255, 255, 0) 123.24%)" + backgroundActive: "linear-gradient(90deg, rgba(255, 255, 255, 0.1) -22.96%, rgba(255, 255, 255, 0) 123.24%)", }, settings: { color: Tokens.colors.purple300, @@ -209,7 +249,7 @@ const Light = { background: "linear-gradient(90deg, rgba(255, 255, 255, 0.3) 21.15%, rgba(255, 255, 255, 0) 100%), rgba(176, 175, 194, 0.3)", backgroundHover: - "linear-gradient(90deg, rgba(255, 255, 255, 0.4) -22.96%, rgba(255, 255, 255, 0) 123.24%), rgba(196, 201, 213, 0.8)" + "linear-gradient(90deg, rgba(255, 255, 255, 0.4) -22.96%, rgba(255, 255, 255, 0) 123.24%), rgba(196, 201, 213, 0.8)", }, short: { color: Tokens.colors.gray500, @@ -217,12 +257,12 @@ const Light = { background: "linear-gradient(90deg, rgba(255, 255, 255, 0.3) 21.15%, rgba(255, 255, 255, 0) 100%), rgba(176, 175, 194, 0.3)", backgroundHover: - "linear-gradient(90deg, rgba(255, 255, 255, 0.4) -22.96%, rgba(255, 255, 255, 0) 123.24%), rgba(196, 201, 213, 0.8)" + "linear-gradient(90deg, rgba(255, 255, 255, 0.4) -22.96%, rgba(255, 255, 255, 0) 123.24%), rgba(196, 201, 213, 0.8)", }, buttonColor: { color: Tokens.colors.gray500, subtitleColor: Tokens.colors.gray300, - borderColor: Tokens.colors.gray500 + borderColor: Tokens.colors.gray500, }, buttonMouse: { backgroundColor: "linear-gradient(269.56deg, rgba(87, 97, 126, 0.25) 0.39%, rgba(226, 228, 234, 0.25) 74.37%)", @@ -230,15 +270,15 @@ const Light = { backgroundColorActive: Tokens.colors.purple300, color: Tokens.colors.gray500, colorHover: Tokens.colors.gray500, - colorActive: "#fff" + colorActive: "#fff", }, recordButton: { background: settingColorOpacity(Tokens.colors.gray25, 0.5), backgroundHover: "linear-gradient(0deg, rgba(254, 0, 124, 0.05), rgba(254, 0, 124, 0.05)), rgba(240, 242, 244, 0.5)", borderColor: Tokens.colors.brandPrimary, borderColorResume: Tokens.colors.gray400, - color: Tokens.colors.brandPrimary - } + color: Tokens.colors.brandPrimary, + }, }, colorPanel: { colorTitle: Tokens.colors.gray500, @@ -249,14 +289,14 @@ const Light = { colorPickerBorderHover: Tokens.colors.gray200, addButtonBackground: "linear-gradient(90deg, rgba(255, 255, 255, 0.3) 21.15%, rgba(255, 255, 255, 0) 100%), rgba(176, 175, 194, 0.3)", - addButtonColor: Tokens.colors.gray500 + addButtonColor: Tokens.colors.gray500, }, collpase: { iconBackgroud: IconPlusXS, gridItemBackground: "rgba(255,255,255, 0.3)", gridItemTitle: Tokens.colors.gray400, gridItemBody: Tokens.colors.gray300, - gridItemCaret: Tokens.colors.gray25 + gridItemCaret: Tokens.colors.gray25, }, callout: { iconInfo: "white", @@ -265,7 +305,7 @@ const Light = { iconInfoShadowColor: settingColorOpacity(Tokens.colors.gray800, 0.1), calloutColor: Tokens.colors.gray400, calloutBackground: "rgba(255,255,255,0.1)", - calloutBorderColor: settingColorOpacity(Tokens.colors.gray100, 0.7) + calloutBorderColor: settingColorOpacity(Tokens.colors.gray100, 0.7), }, card: { color: "#000", @@ -281,23 +321,26 @@ const Light = { icon: "#666", altIcon: "#DDD", radius: "10", - boxShadow: "0 0 0.5rem 0.3rem rgba(0,0,0,0.1)" + boxShadow: "0 0 0.5rem 0.3rem rgba(0,0,0,0.1)", + cardBattery: { + backgroundColor: "rgba(255, 255, 255, 0.6)", + }, }, cardButtons: { background: "rgba(255, 255, 255, 0.6)", color: Tokens.colors.gray300, titleColor: Tokens.colors.gray500, subTitleColor: Tokens.colors.pink200, - groupButtonsBackground: "rgba(255,255,255,1)" + groupButtonsBackground: "rgba(255,255,255,1)", }, circleLoader: { - strokeColor: Tokens.colors.purple300 + strokeColor: Tokens.colors.purple300, }, customCheckbox: { background: Tokens.colors.gray100, borderColor: Tokens.colors.gray100, backgroundActive: Tokens.colors.brandSuccess, - borderColorActive: Tokens.colors.brandSuccess + borderColorActive: Tokens.colors.brandSuccess, }, dropdown: { backgroundButtonColor: "rgba(255, 255, 255, 0.5)", @@ -320,22 +363,31 @@ const Light = { itemBackgroundColorActive: Tokens.colors.purple100, linkColor: Tokens.colors.purple200, textColor: Tokens.colors.gray400, - dropdownDivider: Tokens.colors.gray25 + dropdownDivider: Tokens.colors.gray25, }, largeDropdown: { background: "#fff", backgroundInner: settingColorOpacity(Tokens.colors.gray25, 0.4), border: `1px solid ${settingColorOpacity(Tokens.colors.gray50, 0.75)}`, title: Tokens.colors.gray200, - titleStrong: Tokens.colors.gray400 + titleStrong: Tokens.colors.gray400, }, selector: { numberColor: Tokens.colors.gray500, separatorColor: settingColorOpacity(Tokens.colors.gray200, 0.5), labelColor: Tokens.colors.gray200, color: Tokens.colors.gray600, - arrowsColor: Tokens.colors.gray300 - } + arrowsColor: Tokens.colors.gray300, + }, + }, + energyManagement: { + connectionBGColor: "rgba(255, 255, 255, 0.4)", + connectionColor: Tokens.colors.gray600, + borderColor: Tokens.colors.gray50, + titleColor: Tokens.colors.gray700, + descriptionColor: Tokens.colors.gray400, + lowPowerModeTitleColor: Tokens.colors.gray200, + shortButtonColor: Tokens.colors.brandSecondary, }, raiseKeyboard: { keyBase: "#E2E4EA", @@ -346,8 +398,8 @@ const Light = { modifier: { color: Tokens.colors.gray25, background: "rgba(63, 66, 90, 0.6)", - boxShadow: "0px 1px 0px rgba(0, 0, 0, 0.15)" - } + boxShadow: "0px 1px 0px rgba(0, 0, 0, 0.15)", + }, }, keyPicker: { iconColor: Tokens.colors.gray200, @@ -361,7 +413,7 @@ const Light = { keyColorSecondary: Tokens.colors.gray300, keyColorActive: Tokens.colors.gray25, keyStrokeColor: "rgba(209, 207, 234, 0.5)", - keyStrokeColorActive: Tokens.colors.purple300 + keyStrokeColorActive: Tokens.colors.purple300, }, keyboardPicker: { keyBoardPickerBackground: Tokens.colors.gray25, @@ -372,7 +424,7 @@ const Light = { modPickerBoxShadow: "none", modPickerAlignAdjust: "0", keysRowBackground: "#fff", - keysRowBoxShadow: "0px 4px 16px rgba(120, 121, 241, 0.08)" + keysRowBoxShadow: "0px 4px 16px rgba(120, 121, 241, 0.08)", }, keyVisualizer: { background: "linear-gradient(90deg, rgba(196, 201, 213, 0.2) 26.28%, rgba(63, 66, 90, 0.2) 124.24%)", @@ -388,15 +440,15 @@ const Light = { labelModifierBackgroundSm: settingColorOpacity(Tokens.colors.gray600, 0.6), labelModifierColorSm: Tokens.colors.gray200, labelBorderSm: "none", - bgOldToNew: oldToNew + bgOldToNew: oldToNew, }, firmwareErrorPanel: { - textColor: Tokens.colors.gray400 + textColor: Tokens.colors.gray400, }, firmwareUpdatePanel: { backgroundContent: Tokens.colors.gray25, backgroundSidebar: "rgba(255,255,255,0.15)", - neuronDefyWirelessImage: neuronDefyWirelessImage, + neuronDefyWirelessImage, neuronStatusLineColor: Tokens.colors.gray100, neuronStatusLineWarning: Tokens.colors.brandWarning, neuronStatusLineSuccess: Tokens.colors.brandSuccess, @@ -414,7 +466,7 @@ const Light = { backgroundStripeGradientColor: "linear-gradient(90deg, #FFFFFF -9.28%, #F4F4F5 94.29%)", caretColor: "#F4F4F5", disclaimerTitle: Tokens.colors.purple200, - fileSelected: settingColorOpacity(Tokens.colors.gray300, 0.05) + fileSelected: settingColorOpacity(Tokens.colors.gray300, 0.05), }, firmwareUpdateProcess: { raiseSVG: RaiseFirmwareUpgrade, @@ -423,7 +475,7 @@ const Light = { processImageBackground: settingColorOpacity(Tokens.colors.gray25, 0.5), processNeuronBackground: settingColorOpacity(Tokens.colors.gray25, 0.8), neuronLineColor: Tokens.colors.gray100, - neuronSleepingMode: Tokens.colors.gray100 + neuronSleepingMode: Tokens.colors.gray100, }, form: { formLabelTextcolor: Tokens.colors.gray500, @@ -436,8 +488,8 @@ const Light = { inputGroupColor: Tokens.colors.gray300, inputGroupBackground: Tokens.colors.gray25, inputGroup: { - background: "#F9FAFB" - } + background: "#F9FAFB", + }, }, listGroup: { listItem: { @@ -449,8 +501,8 @@ const Light = { colorSelected: Tokens.colors.gray25, colorSelectedSpan: Tokens.colors.gray50, colorDisabled: Tokens.colors.gray200, - colorDisabledSpan: Tokens.colors.gray300 - } + colorDisabledSpan: Tokens.colors.gray300, + }, }, macro: { tabCategoriesBackground: Tokens.colors.gray50, @@ -481,7 +533,7 @@ const Light = { timelinePointeText: Tokens.colors.gray400, recordMacroOptionsBackground: settingColorOpacity(Tokens.colors.gray100, 0.15), recordMacroOptionsBoxShadow: "0 2px 0 rgba(151,160,180,0.1)", - recordMacroOptionsTitle: Tokens.colors.gray200 + recordMacroOptionsTitle: Tokens.colors.gray200, }, macroKey: { background: "linear-gradient(90deg, rgba(255, 255, 255, 0.3) 21.15%, rgba(255, 255, 255, 0) 100%), #DADDE4", @@ -501,28 +553,28 @@ const Light = { dropdownIconColor: Tokens.colors.purple200, dropdownIconColorModifier: Tokens.colors.gray25, alt: { - background: "linear-gradient(90deg, rgba(206, 207, 222, 0.2) 21.15%, rgba(123, 134, 158, 0.2) 100%), #F178B6" + background: "linear-gradient(90deg, rgba(206, 207, 222, 0.2) 21.15%, rgba(123, 134, 158, 0.2) 100%), #F178B6", }, altGr: { - background: "linear-gradient(90deg, rgba(206, 207, 222, 0.2) 21.15%, rgba(123, 134, 158, 0.2) 100%), #A1BC5E" + background: "linear-gradient(90deg, rgba(206, 207, 222, 0.2) 21.15%, rgba(123, 134, 158, 0.2) 100%), #A1BC5E", }, control: { - background: "linear-gradient(90deg, rgba(206, 207, 222, 0.2) 21.15%, rgba(123, 134, 158, 0.2) 100%), #35C2D5" + background: "linear-gradient(90deg, rgba(206, 207, 222, 0.2) 21.15%, rgba(123, 134, 158, 0.2) 100%), #35C2D5", }, delay: { background: "linear-gradient(90deg, rgba(255, 255, 255, 0.3) 21.15%, rgba(255, 255, 255, 0) 100%), #FF6B6B", color: Tokens.colors.gray700, borderColor: "rgba(63, 66, 90, 0.3)", - actionIconColor: settingColorOpacity(Tokens.colors.gray25, 0.85) + actionIconColor: settingColorOpacity(Tokens.colors.gray25, 0.85), }, os: { - background: "linear-gradient(90deg, rgba(206, 207, 222, 0.2) 21.15%, rgba(123, 134, 158, 0.2) 100%), #7879F1" + background: "linear-gradient(90deg, rgba(206, 207, 222, 0.2) 21.15%, rgba(123, 134, 158, 0.2) 100%), #7879F1", }, shift: { background: "linear-gradient(90deg, rgba(255, 255, 255, 0.3) 21.15%, rgba(255, 255, 255, 0) 100%), #FECA57", color: Tokens.colors.gray600, - actionColor: settingColorOpacity(Tokens.colors.gray600, 0.6) - } + actionColor: settingColorOpacity(Tokens.colors.gray600, 0.6), + }, }, memoryUsage: { color: Tokens.colors.gray200, @@ -531,22 +583,23 @@ const Light = { progressBaseColor: Tokens.colors.gray100, progressFill: Tokens.colors.brandSuccess, colorWarning: Tokens.colors.brandWarning, - colorError: Tokens.colors.brandDanger + colorError: Tokens.colors.brandDanger, }, modal: { - closeButton: closeButton, + closeButton, backdropColor: "rgba(214, 217, 224, 0.85)", background: Tokens.colors.gray25, backgroundInner: "#fff", titleColor: Tokens.colors.gray400, - footerBackground: settingColorOpacity(Tokens.colors.gray200, 0.075) + footerBackground: settingColorOpacity(Tokens.colors.gray200, 0.075), }, mouseButtons: { background: Tokens.colors.gray50, backgroundWheelCircle: Tokens.colors.gray50, - mouseWheel: mouseWheelBackground + mouseWheel: mouseWheelBackground, }, navbar: { + color: "#555", background: Tokens.colors.gray25, menuLink: { color: Tokens.colors.gray200, @@ -556,13 +609,13 @@ const Light = { svgColorActive: Tokens.colors.brandSecondary, svgColorHover: Tokens.colors.gray600, lightingOpacity: 0.5, - gradient: "linear-gradient(236.53deg, #F0F2F4 1.37%, #D8DBF1 117.2%)" - } + gradient: "linear-gradient(236.53deg, #F0F2F4 1.37%, #D8DBF1 117.2%)", + }, }, neuronConnection: { backgroundColor: Tokens.colors.gray25, titleColor: Tokens.colors.gray500, - subTitleColor: Tokens.colors.gray200 + subTitleColor: Tokens.colors.gray200, }, neuronData: { neuronInfoBackground: "#fff", @@ -572,7 +625,7 @@ const Light = { accordionCardBodyBackground: settingColorOpacity(Tokens.colors.gray25, 0.2), accordionCardHeaderColor: Tokens.colors.purple300, accordionCardHeaderBorderColor: settingColorOpacity(Tokens.colors.gray100, 0.2), - plusOpacity: 1 + plusOpacity: 1, }, neuronStatus: { neuronStatusBackgroundColor: "rgba(255, 255, 255, 0.15)", @@ -585,23 +638,23 @@ const Light = { neuronNotFoundedColor: Tokens.colors.gray400, connectionStrokeOpacity: 0.05, neuronLoader: NeuronLoaderLight, - checkedIcon: CheckedIconLight + checkedIcon: CheckedIconLight, }, neuronStatusDefy: { - statusWaiting: Tokens.colors.gray100 + statusWaiting: Tokens.colors.gray100, }, neuronTitle: { heading3Color: Tokens.colors.brandSecondary, - heading4Color: Tokens.colors.gray200 + heading4Color: Tokens.colors.gray200, }, pageHeader: { backgroundColor: "rgba(240, 242, 244, 0.9)", - titleColor: Tokens.colors.purple200 + titleColor: Tokens.colors.purple200, }, progress: { progressBackground: Tokens.colors.gray100, progressBarBackground: Tokens.colors.gray100, - boxShadow: "0px 0px 4px rgba(50, 238, 238, 0)" + boxShadow: "0px 0px 4px rgba(50, 238, 238, 0)", }, slider: { trackColor: Tokens.colors.gray50, @@ -609,7 +662,7 @@ const Light = { handleBorderColor: Tokens.colors.gray25, handleBackgroundColor: Tokens.colors.purple200, handleBoxShadow: "rgba(97, 32, 234, 0.4)", - labelColor: Tokens.colors.gray300 + labelColor: Tokens.colors.gray300, }, standardView: { modalBackground: "rgba(214, 217, 224, 0.95)", @@ -619,24 +672,24 @@ const Light = { superkeys: { info: { background: "#F9FAFB", - titleColor: Tokens.colors.pink300 + titleColor: Tokens.colors.pink300, }, item: { titleColor: Tokens.colors.gray400, descriptionColor: Tokens.colors.gray300, background: "#fff", - boxShadow: "0px 4px 16px rgba(120, 121, 241, 0.08)" + boxShadow: "0px 4px 16px rgba(120, 121, 241, 0.08)", }, key: { background: settingColorOpacity(Tokens.colors.gray300, 0.15), - border: Tokens.colors.gray100 - } + border: Tokens.colors.gray100, + }, }, keyVisualizer: { background: Tokens.colors.gray25, border: "none", - boxShadow: " 32px 32px 64px -12px rgba(11, 2, 25, 0.1), 32px 32px 72px -32px rgba(26, 17, 46, 0.2)" - } + boxShadow: " 32px 32px 64px -12px rgba(11, 2, 25, 0.1), 32px 32px 72px -32px rgba(26, 17, 46, 0.2)", + }, }, stepsBar: { stepBarBackground: settingColorOpacity(Tokens.colors.gray100, 0.5), @@ -647,7 +700,7 @@ const Light = { bulletBorder: Tokens.colors.gray100, bulletBorderActive: Tokens.colors.purple200, bulletBoxShadow: "0px 4px 12px rgba(107, 119, 148, 0.4)", - bulletBoxShadowActive: "0px 4px 12px #6C5CE7" + bulletBoxShadowActive: "0px 4px 12px #6C5CE7", }, stepsProgressBar: { stepBarBackground: Tokens.colors.gray100, @@ -655,14 +708,14 @@ const Light = { bulletBackground: Tokens.colors.gray100, bulletBackgroundActive: Tokens.colors.purple300, bulletBorderActive: Tokens.colors.purple200, - stepBarBackgroundActive: Tokens.colors.purple200 + stepBarBackgroundActive: Tokens.colors.purple200, }, superkeyAction: { color: Tokens.colors.gray400, background: settingColorOpacity(Tokens.colors.gray25, 0.7), backgroundActive: settingColorOpacity(Tokens.colors.gray25, 1), titleColor: Tokens.colors.gray400, - descriptionColor: Tokens.colors.gray400 + descriptionColor: Tokens.colors.gray400, }, superkeyButton: { backgroundColor: @@ -679,7 +732,7 @@ const Light = { backgroundColorInnerActive: "linear-gradient(90deg, rgba(255, 255, 255, 0.2) 21.15%, rgba(255, 255, 255, 0) 100%), linear-gradient(0deg, rgba(120, 121, 241, 0.3), rgba(120, 121, 241, 0.3)), #E2E4EA", boxShadowInner: "0px 4px 24px rgba(120, 121, 241, 0.65)", - colorInner: Tokens.colors.gray600 + colorInner: Tokens.colors.gray600, }, switch: { background: @@ -690,7 +743,7 @@ const Light = { thumbBorderColor: Tokens.colors.gray200, thumbBorderColorActive: Tokens.colors.purple200, thumbBoxShadow: "0px 4px 12px rgba(97, 32, 234, 0)", - thumbBoxShadowActive: "0px 4px 12px rgba(97, 32, 234, 1)" + thumbBoxShadowActive: "0px 4px 12px rgba(97, 32, 234, 1)", }, tab: { color: Tokens.colors.gray500, @@ -698,7 +751,7 @@ const Light = { colorActive: Tokens.colors.purple300, backgroundHover: "linear-gradient(122.87deg, rgba(238, 241, 248, 0.2) 52.49%, rgba(255, 255, 255, 0.2) 99.24%)", backgroundActive: "linear-gradient(122.87deg, rgba(238, 241, 248, 0.7) 52.49%, rgba(255, 255, 255, 0.7) 99.24%)", - lightOpacity: 0.5 + lightOpacity: 0.5, }, tabButton: { background: settingColorOpacity(Tokens.colors.gray25, 0.2), @@ -706,35 +759,35 @@ const Light = { color: Tokens.colors.gray500, colorHover: Tokens.colors.gray600, svgColor: Tokens.colors.gray300, - svgHover: Tokens.colors.brandDanger + svgHover: Tokens.colors.brandDanger, }, title: { - counterColor: Tokens.colors.gray100 + counterColor: Tokens.colors.gray100, }, toast: { boxShadow: `0px 32px 32px -32px ${settingColorOpacity(Tokens.colors.gray300, 0.1)}, 0px 0px 32px ${settingColorOpacity( Tokens.colors.gray300, - 0.3 + 0.3, )}`, background: Tokens.colors.gray25, backgroundNoStatus: Tokens.colors.gray100, backgroundSuccess: `linear-gradient(90deg, rgba(0, 206, 201, 0.05) -10.33%, rgba(0, 206, 201, 0) 41.03%), ${Tokens.colors.gray25}`, backgroundDanger: ` linear-gradient(90deg, ${settingColorOpacity( Tokens.colors.brandDanger, - 0.05 + 0.05, )} -10.33%, ${settingColorOpacity(Tokens.colors.brandDanger, 0)} 41.03%), ${Tokens.colors.gray25}`, backgroundWarning: `linear-gradient(90deg, ${settingColorOpacity( Tokens.colors.brandWarning, - 0.05 + 0.05, )} -10.33%, ${settingColorOpacity(Tokens.colors.brandWarning, 0)} 41.03%), ${Tokens.colors.gray25}`, defaultColorTitle: Tokens.colors.gray700, defaultColorBody: Tokens.colors.gray500, warningColorTitle: Tokens.colors.brandWarning, dangerColorTitle: Tokens.colors.brandPrimary, - successColorTitle: Tokens.colors.brandSuccess + successColorTitle: Tokens.colors.brandSuccess, }, toggleButton: { - background: "#fff" + background: "#fff", }, toggleEditMode: { titleColor: Tokens.colors.gray300, @@ -748,7 +801,7 @@ const Light = { buttonBackgroundHover: "linear-gradient(90deg, rgba(240, 242, 244, 0) 7.92%, rgba(240, 242, 244, 0.4) 73.86%), rgba(162, 155, 254, 0.2)", buttonBackgroundActive: "linear-gradient(90deg, rgba(255, 255, 255, 0.4) -22.96%, rgba(255, 255, 255, 0) 123.24%), #7879F1", - buttonBoxShadow: "0px 12px 24px -12px rgba(93, 95, 239, 0.1)" + buttonBoxShadow: "0px 12px 24px -12px rgba(93, 95, 239, 0.1)", }, virtualKeyboard: { cardButtonDivider: settingColorOpacity(Tokens.colors.gray100, 0.5), @@ -763,12 +816,12 @@ const Light = { cardTextColor: Tokens.colors.gray400, orBgColor: Tokens.colors.gray25, orTextColor: Tokens.colors.gray400, - orLineColor: Tokens.colors.gray100 + orLineColor: Tokens.colors.gray100, }, wrapper: { - background: settingColorOpacity(Tokens.colors.gray25, 0.8) - } - } + background: settingColorOpacity(Tokens.colors.gray25, 0.8), + }, + }, }; export default Light; diff --git a/src/renderer/theme/Tokens.js b/src/renderer/theme/Tokens.js index 6847d20e0..de892b6a0 100644 --- a/src/renderer/theme/Tokens.js +++ b/src/renderer/theme/Tokens.js @@ -37,8 +37,13 @@ const tokens = { pastelShadesMint100: "rgba(181,203,129,1)", pink300: "rgba(239, 93, 168, 1)", pink200: "rgba(241, 120, 182, 1)", - pink100: "rgba(252, 221, 236, 1)" - } + pink100: "rgba(252, 221, 236, 1)", + }, + sizes: { + sidebarWidthLarge: 120, + sidebarWidthMedium: 90, + sidebarWidthSmall: 64, + }, }; export default tokens; diff --git a/src/renderer/theme/fonts/LibreFranklin/fonts.d.ts b/src/renderer/theme/fonts/LibreFranklin/fonts.d.ts new file mode 100644 index 000000000..bc8ab2e85 --- /dev/null +++ b/src/renderer/theme/fonts/LibreFranklin/fonts.d.ts @@ -0,0 +1 @@ +declare module "*.ttf"; diff --git a/src/renderer/theme/styled.d.ts b/src/renderer/theme/styled.d.ts new file mode 100644 index 000000000..10bd31181 --- /dev/null +++ b/src/renderer/theme/styled.d.ts @@ -0,0 +1,773 @@ +// import original module declaration +import "styled-components"; + +// and extend it +declare module "styled-components" { + export interface DefaultTheme { + name: string; + drawerWidth: number; + sidebarWidthLarge: number; + sidebarWidthMedium: number; + sidebarWidthSmall: number; + body: { + backgroundImage: string; + backgroundImage2x: string; + }; + keyboardPicker: { + keyColor: string; + keyActiveColor: string; + keyDisabledColor: string; + keyTextColor: string; + keyIconColor: string; + keySubTextColor: string; + keyActiveSubTextColor: string; + keyTextDisabledColor: string; + titleColor: string; + subTitleColor: string; + }; + colors: { + gardient: string; + gradient: string; + gradientDisabled: string; + gradientDisabledLight: string; + gradientWarning: string; + gradientDanger: string; + gradientSuccess: string; + gray25: string; + gray50: string; + gray100: string; + gray200: string; + gray300: string; + gray400: string; + gray500: string; + gray600: string; + gray700: string; + gray800: string; + gray900: string; + purple300: string; + purple200: string; + purple100: string; + brandPrimary: string; + brandSecondary: string; + brandSuccess: string; + brandSuccessLighter: string; + brandWarning: string; + brandWarningLighter: string; + brandDanger: string; + brandDangerLighter: string; + pastelShadesGreen200: string; + pastelShadesGreen300: string; + pastelShadesGreen100: string; + pastelShadesMint300: string; + pastelShadesMint200: string; + pastelShadesMint100: string; + body: string; + text: string; + textWarning: string; + textSuccess: string; + textDanger: string; + subtext: string; + tipIcon: string; + button: { + text: string; + background: string; + deselected: string; + hover: string; + disabled: string; + cancel: string; + save: string; + active: string; + secondary: string; + activeText: string; + deselectedText: string; + boxShadow: string; + borderColor: string; + }; + link: { + text: string; + opacity: number; + }; + }; + card: { + color: string; + altColor: string; + colorDisabled: string; + background: string; + backgroundActive: string; + disabled: string; + altBackground: string; + altBackgroundActive: string; + ballIcon: string; + icon: string; + altIcon: string; + radius: string; + boxShadow: string; + }; + slider: { + color: string; + }; + font: string; + accessibility: { + focusWithinColor: string; + }; + styles: { + accordion: { + background: string; + }; + accordionFirmware: { + background: string; + headerBackground: string; + colorTitle: string; + }; + backupConfiguratorFolder: { + headingColor: string; + inputColor: string; + inputBackground: string; + border: string; + }; + badge: { + textColor: string; + dangerLowBG: string; + dangerLowText: string; + subtleColor: string; + subtleBGColor: string; + }; + batteryIndicator: { + pileBackgroundColor: string; + pileBackgroundSavingMode: string; + pileBackgroundFatalError: string; + titleColor: string; + panelBackgroundColor: string; + largeIndicatorPercentageColor: string; + largeIndicatorStrokeColor: string; + largeIndicatorFillColor: string; + largeIndicatorDisconnectedColor: string; + lineDisconnectedColor: string; + fillShapeColor: string; + fillShapeOpacity: number; + fillShapeDefaultOpacity: number; + strokeShapeColor: string; + alertWarningBackground: string; + alertWarningText: string; + alertErrorBackground: string; + alertErrorText: string; + alertDisconnectedBackground: string; + alertDisconnectedText: string; + shapeIndicatorOpacity: number; + }; + batterySettings: { + descriptionColor: string; + descriptionHighlightColor: string; + }; + button: { + primary: { + backgroundColor: string; + disabledTextColor: string; + disabledBackgroundColor: string; + }; + outline: { + color: string; + colorHover: string; + borderColor: string; + borderColorHover: string; + boxShadowColor: string; + boxShadowColorHover: string; + disabledTextColor: string; + disabledBorderColor: string; + disabledBoxShadowColor: string; + disabledOpacity: number; + }; + outlineGradient: { + color: string; + background: string; + }; + previewButton: { + color: string; + borderColor: string; + colorHover: string; + borderHover: string; + backgroundHover: string; + }; + danger: { + color: string; + backgroundColor: string; + backgroundColorHover: string; + }; + config: { + background: string; + boxShadow: string; + border: string; + color: string; + backgroundHover: string; + backgroundActive: string; + colorHover: string; + colorActive: string; + boxShadowHover: string; + boxShadowActive: string; + }; + configMinimal: { + border: string; + borderActive: string; + color: string; + colorActive: string; + iconColorActive: string; + background: string; + backgroundActive: string; + }; + settings: { + color: string; + colorHover: string; + background: string; + backgroundHover: string; + }; + short: { + color: string; + border: string; + background: string; + backgroundHover: string; + }; + buttonColor: { + color: string; + subtitleColor: string; + borderColor: string; + }; + buttonMouse: { + backgroundColor: string; + backgroundColorHover: string; + backgroundColorActive: string; + color: string; + colorHover: string; + colorActive: string; + }; + recordButton: { + background: string; + backgroundHover: string; + borderColor: string; + borderColorResume: string; + color: string; + }; + }; + colorPanel: { + colorTitle: string; + colorPickerBase: string; + colorPickerBaseActive: string; + colorPickerBorder: string; + colorPickerBorderActive: string; + colorPickerBorderHover: string; + addButtonBackground: string; + addButtonColor: string; + }; + collpase: { + iconBackgroud: string; + gridItemBackground: string; + gridItemTitle: string; + gridItemBody: string; + gridItemCaret: string; + }; + callout: { + iconInfo: string; + iconInfoBackground: string; + iconInfoBorder: string; + iconInfoShadowColor: string; + calloutColor: string; + calloutBackground: string; + calloutBorderColor: string; + }; + card: { + color: string; + altColor: string; + colorDisabled: string; + background: string; + cardTitleColor: string; + backgroundActive: string; + disabled: string; + altBackground: string; + altBackgroundActive: string; + ballIcon: string; + icon: string; + altIcon: string; + radius: string; + boxShadow: string; + cardBattery: { + backgroundColor: string; + }; + }; + cardButtons: { + background: string; + color: string; + titleColor: string; + subTitleColor: string; + groupButtonsBackground: string; + }; + circleLoader: { + strokeColor: string; + }; + customCheckbox: { + background: string; + borderColor: string; + backgroundActive: string; + borderColorActive: string; + }; + dropdown: { + backgroundButtonColor: string; + backgroundButtonHover: string; + backgroundButtonActive: string; + textButtonColor: string; + textButtonHover: string; + borderButtonColor: string; + borderButtonHover: string; + borderButtonFocus: string; + borderButtonActive: string; + titleColor: string; + subTitleColor: string; + dropdownMenu: { + backgroundColor: string; + boxShadow: string; + itemTextColor: string; + itemTextColorHover: string; + itemBackgroundColorHover: string; + itemBackgroundColorActive: string; + linkColor: string; + textColor: string; + dropdownDivider: string; + }; + largeDropdown: { + background: string; + backgroundInner: string; + border: string; + title: string; + titleStrong: string; + }; + selector: { + numberColor: string; + separatorColor: string; + labelColor: string; + color: string; + arrowsColor: string; + }; + }; + energyManagement: { + connectionBGColor: string; + connectionColor: string; + borderColor: string; + titleColor: string; + descriptionColor: string; + lowPowerModeTitleColor: string; + shortButtonColor: string; + }; + raiseKeyboard: { + keyBase: string; + keyShadow: string; + keyColorOpacity: number; + keyOnFocusBorder: string; + contentColor: string; + modifier: { + color: string; + background: string; + boxShadow: string; + }; + }; + keyPicker: { + iconColor: string; + titleColor: string; + titleSpan: string; + keyMatrixShadow: string; + keyFill: string; + keyFillHover: string; + keyFillActive: string; + keyColor: string; + keyColorSecondary: string; + keyColorActive: string; + keyStrokeColor: string; + keyStrokeColorActive: string; + }; + keyboardPicker: { + keyBoardPickerBackground: string; + keyEnhanceWrapperBackground: string; + keyEnhanceWrapperBoxShadow: string; + keyEnhanceWrapperBorder: string; + modPickerBackground: string; + modPickerBoxShadow: string; + modPickerAlignAdjust: string; + keysRowBackground: string; + keysRowBoxShadow: string; + }; + keyVisualizer: { + background: string; + border: string; + borderOldValue: string; + color: string; + colorSuperkeyAction: string; + boxShadow: string; + labelModifierBackground: string; + labelModifierColor: string; + labelBorder: string; + labelModifierBackgroundSm: string; + labelModifierColorSm: string; + labelBorderSm: string; + bgOldToNew: string; + }; + firmwareErrorPanel: { + textColor: string; + }; + firmwareUpdatePanel: { + backgroundContent: string; + backgroundSidebar: string; + neuronDefyWirelessImage: string; + neuronStatusLineColor: string; + neuronStatusLineWarning: string; + neuronStatusLineSuccess: string; + neuronLightMatrixWarning: string; + neuronLightMatrixSuccess: string; + versionInstalledTitle: string; + nextVersionAvaliableTitle: string; + nextVersionAvaliableBadge: string; + versionSuccessTitle: string; + versionSuccessBadge: string; + badgeBorderColor: string; + badgeBorderColorActive: string; + iconDropodownColor: string; + backgroundStripeColor: string; + backgroundStripeGradientColor: string; + caretColor: string; + disclaimerTitle: string; + fileSelected: string; + }; + firmwareUpdateProcess: { + raiseSVG: string; + defySVG: string; + processFooterBackground: string; + processImageBackground: string; + processNeuronBackground: string; + neuronLineColor: string; + neuronSleepingMode: string; + }; + form: { + formLabelTextcolor: string; + inputColor: string; + inputBorder: string; + inputBorderSolid: string; + inputBorderActive: string; + inputBackgroundColor: string; + inputBackgroundColorActive: string; + inputGroupColor: string; + inputGroupBackground: string; + inputGroup: { + background: string; + }; + }; + listGroup: { + listItem: { + background: string; + backgroundHover: string; + backgroundSelected: string; + backgroundDisabled: string; + color: string; + colorSelected: string; + colorSelectedSpan: string; + colorDisabled: string; + colorDisabledSpan: string; + }; + }; + macro: { + tabCategoriesBackground: string; + tabContentBackground: string; + tabSpecialContentBackground: string; + tabTile: string; + tabSubTitle: string; + descriptionColor: string; + trackingBackground: string; + timelineBackground: string; + timelineHiddenTracking: string; + timelineHiddenTrackingBefore: string; + colorTitle: string; + keyMacroMiniDashboardBackground: string; + keyMacroMiniDashboardBorder: string; + keyInfoBackground: string; + keyInfoTitle: string; + keyFunctionsBorder: string; + keyValueColor: string; + keyFunctionTile: string; + previewColor: string; + recordingMessageColor: string; + timelineRecordTrackingBackground: string; + timelineBarBackground: string; + tabSaveButtonColor: string; + tabSaveButtonBorder: string; + specialKeyColor: string; + timelinePointeText: string; + recordMacroOptionsBackground: string; + recordMacroOptionsBoxShadow: string; + recordMacroOptionsTitle: string; + }; + macroKey: { + background: string; + backgroundColorDrag: string; + backgroundDrag: string; + boxShadowOnDrag: string; + color: string; + colorModifier: string; + backgroundHeader: string; + backgroundHeaderModifier: string; + borderColor: string; + borderColorModifier: string; + iconDragColor: string; + iconDragColorModifier: string; + actionIconColor: string; + actionColorModifier: string; + dropdownIconColor: string; + dropdownIconColorModifier: string; + alt: { + background: string; + }; + altGr: { + background: string; + }; + control: { + background: string; + }; + delay: { + background: string; + color: string; + borderColor: string; + actionIconColor: string; + }; + os: { + background: string; + }; + shift: { + background: string; + color: string; + actionColor: string; + }; + }; + memoryUsage: { + color: Tokens.colors.gray300; + borderColor: string; + percentageColor: string; + progressBaseColor: string; + progressFill: string; + colorWarning: string; + colorError: string; + }; + modal: { + closeButton; + backdropColor: string; + background: string; + backgroundInner: string; + titleColor: string; + footerBackground: string; + }; + mouseButtons: { + background: string; + backgroundWheelCircle: string; + mouseWheel: string; + }; + navbar: { + color: string; + background: string; + menuLink: { + color: string; + colorHover: string; + colorActive: string; + svgColor: string; + svgColorActive: string; + svgColorHover: string; + lightingOpacity: number; + gradient: string; + }; + }; + neuronConnection: { + backgroundColor: string; + titleColor: string; + subTitleColor: string; + }; + neuronData: { + neuronInfoBackground: string; + neuronInfoBoxShadow: string; + accordionBorder: string; + accordionCardBackground: string; + accordionCardBodyBackground: string; + accordionCardHeaderColor: string; + accordionCardHeaderBorderColor: string; + plusOpacity: number; + }; + neuronStatus: { + neuronStatusBackgroundColor: string; + lineStrokeColor: string; + lineStrokeColorConnected: string; + connectionSuccessFill: string; + connectionColorMatrix: string; + connectionColorMatrixOnLoading: string; + neuronNotFoundedColor: string; + connectionStrokeOpacity: number; + neuronLoader: string; + checkedIcon: string; + }; + neuronStatusDefy: { + statusWaiting: string; + }; + neuronTitle: { + heading3Color: string; + heading4Color: string; + }; + pageHeader: { + backgroundColor: string; + titleColor: string; + }; + progress: { + progressBackground: string; + progressBarBackground: string; + boxShadow: string; + }; + slider: { + trackColor: string; + progressColor: string; + handleBorderColor: string; + handleBackgroundColor: string; + handleBoxShadow: string; + labelColor: string; + }; + standardView: { + modalBackground: string; + contentBackground: string; + footerBackground: string; + titleColor: string; + superkeys: { + info: { + background: string; + titleColor: string; + }; + item: { + titleColor: string; + descriptionColor: string; + background: string; + boxShadow: string; + }; + key: { + background: string; + border: string; + }; + }; + keyVisualizer: { + background: string; + border: string; + boxShadow: string; + }; + }; + stepsBar: { + stepBarBackground: string; + stepBarBackgroundActive: string; + bulletIconColor: string; + bulletBackground: string; + bulletBackgroundActive: string; + bulletBorder: string; + bulletBorderActive: string; + bulletBoxShadow: string; + bulletBoxShadowActive: string; + }; + stepsProgressBar: { + stepBarBackground: string; + backgroundActive: string; + bulletBackground: string; + bulletBackgroundActive: string; + bulletBorderActive: string; + stepBarBackgroundActive: string; + }; + superkeyAction: { + color: string; + background: string; + backgroundActive: string; + titleColor: string; + descriptionColor: string; + }; + superkeyButton: { + backgroundColor: string; + backgroundColorHover: string; + backgroundColorActive: string; + border: string; + boxShadow: string; + boxShadowHover: string; + backgroundColorInner: string; + backgroundColorInnerActive: string; + boxShadowInner: string; + colorInner: string; + }; + switch: { + background: string; + backgroundActive: string; + thumbBackground: string; + thumbBackgroundActive: string; + thumbBorderColor: string; + thumbBorderColorActive: string; + thumbBoxShadow: string; + thumbBoxShadowActive: string; + }; + tab: { + color: string; + colorHover: string; + colorActive: string; + backgroundHover: string; + backgroundActive: string; + lightOpacity: number; + }; + tabButton: { + background: string; + backgroundHover: string; + color: string; + colorHover: string; + svgColor: string; + svgHover: string; + }; + title: { + counterColor: string; + }; + toast: { + boxShadow: string; + background: string; + backgroundNoStatus: string; + backgroundSuccess: string; + backgroundDanger: string; + backgroundWarning: string; + defaultColorTitle: string; + defaultColorBody: string; + warningColorTitle: string; + dangerColorTitle: string; + successColorTitle: string; + }; + toggleButton: { + background: string; + }; + toggleEditMode: { + titleColor: string; + containerBackground: string; + containerBorder: string; + buttonColor: Tokens.colors.gray200; + buttonColorHover: string; + buttonColorActive: string; + buttonBackground: string; + buttonBackgroundHover: string; + buttonBackgroundActive: string; + buttonBoxShadow: string; + }; + virtualKeyboard: { + cardButtonDivider: string; + cardButtonBackground: string; + cardBorder: string; + cardBackground: string; + iconConnectedColor: string; + iconVirtualKBColor: string; + iconVirtualKBBGColor: string; + labelTextColor: string; + cardTitleColor: string; + cardTextColor: string; + orBgColor: string; + orTextColor: string; + orLineColor: string; + }; + wrapper: { + background: string; + }; + }; + } +} diff --git a/src/renderer/types/devices.ts b/src/renderer/types/devices.ts new file mode 100644 index 000000000..9ecc83667 --- /dev/null +++ b/src/renderer/types/devices.ts @@ -0,0 +1,17 @@ +export interface USBDeviceDescriptor { + idVendor: number; + idProduct: number; +} + +export interface USBDevice { + deviceDescriptor: USBDeviceDescriptor; +} + +export interface NonSerialDeviceDescriptor { + vendorId: number; + productId: number; +} + +export interface NonSerialDevice { + usb: NonSerialDeviceDescriptor; +} diff --git a/src/renderer/types/energy.ts b/src/renderer/types/energy.ts new file mode 100644 index 000000000..e69de29bb diff --git a/src/renderer/types/pages.ts b/src/renderer/types/pages.ts new file mode 100644 index 000000000..1c9a9abb8 --- /dev/null +++ b/src/renderer/types/pages.ts @@ -0,0 +1,9 @@ +export default interface Pages { + keymap: boolean; + colormap: boolean; +} +export interface TabLayoutEditorProps { + keyCode: number; + onKeySelect: (key: number) => void; + isStandardView: boolean; +} diff --git a/src/renderer/types/theme.ts b/src/renderer/types/theme.ts new file mode 100644 index 000000000..e69de29bb diff --git a/src/renderer/types/version.ts b/src/renderer/types/version.ts new file mode 100644 index 000000000..e31588785 --- /dev/null +++ b/src/renderer/types/version.ts @@ -0,0 +1,5 @@ +export default interface Version { + bazecor: string; + kaleidoscope: string; + firmware: string; +} diff --git a/src/renderer/types/wireless.ts b/src/renderer/types/wireless.ts new file mode 100644 index 000000000..66760ed16 --- /dev/null +++ b/src/renderer/types/wireless.ts @@ -0,0 +1,83 @@ +export interface WirelessPropsInterface { + connected: boolean; + path: string; + titleElement: () => void; + darkMode: () => void; + toggleDarkMode: () => void; + startContext: () => void; + cancelContext: () => void; + updateAllowBeta: () => void; + allowBeta: boolean; + inContext: boolean; +} + +export interface WirelessInterface { + battery: { + LeftLevel: number; + RightLevel: number; + LeftState: number; + RightState: number; + savingMode: boolean; + }; + energy: { + modes: number; + currentMode: number; + disable: number; + }; + bluetooth: { + infoChannel1: string; + infoChannel2: string; + infoChannel3: string; + infoChannel4: string; + infoChannel5: string; + deviceName: string; + }; + rf: { + channelHop: number; + power: number; + }; + brightness: number; + brightnessUG: number; + fade: number; + idleleds: number; +} + +export interface BatterySettingsProps { + wireless: WirelessInterface; + changeWireless: (wireless: WirelessInterface) => void; + isCharging: boolean; +} + +export interface EnergyManagementProps { + wireless: WirelessInterface; + changeWireless: (wireless: WirelessInterface) => void; +} + +export interface AdvancedEnergyManagementProps { + wireless: WirelessInterface; + changeWireless: (wireless: WirelessInterface) => void; + showModal: boolean; + setShowModal: (show: boolean) => void; +} + +export interface RFSettingsProps { + wireless: WirelessInterface; + changeWireless: (wireless: WirelessInterface) => void; + sendRePair: () => void; +} + +export interface ConnectionProps { + connection: number; +} + +export interface SelectWirelessDropdownProps { + // action: number; + // activeTab: number; + keyCode: { base: number; modified: number }; + onKeySelect: (event: number) => void; +} + +export interface WirelessButton { + name: string; + keynum: number; +} diff --git a/src/renderer/utils/Store.ts b/src/renderer/utils/Store.ts new file mode 100644 index 000000000..8cf356283 --- /dev/null +++ b/src/renderer/utils/Store.ts @@ -0,0 +1,18 @@ +import ElectronStore from "electron-store"; + +class Store { + private static instance: ElectronStore; + + private constructor() { + // this comment is here so TS stays quiet + } + + public static getStore() { + if (!Store.instance) { + Store.instance = new ElectronStore(); + } + return Store.instance; + } +} + +export default Store; diff --git a/src/renderer/utils/colorDarkerCalculation.js b/src/renderer/utils/colorDarkerCalculation.js index 2051e6aa9..1ceb494b1 100644 --- a/src/renderer/utils/colorDarkerCalculation.js +++ b/src/renderer/utils/colorDarkerCalculation.js @@ -1,26 +1,26 @@ export default function colorDarkerCalculation(color) { - //Functions to convert colors + // Functions to convert colors function hexToRgb(hex) { - var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); + const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); return result ? { r: parseInt(result[1], 16), g: parseInt(result[2], 16), - b: parseInt(result[3], 16) + b: parseInt(result[3], 16), } : null; } - //alert(hexToRgb("#0033ff").g); // "51"; + // alert(hexToRgb("#0033ff").g); // "51"; - //alert(rgbToHex(0, 51, 255)); // #0033ff + // alert(rgbToHex(0, 51, 255)); // #0033ff function rgbToHex(r, g, b) { - return "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1); + return `#${((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1)}`; } - //alert(rgbToHex(0, 51, 255)); // #0033ff + // alert(rgbToHex(0, 51, 255)); // #0033ff const regexTestHEX = /^#([0-9a-f]{3}){1,2}$/i; - //Calc matrix color but you need to convert to RGB color first + // Calc matrix color but you need to convert to RGB color first const sumColor = rgbColor => { let shadeDarkerInternal; rgbColor = rgbColor.replace(/[^\d,]/g, "").split(","); @@ -34,12 +34,12 @@ export default function colorDarkerCalculation(color) { let shadeDarker; if (regexTestHEX.test(color)) { - //is Hexa + // is Hexa // console.log("Color is Hexa: ", color); safeRGBColor = `rgb(${hexToRgb(color).r}, ${hexToRgb(color).g}, ${hexToRgb(color).b})`; shadeDarker = sumColor(safeRGBColor); } else { - //is rgba + // is rgba // console.log("Color is RGB: ", color); shadeDarker = sumColor(color); } diff --git a/src/renderer/utils/colorMatrixCalculation.js b/src/renderer/utils/colorMatrixCalculation.js index 671ffc86f..25836ddcf 100644 --- a/src/renderer/utils/colorMatrixCalculation.js +++ b/src/renderer/utils/colorMatrixCalculation.js @@ -1,26 +1,26 @@ export default function colorMatrixCalc(color, opacity) { - //Functions to convert colors + // Functions to convert colors function hexToRgb(hex) { - var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); + const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); return result ? { r: parseInt(result[1], 16), g: parseInt(result[2], 16), - b: parseInt(result[3], 16) + b: parseInt(result[3], 16), } : null; } - //alert(hexToRgb("#0033ff").g); // "51"; + // alert(hexToRgb("#0033ff").g); // "51"; - //alert(rgbToHex(0, 51, 255)); // #0033ff + // alert(rgbToHex(0, 51, 255)); // #0033ff function rgbToHex(r, g, b) { - return "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1); + return `#${((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1)}`; } - //alert(rgbToHex(0, 51, 255)); // #0033ff + // alert(rgbToHex(0, 51, 255)); // #0033ff const regexTestHEX = /^#([0-9a-f]{3}){1,2}$/i; - //Calc matrix color but you need to convert to RGB color first + // Calc matrix color but you need to convert to RGB color first const calMatrix = (rgbColor, opacity) => { let matrixColorInternal; rgbColor = rgbColor.replace(/[^\d,]/g, "").split(","); @@ -34,12 +34,12 @@ export default function colorMatrixCalc(color, opacity) { let matrixColor; if (regexTestHEX.test(color)) { - //is Hexa + // is Hexa // console.log("Color is Hexa: ", color); safeRGBColor = `rgb(${hexToRgb(color).r}, ${hexToRgb(color).g}, ${hexToRgb(color).b})`; matrixColor = calMatrix(safeRGBColor, opacity); } else { - //is rgba + // is rgba // console.log("Color is RGB: ", color); matrixColor = calMatrix(color, opacity); } diff --git a/src/renderer/utils/setTemplates.js b/src/renderer/utils/setTemplates.js index ab682fd89..3d0dac554 100644 --- a/src/renderer/utils/setTemplates.js +++ b/src/renderer/utils/setTemplates.js @@ -23,7 +23,7 @@ export const setButtonSizeTemplate = value => ({ minWidth: value, minHeight: value, maxWidth: value, - maxHeight: value + maxHeight: value, }); /** @@ -34,5 +34,5 @@ export const setColorTemplate = color => ({ r: color.r, g: color.g, b: color.b, - rgb: `rgb(${color.r}, ${color.g}, ${color.b})` + rgb: `rgb(${color.r}, ${color.g}, ${color.b})`, }); diff --git a/src/renderer/utils/withRouter.js b/src/renderer/utils/withRouter.js new file mode 100644 index 000000000..52e4022f0 --- /dev/null +++ b/src/renderer/utils/withRouter.js @@ -0,0 +1,15 @@ +import React from "react"; +import { useLocation, useNavigate, useParams } from "react-router-dom"; + +function withRouter(Component) { + function ComponentWithRouterProp(props) { + const location = useLocation(); + const navigate = useNavigate(); + const params = useParams(); + return <Component {...props} router={{ location, navigate, params }} />; + } + + return ComponentWithRouterProp; +} + +export default withRouter; diff --git a/src/renderer/views/AltFirmwareUpdate.js b/src/renderer/views/AltFirmwareUpdate.js deleted file mode 100644 index 4093b8bbf..000000000 --- a/src/renderer/views/AltFirmwareUpdate.js +++ /dev/null @@ -1,104 +0,0 @@ -import React from "react"; -import { useMachine } from "@xstate/react"; -import MainProcessSM from "../controller/FlashingSM/MainProcess"; - -// Visual components -import Styled from "styled-components"; -import Container from "react-bootstrap/Container"; -import Card from "react-bootstrap/Card"; -import Spinner from "react-bootstrap/Spinner"; - -// Extra components -import i18n from "../i18n"; - -// Bazecor components -import PageHeader from "../modules/PageHeader"; -import { FirmwareErrorPanel, FirmwareCheckProcessPanel, FirmwareUpdatePanel, FirmwareUpdateProcess } from "../modules/Firmware"; - -import { FirmwareLoader } from "../component/Loader"; - -const Styles = Styled.div` -height: inherit; -.main-container { - overflow: hidden; - height: 100vh; -} -.firmware-update { - height: 100%; - display: flex; - flex-wrap: wrap; - justify-content: center; - &.center-content { - height: 100vh; - } -} -.disclaimerContent { - font-size: 15px; - margin-top: 32px; - line-height: 1.5em; - font-weight: 500; -} -.panel-wrapper { - width: 100%; -} -`; - -const AltFirmwareUpdate = props => { - const [state, send] = useMachine(MainProcessSM); - - const nextBlock = context => { - send("NEXT", { data: context }); - }; - - const retryBlock = () => { - send("RETRY"); - }; - - const errorBlock = error => { - send("ERROR", { data: error }); - }; - - return ( - <Styles> - <Container fluid className={`firmware-update center-content`}> - <PageHeader text={i18n.app.menu.firmwareUpdate} /> - <div className="panel-wrapper"> - {state.context.Block === -1 ? ( - <FirmwareErrorPanel nextBlock={nextBlock} retryBlock={retryBlock} /> - ) : state.context.Block === 0 ? ( - <FirmwareLoader /> - ) : state.context.Block === 1 ? ( - <FirmwareUpdatePanel - nextBlock={nextBlock} - retryBlock={retryBlock} - errorBlock={errorBlock} - allowBeta={props.allowBeta} - /> - ) : state.context.Block === 2 ? ( - <FirmwareCheckProcessPanel - nextBlock={nextBlock} - retryBlock={retryBlock} - errorBlock={errorBlock} - context={state.context} - /> - ) : state.context.Block === 3 ? ( - <FirmwareUpdateProcess - nextBlock={nextBlock} - retryBlock={retryBlock} - errorBlock={errorBlock} - context={state.context} - toggleFlashing={props.toggleFlashing} - toggleFwUpdate={props.toggleFwUpdate} - onDisconnect={props.onDisconnect} - device={props.device} - /> - ) : ( - "" - )} - </div> - </Container> - </Styles> - ); -}; - -export default AltFirmwareUpdate; diff --git a/src/renderer/views/FirmwareUpdate.js b/src/renderer/views/FirmwareUpdate.js deleted file mode 100644 index adaf8b217..000000000 --- a/src/renderer/views/FirmwareUpdate.js +++ /dev/null @@ -1,742 +0,0 @@ -// -*- mode: js-jsx -*- -/* Bazecor -- Kaleidoscope Command Center - * Copyright (C) 2018, 2019 Keyboardio, Inc. - * Copyright (C) 2019, 2020 DygmaLab SE - * - * This program is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by the Free Software - * Foundation, version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -import React from "react"; -import path from "path"; -import Styled from "styled-components"; -import { toast } from "react-toastify"; -import { fwVersion } from "../../../package.json"; -import { Octokit } from "@octokit/core"; -import SemVer from "semver"; -import axios from "axios"; -const { ipcRenderer } = require("electron"); - -import Focus from "../../api/focus"; -import { FlashRaise, FlashDefyWired, FlashDefyWireless } from "../../api/flash"; -import Backup from "../../api/backup"; - -import Container from "react-bootstrap/Container"; -import Card from "react-bootstrap/Card"; -import Dropdown from "react-bootstrap/Dropdown"; - -import { getStaticPath } from "../config"; -import i18n from "../i18n"; - -import PageHeader from "../modules/PageHeader"; -import { FirmwareUpdatePanel, FirmwareUpdateProcess } from "../modules/Firmware"; - -import Select from "../component/Select"; -import ToastMessage from "../component/ToastMessage"; -import { IconFloppyDisk, IconChip } from "../component/Icon"; - -const Styles = Styled.div` -height: inherit; -.main-container { - overflow: hidden; - height: 100vh; -} -.firmware-update { - height: 100%; - display: flex; - flex-wrap: wrap; - justify-content: center; - &.center-content { - height: 100vh; - } -} -.disclaimerContent { - font-size: 15px; - margin-top: 32px; - line-height: 1.5em; - font-weight: 500; -} - -`; - -class FirmwareUpdate extends React.Component { - constructor(props) { - super(props); - - let focus = new Focus(); - this.flashRaise = null; - this.FlashDefyWired = null; - this.FlashDefyWireless = null; - this.isDevelopment = process.env.NODE_ENV !== "production"; - this.bkp = new Backup(); - - this.state = { - advanced: false, - firmwareFilename: "", - selected: "default", - device: props.device.device || focus.device, - confirmationOpen: false, - countdown: -1, - firmwareDropdown: false, - brightness: 255, - buttonText: [ - i18n.firmwareUpdate.milestones.backup, - i18n.firmwareUpdate.milestones.esc, - i18n.firmwareUpdate.milestones.flash, - i18n.firmwareUpdate.milestones.restore - ], - versions: null, - commands: [], - backup: [], - backupDone: false, - backupPressed: false, - flashProgress: 0, - bootloader: false - }; - } - - _handleKeyDown = event => { - switch (event.keyCode) { - case 27: - console.log("esc key logged"); - if (this.state.backupDone && this.state.countdown == 1) { - // TODO: launch flashing procedure - console.log("launching the flashing procedure"); - this.setState({ countdown: 2, flashProgress: 0 }); - this.upload(); - } - break; - default: - break; - } - }; - - async componentDidUpdate() { - // console.log( - // "Testing State Update", - // this.state.backup.backup.length, - // this.state.commands.length, - // !this.state.backupDone && this.state.backup.length >= this.state.commands.length && this.state.commands.length > 0 - // ); - if ( - !this.state.backupDone && - this.state.backup.backup && - this.state.backup.backup.length == this.state.commands.length && - this.state.commands.length > 0 - ) { - this.setState({ backupDone: true, countdown: 1 }); - await this.bkp.SaveBackup(this.state.backup); - await this.putEscKey(this.state.backup.backup[0]); - } - } - - async componentDidMount() { - let focus = new Focus(); - document.addEventListener("keydown", this._handleKeyDown); - let versions; - - if (focus.device.bootloader) { - await this.setState({ countdown: 1, flashProgress: 0, backupDone: true, bootloader: true }); - if (focus.device.info.product == "Defy") { - if (focus.device.info.keyboardType == "wired") { - this.FlashDefyWired = new FlashDefyWired(this.props.device); - } else { - this.FlashDefyWireless = new FlashDefyWireless(this.props.device); - } - } else { - this.flashRaise = new FlashRaise(this.props.device); - } - document.dispatchEvent(new KeyboardEvent("keydown", { keyCode: 27 })); - return; - } - - focus.command("version").then(v => { - if (!v) return; - let parts = v.split(" "); - versions = { - bazecor: parts[0], - kaleidoscope: parts[1], - firmware: parts[2] - }; - - this.setState({ versions: versions }); - }); - const commands = await this.bkp.Commands(); - let chipID = (await focus.command("hardware.chip_id")).replace(/\s/g, ""); - let availableFW = await this.selectFWTypefromGitHub(focus.device.info.product); - // console.log("FWs from Github!", availableFW); - this.setState({ commands, neuronID: chipID, firmwareList: availableFW, selectedFirmware: 0 }); - } - - componentWillUnmount() { - document.removeEventListener("keydown", this._handleKeyDown); - } - - async loadAvailableFirmwareVersions() { - // Octokit.js - // https://github.com/octokit/core.js#readme - const octokit = new Octokit(); - - let data = await octokit.request("GET /repos/{owner}/{repo}/releases", { - owner: "Dygmalab", - repo: "Firmware-releases", - headers: { - "X-GitHub-Api-Version": "2022-11-28" - } - }); - let fwReleases = []; - data.data.forEach(release => { - let newRelease = {}, - name, - version; - const releaseData = release.name.split(" "); - name = releaseData[0]; - version = releaseData[1]; - newRelease.name = name; - newRelease.version = version; - newRelease.assets = []; - release.assets.forEach(asset => { - newRelease.assets.push({ name: asset.name, url: asset.browser_download_url }); - //console.log([asset.name, asset.browser_download_url]); - }); - //console.log(newRelease); - fwReleases.push(newRelease); - }); - // console.log("Data from Firmware-releases repo!", fwReleases); - return fwReleases; - } - - async selectFWTypefromGitHub(type) { - const fwReleases = await this.loadAvailableFirmwareVersions(); - let DefyReleases = fwReleases.filter(release => release.name === type); - DefyReleases.sort((a, b) => { - return SemVer.ltr(SemVer.clean(a.version), SemVer.clean(b.version)) ? -1 : 1; - }); - return DefyReleases; - } - - async obtainFWFiles(type, url) { - let response, - firmware = undefined; - - if (type == "keyscanner.bin") { - response = await axios.request({ - method: "GET", - url: url, - responseType: "arraybuffer", - reponseEncoding: "binary" - }); - firmware = new Uint8Array(response.data); - } - if (type == "Wired_neuron.uf2") { - response = await axios.request({ - method: "GET", - url: url, - responseType: "arraybuffer", - reponseEncoding: "binary" - }); - firmware = response.data; - } - if (type == "Wireless_neuron.hex") { - response = await axios.request({ - method: "GET", - url: url, - responseType: "text", - reponseEncoding: "utf8" - }); - response = response.data.replace(/(?:\r\n|\r|\n)/g, ""); - firmware = response.split(":"); - firmware.splice(0, 1); - } - // console.log(firmware); - return firmware; - } - - async putEscKey(command) { - let focus = new Focus(); - let withEsc = command.data.split(/\s+/); - withEsc[0] = 41; - await focus.command("keymap.custom", withEsc.join(" ")); - await focus.command("layer.moveTo 0"); - } - selectExperimental = event => { - console.log("selecting experimental"); - this.setState({ firmwareFilename: "", selected: "experimental" }); - }; - selectFirmware = async event => { - if (this.state.firmwareFilename != "") { - this.setState({ firmwareFilename: "" }); - return; - } - - let options = { - title: i18n.firmwareUpdate.dialog.selectFirmware, - filters: [ - { - name: i18n.firmwareUpdate.dialog.firmwareFiles, - extensions: ["hex"] - }, - { - name: i18n.firmwareUpdate.dialog.firmwareFiles, - extensions: ["uf2"] - }, - { - name: i18n.firmwareUpdate.dialog.allFiles, - extensions: ["*"] - } - ] - }; - let files = await ipcRenderer.invoke("open-dialog", options); - files.then(result => { - let aux = result.filePaths[0] != undefined ? result.filePaths[0] : ""; - this.setState({ firmwareFilename: aux, selected: "custom" }); - }); - }; - - _defaultFirmwareFilename = () => { - const { vendor, product, keyboardType } = this.state.device.info; - let cVendor = vendor.replace("/", ""), - cProduct = product.replace("/", ""), - ckeyboardType = keyboardType.replace("/", ""); - if (keyboardType == "ANSI" || keyboardType == "ISO") ckeyboardType = ""; - if (this.state.device.info.product === "Defy" && this.state.device.info.keyboardType === "wired") { - return path.join(getStaticPath(), cVendor, cProduct, ckeyboardType, "default.uf2"); - } else { - return path.join(getStaticPath(), cVendor, cProduct, ckeyboardType, "default.hex"); - } - }; - _defaultFirmwareFilenameSides = () => { - const { vendor, product, keyboardType } = this.state.device.info; - const cVendor = vendor.replace("/", ""), - cProduct = product.replace("/", ""), - ckeyboardType = keyboardType.replace("/", ""); - return path.join(getStaticPath(), cVendor, cProduct, ckeyboardType, "keyscanner.bin"); - }; - _experimentalFirmwareFilename = () => { - const { vendor, product, keyboardType } = this.state.device.info; - let cVendor = vendor.replace("/", ""), - cProduct = product.replace("/", ""), - ckeyboardType = keyboardType.replace("/", ""); - if (keyboardType == "ANSI" || keyboardType == "ISO") ckeyboardType = ""; - if (this.state.device.info.product === "Defy") { - return path.join(getStaticPath(), cVendor, cProduct, ckeyboardType, "experimental.uf2"); - } else { - return path.join(getStaticPath(), cVendor, cProduct, ckeyboardType, "experimental.hex"); - } - }; - _experimentalFirmwareFilenameSides = () => { - const { vendor, product, keyboardType } = this.state.device.info; - const cVendor = vendor.replace("/", ""), - cProduct = product.replace("/", ""), - ckeyboardType = keyboardType.replace("/", ""); - return path.join(getStaticPath(), cVendor, cProduct, ckeyboardType, "keyscannerX.bin"); - }; - - _flash = async () => { - let focus = new Focus(); - this.setState({ - device: focus.device - }); - let filename; - let filenameSides; - if (this.state.selected == "default") { - if (this.state.device.info.product == "Defy") { - if (!this.state.firmwareList) { - let availableFW = await this.selectFWTypefromGitHub(focus.device.info.product); - console.log("FWs from Github!", availableFW); - this.setState({ firmwareList: availableFW, selectedFirmware: availableFW.length - 1 }); - } - if (this.state.device.info.keyboardType == "wireless") { - filename = await this.obtainFWFiles( - "Wireless_neuron.hex", - this.state.firmwareList[this.state.selectedFirmware].assets[2].url - ); - } else { - filename = await this.obtainFWFiles( - "Wired_neuron.uf2", - this.state.firmwareList[this.state.selectedFirmware].assets[1].url - ); - } - filenameSides = await this.obtainFWFiles( - "keyscanner.bin", - this.state.firmwareList[this.state.selectedFirmware].assets[0].url - ); - } else { - filename = this._defaultFirmwareFilename(); - filenameSides = this._defaultFirmwareFilenameSides(); - } - } else if (this.state.selected == "experimental") { - filename = this._experimentalFirmwareFilename(); - filenameSides = this._experimentalFirmwareFilenameSides(); - } else { - filename = this.state.firmwareFilename; - filenameSides = this.state.firmwareFilenameSides; - } - - if (this.state.device.info.keyboardType !== "wired") { - if (!focus.device.bootloader) { - try { - if (focus.device.info.product == "Raise") { - await this.flashRaise.resetKeyboard(focus._port, this.state.backup, this.stateUpdate); - } - } catch (error) { - console.error("Bootloader Not found: ", error); - throw new Error(error); - } - } - } - - try { - // console.log( - // "Trying to flash", - // focus.device, - // focus.device.bootloader, - // focus.device.info.product, - // focus.device.info.keyboardType - // ); - const bootloader = focus.device.bootloader; - if (bootloader) { - if (focus.device.info.product == "Defy") { - if (focus.device.info.keyboardType == "wired") { - this.FlashDefyWired.currentPort = this.props.device; - } else { - this.FlashDefyWireless.currentPort = this.props.device; - this.FlashDefyWireless.currentPath = this.props.device.path; - } - } else { - this.flashRaise.currentPort = this.props.device; - } - } - if (focus.device.info.product == "Defy") { - if (focus.device.info.keyboardType == "wired") { - await focus.close(); - console.log("done closing focus"); - return await this.state.device.flash(focus._port, filename, filenameSides, this.FlashDefyWired, this.stateUpdate); - } else { - return await this.state.device.flash( - focus._port, - filename, - filenameSides, - bootloader, - this.FlashDefyWireless, - this.stateUpdate - ); - } - } else { - await focus.close(); - console.log("done closing focus"); - return await this.state.device.flash(focus._port, filename, this.flashRaise, this.stateUpdate); - } - } catch (e) { - console.error(e); - } - }; - - stateUpdate = (countdown, flashProgress) => { - this.setState({ countdown, flashProgress }); - }; - - upload = async () => { - await this.props.toggleFlashing(); - this.props.toggleFwUpdate(true); - const backup = this.state.backup ? this.state.backup.backup : undefined; - try { - await this._flash(); - if (!this.state.bootloader) { - this.setState({ countdown: 3, flashProgress: 90 }); - if (this.state.device.info.product == "Defy") { - if (this.state.device.info.keyboardType == "wired") { - await this.FlashDefyWired.restoreSettings(backup); - } else { - await this.FlashDefyWireless.restoreSettings(backup); - } - } else { - await this.flashRaise.restoreSettings(); - } - } - this.setState({ countdown: 4, flashProgress: 100 }); - if (this.state.device.info.product == "Defy") { - if (this.state.device.info.keyboardType == "wired") { - await this.FlashDefyWired.delay(600); - } else { - await this.FlashDefyWireless.delay(600); - } - } else { - await this.flashRaise.delay(600); - } - if (this.state.bootloader) { - this.props.toggleFlashing(); - this.props.toggleFwUpdate(false); - this.props.onDisconnect(); - this.setState({ confirmationOpen: false }); - } - } catch (e) { - console.error(e); - toast.error( - <ToastMessage - title={i18n.firmwareUpdate.flashing.error} - content={e.message} - icon={<IconFloppyDisk />} - onClickAction={() => { - ipcRenderer.invoke("openExternal", "https://support.dygma.com/hc/en-us/articles/360017056397"); - }} - clickActionText={i18n.errors.troubleshooting} - onClickDismiss={() => toast.dismiss()} - clickDismissText={i18n.errors.dismiss} - />, - { icon: "" } - ); - this.props.toggleFlashing(); - this.props.toggleFwUpdate(false); - this.props.onDisconnect(); - this.setState({ confirmationOpen: false }); - return; - } - - return new Promise(async resolve => { - let focus = new Focus(); - if (this.state.versions) await focus.command("led.mode 0"); - await focus.command(`led.brightness ${this.state.brightness}`); - // setTimeout(() => { - toast.success(<ToastMessage title={i18n.firmwareUpdate.flashing.success} icon={<IconFloppyDisk />} />, { - icon: "" - }); - this.props.toggleFlashing(); - this.props.toggleFwUpdate(false); - this.props.onDisconnect(); - this.setState({ confirmationOpen: false }); - resolve(); - // }, 1000); - }); - }; - - uploadRaise = async () => { - let focus = new Focus(); - if (this.state.versions) { - await focus.command("led.mode 1"); - let brightness = await focus.command("led.brightness"); - this.setState({ brightness }); - await focus.command("led.brightness 255"); - } - // this.setState({ - // confirmationOpen: true, - // isBeginUpdate: true - // }); - try { - this.flashRaise = new FlashRaise(this.props.device); - if (this.state.versions) this.setState({ countdown: 0, backupDone: false, backup: [] }); - else { - this.setState({ countdown: 2, flashProgress: 0 }); - this.upload(); - } - } catch (e) { - console.error(e); - toast.error( - <ToastMessage - title={i18n.firmwareUpdate.flashing.error} - content={e.message} - icon={<IconFloppyDisk />} - onClickAction={() => { - ipcRenderer.invoke("openExternal", "https://support.dygma.com/hc/en-us/articles/360007272638"); - }} - clickActionText={i18n.errors.troubleshooting} - onClickDismiss={() => toast.dismiss()} - clickDismissText={i18n.errors.dismiss} - />, - { icon: "" } - ); - this.setState({ confirmationOpen: false }); - } - }; - - uploadDefy = async () => { - let focus = new Focus(); - await focus.command("upgrade.start"); - try { - if (focus.device.info.product == "Defy") { - if (focus.device.info.keyboardType == "wired") { - this.FlashDefyWired = new FlashDefyWired(this.props.device); - } else { - this.FlashDefyWireless = new FlashDefyWireless(this.props.device); - } - } - if (this.state.versions) this.setState({ countdown: 0, backupDone: false, backup: [] }); - else { - this.setState({ countdown: 2, flashProgress: 0 }); - this.upload(); - } - } catch (e) { - console.error(e); - toast.error( - <ToastMessage - title={i18n.firmwareUpdate.flashing.error} - content={e.message} - icon={<IconFloppyDisk />} - onClickAction={() => { - ipcRenderer.invoke("openExternal", "https://support.dygma.com/hc/en-us/articles/360007272638"); - }} - clickActionText={i18n.errors.troubleshooting} - onClickDismiss={() => toast.dismiss()} - clickDismissText={i18n.errors.dismiss} - />, - { icon: "" } - ); - this.setState({ confirmationOpen: false }); - } - }; - - cancelDialog = async () => { - let focus = new Focus(); - this.setState({ countdown: -1, backupPressed: false }); - if (this.state.versions) { - await focus.command("led.mode 0"); - await focus.command(`led.brightness ${this.state.brightness}`); - } - }; - - backup = async () => { - this.setState({ backupPressed: true }); - let backup = await this.bkp.DoBackup(this.state.commands, this.state.neuronID); - this.setState({ backup }); - }; - - toggleAdvanced = () => { - this.setState({ advanced: !this.state.advanced }); - }; - - changeSelectedFirmware = newSelection => { - this.setState({ selectedFirmware: newSelection }); - }; - - render() { - const { - firmwareFilename, - buttonText, - countdown, - backupPressed, - isBeginUpdate, - versions, - firmwareDropdown, - flashProgress, - theme, - device, - firmwareList, - selectedFirmware - } = this.state; - - let filename = null; - if (firmwareFilename) { - filename = firmwareFilename.split(/[\\/]/); - filename = filename[filename.length - 1]; - } - - let currentlyRunning; - let currentlyVersionRunning; - if (versions) { - currentlyRunning = ( - <React.Fragment> - <Card bg={versions.bazecor != `v${fwVersion}` ? "warning" : "success"} className="version"> - <Card.Body className={versions.bazecor != `v${fwVersion}` ? "body" : "white body"}> - <Card.Title className="title">{i18n.firmwareUpdate.texts.currentlyRunningCardTitle}</Card.Title> - <Card.Text className="text">{versions.bazecor}</Card.Text> - </Card.Body> - </Card> - </React.Fragment> - ); - currentlyVersionRunning = versions.bazecor; - } - - const latestVersionAvailable = `v${fwVersion}`; - - let listOfFWs; - if (firmwareList != undefined && firmwareList.length > 0) { - listOfFWs = firmwareList.map((elem, index) => { - let selectFormat = {}; - selectFormat.text = elem.version; - selectFormat.value = index; - selectFormat.index = index; - return selectFormat; - }); - } - - return ( - <Styles> - <Container fluid className={`firmware-update ${countdown == -1 || countdown == 0 ? "center-content" : ""}`}> - <PageHeader text={i18n.app.menu.firmwareUpdate} /> - {countdown == -1 || countdown == 0 ? ( - <div> - <FirmwareUpdatePanel - currentlyVersionRunning={currentlyVersionRunning} - latestVersionAvailable={latestVersionAvailable} - onClick={ - device.info.product === "Raise" - ? this.uploadRaise - : device.info.product === "Defy" - ? this.uploadDefy - : this.upload - } - firmwareFilename={firmwareFilename} - selectFirmware={this.selectFirmware} - selectExperimental={this.selectExperimental} - disclaimerCard={countdown + 1} - onCancelDialog={this.cancelDialog} - onBackup={this.backup} - /> - {selectedFirmware != undefined && selectedFirmware != null && listOfFWs && listOfFWs.length > 0 ? ( // Ternary operator checking validity of variables - <Dropdown onSelect={this.changeSelectedFirmware} value={selectedFirmware} className={`custom-dropdown`}> - <div> - <Dropdown.Toggle id="dropdown-custom"> - <div className="dropdownItemSelected"> - <div className="dropdownItem">{listOfFWs[selectedFirmware].text}</div> - </div> - </Dropdown.Toggle> - <Dropdown.Menu> - {listOfFWs.map((item, index) => ( - <Dropdown.Item - eventKey={item.value} - key={index} - className={`${selectedFirmware == item.text ? "active" : ""}`} - disabled={item.disabled} - > - <div className="dropdownInner"> - {selectedFirmware != undefined && - selectedFirmware != "" > 0 && - listOfFWs && - listOfFWs.length > 0 && - listOfFWs[0].icon != undefined ? ( - <div className="dropdownIcon"> - <img src={item.icon} className="dropdwonIcon" /> - </div> - ) : ( - "" - )} - <div className="dropdownItem">{item.text}</div> - </div> - </Dropdown.Item> - ))} - </Dropdown.Menu> - </div> - </Dropdown> - ) : ( - "" - )} - </div> - ) : ( - <FirmwareUpdateProcess onCancelDialog={this.cancelDialog} countdown={countdown} flashProgress={flashProgress} /> - )} - </Container> - </Styles> - ); - } -} - -export default FirmwareUpdate; diff --git a/src/renderer/views/FirmwareUpdate.tsx b/src/renderer/views/FirmwareUpdate.tsx new file mode 100644 index 000000000..0a5a39fac --- /dev/null +++ b/src/renderer/views/FirmwareUpdate.tsx @@ -0,0 +1,111 @@ +import React from "react"; +import { useMachine } from "@xstate/react"; +import MainProcessSM from "@Renderer/controller/FlashingSM/MainProcess"; + +// Visual components +import Styled from "styled-components"; +import Container from "react-bootstrap/Container"; + +// Extra components +import i18n from "@Renderer/i18n"; + +// Bazecor components +import { PageHeader } from "@Renderer/modules/PageHeader"; +import { + FirmwareErrorPanel, + FirmwareCheckProcessPanel, + FirmwareUpdatePanel, + FirmwareUpdateProcess, +} from "@Renderer/modules/Firmware"; + +import { FirmwareLoader } from "@Renderer/component/Loader"; + +const Styles = Styled.div` +height: inherit; +.main-container { + overflow: hidden; + height: 100vh; +} +.firmware-update { + height: 100%; + display: flex; + flex-wrap: wrap; + justify-content: center; + &.center-content { + height: 100vh; + } +} +.disclaimerContent { + font-size: 15px; + margin-top: 32px; + line-height: 1.5em; + font-weight: 500; +} +.panel-wrapper { + width: 100%; +} +`; + +function FirmwareUpdate(props: any) { + const { allowBeta, toggleFlashing, toggleFwUpdate, onDisconnect, device } = props; + const [state, send] = useMachine(MainProcessSM); + + const nextBlock = (context: any) => { + send("NEXT", { data: context }); + }; + + const retryBlock = () => { + send("RETRY"); + }; + + const errorBlock = (error: any) => { + send("ERROR", { data: error }); + }; + + return ( + <Styles> + <Container fluid className="firmware-update center-content"> + <PageHeader text={i18n.app.menu.firmwareUpdate} /> + <div className="panel-wrapper"> + {state.context.Block === -1 ? <FirmwareErrorPanel nextBlock={nextBlock} retryBlock={retryBlock} /> : ""} + {state.context.Block === 0 ? ( + <FirmwareLoader width={undefined} warning={undefined} error={undefined} paused={undefined} /> + ) : ( + "" + )} + {state.context.Block === 1 ? ( + <FirmwareUpdatePanel nextBlock={nextBlock} retryBlock={retryBlock} errorBlock={errorBlock} allowBeta={allowBeta} /> + ) : ( + "" + )} + {state.context.Block === 2 ? ( + <FirmwareCheckProcessPanel + nextBlock={nextBlock} + retryBlock={retryBlock} + errorBlock={errorBlock} + context={state.context} + /> + ) : ( + "" + )} + {state.context.Block === 3 ? ( + <FirmwareUpdateProcess + nextBlock={nextBlock} + retryBlock={retryBlock} + errorBlock={errorBlock} + context={state.context} + toggleFlashing={toggleFlashing} + toggleFwUpdate={toggleFwUpdate} + onDisconnect={onDisconnect} + device={device} + /> + ) : ( + "" + )} + </div> + </Container> + </Styles> + ); +} + +export default FirmwareUpdate; diff --git a/src/renderer/views/LayoutEditor.js b/src/renderer/views/LayoutEditor.js index bcc49a2fb..eca2783a1 100644 --- a/src/renderer/views/LayoutEditor.js +++ b/src/renderer/views/LayoutEditor.js @@ -18,38 +18,40 @@ import React from "react"; import Styled from "styled-components"; import { toast } from "react-toastify"; -import ToastMessage from "../component/ToastMessage"; -const { ipcRenderer } = require("electron"); - -// Bootstrap components +import { ipcRenderer } from "electron"; +import fs from "fs"; import Container from "react-bootstrap/Container"; import Row from "react-bootstrap/Row"; import Col from "react-bootstrap/Col"; import Modal from "react-bootstrap/Modal"; +import customCursor from "@Assets/base/cursorBucket.png"; +import { LogoLoaderCentered } from "@Renderer/component/Loader"; +import ToastMessage from "@Renderer/component/ToastMessage"; -import Focus from "../../api/focus"; -import Backup from "../../api/backup"; -import Keymap, { KeymapDB } from "../../api/keymap"; -import ConfirmationDialog from "../component/ConfirmationDialog"; -import i18n from "../i18n"; -import { CopyFromDialog } from "../component/CopyFromDialog"; +import ConfirmationDialog from "@Renderer/component/ConfirmationDialog"; +import { CopyFromDialog } from "@Renderer/component/CopyFromDialog"; // Modules -import PageHeader from "../modules/PageHeader"; -import ColorEditor from "../modules/ColorEditor"; -import { KeyPickerKeyboard } from "../modules/KeyPickerKeyboard"; -import StandardView from "../modules/StandardView"; +import { PageHeader } from "@Renderer/modules/PageHeader"; +import ColorEditor from "@Renderer/modules/ColorEditor"; +import { KeyPickerKeyboard } from "@Renderer/modules/KeyPickerKeyboard"; +import StandardView from "@Renderer/modules/StandardView"; // Components -import { LayerSelector } from "../component/Select"; -import { RegularButton } from "../component/Button"; -import { LayoutViewSelector } from "../component/ToggleButtons"; -import { IconArrowUpWithLine, IconArrowDownWithLine } from "../component/Icon"; +import { LayerSelector } from "@Renderer/component/Select"; +import { RegularButton } from "@Renderer/component/Button"; +import { LayoutViewSelector } from "@Renderer/component/ToggleButtons"; +import { IconArrowUpWithLine, IconArrowDownWithLine } from "@Renderer/component/Icon"; -import customCursor from "../../../static/base/cursorBucket.png"; +import Keymap, { KeymapDB } from "../../api/keymap"; -const Store = window.require("electron-store"); -const store = new Store(); +import Focus from "../../api/focus"; +import Backup from "../../api/backup"; +import i18n from "../i18n"; + +import Store from "../utils/Store"; + +const store = Store.getStore(); const Styles = Styled.div` &.layoutEditor { @@ -109,7 +111,7 @@ const Styles = Styled.div` flex: 0 0 100%; margin: 0 auto; min-width: 680px; - max-width: 1280px; + max-width: 1640px; svg { width: 100%; } @@ -382,44 +384,44 @@ class LayoutEditor extends React.Component { defaultLayerNames = [ { id: 0, - name: "L1" + name: "L1", }, { id: 1, - name: "L2" + name: "L2", }, { id: 2, - name: "L3" + name: "L3", }, { id: 3, - name: "L4" + name: "L4", }, { id: 4, - name: "L5" + name: "L5", }, { id: 5, - name: "L6" + name: "L6", }, { id: 6, - name: "L7" + name: "L7", }, { id: 7, - name: "L8" + name: "L8", }, { id: 8, - name: "L9" + name: "L9", }, { id: 9, - name: "L10" - } + name: "L10", + }, ]; constructor(props) { @@ -439,7 +441,7 @@ class LayoutEditor extends React.Component { keymap: { custom: [], default: [], - onlyCustom: false + onlyCustom: false, }, palette: [], colorMap: [], @@ -461,7 +463,8 @@ class LayoutEditor extends React.Component { showNeuronModal: false, isStandardView: store.get("settings.isStandardView") || true, showStandardView: false, - layoutSelectorPosition: { x: 0, y: 0 } + layoutSelectorPosition: { x: 0, y: 0 }, + isWireless: false, }; this.onLayerNameChange = this.onLayerNameChange.bind(this); this.updateMacros = this.updateMacros.bind(this); @@ -482,83 +485,86 @@ class LayoutEditor extends React.Component { keymapDB = new KeymapDB(); onLayerNameChange(newName) { - let layerNames = this.state.layerNames.slice(); - layerNames[this.state.currentLayer] = { - id: this.state.currentLayer, - name: newName + const { layerNames, currentLayer, neuronID } = this.state; + const slicedLayerNames = layerNames.slice(); + slicedLayerNames[currentLayer] = { + id: currentLayer, + name: newName, }; this.setState({ - layerNames: layerNames + layerNames: slicedLayerNames, }); - let neurons = store.get("neurons"); - console.log("changed layer " + this.state.currentLayer + " name to: " + newName, layerNames); - neurons[this.state.neuronID].layers = layerNames; + const neurons = store.get("neurons"); + console.log(`changed layer ${currentLayer} name to: ${newName}`, slicedLayerNames); + neurons[neuronID].layers = slicedLayerNames; store.set("neurons", neurons); } async AnalizeChipID(chipID) { + const focus = new Focus(); let neurons = store.get("neurons"); let finalNeuron; console.log("Neuron ID", chipID, neurons); if (neurons === undefined) { neurons = []; } - if (neurons.some(n => n.id == chipID)) { - finalNeuron = neurons.filter(n => n.id == chipID)[0]; + if (neurons.some(n => n.id === chipID)) { + finalNeuron = neurons.find(n => n.id === chipID); } - if (!neurons.some(n => n.id == chipID) && neurons.length == 0) { - let neuron = {}; + if (!neurons.some(n => n.id === chipID) && neurons.length === 0) { + const neuron = {}; neuron.id = chipID; - neuron.name = ""; + neuron.name = focus.device.info.product; neuron.layers = - store.get("layerNames") != undefined - ? store.get("layerNames").map((name, id) => { - return { - id, - name - }; - }) + store.get("layerNames") !== undefined + ? store.get("layerNames").map((name, id) => ({ + id, + name, + })) : this.defaultLayerNames; neuron.macros = - store.get("macros") != undefined - ? store.get("macros").map(macro => { - return { - id: macro.id, - name: macro.name - }; - }) + store.get("macros") !== undefined + ? store.get("macros").map(macro => ({ + id: macro.id, + name: macro.name, + })) : []; neuron.superkeys = - store.get("superkeys") != undefined - ? store.get("superkeys").map(sk => { - return { - id: sk.id, - name: sk.name - }; - }) + store.get("superkeys") !== undefined + ? store.get("superkeys").map(sk => ({ + id: sk.id, + name: sk.name, + })) : []; console.log("New neuron", neuron); neurons = neurons.concat(neuron); store.set("neurons", neurons); finalNeuron = neuron; } - if (!neurons.some(n => n.id == chipID) && neurons.length > 0) { - let neuron = {}; + const existingDefy = neurons.some(n => n.id.length < 32); + const existingRaise = neurons.some(n => n.id.length === 32); + if (!neurons.some(n => n.id === chipID) && neurons.length > 0) { + const neuron = {}; neuron.id = chipID; - neuron.name = ""; + neuron.name = focus.device.info.product; neuron.layers = this.defaultLayerNames; neuron.macros = []; neuron.superkeys = []; - let neuronCopy = {}; + const neuronCopy = {}; neuronCopy.id = chipID; neuronCopy.name = neurons[0].name; neuronCopy.layers = neurons[0].layers; neuronCopy.macros = neurons[0].macros; neuronCopy.superkeys = neurons[0].superkeys; console.log("Additional neuron", neuron); - let result = await window.confirm( - "A new Neuron was detected and new settings need to be created. The names of the layers, macros and Superkeys are empty. If you want to copy the names of your default Neuron (first in the list) click ‘Ok’. If you prefer to reset all names click ‘Cancel’." - ); + let result; + if ((focus.device.info.product === "Defy" && !existingDefy) || (focus.device.info.product === "Raise" && !existingRaise)) { + result = false; + } else { + result = await window.confirm( + "A new Neuron was detected and new settings need to be created. The names of the layers, macros and Superkeys are empty. If you want to copy the names of your default Neuron (first in the list) click ‘Ok’. If you prefer to reset all names click ‘Cancel’.", + ); + } // var result = await userAction; console.log(result, neuron, neuronCopy); if (result === false) { @@ -574,26 +580,27 @@ class LayoutEditor extends React.Component { } console.log("Final neuron", finalNeuron); this.setState({ - neurons: neurons, - neuronID: neurons.findIndex(n => n.id == chipID), + neurons, + neuronID: neurons.findIndex(n => n.id === chipID), layerNames: finalNeuron.layers, storedMacros: finalNeuron.macros, - storedSuper: finalNeuron.superkeys + storedSuper: finalNeuron.superkeys, }); return finalNeuron; } scanKeyboard = async lang => { - let focus = new Focus(); + const focus = new Focus(); try { /** * Create property language to the object 'options', to call KeymapDB in Keymap and modify languagu layout */ - let chipID = await focus.command("hardware.chip_id"); - let registered = await this.AnalizeChipID(chipID.replace(/\s/g, "")); + const chipID = await focus.command("hardware.chip_id"); + const registered = await this.AnalizeChipID(chipID.replace(/\s/g, "")); const device = focus.device.info.product; + const wirelessChecker = focus.device.info.keyboardType === "wireless"; if (lang) { - let deviceLang = { ...focus.device, language: true }; + const deviceLang = { ...focus.device, language: true }; focus.commands.keymap = new Keymap(deviceLang); this.keymapDB = focus.commands.keymap.db; } @@ -601,13 +608,13 @@ class LayoutEditor extends React.Component { let defLayer = await focus.command("settings.defaultLayer"); defLayer = parseInt(defLayer) || 0; - let keymap = await focus.command("keymap"); + const keymap = await focus.command("keymap"); const onlyC = await focus.command("keymap.onlyCustom"); keymap.onlyCustom = onlyC; let empty = true; - for (let layer of keymap.custom) { - for (let i of layer) { + for (const layer of keymap.custom) { + for (const i of layer) { if (i.keyCode != 65535) { empty = false; break; @@ -615,8 +622,8 @@ class LayoutEditor extends React.Component { } } - // console.log("KEYMAP TEST!!", keymap, keymap.onlyCustom, onlyC); - if (empty && !keymap.onlyCustom && keymap.custom.length > 0) { + console.log("KEYMAP TEST!!", keymap, keymap.onlyCustom, onlyC); + if (empty && keymap.custom.length > 0) { console.log("Custom keymap is empty, copying defaults"); for (let i = 0; i < keymap.default.length; i++) { keymap.custom[i] = keymap.default[i].slice(); @@ -625,8 +632,8 @@ class LayoutEditor extends React.Component { await focus.command("keymap", keymap); } - let colormap = await focus.command("colormap"); - let palette = colormap.palette.slice(); + const colormap = await focus.command("colormap"); + const palette = colormap.palette.slice(); console.log("retrieved color.map & palette", colormap, palette); let raw = await focus.command("macros.map"); if (raw.search(" 0 0") !== -1) { @@ -650,7 +657,7 @@ class LayoutEditor extends React.Component { this.setState({ currentLayer: this.state.previousLayer, defaultLayer: defLayer, - keymap: keymap, + keymap, showDefaults: !keymap.onlyCustom, palette, colorMap: colormap.colorMap, @@ -659,7 +666,8 @@ class LayoutEditor extends React.Component { registered, chipID, deviceName: device, - ledIndexStart + isWireless: wirelessChecker, + ledIndexStart, }); if (keymap.custom) { const oldmacro = [...Array(64).keys()].map(x => x + 24576); @@ -682,8 +690,8 @@ class LayoutEditor extends React.Component { getCurrentKey() { if (this.state.currentKeyIndex < 0) return -1; - let layer = parseInt(this.state.currentLayer), - keyIndex = parseInt(this.state.currentKeyIndex); + let layer = parseInt(this.state.currentLayer); + const keyIndex = parseInt(this.state.currentKeyIndex); if (keyIndex >= 80 || !this.state.keymap.custom) return 0; @@ -694,49 +702,48 @@ class LayoutEditor extends React.Component { } return this.state.keymap.custom[layer][keyIndex].keyCode; - } else { - const offset = this.state.keymap.default.length; - if (layer < this.state.keymap.default.length) return this.state.keymap.default[layer][keyIndex].keyCode; - - return this.state.keymap.custom[layer - offset][keyIndex].keyCode; } + const offset = this.state.keymap.default.length; + if (layer < this.state.keymap.default.length) return this.state.keymap.default[layer][keyIndex].keyCode; + + return this.state.keymap.custom[layer - offset][keyIndex].keyCode; } onKeyChange = keyCode => { // Keys can only change on the custom layers - let layer = this.state.currentLayer, - keyIndex = this.state.currentKeyIndex; + const layer = this.state.currentLayer; + const keyIndex = this.state.currentKeyIndex; if (keyIndex === -1) { return; } this.setState(state => { - let keymap = state.keymap.custom.slice(); + const keymap = state.keymap.custom.slice(); const l = state.keymap.onlyCustom ? layer : layer - state.keymap.default.length; keymap[l][keyIndex] = this.keymapDB.parse(keyCode); return { keymap: { default: state.keymap.default, onlyCustom: state.keymap.onlyCustom, - custom: keymap + custom: keymap, }, - modified: true + modified: true, }; }); this.props.startContext(); }; dualFunction = modifier => { - let { currentLayer, currentKeyIndex, keymap } = this.state; + const { currentLayer, currentKeyIndex, keymap } = this.state; if (currentKeyIndex === -1) { return; } - let KM = keymap.custom.slice(); + const KM = keymap.custom.slice(); const l = keymap.onlyCustom ? currentLayer : currentLayer - keymap.default.length; const code = this.keymapDB.reverse(KM[l][currentKeyIndex].label); - let keyCode = modifier + code; + const keyCode = modifier + code; this.setState(state => { KM[l][currentKeyIndex] = this.keymapDB.parse(keyCode); @@ -744,9 +751,9 @@ class LayoutEditor extends React.Component { keymap: { default: state.keymap.default, onlyCustom: state.keymap.onlyCustom, - custom: KM + custom: KM, }, - modified: true + modified: true, }; }); this.props.startContext(); @@ -774,7 +781,7 @@ class LayoutEditor extends React.Component { this.setState({ selectedPaletteColor: this.state.colorMap[layer][ledIndex], isMultiSelected: true, - isColorButtonSelected: true + isColorButtonSelected: true, }); }; @@ -788,16 +795,15 @@ class LayoutEditor extends React.Component { const { selectedPaletteColor, modified } = this.state; const isEqualColor = this.onVerificationColor(selectedPaletteColor, currentLayer, ledIndex); if (!modified && isEqualColor) { - return; } else { this.setState(state => { - let colormap = state.colorMap.slice(); + const colormap = state.colorMap.slice(); colormap[currentLayer][ledIndex] = this.state.selectedPaletteColor; this.props.startContext(); return { selectedPaletteColor: this.state.colorMap[layer][ledIndex], colorMap: colormap, - modified: true + modified: true, }; }); } @@ -811,12 +817,12 @@ class LayoutEditor extends React.Component { isColorButtonSelected, currentKeyIndex, isStandardView, - showStandardView + showStandardView, } = this.state; - const currentTarget = event.currentTarget; - let layer = parseInt(currentTarget.getAttribute("data-layer")), - keyIndex = parseInt(currentTarget.getAttribute("data-key-index")), - ledIndex = parseInt(currentTarget.getAttribute("data-led-index")); + const { currentTarget } = event; + const layer = parseInt(currentTarget.getAttribute("data-layer")); + const keyIndex = parseInt(currentTarget.getAttribute("data-key-index")); + const ledIndex = parseInt(currentTarget.getAttribute("data-led-index")); if (isStandardView) { this.setState({ showStandardView: true }); @@ -827,16 +833,15 @@ class LayoutEditor extends React.Component { if (event.ctrlKey || (event.shiftKey && !isColorButtonSelected)) { this.onCtrlShiftPress(layer, ledIndex); return; - } else { - this.setState({ - currentKeyIndex: -1, - currentLedIndex: -1, - selectedPaletteColor: null, - isMultiSelected: false, - isColorButtonSelected: false - }); - return; } + this.setState({ + currentKeyIndex: -1, + currentLedIndex: -1, + selectedPaletteColor: null, + isMultiSelected: false, + isColorButtonSelected: false, + }); + return; } this.setState(state => { @@ -845,33 +850,29 @@ class LayoutEditor extends React.Component { currentLayer: layer, currentKeyIndex: keyIndex, currentLedIndex: ledIndex, - modeselect: ledIndex >= this.state.ledIndexStart ? "color" : state.modeselect - }; - } else { - return { - currentLayer: layer, - currentKeyIndex: keyIndex + modeselect: ledIndex >= this.state.ledIndexStart ? "color" : state.modeselect, }; } + return { + currentLayer: layer, + currentKeyIndex: keyIndex, + }; }); if (event.ctrlKey || event.shiftKey) { this.onCtrlShiftPress(layer, ledIndex); - return; } else { if (selectedPaletteColor !== null && isMultiSelected && isColorButtonSelected) { this.onButtonKeyboardColorChange(currentLayer, layer, ledIndex); } if (isColorButtonSelected && !isMultiSelected) { this.setState( - () => { - return { - isMultiSelected: true - }; - }, + () => ({ + isMultiSelected: true, + }), () => { this.onButtonKeyboardColorChange(currentLayer, layer, ledIndex); - } + }, ); } } @@ -880,13 +881,13 @@ class LayoutEditor extends React.Component { selectLayer = id => { if (id === undefined) return; this.setState({ - currentLayer: id + currentLayer: id, }); }; onApply = async () => { this.setState({ saving: true }); - let focus = new Focus(); + const focus = new Focus(); await focus.command("keymap", this.state.keymap); await focus.command("colormap", this.state.palette, this.state.colorMap); this.setState({ @@ -897,7 +898,7 @@ class LayoutEditor extends React.Component { previousLayer: this.state.currentLayer, isMultiSelected: false, selectedPaletteColor: null, - isColorButtonSelected: false + isColorButtonSelected: false, }); console.log("Changes saved."); const commands = await this.bkp.Commands(); @@ -911,7 +912,7 @@ class LayoutEditor extends React.Component { const newLanguage = store.get("settings.language"); console.log("Language automatically set to: ", newLanguage); this.setState({ - currentLanguageLayout: newLanguage || "english" + currentLanguageLayout: newLanguage || "english", }); }; @@ -928,14 +929,14 @@ class LayoutEditor extends React.Component { } this.setState({ - currentLayer: this.state.previousLayer != 0 ? this.state.previousLayer : initialLayer + currentLayer: this.state.previousLayer != 0 ? this.state.previousLayer : initialLayer, }); }); this.onChangeLanguageLayout(); await this.configStandarView(); } - UNSAFE_componentWillReceiveProps = nextProps => { + UNSAFE_componentWillReceiveProps(nextProps) { if (this.props.inContext && !nextProps.inContext) { this.setState({ currentLayer: this.state.previousLayer != 0 ? this.state.previousLayer : 0, @@ -944,18 +945,19 @@ class LayoutEditor extends React.Component { keymap: { custom: [], default: [], - onlyCustom: false + onlyCustom: false, }, - palette: [] + palette: [], }); this.scanKeyboard(); this.setState({ modified: false }); } - }; + } shareLayerDialog = () => { this.setState({ shareLayerOpen: true }); }; + cancelShareLayer = () => { this.setState({ shareLayerOpen: false }); }; @@ -963,12 +965,15 @@ class LayoutEditor extends React.Component { copyFromDialog = () => { this.setState({ copyFromOpen: true }); }; + cancelCopyFrom = () => { this.setState({ copyFromOpen: false }); }; + copyFromLayer = layer => { this.setState(state => { - let newKeymap, newColormap; + let newKeymap; + let newColormap; if (state.keymap.onlyCustom) { newKeymap = layer < 0 ? state.keymap.default.slice() : state.keymap.custom.slice(); @@ -991,23 +996,23 @@ class LayoutEditor extends React.Component { keymap: { default: state.keymap.default, onlyCustom: state.keymap.onlyCustom, - custom: newKeymap + custom: newKeymap, }, copyFromOpen: false, - modified: true + modified: true, }; }); }; clearLayer = () => { this.setState(state => { - let newKeymap = state.keymap.custom.slice(); + const newKeymap = state.keymap.custom.slice(); const idx = state.keymap.onlyCustom ? state.currentLayer : state.currentLayer - state.keymap.default.length; newKeymap[idx] = Array(newKeymap[0].length) .fill() .map(() => ({ keyCode: 65535, label: "", extraLabel: "TRANS", verbose: "Transparent" })); - let newColormap = state.colorMap.slice(); + const newColormap = state.colorMap.slice(); if (newColormap.length > 0) { newColormap[idx] = Array(newColormap[0].length) .fill() @@ -1018,11 +1023,11 @@ class LayoutEditor extends React.Component { keymap: { default: state.keymap.default, onlyCustom: state.keymap.onlyCustom, - custom: newKeymap + custom: newKeymap, }, colorMap: newColormap, modified: true, - clearConfirmationOpen: false + clearConfirmationOpen: false, }; }); }; @@ -1030,6 +1035,7 @@ class LayoutEditor extends React.Component { confirmClear = () => { this.setState({ clearConfirmationOpen: true }); }; + cancelClear = () => { this.setState({ clearConfirmationOpen: false }); }; @@ -1039,16 +1045,15 @@ class LayoutEditor extends React.Component { if (action === "one_button_click") { this.setState({ isMultiSelected: false, - isColorButtonSelected: !isColorButtonSelected + isColorButtonSelected: !isColorButtonSelected, }); return; } if (action === "another_button_click") { this.setState({ selectedPaletteColor: colorIndex, - isColorButtonSelected: true + isColorButtonSelected: true, }); - return; } }; @@ -1061,19 +1066,19 @@ class LayoutEditor extends React.Component { if (!isEqualColor) { this.setState(state => { - let colormap = state.colorMap.slice(); + const colormap = state.colorMap.slice(); colormap[currentLayer][currentLedIndex] = colorIndex; return { isMultiSelected: true, colorMap: colormap, selectedPaletteColor: colorIndex, - modified: true + modified: true, }; }); this.props.startContext(); } else { this.setState({ - selectedPaletteColor: colorIndex + selectedPaletteColor: colorIndex, }); } }; @@ -1081,22 +1086,22 @@ class LayoutEditor extends React.Component { onBacklightColorSelect = colorIndex => { this.setState({ selectedPaletteColor: colorIndex, - isColorButtonSelected: true + isColorButtonSelected: true, }); }; onColorPick = (colorIndex, r, g, b) => { - let newPalette = this.state.palette.slice(); + const newPalette = this.state.palette.slice(); const setColors = (r, g, b) => ({ r, g, b, - rgb: `rgb(${r}, ${g}, ${b})` + rgb: `rgb(${r}, ${g}, ${b})`, }); newPalette[colorIndex] = setColors(r, g, b); this.setState({ palette: newPalette, - modified: true + modified: true, }); this.props.startContext(); }; @@ -1104,12 +1109,14 @@ class LayoutEditor extends React.Component { importExportDialog = () => { this.setState({ importExportDialogOpen: true }); }; + cancelImport = () => { this.setState({ importExportDialogOpen: false }); }; + importLayer = data => { if (data.palette.length > 0) this.setState({ palette: data.palette }); - let layerNames = this.state.layerNames.slice(); + const layerNames = this.state.layerNames.slice(); const { currentLayer } = this.state; if (data.layerNames != null) { for (let i = 0; i < data.layerNames.length; i++) { @@ -1118,44 +1125,42 @@ class LayoutEditor extends React.Component { if (data.layerName && currentLayer) { layerNames[currentLayer] = data.layerName; } - this.setState({ layerNames: layerNames }); + this.setState({ layerNames }); } if (data.keymap.length > 0 && data.colormap.length > 0) { if (this.state.keymap.onlyCustom) { if (currentLayer >= 0) { this.setState(state => { - let newKeymap = this.state.keymap.custom.slice(); + const newKeymap = this.state.keymap.custom.slice(); newKeymap[currentLayer] = data.keymap.slice(); - let newColormap = this.state.colorMap.slice(); + const newColormap = this.state.colorMap.slice(); newColormap[currentLayer] = data.colormap.slice(); return { keymap: { default: state.keymap.default, custom: newKeymap, - onlyCustom: state.keymap.onlyCustom - }, - colorMap: newColormap - }; - }); - } - } else { - if (currentLayer >= this.state.keymap.default.length) { - this.setState(state => { - const defLength = this.state.keymap.default.length; - let newKeymap = this.state.keymap.custom.slice(); - newKeymap[currentLayer - defLength] = data.keymap; - let newColormap = this.state.colorMap.slice(); - newColormap[currentLayer - defLength] = data.colormap.slice(); - return { - keymap: { - default: state.keymap.default, - custom: newKeymap, - onlyCustom: state.keymap.onlyCustom + onlyCustom: state.keymap.onlyCustom, }, - colorMap: newColormap + colorMap: newColormap, }; }); } + } else if (currentLayer >= this.state.keymap.default.length) { + this.setState(state => { + const defLength = this.state.keymap.default.length; + const newKeymap = this.state.keymap.custom.slice(); + newKeymap[currentLayer - defLength] = data.keymap; + const newColormap = this.state.colorMap.slice(); + newColormap[currentLayer - defLength] = data.colormap.slice(); + return { + keymap: { + default: state.keymap.default, + custom: newKeymap, + onlyCustom: state.keymap.onlyCustom, + }, + colorMap: newColormap, + }; + }); } } this.setState({ modified: true }); @@ -1173,21 +1178,21 @@ class LayoutEditor extends React.Component { toChangeAllKeysColor = (colorIndex, start, end) => { const { currentLayer } = this.state; this.setState(state => { - let colormap = state.colorMap.slice(); + const colormap = state.colorMap.slice(); colormap[currentLayer] = colormap[currentLayer].fill(colorIndex, start, end); return { colorMap: colormap, - modified: true + modified: true, }; }); this.props.startContext(); }; superTranslator(raw) { - let superkey = [], - superkeys = [], - iter = 0, - superindex = 0; + let superkey = []; + const superkeys = []; + let iter = 0; + let superindex = 0; if (raw === "") { return []; @@ -1205,7 +1210,7 @@ class LayoutEditor extends React.Component { iter++; } superkeys[superindex] = { actions: superkey, name: "", id: superindex }; - console.log("Got Superkeys:" + JSON.stringify(superkeys) + " from " + raw); + console.log(`Got Superkeys:${JSON.stringify(superkeys)} from ${raw}`); if ( superkeys[0].actions == undefined || @@ -1214,20 +1219,23 @@ class LayoutEditor extends React.Component { ) return []; // TODO: Check if stored superKeys match the received ones, if they match, retrieve name and apply it to current superKeys - let equal = []; + const equal = []; let finalSuper = []; - const stored = this.state.neurons[this.state.neuronID].superkeys; + let stored = []; + console.log(this.state.neurons, this.state.neuronID, superkeys); + if (this.state.neurons !== undefined) { + stored = this.state.neurons[this.state.neuronID].superkeys; + } console.log(superkeys, stored); finalSuper = superkeys.map((superk, i) => { if (stored.length > i && stored.length > 0) { - let aux = superk; - aux.name = stored[i].name; - return aux; - } else { - let aux = superk; - aux.name = ""; + const aux = superk; + aux.name = stored[i] ? stored[i]?.name : ""; return aux; } + const aux = superk; + aux.name = ""; + return aux; }); console.log("final superkeys", finalSuper); return finalSuper; @@ -1238,7 +1246,7 @@ class LayoutEditor extends React.Component { } setSuperKey(superid, actions, supername) { - let temp = this.state.superkeys; + const temp = this.state.superkeys; let tempactions = actions; let founddata = false; tempactions = tempactions @@ -1257,9 +1265,9 @@ class LayoutEditor extends React.Component { } delSuperKey(superid) { - let temp = this.state.superkeys; - let aux = this.state.keymap.custom; - let result = this.state.keymap; + const temp = this.state.superkeys; + const aux = this.state.keymap.custom; + const result = this.state.keymap; temp.splice(superid, 1); if (temp.length > superid) { aux[this.state.currentLayer] @@ -1297,22 +1305,22 @@ class LayoutEditor extends React.Component { { keyCode: 16, type: 8, id: 12 }, { keyCode: 4, type: 8, id: 13 }, { keyCode: 23, type: 8, id: 14 }, - { keyCode: 8, type: 8, id: 15 } + { keyCode: 8, type: 8, id: 15 }, ], id: 0, macro: "RIGHT SHIFT H RIGHT SHIFT E Y , SPACE RIGHT SHIFT D RIGHT SHIFT Y G M A T E", - name: "Hey, Dygmate!" - } + name: "Hey, Dygmate!", + }, ]; } // Translate received macros to human readable text - let i = 0, - iter = 0, - kcs = 0, - type = 0, - keyCode = [], - actions = [], - macros = []; + let i = 0; + let iter = 0; + let kcs = 0; + let type = 0; + let keyCode = []; + let actions = []; + let macros = []; actions = []; while (raw.length > iter) { if (kcs > 0) { @@ -1323,8 +1331,8 @@ class LayoutEditor extends React.Component { } if (iter !== 0 && type !== 0) { actions.push({ - type: type, - keyCode: keyCode + type, + keyCode, }); keyCode = []; } @@ -1356,8 +1364,8 @@ class LayoutEditor extends React.Component { iter++; } actions.push({ - type: type, - keyCode: keyCode + type, + keyCode, }); macros[i] = {}; macros[i].actions = actions; @@ -1365,12 +1373,12 @@ class LayoutEditor extends React.Component { macros[i].name = ""; macros[i].macro = ""; macros = macros.map(macro => { - let aux = macro.actions.map(action => { + const aux = macro.actions.map(action => { switch (action.type) { case 1: return { type: action.type, - keyCode: [(action.keyCode[0] << 8) + action.keyCode[1], (action.keyCode[2] << 8) + action.keyCode[3]] + keyCode: [(action.keyCode[0] << 8) + action.keyCode[1], (action.keyCode[2] << 8) + action.keyCode[3]], }; case 2: case 3: @@ -1378,12 +1386,12 @@ class LayoutEditor extends React.Component { case 5: return { type: action.type, - keyCode: (action.keyCode[0] << 8) + action.keyCode[1] + keyCode: (action.keyCode[0] << 8) + action.keyCode[1], }; default: return { type: action.type, - keyCode: action.keyCode[0] + keyCode: action.keyCode[0], }; } }); @@ -1398,13 +1406,12 @@ class LayoutEditor extends React.Component { } finalMacros = macros.map((macro, i) => { if (stored.length > i && stored.length > 0) { - let aux = macro; + const aux = macro; aux.name = stored[i].name; aux.macro = macro.actions.map(k => this.keymapDB.parse(k.keyCode).label).join(" "); return aux; - } else { - return macro; } + return macro; }); return finalMacros; @@ -1417,7 +1424,7 @@ class LayoutEditor extends React.Component { } getLayout() { - let focus = new Focus(); + const focus = new Focus(); let Layer = {}; let kbtype = "iso"; if (focus.device == null) return { Layer: false, kbtype: false }; @@ -1433,13 +1440,13 @@ class LayoutEditor extends React.Component { } async toImport() { - let options = { + const options = { title: "Load Layer/s file", buttonLabel: "Load Layer/s", filters: [ { name: "Json", extensions: ["json"] }, - { name: "All Files", extensions: ["*"] } - ] + { name: "All Files", extensions: ["*"] }, + ], }; const resp = await ipcRenderer.invoke("open-dialog", options); @@ -1447,7 +1454,7 @@ class LayoutEditor extends React.Component { console.log(resp.filePaths); let layers; try { - layers = JSON.parse(require("fs").readFileSync(resp.filePaths[0])); + layers = JSON.parse(fs.readFileSync(resp.filePaths[0])); console.log(Array.isArray(layers.keymap)); if (Array.isArray(layers.keymap)) { console.log(layers.keymap[0]); @@ -1460,8 +1467,8 @@ class LayoutEditor extends React.Component { />, { autoClose: 2000, - icon: "" - } + icon: "", + }, ); } else { console.log(layers.keymap.custom[0]); @@ -1471,11 +1478,11 @@ class LayoutEditor extends React.Component { colorMap: layers.colormap, palette: layers.palette, superkeys: layers.superkeys ? layers.superkeys : [], - modified: true + modified: true, }); this.props.startContext(); toast.success(i18n.editor.importSuccessAllLayers, { - autoClose: 2000 + autoClose: 2000, }); } } catch (e) { @@ -1488,10 +1495,9 @@ class LayoutEditor extends React.Component { />, { autoClose: 2000, - icon: "" - } + icon: "", + }, ); - return; } } else { console.log("user closed SaveDialog"); @@ -1500,7 +1506,8 @@ class LayoutEditor extends React.Component { async toExport() { const { layerNames, keymap, currentLayer } = this.state; - let layerData, isReadOnly; + let layerData; + let isReadOnly; if (keymap.onlyCustom) { isReadOnly = currentLayer < 0; layerData = isReadOnly ? keymap.default[currentLayer + keymap.default.length] : keymap.custom[currentLayer]; @@ -1508,31 +1515,35 @@ class LayoutEditor extends React.Component { isReadOnly = currentLayer < keymap.default.length; layerData = isReadOnly ? keymap.default[currentLayer] : keymap.custom[currentLayer - keymap.default.length]; } - let data = JSON.stringify( + const focus = new Focus(); + const { info } = focus.device; + const data = JSON.stringify( { - layerNames: layerNames, + device: info, + language: this.state.currentLanguageLayout, + layerNames, keymap: layerData, colormap: this.state.colorMap[currentLayer], - palette: this.state.palette + palette: this.state.palette, }, null, - 2 + 2, ); - let options = { + const options = { title: "Save Layer file", - defaultPath: layerNames[currentLayer].name + ".json", + defaultPath: `${layerNames[currentLayer].name}.json`, buttonLabel: "Save Layer", filters: [ { name: "Json", extensions: ["json"] }, - { name: "All Files", extensions: ["*"] } - ] + { name: "All Files", extensions: ["*"] }, + ], }; try { const path = await ipcRenderer.invoke("save-dialog", options); if (typeof path !== "undefined") { console.log(path, data); - require("fs").writeFileSync(path, data); + fs.writeFileSync(path, data); toast.success( <ToastMessage title={i18n.editor.exportSuccessCurrentLayer} @@ -1541,8 +1552,8 @@ class LayoutEditor extends React.Component { />, { autoClose: 2000, - icon: "" - } + icon: "", + }, ); } else { console.log("user closed SaveDialog"); @@ -1557,40 +1568,40 @@ class LayoutEditor extends React.Component { />, { autoClose: 2000, - icon: "" - } + icon: "", + }, ); } } async toExportAll() { const { keymap, colorMap, palette, superkeys, layerNames } = this.state; - let data = JSON.stringify( + const data = JSON.stringify( { layerNames, keymap, colormap: colorMap, palette, - superkeys + superkeys, }, null, - 2 + 2, ); - let options = { + const options = { title: "Backup Layers file", defaultPath: "Layers.json", buttonLabel: "Backup Layers", filters: [ { name: "Json", extensions: ["json"] }, - { name: "All Files", extensions: ["*"] } - ] + { name: "All Files", extensions: ["*"] }, + ], }; try { const path = await ipcRenderer.invoke("save-dialog", options); if (typeof path !== "undefined") { console.log(path, data); - require("fs").writeFileSync(path, data); + fs.writeFileSync(path, data); toast.success( <ToastMessage title={i18n.editor.exportSuccessAllLayers} @@ -1599,8 +1610,8 @@ class LayoutEditor extends React.Component { />, { autoClose: 2000, - icon: "" - } + icon: "", + }, ); } else { console.log("user closed SaveDialog"); @@ -1608,7 +1619,7 @@ class LayoutEditor extends React.Component { } catch (error) { console.error(error); toast.error(i18n.errors.exportError + error, { - autoClose: 2000 + autoClose: 2000, }); } } @@ -1631,8 +1642,8 @@ class LayoutEditor extends React.Component { } updateOldMacros() { - let keymap = this.state.keymap; - let layers = []; + const { keymap } = this.state; + const layers = []; const oldmacro = [...Array(64).keys()].map(x => x + 24576); for (let index = 0; index < keymap.custom.length; index++) { if (keymap.custom[index].some(r => oldmacro.includes(r.keyCode))) { @@ -1655,34 +1666,35 @@ class LayoutEditor extends React.Component { layerName(index) { return this.state.layerNames.length > index ? this.state.layerNames[index].name : this.defaultLayerNames[index]; } + modeSelectToggle = data => { if (this.state.isStandardView) { if (this.state.currentLedIndex > this.state.ledIndexStart) { this.setState({ - currentKeyIndex: -1 + currentKeyIndex: -1, }); } this.setState({ modeselect: data, showStandardView: false, - currentLedIndex: -1 + currentLedIndex: -1, }); } else { this.setState({ - modeselect: data + modeselect: data, }); } }; - //Manage Standard/Single view + // Manage Standard/Single view async configStandarView() { try { const preferencesStandardView = JSON.parse(store.get("settings.isStandardView", true)); - //const preferencesStandardView = false; - //console.log("Preferences StandardView", preferencesStandardViewJSON); + // const preferencesStandardView = false; + // console.log("Preferences StandardView", preferencesStandardViewJSON); console.log("preferencesStandardView: ", preferencesStandardView); - //const preferencesStandardView = false; + // const preferencesStandardView = false; if (preferencesStandardView !== null) { this.setState({ isStandardView: preferencesStandardView }); } else { @@ -1721,26 +1733,27 @@ class LayoutEditor extends React.Component { currentLedIndex: -1, selectedPaletteColor: null, isMultiSelected: false, - isColorButtonSelected: false + isColorButtonSelected: false, }); }; + exportToPdf = () => { toast.info( <ToastMessage - title={"Feature not yet ready!"} - content={"The feature is not yet ready. its being worked on!"} + title="Feature not yet ready!" + content="The feature is not yet ready. its being worked on!" icon={<IconArrowUpWithLine />} />, { autoClose: 2000, - icon: "" - } + icon: "", + }, ); }; refreshLayoutSelectorPosition = (x, y) => { this.setState({ - layoutSelectorPosition: { x: x, y: y } + layoutSelectorPosition: { x, y }, }); // console.log("Triggered function refresh position :", this.state.layoutSelectorPosition); }; @@ -1758,12 +1771,13 @@ class LayoutEditor extends React.Component { superkeys, isStandardView, ledIndexStart, - layoutSelectorPosition + layoutSelectorPosition, + isWireless, } = this.state; - let { Layer, kbtype } = this.getLayout(); + const { Layer, kbtype } = this.getLayout(); if (!Layer) { - return <div></div>; + return <div />; } const showDefaults = store.get("settings.showDefaults"); let cLayer = currentLayer; @@ -1774,7 +1788,8 @@ class LayoutEditor extends React.Component { } } - let layerData, isReadOnly; + let layerData; + let isReadOnly; if (keymap.onlyCustom) { isReadOnly = cLayer < 0; layerData = isReadOnly ? keymap.default[cLayer + keymap.default.length] : keymap.custom[cLayer]; @@ -1785,7 +1800,7 @@ class LayoutEditor extends React.Component { if (layerData != undefined) { layerData = layerData.map(key => { - let newMKey = key; + const newMKey = key; if (key.extraLabel == "MACRO") { if ( macros.length > parseInt(key.label) && @@ -1803,7 +1818,7 @@ class LayoutEditor extends React.Component { if (layerData != undefined && superkeys.length > 0) { layerData = layerData.map(key => { - let newSKey = key; + const newSKey = key; if (key.extraLabel == "SUPER") { if ( superkeys.length > parseInt(key.label) - 1 && @@ -1820,7 +1835,7 @@ class LayoutEditor extends React.Component { } const layer = ( - //TODO: restore fade effect <fade in appear key={currentLayer}> + // TODO: restore fade effect <fade in appear key={currentLayer}> <div className="LayerHolder"> <Layer readOnly={isReadOnly} @@ -1835,7 +1850,7 @@ class LayoutEditor extends React.Component { darkMode={this.props.darkMode} style={{ width: "50vw" }} showUnderglow={this.state.modeselect != "keyboard"} - className={`raiseKeyboard layer`} + className="raiseKeyboard layer" isStandardView={isStandardView} /> </div> @@ -1844,20 +1859,20 @@ class LayoutEditor extends React.Component { const copyCustomItems = this.state.keymap.custom.map((_, index) => { const idx = index + (keymap.onlyCustom ? 0 : keymap.default.length); - const label = (idx + 1).toString() + ": " + this.layerName(idx); + const label = `${(idx + 1).toString()}: ${this.layerName(idx)}`; return { index: idx, - label: label + label, }; }); const copyDefaultItems = showDefaults && keymap.default.map((_, index) => { - const idx = index - (keymap.onlyCustom ? keymap.default.length : 0), - label = idx.toString(); + const idx = index - (keymap.onlyCustom ? keymap.default.length : 0); + const label = idx.toString(); return { index: idx, - label: label + label, }; }); const copyFromLayerOptions = (copyDefaultItems || []).concat(copyCustomItems); @@ -1866,7 +1881,7 @@ class LayoutEditor extends React.Component { const idx = index + (keymap.onlyCustom ? 0 : keymap.default.length); return { name: this.layerName(idx), - id: idx + id: idx, }; }); @@ -1888,18 +1903,18 @@ class LayoutEditor extends React.Component { superName = superkeys[code.base + code.modified - 53980].name; } } - + if (!layerData) return <LogoLoaderCentered />; return ( <Styles className="layoutEditor"> <Container fluid className={`keyboard-editor ${this.state.modeselect} ${isStandardView ? "standarViewMode" : "singleViewMode"} ${ - typeof this.state.selectedPaletteColor == "number" ? "colorSelected" : "" + typeof this.state.selectedPaletteColor === "number" ? "colorSelected" : "" }`} > <PageHeader text={i18n.app.menu.editor} - showSaving={true} + showSaving contentSelector={ <LayerSelector itemList={layerMenu} @@ -1931,7 +1946,7 @@ class LayoutEditor extends React.Component { deviceName={this.state.deviceName} /> } - isColorActive={this.state.modeselect == "keyboard" ? false : true} + isColorActive={this.state.modeselect != "keyboard"} saveContext={this.onApply} destroyContext={() => { this.props.cancelContext(); @@ -1940,7 +1955,7 @@ class LayoutEditor extends React.Component { /> <Row className="full-height keyboardsWrapper"> <Col className="raise-editor layer-col"> - <Row className="dygma-keyboard-editor editor m-0">{layer}</Row> + <Row className="dygma-keyboard-editor editor">{layer}</Row> {this.state.modeselect == "keyboard" && !isStandardView ? ( <Row className="ordinary-keyboard-editor m-0"> <KeyPickerKeyboard @@ -1952,18 +1967,19 @@ class LayoutEditor extends React.Component { action={0} superName={superName} keyIndex={currentKeyIndex} - actTab={"editor"} + actTab="editor" selectedlanguage={currentLanguageLayout} kbtype={kbtype} layoutSelectorPosition={layoutSelectorPosition} refreshLayoutSelectorPosition={this.refreshLayoutSelectorPosition} + isWireless={isWireless} /> </Row> ) : null} </Col> </Row> - {/* WHY: We want to hide the selector when we cannot use it (e.g. when color editor is active)*/} + {/* WHY: We want to hide the selector when we cannot use it (e.g. when color editor is active) */} {this.state.modeselect === "keyboard" ? ( <LayoutViewSelector onToggle={this.onToggle} @@ -2008,13 +2024,13 @@ class LayoutEditor extends React.Component { <Modal.Footer> <RegularButton buttonText={i18n.editor.oldMacroModal.cancelButton} - style="outline" + styles="outline transp-bg" size="sm" onClick={this.toggleMacroModal} /> <RegularButton buttonText={i18n.editor.oldMacroModal.applyButton} - style="outline gradient" + styles="outline gradient" size="sm" onClick={this.updateOldMacros} /> @@ -2037,13 +2053,13 @@ class LayoutEditor extends React.Component { <Modal.Footer> <RegularButton buttonText={i18n.editor.oldNeuronModal.cancelButton} - style="outline" + styles="outline transp-bg" size="sm" onClick={this.toggleNeuronModal} /> <RegularButton buttonText={i18n.editor.oldNeuronModal.applyButton} - style="outline gradient" + styles="outline gradient" size="sm" onClick={this.CloneExistingNeuron} /> @@ -2068,6 +2084,7 @@ class LayoutEditor extends React.Component { selectedlanguage={currentLanguageLayout} kbtype={kbtype} isStandardView={isStandardView} + isWireless={isWireless} /> ) : ( "" diff --git a/src/renderer/views/MacroEditor.js b/src/renderer/views/MacroEditor.jsx similarity index 67% rename from src/renderer/views/MacroEditor.js rename to src/renderer/views/MacroEditor.jsx index d735bb245..47a41f67b 100644 --- a/src/renderer/views/MacroEditor.js +++ b/src/renderer/views/MacroEditor.jsx @@ -1,3 +1,4 @@ +/* eslint-disable no-bitwise */ // -*- mode: js-jsx -*- /* Bazecor -- Kaleidoscope Command Center * Copyright (C) 2018, 2019 Keyboardio, Inc. @@ -19,6 +20,7 @@ import React from "react"; import { toast } from "react-toastify"; import Styled from "styled-components"; +import PropTypes from "prop-types"; import Col from "react-bootstrap/Col"; import Container from "react-bootstrap/Container"; @@ -27,23 +29,26 @@ import DropdownButton from "react-bootstrap/DropdownButton"; import Modal from "react-bootstrap/Modal"; import Row from "react-bootstrap/Row"; +import { LogoLoaderCentered } from "@Renderer/component/Loader"; + +import { RegularButton } from "@Renderer/component/Button"; +import Callout from "@Renderer/component/Callout"; +import { IconFloppyDisk } from "@Renderer/component/Icon"; +import { MacroSelector } from "@Renderer/component/Select"; +import ToastMessage from "@Renderer/component/ToastMessage"; +import { PageHeader } from "@Renderer/modules/PageHeader"; + +import MacroCreator from "@Renderer/modules/Macros/MacroCreator"; +import TimelineEditorManager from "@Renderer/modules/Macros/TimelineEditorManager"; + import Backup from "../../api/backup"; import Focus from "../../api/focus"; import Keymap, { KeymapDB } from "../../api/keymap"; import i18n from "../i18n"; -import { RegularButton } from "../component/Button"; -import Callout from "../component/Callout"; -import { IconFloppyDisk } from "../component/Icon"; -import { MacroSelector } from "../component/Select"; -import ToastMessage from "../component/ToastMessage"; -import PageHeader from "../modules/PageHeader"; +import Store from "../utils/Store"; -import MacroCreator from "../modules/Macros/MacroCreator"; -import TimelineEditorManager from "../modules/Macros/TimelineEditorManager"; - -const Store = require("electron-store"); -const store = new Store(); +const store = Store.getStore(); const Styles = Styled.div` .toggle-button{ @@ -104,18 +109,75 @@ const defaultMacro = [ { keyCode: 16, type: 8, id: 12 }, { keyCode: 4, type: 8, id: 13 }, { keyCode: 23, type: 8, id: 14 }, - { keyCode: 8, type: 8, id: 15 } + { keyCode: 8, type: 8, id: 15 }, ], id: 0, macro: "RIGHT SHIFT H RIGHT SHIFT E Y , SPACE RIGHT SHIFT D RIGHT SHIFT Y G M A T E", - name: "Hey, Dygmate!" - } + name: "Hey, Dygmate!", + }, ]; const defaultMacroString = "255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255"; class MacroEditor extends React.Component { + static superTranslator(raw) { + if (raw.search(" 0 0 ") === -1) { + return []; + } + const supersArray = raw.split(" 0 0")[0].split(" ").map(Number); + + const superkeys = []; + let superkey = []; + for (let iter = 0; iter < supersArray.length; iter += 1) { + if (supersArray[iter] === 0) { + superkeys.push(superkey); + superkey = []; + } else { + superkey.push(supersArray[iter]); + } + } + superkeys.push(superkey); + + if ( + (Array.isArray(superkeys[0]) && superkeys[0][0] === 0) || + superkeys[0].filter(v => v === 0).length === superkeys[0].length - 1 + ) + return []; + return superkeys; + } + + static macrosMap(macros) { + if (macros.length === 0 || (macros.length === 1 && Array.isArray(macros[0].actions))) { + return defaultMacroString; + } + const mapAction = action => { + switch (action.type) { + case 1: + return [ + [action.type], + [action.keyCode[0] >> 8], + [action.keyCode[0] & 255], + [action.keyCode[1] >> 8], + [action.keyCode[1] & 255], + ]; + case 2: + case 3: + case 4: + case 5: + return [[action.type], [action.keyCode >> 8], [action.keyCode & 255]]; + default: + return [[action.type], [action.keyCode]]; + } + }; + return macros + .map(macro => macro.actions.map(action => mapAction(action)).concat([0])) + .concat([0]) + .flat() + .join(" ") + .replaceAll(",", " "); + } + constructor(props) { super(props); @@ -127,17 +189,17 @@ class MacroEditor extends React.Component { macros: [], superkeys: [], storedMacros: [], - storedSuper: [], maxMacros: 128, modified: false, selectedMacro: 0, showDeleteModal: false, listToDelete: [], listToDeleteS: [], - selectedList: 0, + selectedList: -1, usedMemory: 0, totalMemory: 0, - currentLanguageLayout: store.get("settings.language") || "english" + loading: true, + currentLanguageLayout: store.get("settings.language") || "english", }; this.updateMacros = this.updateMacros.bind(this); this.changeSelected = this.changeSelected.bind(this); @@ -152,245 +214,121 @@ class MacroEditor extends React.Component { await this.loadMacros(); } - async loadMacros() { - const focus = new Focus(); - try { - /** - * Create property language to the object 'options', to call KeymapDB in Keymap and modify languagu layout - */ - const chipID = (await focus.command("hardware.chip_id")).replace(/\s/g, ""); - const neurons = store.get("neurons"); - const neuron = neurons.find(n => n.id === chipID) || {}; - this.setState({ - neurons, - neuronID: neurons.findIndex(n => n.id === chipID), - storedMacros: neuron.macros, - storedSuper: neuron.superkeys - }); - focus.commands.keymap = new Keymap({ ...focus.device, language: true }); - this.keymapDB = focus.commands.keymap.db; - let kbtype = "iso"; - try { - kbtype = focus.device && focus.device.info.keyboardType === "ISO" ? "iso" : "ansi"; - } catch (error) { - return false; - } - - let tMem = await focus.command("macros.memory"); - tMem = parseInt(tMem); - if (tMem === undefined || tMem < 100) tMem = 2048; - const keymap = await focus.command("keymap"); - const macrosRaw = await focus.command("macros.map"); - const parsedMacros = this.macroTranslator(macrosRaw); - const supersRaw = await focus.command("superkeys.map"); - const parsedSuper = this.superTranslator(supersRaw); - this.setState({ - macros: parsedMacros, - superkeys: parsedSuper, - keymap, - kbtype, - modified: false, - usedMemory: parsedMacros.map(m => m.actions).flat().length, - totalMemory: tMem - }); - } catch (e) { - toast.error(<ToastMessage title={e} icon={<IconFloppyDisk />} />, { icon: "" }); - this.props.onDisconnect(); + deleteMacro = () => { + const { macros, selectedMacro } = this.state; + if (macros.length === 0) { + return; } - } - - macroTranslator(raw) { - if (raw.search(" 0 0") === -1) { - return defaultMacro; + const selected = selectedMacro; + let localMacros = [...macros]; + localMacros.splice(selected, 1); + localMacros = localMacros.map((macro, idx) => { + const item = { ...macro }; + item.id = idx; + return item; + }); + if (selected >= macros.length - 1) { + this.changeSelected(macros.length - 2); } - const macrosArray = raw.split(" 0 0")[0].split(" ").map(Number); - - // Translate received macros to human readable text - const macros = []; - let iter = 0; - // macros are `0` terminated or when end of macrosArray has been reached, the outer loop - // must cycle once more than the inner - while (iter <= macrosArray.length) { - const actions = []; - while (iter < macrosArray.length) { - const type = macrosArray[iter]; - if (type === 0) { - break; - } - - switch (type) { - case 1: - actions.push({ - type, - keyCode: [(macrosArray[++iter] << 8) + macrosArray[++iter], (macrosArray[++iter] << 8) + macrosArray[++iter]] - }); - break; - case 2: - case 3: - case 4: - case 5: - actions.push({ type, keyCode: (macrosArray[++iter] << 8) + macrosArray[++iter] }); - break; - case 6: - case 7: - case 8: - actions.push({ type, keyCode: macrosArray[++iter] }); - break; - default: - break; - } + this.updateMacros(localMacros); + this.updateKeyboard(selected); + }; - iter++; - } - macros.push({ - actions, - name: "", - macro: "" - }); - iter++; + addMacro = name => { + const { macros, maxMacros } = this.state; + if (macros.length >= maxMacros) { + return; } - macros.forEach((m, idx) => (m.id = idx)); + const aux = macros; + const newID = aux.length; + aux.push({ + actions: [], + name, + id: newID, + macro: "", + }); + this.updateMacros(aux); + this.changeSelected(newID); + }; - // TODO: Check if stored macros match the received ones, if they match, retrieve name and apply it to current macros - const stored = this.state.storedMacros; - if (stored === undefined || stored.length === 0) { - return macros; - } - return macros.map((macro, i) => { - if (stored.length < i) { - return macro; - } + addToActions = actions => { + const { macros, selectedMacro } = this.state; - return { - ...macro, - name: stored[i].name, - macro: macro.actions.map(k => this.keymapDB.parse(k.keyCode).label).join(" ") - }; - }); - } + const macrosList = JSON.parse(JSON.stringify(macros)); + macrosList[selectedMacro].actions = actions; + this.setState({ macros: macrosList, modified: true }); + }; duplicateMacro = () => { - if (this.state.macros.length >= this.state.maxMacros) { + const { macros, maxMacros, selectedMacro } = this.state; + if (macros.length >= maxMacros) { return; } - const macros = this.state.macros; - const selected = this.state.selectedMacro; - const aux = Object.assign({}, this.state.macros[selected]); - aux.id = this.state.macros.length; - aux.name = "Copy of " + aux.name; + const selected = selectedMacro; + const aux = { ...macros[selected] }; + aux.id = macros.length; + aux.name = `Copy of ${aux.name}`; macros.push(aux); this.updateMacros(macros); this.changeSelected(aux.id); }; - superTranslator(raw) { - if (raw.search(" 0 0 ") === -1) { - return []; - } - const supersArray = raw.split(" 0 0")[0].split(" ").map(Number); - - const superkeys = []; - let superkey = []; - for (let iter = 0; iter < supersArray.length; iter++) { - if (supersArray[iter] === 0) { - superkeys.push(superkey); - superkey = []; - } else { - superkey.push(supersArray[iter]); - } - } - superkeys.push(superkey); + // Define updateActions function to update the actions of the selected macro + updateActions = actions => { + const { macros, selectedMacro } = this.state; - if (superkeys[0] == [0] || superkeys[0].filter(v => v === 0).length == superkeys[0].length - 1) return []; - return superkeys; - } + const macrosList = macros; + macrosList[selectedMacro].actions = actions; + this.setState({ macros: macrosList, modified: true }); + }; - updateKeyboard(keyboardIdx) { - const macroID = this.state.macros[keyboardIdx].id + 53852; - const customKeymapList = this.state.keymap.custom - .map((layer, layerIdx) => - layer.map((key, pos) => ({ layer: layerIdx, key, pos })).filter(elem => elem.key.keyCode === macroID) - ) - .flat(); - const superkeyList = this.state.superkey - .map((supers, i) => supers.map((action, pos) => ({ i, pos, action })).filter(elem => elem.action === macroID)) - .flat(); - this.setState({ - listToDelete: customKeymapList, - listToDeleteS: superkeyList, - showDeleteModal: true - }); - } + saveName = data => { + const { macros, selectedMacro } = this.state; + const localMacros = JSON.parse(JSON.stringify(macros)); + localMacros[selectedMacro].name = data; + this.setState({ macros: localMacros, modified: true }); + }; updateMacros(recievedMacros) { + const { startContext } = this.props; this.setState({ macros: recievedMacros, modified: true, - usedMemory: recievedMacros.map(m => m.actions).flat().length + usedMemory: recievedMacros.map(m => m.actions).flat().length, }); - this.props.startContext(); + startContext(); } async writeMacros() { + const { macros, neurons, neuronID, keymap } = this.state; const focus = new Focus(); - const newMacros = this.state.macros; + const newMacros = macros; this.setState({ modified: false, macros: newMacros, - storedMacros: newMacros + storedMacros: newMacros, }); - const neurons = JSON.parse(JSON.stringify(this.state.neurons)); - neurons[this.state.neuronID].macros = newMacros; - store.set("neurons", neurons); + const localNeurons = JSON.parse(JSON.stringify(neurons)); + localNeurons[neuronID].macros = newMacros; + store.set("neurons", localNeurons); try { - await focus.command("macros.map", this.macrosMap(newMacros)); - await focus.command("keymap", this.state.keymap); + await focus.command("macros.map", MacroEditor.macrosMap(newMacros)); + await focus.command("keymap", keymap); const commands = await this.bkp.Commands(); - const backup = await this.bkp.DoBackup(commands, this.state.neurons[this.state.neuronID].id); + const backup = await this.bkp.DoBackup(commands, neurons[neuronID].id); this.bkp.SaveBackup(backup); toast.success(<ToastMessage title={i18n.editor.macros.successFlashTitle} content="" icon={<IconFloppyDisk />} />, { autoClose: 2000, - icon: "" + icon: "", }); } catch (error) { toast.error(<ToastMessage title={error} icon={<IconFloppyDisk />} />, { icon: "" }); } } - macrosMap(macros) { - if (macros.length === 0 || (macros.length === 1 && macros[0].actions === [])) { - return defaultMacroString; - } - const mapAction = action => { - switch (action.type) { - case 1: - return [ - [action.type], - [action.keyCode[0] >> 8], - [action.keyCode[0] & 255], - [action.keyCode[1] >> 8], - [action.keyCode[1] & 255] - ]; - case 2: - case 3: - case 4: - case 5: - return [[action.type], [action.keyCode >> 8], [action.keyCode & 255]]; - default: - return [[action.type], [action.keyCode]]; - } - }; - return macros - .map(macro => macro.actions.map(action => mapAction(action)).concat([0])) - .concat([0]) - .flat() - .join(" ") - .replaceAll(",", " "); - } - changeSelected(id) { this.setState({ - selectedMacro: id < 0 ? 0 : id + selectedMacro: id < 0 ? 0 : id, }); } @@ -399,16 +337,16 @@ class MacroEditor extends React.Component { } ActUponDelete() { - let { selectedList, listToDelete, listToDeleteS, keymap, superkeys } = this.state; - for (let i = 0; i < listToDelete.length; i++) { - if (selectedList == -1) { - keymap[listToDelete[i].layer][listToDelete[i].pos] = this.keymapDB.parse(0); + const { selectedList, listToDelete, listToDeleteS, keymap, superkeys } = this.state; + for (let i = 0; i < listToDelete.length; i += 1) { + if (listToDelete[i].newKey === -1) { + keymap.custom[listToDelete[i].layer][listToDelete[i].pos] = this.keymapDB.parse(0); } else { - keymap[listToDelete[i].layer][listToDelete[i].pos] = this.keymapDB.parse(selectedList + 53852); + keymap.custom[listToDelete[i].layer][listToDelete[i].pos] = this.keymapDB.parse(listToDelete[i].newKey + 53852); } } - for (let i = 0; i < listToDeleteS.length; i++) { - if (selectedList == -1) { + for (let i = 0; i < listToDeleteS.length; i += 1) { + if (selectedList === -1) { superkeys[listToDeleteS[i].i][listToDeleteS[i].pos] = 1; } else { superkeys[listToDeleteS[i].i][listToDeleteS[i].pos] = selectedList + 53852; @@ -416,65 +354,166 @@ class MacroEditor extends React.Component { } this.setState({ keymap, superkeys }); this.toggleDeleteModal(); - return; } UpdateList(data) { this.setState({ selectedList: data }); - return; } - addMacro = name => { - if (this.state.macros.length >= this.state.maxMacros) { - return; + updateKeyboard(keyboardIdx) { + const { macros, keymap, selectedList } = this.state; + let customKeymapList = []; + for (let i = keyboardIdx; i < macros.length; i += 1) { + const macroID = macros[i].id + 53852; + const newKey = i === keyboardIdx ? selectedList : i - 1; + const filteredKeys = keymap.custom + ? keymap.custom + .map((layer, layerIdx) => + layer.map((key, pos) => ({ layer: layerIdx, key, pos, newKey })).filter(elem => elem.key.keyCode === macroID), + ) + .flat() + : []; + customKeymapList = customKeymapList.concat(filteredKeys); } - const aux = this.state.macros; - const newID = aux.length; - aux.push({ - actions: [], - name: name, - id: newID, - macro: "" + // const superkeyList = superkey + // ? superkey + // .map((supers, i) => supers.map((action, pos) => ({ i, pos, action })).filter(elem => elem.action === macroID)) + // .flat() + // : []; + this.setState({ + listToDelete: customKeymapList, + listToDeleteS: [], + showDeleteModal: true, }); - this.updateMacros(aux); - this.changeSelected(newID); - }; + } - deleteMacro = () => { - if (this.state.macros.length === 0) { - return; + macroTranslator(raw) { + const { storedMacros } = this.state; + if (raw.search(" 0 0") === -1) { + return defaultMacro; } - const aux = JSON.parse(JSON.stringify(this.state.macros)); - const selected = this.state.selectedMacro; - aux.splice(selected, 1); - aux.forEach((item, idx) => { + const macrosArray = raw.split(" 0 0")[0].split(" ").map(Number); + + // Translate received macros to human readable text + const macros = []; + let iter = 0; + // macros are `0` terminated or when end of macrosArray has been reached, the outer loop + // must cycle once more than the inner + while (iter <= macrosArray.length) { + const actions = []; + while (iter < macrosArray.length) { + const type = macrosArray[iter]; + if (type === 0) { + break; + } + + switch (type) { + case 1: + actions.push({ + type, + keyCode: [ + (macrosArray[(iter += 1)] << 8) + macrosArray[(iter += 1)], + (macrosArray[(iter += 1)] << 8) + macrosArray[(iter += 1)], + ], + }); + break; + case 2: + case 3: + case 4: + case 5: + actions.push({ type, keyCode: (macrosArray[(iter += 1)] << 8) + macrosArray[(iter += 1)] }); + break; + case 6: + case 7: + case 8: + actions.push({ type, keyCode: macrosArray[(iter += 1)] }); + break; + default: + break; + } + + iter += 1; + } + macros.push({ + actions, + name: "", + macro: "", + }); + iter += 1; + } + macros.forEach((m, idx) => { + const aux = m; aux.id = idx; + macros[idx] = aux; }); - if (selected >= this.state.macros.length - 1) { - this.changeSelected(this.state.macros.length - 2); + + // TODO: Check if stored macros match the received ones, if they match, retrieve name and apply it to current macros + const stored = storedMacros; + if (stored === undefined || stored.length === 0) { + return macros; } - this.updateMacros(aux); - this.updateKeyboard(selected); - }; + return macros.map((macro, i) => { + if (stored.length < i) { + return macro; + } - saveName = data => { - const macros = JSON.parse(JSON.stringify(this.state.macros)); - macros[this.state.selectedMacro].name = data; - this.setState({ macros, modified: true }); - }; + return { + ...macro, + name: stored[i]?.name, + macro: macro.actions.map(k => this.keymapDB.parse(k.keyCode).label).join(" "), + }; + }); + } - // Define updateActions function to update the actions of the selected macro - updateActions = actions => { - const macrosList = this.state.macros; - macrosList[this.state.selectedMacro].actions = actions; - this.setState({ macros: macrosList, modified: true }); - }; + async loadMacros() { + const { onDisconnect } = this.props; + const focus = new Focus(); + try { + /** + * Create property language to the object 'options', to call KeymapDB in Keymap and modify languagu layout + */ + const chipID = (await focus.command("hardware.chip_id")).replace(/\s/g, ""); + const neurons = store.get("neurons"); + const neuron = neurons.find(n => n.id === chipID) || {}; + this.setState({ + neurons, + neuronID: neurons.findIndex(n => n.id === chipID), + storedMacros: neuron.macros, + }); + focus.commands.keymap = new Keymap({ ...focus.device, language: true }); + this.keymapDB = focus.commands.keymap.db; + let kbtype = "iso"; + try { + kbtype = focus.device && focus.device.info.keyboardType === "ISO" ? "iso" : "ansi"; + } catch (error) { + return false; + } - addToActions = actions => { - const macrosList = JSON.parse(JSON.stringify(this.state.macros)); - macrosList[this.state.selectedMacro].actions = actions; - this.setState({ macros: macrosList, modified: true }); - }; + let tMem = await focus.command("macros.memory"); + tMem = parseInt(tMem, 10); + if (tMem === undefined || tMem < 100) tMem = 2048; + const keymap = await focus.command("keymap"); + const macrosRaw = await focus.command("macros.map"); + const parsedMacros = this.macroTranslator(macrosRaw); + const supersRaw = await focus.command("superkeys.map"); + const parsedSuper = MacroEditor.superTranslator(supersRaw); + this.setState({ + macros: parsedMacros, + superkeys: parsedSuper, + keymap, + kbtype, + modified: false, + usedMemory: parsedMacros.map(m => m.actions).flat().length, + totalMemory: tMem, + loading: false, + }); + return true; + } catch (e) { + toast.error(<ToastMessage title={e} icon={<IconFloppyDisk />} />, { icon: "" }); + onDisconnect(); + return false; + } + } render() { const { @@ -488,36 +527,41 @@ class MacroEditor extends React.Component { totalMemory, showDeleteModal, kbtype, - currentLanguageLayout + currentLanguageLayout, + loading, } = this.state; - const ListOfMacros = listToDelete.map(({ layer, pos, key }, id) => { - return ( - <Row key={id}> - <Col xs={12} className="px-0 text-center gridded"> - <p className="titles alignvert">{`Key in layer ${layer} and pos ${pos}`}</p> - </Col> - </Row> - ); + const ListOfMacros = listToDelete.map(({ layer, pos, key, newKey }) => { + if (newKey === -1) { + return ( + <Row key={`${key.keyCode}-${layer}-${pos}-${newKey}`}> + <Col xs={12} className="px-0 text-center gridded"> + <p className="titles alignvert">{`Key in layer ${layer} and pos ${pos}`}</p> + </Col> + </Row> + ); + } + return ""; }); const ListCombo = ( <DropdownButton id="Selectlayers" className="selectButton" // drop={"up"} - title={macros.length > 0 && selectedList > -1 ? macros[selectedList].name : "No Key"} + title={macros.length > 0 && selectedList > -1 ? macros[selectedList]?.name : "No Key"} value={selectedList} onSelect={this.UpdateList} > <Dropdown.Item eventKey={-1} key={`macro-${-1}`} disabled={false}> - {"No Key"} + No Key </Dropdown.Item> - {macros.map((macro, id) => ( - <Dropdown.Item eventKey={macro.id} key={`macro-${id}`} disabled={macro.id == -1}> - {macro.name} + {macros.map(macro => ( + <Dropdown.Item eventKey={macro.id} key={`macro-${macro.id}`} disabled={macro.id === -1}> + {macro?.name} </Dropdown.Item> ))} </DropdownButton> ); + if (loading) return <LogoLoaderCentered />; return ( <Styles className="macroEditor"> <Container fluid> @@ -538,12 +582,20 @@ class MacroEditor extends React.Component { tMem={totalMemory} /> } - showSaving={true} + showSaving saveContext={this.writeMacros} destroyContext={this.loadMacros} inContext={modified} /> - <Callout content={i18n.editor.macros.callout} className="mt-md" size="sm" /> + <Callout + content={i18n.editor.macros.callout} + className="mt-md" + size="sm" + hasVideo + media="MfTUvFrHLsE" + videoTitle="13 Time-saving MACROS For Your Keyboard" + videoDuration="5:24" + /> {macros[selectedMacro] === undefined || macros[selectedMacro].actions === undefined ? ( <div /> ) : ( @@ -578,20 +630,20 @@ class MacroEditor extends React.Component { <Modal.Title>{i18n.editor.macros.deleteModal.title}</Modal.Title> </Modal.Header> <Modal.Body> - <p>{i18n.editor.macros.deleteModal.body}</p> {ListOfMacros} + <p>{i18n.editor.macros.deleteModal.body}</p> {ListCombo} </Modal.Body> <Modal.Footer> <RegularButton buttonText={i18n.editor.macros.deleteModal.cancelButton} - style="outline" + styles="outline transp-bg" size="sm" onClick={this.toggleDeleteModal} /> <RegularButton buttonText={i18n.editor.macros.deleteModal.applyButton} - style="outline gradient" + styles="outline gradient" size="sm" onClick={this.ActUponDelete} /> @@ -602,4 +654,9 @@ class MacroEditor extends React.Component { } } +MacroEditor.propTypes = { + startContext: PropTypes.func, + onDisconnect: PropTypes.func, +}; + export default MacroEditor; diff --git a/src/renderer/views/Preferences.js b/src/renderer/views/Preferences.js index eeacc0a66..68074affc 100644 --- a/src/renderer/views/Preferences.js +++ b/src/renderer/views/Preferences.js @@ -19,29 +19,31 @@ import React from "react"; import { ipcRenderer } from "electron"; import Styled from "styled-components"; -import i18n from "../i18n"; import Container from "react-bootstrap/Container"; import Row from "react-bootstrap/Row"; import Col from "react-bootstrap/Col"; import Form from "react-bootstrap/Form"; import Spinner from "react-bootstrap/Spinner"; -import { ToastContainer, toast } from "react-toastify"; +import { toast } from "react-toastify"; +import i18n from "@Renderer/i18n"; import "react-toastify/dist/ReactToastify.css"; // Custom modules imports -import { KeyboardSettings } from "../modules/Settings/KeyboardSettings"; -import { BackupSettings, GeneralSettings, NeuronSettings, AdvancedSettings } from "../modules/Settings"; +import { KeyboardSettings } from "@Renderer/modules/Settings/KeyboardSettings"; +import { BackupSettings, GeneralSettings, NeuronSettings, AdvancedSettings } from "@Renderer/modules/Settings"; +import { PageHeader } from "@Renderer/modules/PageHeader"; +import ToastMessage from "@Renderer/component/ToastMessage"; +import { RegularButton } from "@Renderer/component/Button"; +import { IconFloppyDisk } from "@Renderer/component/Icon"; +import Version from "@Renderer/component/Version/Version"; + +import Store from "@Renderer/utils/Store"; import Focus from "../../api/focus"; import Backup from "../../api/backup"; -import PageHeader from "../modules/PageHeader"; -import ToastMessage from "../component/ToastMessage"; -import { RegularButton } from "../component/Button"; -import { IconFloppyDisk } from "../component/Icon"; -const Store = require("electron-store"); -const store = new Store(); +const store = Store.getStore(); const Styles = Styled.div` .toggle-button{ @@ -59,9 +61,10 @@ class Preferences extends React.Component { keymap: { custom: [], default: [], - onlyCustom: true + onlyCustom: true, }, ledBrightness: 255, + ledBrightnessUG: 255, defaultLayer: 126, ledIdleTimeLimit: 0, qukeysHoldTimeout: 0, @@ -79,7 +82,7 @@ class Preferences extends React.Component { mouseWheelDelay: 100, mouseSpeedLimit: 1, modified: props.inContext, - showDefaults: false + showDefaults: false, }; this.state = { @@ -91,11 +94,12 @@ class Preferences extends React.Component { selectedNeuron: 0, neuronID: "", kbData: this.kbData, - modified: props.inContext + modified: props.inContext, }; } async componentDidMount() { + const focus = new Focus(); const devTools = await ipcRenderer.invoke("is-devtools-opened"); this.setState({ devTools }); ipcRenderer.on("opened-devtool", (event, arg) => { @@ -117,13 +121,9 @@ class Preferences extends React.Component { } getNeuronData = async () => { - let focus = new Focus(); - - // Checking if device is wired or wireless - this.setState({ wireless: focus.device.info.keyboardType === "wireless" }); + const focus = new Focus(); // EXTRACTING DATA FROM NEURON - await focus.command("hardware.chip_id").then(neuronID => { neuronID = neuronID.replace(/\s/g, ""); this.setState({ neuronID }); @@ -144,6 +144,11 @@ class Preferences extends React.Component { this.kbData.ledBrightness = brightness; }); + await focus.command("led.brightnessUG").then(brightness => { + brightness = brightness ? parseInt(brightness) : -1; + this.kbData.ledBrightnessUG = brightness; + }); + await focus.command("idleleds.time_limit").then(limit => { this.kbData.ledIdleTimeLimit = limit ? parseInt(limit) : -1; }); @@ -167,121 +172,33 @@ class Preferences extends React.Component { this.kbData.SuperTimeout = timeout; }); - // await focus.command("superkeys.repeat").then(repeat => { - // repeat = repeat ? parseInt(repeat) : 20; - // this.kbData.SuperRepeat = repeat; - // }); - - // await focus.command("superkeys.waitfor").then(waitfor => { - // waitfor = waitfor ? parseInt(waitfor) : 500; - // this.kbData.SuperWaitfor = waitfor; - // }); - await focus.command("superkeys.holdstart").then(holdstart => { holdstart = holdstart ? parseInt(holdstart) : 200; this.kbData.SuperHoldstart = holdstart; }); - // await focus.command("superkeys.overlap").then(overlapThreshold => { - // overlapThreshold = overlapThreshold ? parseInt(overlapThreshold) : 20; - // this.kbData.SuperOverlapThreshold =overlapThreshold; - // }); - // MOUSE variables commands await focus.command("mouse.speed").then(speed => { speed = speed ? parseInt(speed) : 1; this.kbData.mouseSpeed = speed; }); - // await focus.command("mouse.speedDelay").then(speedDelay => { - // speedDelay = speedDelay ? parseInt(speedDelay) : 6; - // this.kbData.mouseSpeedDelay = speedDelay; - // }); - await focus.command("mouse.accelSpeed").then(accelSpeed => { accelSpeed = accelSpeed ? parseInt(accelSpeed) : 1; this.kbData.mouseAccelSpeed = accelSpeed; }); - // await focus.command("mouse.accelDelay").then(accelDelay => { - // accelDelay = accelDelay ? parseInt(accelDelay) : 64; - // this.kbData.mouseAccelDelay = accelDelay; - // }); - await focus.command("mouse.wheelSpeed").then(wheelSpeed => { wheelSpeed = wheelSpeed ? parseInt(wheelSpeed) : 1; this.kbData.mouseWheelSpeed = wheelSpeed; }); - // await focus.command("mouse.wheelDelay").then(wheelDelay => { - // wheelDelay = wheelDelay ? parseInt(wheelDelay) : 128; - // this.kbData.mouseWheelDelay: wheelDelay }); - // }); - await focus.command("mouse.speedLimit").then(speedLimit => { speedLimit = speedLimit ? parseInt(speedLimit) : 127; this.kbData.mouseSpeedLimit = speedLimit; }); - if (this.state.wireless) { - // Use focus commands to retrieve wireless data - this.kbData.wireless = {}; - - // Battery commands - this.kbData.wireless.battery = {}; - await focus.command("wireless.battery.level").then(batteryLevel => { - this.kbData.wireless.battery.level = batteryLevel; - }); - await focus.command("wireless.battery.state").then(batteryState => { - this.kbData.wireless.battery.state = batteryState; - }); - await focus.command("wireless.battery.mode").then(batteryMode => { - this.kbData.wireless.battery.mode = batteryMode; - }); - - // Energy commands - this.kbData.wireless.energy = {}; - await focus.command("wireless.energy.modes").then(energyModes => { - this.kbData.wireless.energy.modes = energyModes; - }); - await focus.command("wireless.energy.currentMode").then(energyMode => { - this.kbData.wireless.energy.currentMode = energyMode; - }); - await focus.command("wireless.energy.disable").then(energyDisable => { - this.kbData.wireless.energy.disable = energyDisable; - }); - - // Bluetooth commands - this.kbData.wireless.bluetooth = {}; - await focus.command("wireless.bluetooth.devices").then(bluetoothDevices => { - this.kbData.wireless.bluetooth.devices = bluetoothDevices; - }); - await focus.command("wireless.bluetooth.state").then(bluetoothState => { - this.kbData.wireless.bluetooth.state = bluetoothState; - }); - await focus.command("wireless.bluetooth.stability").then(bluetoothStability => { - this.kbData.wireless.bluetooth.stability = bluetoothStability; - }); - - // rf commands - this.kbData.wireless.rf = {}; - await focus.command("wireless.rf.channelHop").then(rfChannelHop => { - this.kbData.wireless.rf.channelHop = rfChannelHop; - }); - await focus.command("wireless.rf.state").then(rfState => { - this.kbData.wireless.rf.state = rfState; - }); - await focus.command("wireless.rf.stability").then(rfStability => { - this.kbData.wireless.rf.stability = rfStability; - }); - - // Additional commands - await focus.command("led.brightness.underglow").then(UGBrightness => { - this.kbData.ledBrightnessUG = UGBrightness; - }); - } - - //Save in state + // Save in state this.setState({ kbData: this.kbData }); }; @@ -293,6 +210,7 @@ class Preferences extends React.Component { defaultLayer, showDefaults, ledBrightness, + ledBrightnessUG, ledIdleTimeLimit, qukeysHoldTimeout, qukeysOverlapThreshold, @@ -300,7 +218,6 @@ class Preferences extends React.Component { SuperRepeat, SuperWaitfor, SuperHoldstart, - SuperOverlapThreshold, mouseSpeed, mouseSpeedDelay, mouseAccelSpeed, @@ -308,13 +225,12 @@ class Preferences extends React.Component { mouseWheelSpeed, mouseWheelDelay, mouseSpeedLimit, - wireless, - ledBrightnessUG } = this.kbData; await await focus.command("keymap.onlyCustom", keymap.onlyCustom); await await focus.command("settings.defaultLayer", defaultLayer); await await focus.command("led.brightness", ledBrightness); + await await focus.command("led.brightnessUG", ledBrightnessUG); if (ledIdleTimeLimit >= 0) await await focus.command("idleleds.time_limit", ledIdleTimeLimit); store.set("settings.showDefaults", showDefaults); // QUKEYS @@ -325,7 +241,6 @@ class Preferences extends React.Component { await await focus.command("superkeys.repeat", SuperRepeat); await await focus.command("superkeys.waitfor", SuperWaitfor); await await focus.command("superkeys.holdstart", SuperHoldstart); - // await await focus.command("superkeys.overlap", SuperOverlapThreshold); // MOUSE KEYS await await focus.command("mouse.speed", mouseSpeed); await await focus.command("mouse.speedDelay", mouseSpeedDelay); @@ -334,24 +249,8 @@ class Preferences extends React.Component { await await focus.command("mouse.wheelSpeed", mouseWheelSpeed); await await focus.command("mouse.wheelDelay", mouseWheelDelay); await await focus.command("mouse.speedLimit", mouseSpeedLimit); - // WIRELESS - if (this.state.wireless) { - await await focus.command("wireless.battery.level", wireless.battery.level); - await await focus.command("wireless.battery.state", wireless.battery.state); - await await focus.command("wireless.battery.mode", wireless.battery.mode); - await await focus.command("wireless.energy.modes", wireless.energy.modes); - await await focus.command("wireless.energy.currentMode", wireless.energy.currentMode); - await await focus.command("wireless.energy.disable", wireless.energy.disable); - await await focus.command("wireless.bluetooth.devices", wireless.bluetooth.devices); - await await focus.command("wireless.bluetooth.state", wireless.bluetooth.state); - await await focus.command("wireless.bluetooth.stability", wireless.bluetooth.stability); - await await focus.command("wireless.rf.channelHop", wireless.rf.channelHop); - await await focus.command("wireless.rf.state", wireless.rf.state); - await await focus.command("wireless.rf.stability", wireless.rf.stability); - await await focus.command("led.brightness.underglow", ledBrightnessUG); - } - //TODO: Review toast popup on try/catch works well. + // TODO: Review toast popup on try/catch works well. try { const commands = await this.bkp.Commands(); const backup = await this.bkp.DoBackup(commands, this.state.neuronID); @@ -364,7 +263,7 @@ class Preferences extends React.Component { pauseOnHover: true, draggable: true, progress: undefined, - icon: "" + icon: "", }); } catch (error) { console.error(error); @@ -382,8 +281,8 @@ class Preferences extends React.Component { pauseOnHover: true, draggable: true, progress: undefined, - icon: "" - } + icon: "", + }, ); } @@ -429,7 +328,7 @@ class Preferences extends React.Component { // ADVANCED FUNCTIONS toggleAdvanced = () => { this.setState(state => ({ - advanced: !state.advanced + advanced: !state.advanced, })); }; @@ -446,13 +345,13 @@ class Preferences extends React.Component { }; toggleVerboseFocus = event => { - this.setState({ verboseFocus: event.target.checked }); - let focus = new Focus(); - focus.debug = event.target.checked; + const focus = new Focus(); + focus.debug = !this.state.verboseFocus; + this.setState({ verboseFocus: !this.state.verboseFocus }); }; toggleOnlyCustom = event => { - let newkbData = this.kbData; + const newkbData = this.kbData; newkbData.keymap.onlyCustom = event.target.checked; newkbData.modified = true; this.setState({ modified: true }); @@ -462,15 +361,15 @@ class Preferences extends React.Component { // NEURON FUNCTIONS selectNeuron = value => { this.setState({ - selectedNeuron: parseInt(value) + selectedNeuron: parseInt(value), }); }; updateNeuronName = data => { - let temp = this.state.neurons; + const temp = this.state.neurons; temp[this.state.selectedNeuron].name = data; this.setState({ - neurons: temp + neurons: temp, }); this.applyNeuronName(temp); }; @@ -480,24 +379,18 @@ class Preferences extends React.Component { }; deleteNeuron = async () => { - let result = await window.confirm(i18n.keyboardSettings.neuronManager.deleteNeuron); + const result = await window.confirm(i18n.keyboardSettings.neuronManager.deleteNeuron); if (result) { - let temp = JSON.parse(JSON.stringify(this.state.neurons)); + const temp = JSON.parse(JSON.stringify(this.state.neurons)); temp.splice(this.state.selectedNeuron, 1); this.setState({ neurons: temp, - selectedNeuron: temp.length - 1 > this.selectNeuron ? this.selectNeuron : temp.length - 1 + selectedNeuron: temp.length - 1 > this.selectNeuron ? this.selectNeuron : temp.length - 1, }); store.set("neurons", temp); } }; - sendRePairCommand = async () => { - let focus = new Focus(); - const result = await focus.command("wireless.rf.syncPairing"); - console.log("command returned", result); - }; - render() { const { neurons, selectedNeuron, darkMode, neuronID, devTools, verboseFocus, kbData, modified } = this.state; const { inContext, connected, allowBeta, updateAllowBeta } = this.props; @@ -506,7 +399,7 @@ class Preferences extends React.Component { const verboseSwitch = <Form.Check type="switch" checked={verboseFocus} onChange={this.toggleVerboseFocus} />; const onlyCustomSwitch = <Form.Check type="switch" checked={kbData.keymap.onlyCustom} onChange={this.toggleOnlyCustom} />; const allowBetas = <Form.Check value={allowBeta} type="switch" checked={allowBeta} onChange={updateAllowBeta} />; - const pairingButton = <RegularButton buttonText={"Re-Pair RF"} style="short warning sm" onClick={this.sendRePairCommand} />; + const pairingButton = <RegularButton buttonText={"Re-Pair RF"} styles="short warning sm" onClick={this.sendRePairCommand} />; // console.log("CHECKING STATUS MOD", modified); // console.log("CHECKING STATUS CTX", inContext); @@ -515,8 +408,8 @@ class Preferences extends React.Component { <Container fluid> <PageHeader text={i18n.preferences.title} - style={"pageHeaderFlatBottom"} - showSaving={true} + style="pageHeaderFlatBottom" + showSaving showContentSelector={false} saveContext={this.saveKeymapChanges} destroyContext={this.destroyContext} @@ -550,9 +443,10 @@ class Preferences extends React.Component { verboseSwitch={verboseSwitch} onlyCustomSwitch={onlyCustomSwitch} allowBetas={allowBetas} - pairingButton={this.state.wireless ? pairingButton : <></>} + pairingButton={<></>} connected={connected} /> + <Version /> </Col> </Row> </Container> diff --git a/src/renderer/views/SelectKeyboard.js b/src/renderer/views/SelectKeyboard.js deleted file mode 100644 index c5f5a7b31..000000000 --- a/src/renderer/views/SelectKeyboard.js +++ /dev/null @@ -1,806 +0,0 @@ -// -*- mode: js-jsx -*- -/* Bazecor - * Copyright (C) 2022 Dygmalab, Inc. - * - * This program is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by the Free Software - * Foundation, version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -import React, { Component } from "react"; -import Styled from "styled-components"; -import { toast } from "react-toastify"; -import fs from "fs"; -import path from "path"; -import { usb, getDeviceList } from "usb"; -const { ipcRenderer } = require("electron"); - -import Container from "react-bootstrap/Container"; -import Row from "react-bootstrap/Row"; -import Col from "react-bootstrap/Col"; -import Button from "react-bootstrap/Button"; -import Modal from "react-bootstrap/Modal"; -import { RegularButton } from "../component/Button"; - -import PageHeader from "../modules/PageHeader"; - -import Card from "react-bootstrap/Card"; -import Spinner from "react-bootstrap/Spinner"; -import Dropdown from "react-bootstrap/Dropdown"; - -import Focus from "../../api/focus"; -import Hardware from "../../api/hardware"; -import { RaiseISO, RaiseANSI, DefyWired, DefyWireless, enumerator } from "../../api/hardware/virtual"; - -import i18n from "../i18n"; -import NeuronConnection from "../modules/NeuronConnection"; -import ToastMessage from "../component/ToastMessage"; -import { newError } from "builder-util-runtime"; - -import { IconArrowRight, IconCloudDownload, IconUpload, IconKeyboard } from "../component/Icon"; -//import iconKeyboard from "../../../static/base/icon-keyboard.svg"; -import Title from "../component/Title"; -import { Select } from "../component/Select"; - -const Store = require("electron-store"); -const store = new Store(); - -const Styles = Styled.div` -height: 100vh; -.main-container { - overflow: hidden; - height: 100vh; -} -.cardButton-wrapper { - display: block; - width: 100%; - text-align: left; - padding-top: 16px; - margin-top: 16px; - border-top: 1px solid ${({ theme }) => theme.styles.virtualKeyboard.cardButtonDivider}; - .cardButton { - padding: 8px 24px; - background: ${({ theme }) => theme.styles.virtualKeyboard.cardButtonBackground}; - border-radius: 6px; - width: 100%; - .button-link { - padding-left: 0; - font-size: 14px; - color: ${({ theme }) => theme.colors.purple200}; - } - } -} -.keyboard-select { - height: 100%; - display: flex; - flex-wrap: wrap; - justify-content: center; - .keyboard-row { - justify-content: center; - align-items: center; - display: flex; - padding-top: 15vh; - .keyboard-col { - min-width: 500px; - max-width: 500px; - - .keyboard-card { - background: ${({ theme }) => theme.card.background}; - border: none; - box-shadow: none; - .loader { - align-self: center; - .spinner-border { - width: 4rem; - height: 4rem; - } - } - .preview { - justify-content: center; - align-items: center; - display: flex; - padding: 0px; - - .keyboard { - justify-content: center; - align-items: center; - display: flex; - svg { - width: 80%; - margin-bottom: 10px; - } - } - .options { - text-align: center; - .selector { - width: 100%; - .dropdown-toggle::after{ - position: absolute; - right: 10px; - top: 30px; - } - .toggler { - width: 100%; - background-color: transparent; - color: ${({ theme }) => theme.colors.button.text}; - border: 0; - border-bottom: black 1px solid; - border-radius: 0px; - padding-bottom: 6px; - :hover { - background-color: transparent; - } - } - .toggler:hover { - border-bottom: black 2px solid; - padding-bottom: 5px; - } - .toggler:focus { - border-bottom: rgba($color: red, $alpha: 0.8) 2px solid; - box-shadow: none; - } - .menu { - width: inherit; - justify-content: center; - align-items: center; - text-align: center; - } - .key-icon { - background-color: ${({ theme }) => theme.colors.button.background} !important; - border-radius: 100%; - padding: 0; - max-width: 50px; - height: 50px; - svg { - font-size: 2.1em; - margin-top: 18%; - width: 100%; - color: ${({ theme }) => theme.colors.button.text}; - } - } - .key-text { - span { - width: 100%; - } - } - .muted { - color: rgba(140,140,140,0.8) !important; - } - a:hover { - background-color: ${({ theme }) => theme.colors.button.hover} !important; - } - .dropdown-item { - display: inherit; - } - } - .selector-error { - color: red; - } - } - } - } - .buttons { - padding: 0px; - button { - width: 100%; - } - } - } - } -} - - -`; - -class SelectKeyboard extends Component { - constructor(props) { - super(props); - this.state = { - selectedPortIndex: 0, - opening: false, - devices: null, - loading: true, - dropdownOpen: false, - showVirtualKeyboardModal: false, - selectedVirtualKeyboard: 0 - }; - - this.onKeyboardConnect = this.onKeyboardConnect.bind(this); - this.scanDevices = this.scanDevices.bind(this); - this.selectPort = this.selectPort.bind(this); - this.selectVirtualKeyboard = this.selectVirtualKeyboard.bind(this); - } - - findNonSerialKeyboards = deviceList => { - const devices = getDeviceList().map(device => device.deviceDescriptor); - devices.forEach(desc => { - Hardware.nonSerial.forEach(device => { - if (desc.idVendor == device.usb.vendorId && desc.idProduct == device.usb.productId) { - let found = false; - deviceList.forEach(sDevice => { - if (sDevice.device.usb.vendorId == desc.idVendor && sDevice.device.usb.productId == desc.idProduct) { - found = true; - } - }); - if (!found) deviceList.push({ device: device }); - } - }); - }); - return deviceList; - }; - - findKeyboards = async () => { - this.setState({ loading: true }); - let focus = new Focus(); - const isIterable = this.state.devices != null && typeof this.state.devices[Symbol.iterator] === "function"; - if (focus.closed === false && isIterable) { - this.setState({ - loading: false - }); - return; - } - return new Promise(resolve => { - focus - .find(...Hardware.serial) - .then(async devices => { - console.log("Printing devices: ", devices); - let supported_devices = []; - for (const device of devices) { - device.accessible = await focus.isDeviceAccessible(device); - if (device.accessible && (await focus.isDeviceSupported(device))) { - supported_devices.push(device); - } else if (!device.accessible) { - supported_devices.push(device); - } - } - const list = this.findNonSerialKeyboards(supported_devices); - this.setState({ - loading: false, - devices: list - }); - resolve(list.length > 0); - }) - .catch(() => { - const list = this.findNonSerialKeyboards([]); - this.setState({ - loading: false, - devices: list - }); - resolve(list.length > 0); - }); - }); - }; - - scanDevices = async () => { - let found = await this.findKeyboards(); - this.setState({ scanFoundDevices: found }); - setTimeout(() => { - this.setState({ scanFoundDevices: undefined }); - }, 1000); - }; - - toggleVirtualKeyboardModal() { - this.setState({ showVirtualKeyboardModal: !this.state.showVirtualKeyboardModal }); - } - - componentDidMount() { - this.finder = () => { - this.findKeyboards(); - }; - usb.on("attach", this.finder); - usb.on("detach", this.finder); - - this.findKeyboards().then(() => { - let focus = new Focus(); - if (!focus._port) return; - - for (let device of this.state.devices) { - if (!device.path) continue; - - if (device.path == focus._port.path) { - this.setState(state => ({ - selectedPortIndex: state.devices.indexOf(device) - })); - break; - } - } - }); - } - - componentWillUnmount() { - usb.off("attach", this.finder); - usb.off("detach", this.finder); - } - - selectVirtualKeyboard = event => { - console.log(event); - this.setState({ selectedVirtualKeyboard: event }); - }; - - selectPort = event => { - console.log(event); - this.setState({ selectedPortIndex: event }); - }; - - onKeyboardConnect = async () => { - this.setState({ opening: true }); - - const { devices } = this.state; - - try { - await this.props.onConnect(devices[this.state.selectedPortIndex], null); - } catch (err) { - this.setState({ - opening: false - }); - toast.error(<ToastMessage title={err.toString()} />, { icon: "" }); - } - i18n.refreshHardware(devices[this.state.selectedPortIndex]); - }; - - convertBackupToVK = async backup => { - let vk, fileName; - - for (let device of Hardware.serial) { - if ( - backup.neuron.device.usb.productId == device.usb.productId && - backup.neuron.device.usb.vendorId == device.usb.vendorId && - backup.neuron.device.info.keyboardType == device.info.keyboardType - ) { - if (device.info.keyboardType == "ANSI") { - vk = { ...RaiseANSI }; - fileName = "VirtualRaiseANSI"; - } - if (device.info.keyboardType == "ISO") { - vk = { ...RaiseISO }; - fileName = "VirtualRaiseISO"; - } - if (device.info.keyboardType == "wired") { - vk = { ...DefyWired }; - fileName = "VirtualDefy"; - } - //TODO: replace this DEFY with the wireless version - if (device.info.keyboardType == "wireless") { - vk = { ...DefyWireless }; - fileName = "VirtualDefy"; - } - vk.device.components = device.components; - } - } - - for (let line of backup.backup) { - vk.virtual[line.command].data = line.data; - } - - // Ask the user for the place to put the backup - - let options = { - title: i18n.keyboardSelect.virtualKeyboard.newTitle, - buttonLabel: i18n.keyboardSelect.virtualKeyboard.buttonLabelSave, - defaultPath: path.join(store.get("settings.backupFolder"), fileName + ".json"), - filters: [{ name: "Json", extensions: ["json"] }] - }; - const newPath = await ipcRenderer.invoke("save-dialog", options); - console.log("Save file to", newPath); - - // Save the virtual KB in the specified location - const json = JSON.stringify(vk, null, 2); - require("fs").writeFileSync(newPath, json, err => { - if (err) { - console.error(err); - throw err; - } - }); - - vk.device.path = "VIRTUAL"; - vk.device.bootloader = false; - vk.device.filePath = newPath; - return vk; - }; - - getDateTime = () => { - const d = new Date(); - return `-${ - d.getFullYear() + - ("0" + (d.getMonth() + 1)).slice(-2) + - ("0" + d.getDate()).slice(-2) + - ("0" + d.getHours()).slice(-2) + - ("0" + d.getMinutes()).slice(-2) + - ("0" + d.getSeconds()).slice(-2) - }`; - }; - - useAFile = async () => { - // Read a file that is a backup - let options = { - title: i18n.keyboardSelect.virtualKeyboard.useTitle, - buttonLabel: i18n.keyboardSelect.virtualKeyboard.buttonLabel, - filters: [ - { name: "Json", extensions: ["json"] }, - { name: i18n.dialog.allFiles, extensions: ["*"] } - ] - }; - const data = await ipcRenderer.invoke("open-dialog", options); - let filePath; - if (!data.canceled) { - filePath = data.filePaths[0]; - } else { - console.log("user closed file connect dialog"); - return; - } - console.log("Opening file", filePath); - // Open the file and load it's contents - let file; - try { - file = JSON.parse(fs.readFileSync(filePath)); - // console.log(file); - // console.log("loaded backup", file.device.info.product + " " + file.device.info.keyboardType, file.virtual.version.data); - if (!file.virtual && !file.backup) newError("not a valid file, no virtual or backup objects"); - } catch (e) { - console.error(e); - alert(i18n.keyboardSelect.virtualKeyboard.errorLoadingFile); - return; - } - if (!file.virtual && file.backup) { - if (!confirm(i18n.keyboardSelect.virtualKeyboard.backupTransform)) { - return; - } - file = this.convertBackupToVK(file); - file.virtual["hardware.chip_id"].data = file.virtual["hardware.chip_id"].data + this.getDateTime(); - await this.props.onConnect(file.device, file); - return; - } - - for (let device of Hardware.serial) { - if ( - file.device.usb.productId == device.usb.productId && - file.device.usb.vendorId == device.usb.vendorId && - file.device.info.keyboardType == device.info.keyboardType - ) { - file.device.components = device.components; - } - } - - file.device.path = "VIRTUAL"; - file.device.bootloader = false; - file.device.filePath = filePath; - await this.props.onConnect(file.device, file); - }; - - newFile = async (virtualKeyboard, fileName) => { - // Ask the user for the place to put the backup - let options = { - title: i18n.keyboardSelect.virtualKeyboard.newTitle, - buttonLabel: i18n.keyboardSelect.virtualKeyboard.buttonLabelSave, - defaultPath: path.join(store.get("settings.backupFolder"), fileName + ".json"), - filters: [{ name: "Json", extensions: ["json"] }] - }; - const newPath = await ipcRenderer.invoke("save-dialog", options); - console.log("Save file to", newPath); - - console.log("Exchange focus for file access"); - for (let device of Hardware.serial) { - if ( - virtualKeyboard.device.usb.productId == device.usb.productId && - virtualKeyboard.device.usb.vendorId == device.usb.vendorId && - virtualKeyboard.device.info.keyboardType == device.info.keyboardType - ) { - virtualKeyboard.device.components = device.components; - } - } - - virtualKeyboard.device.path = "VIRTUAL"; - virtualKeyboard.device.bootloader = false; - virtualKeyboard.device.filePath = newPath; - virtualKeyboard.virtual["hardware.chip_id"].data = virtualKeyboard.virtual["hardware.chip_id"].data + this.getDateTime(); - - // Retarded virtualKeyboard storage to save ti with new hardware.chipID - // Save the virtual KB in the specified location - const json = JSON.stringify(virtualKeyboard, null, 2); - require("fs").writeFileSync(newPath, json, err => { - if (err) { - console.error(err); - throw err; - } - }); - - // Final connection function - await this.props.onConnect(virtualKeyboard.device, virtualKeyboard); - }; - - render() { - const { scanFoundDevices, devices, loading, selectedPortIndex, opening, dropdownOpen, selectedVirtualKeyboard } = this.state; - const { onDisconnect, connected } = this.props; - - let loader = null; - if (loading) { - loader = ( - <Card.Body className="loader"> - <Spinner className="spinner-border text-danger" role="status" /> - </Card.Body> - ); - } - - let deviceItems = null; - let port = null; - if (devices && devices.length > 0) { - deviceItems = devices.map((option, index) => { - let neurons = store.get("neurons"); - let userName = "Neuron"; - if (neurons != undefined && option.serialNumber != undefined) - userName = neurons.filter(n => - n.id.toLowerCase() == option.serialNumber > 6 ? option.serialNumber.slice(0, -6).toLowerCase() : option.serialNumber - ); - if (userName.length > 0) { - userName = userName[0].name; - } else { - userName = ""; - } - // console.log("LOGGING", userName, option.serialNumber.slice(0, -6).toLowerCase()); - let label = option.path; - if (option.device && option.device.info) { - label = ( - <Col xs="10" className="key-text"> - <Col> - <span>{option.device.info.displayName}</span> - </Col> - <Col> - <span>{userName}</span> - </Col> - <Col> - <span className="muted">{option.path || i18n.keyboardSelect.unknown}</span> - </Col> - </Col> - ); - } else if (option.info) { - label = ( - <Col xs="10" className="key-text"> - <Col> - <span>{option.device.info.displayName}</span> - </Col> - <Col> - <span className="muted" /> - </Col> - </Col> - ); - } - - return { - index, - displayName: option.device.info.displayName, - userName, - path: option.path || i18n.keyboardSelect.unknown - }; - }); - - const title = devices.map(option => { - let neurons = store.get("neurons"); - let userName = "Neuron"; - if (neurons != undefined && option.serialNumber != undefined) - userName = neurons.filter(n => - n.id.toLowerCase() == option.serialNumber > 6 ? option.serialNumber.slice(0, -6).toLowerCase() : option.serialNumber - ); - if (userName.length > 0) { - userName = userName[0].name; - } else { - userName = ""; - } - // console.log("LOGGING", userName, option.serialNumber.slice(0, -6).toLowerCase()); - let label = option.path; - if (option.device && option.device.info) { - label = ( - <Col xs="12" className="key-text"> - <Col> - <span>{option.device.info.displayName}</span> - </Col> - <Col> - <span>{userName}</span> - </Col> - <Col> - <span className="muted">{option.path || i18n.keyboardSelect.unknown}</span> - </Col> - </Col> - ); - } else if (option.info) { - label = ( - <Col xs="12" className="key-text"> - <Col> - <span>{option.device.info.displayName}</span> - </Col> - <Col> - <span className="muted" /> - </Col> - </Col> - ); - } - - return <Row key={`key-${option}`}>{label}</Row>; - }); - - port = ( - <Dropdown - className="selector" - show={dropdownOpen} - onClick={() => - this.setState(state => { - return { dropdownOpen: !state.dropdownOpen }; - }) - } - > - <Dropdown.Toggle className="toggler">{title[0]}</Dropdown.Toggle> - <Dropdown.Menu className="menu">{deviceItems}</Dropdown.Menu> - </Dropdown> - ); - } - - if (devices && devices.length == 0) { - port = <span className="selector-error">{i18n.keyboardSelect.noDevices}</span>; - } - - let connectContent = i18n.keyboardSelect.connect; - if (this.state.opening) { - connectContent = <circularProgress color="secondary" size={16} />; - } - - let connectionButton, permissionWarning; - let focus = new Focus(); - const selectedDevice = devices && devices[this.state.selectedPortIndex]; - - if (selectedDevice && !selectedDevice.accessible) { - permissionWarning = <span className="selector-error">{i18n.keyboardSelect.permissionError}</span>; - } - - if (focus.device && selectedDevice && selectedDevice.device == focus.device) { - connectionButton = ( - <Button disabled={opening || (devices && devices.length === 0)} color="secondary" onClick={onDisconnect}> - {i18n.keyboardSelect.disconnect} - </Button> - ); - } else { - connectionButton = ( - <RegularButton - disabled={(selectedDevice ? !selectedDevice.accessible : false) || opening || (devices && devices.length === 0)} - style="primary" - onClick={this.onKeyboardConnect} - buttonText={i18n.keyboardSelect.connect} - className="" - > - {connectContent} - </RegularButton> - ); - } - - let preview; - if ( - devices && - devices[this.state.selectedPortIndex] && - devices[this.state.selectedPortIndex].device && - devices[this.state.selectedPortIndex].device.components - ) { - const Keymap = devices[this.state.selectedPortIndex].device.components.keymap; - preview = <Keymap index={0} className="" showUnderglow={true} />; - } - console.log("Focus device: ", focus.device); - return ( - <Styles> - <Container fluid className="keyboard-select center-content"> - <PageHeader text={i18n.keyboardSelect.title} /> - <div className="keyboardSelection-wrapper"> - <NeuronConnection - loading={loading} - scanFoundDevices={scanFoundDevices != undefined ? scanFoundDevices : false} - scanDevices={this.scanDevices} - cantConnect={(selectedDevice ? !selectedDevice.accessible : false) || opening || (devices && devices.length === 0)} - onKeyboardConnect={this.onKeyboardConnect} - connected={connected} - onDisconnect={onDisconnect} - deviceItems={deviceItems != null ? deviceItems : []} - selectPort={this.selectPort} - selectedPortIndex={selectedPortIndex} - isVirtual={focus.file} - virtualDevice={focus.device} - /> - <div className="cardButton-wrapper"> - <div className="cardButton"> - <RegularButton - buttonText={i18n.keyboardSelect.virtualKeyboard.buttonText} - style="button-link" - icoSVG={<IconArrowRight />} - icoPosition="right" - size="sm" - onClick={() => { - this.toggleVirtualKeyboardModal(); - }} - /> - </div> - <Modal - show={this.state.showVirtualKeyboardModal} - size="lg" - onHide={() => this.toggleVirtualKeyboardModal()} - aria-labelledby="contained-modal-title-vcenter" - centered - > - <Modal.Header closeButton> - <Modal.Title>{i18n.keyboardSelect.virtualKeyboard.modaltitle}</Modal.Title> - </Modal.Header> - <Modal.Body> - <div className="virtualKeyboards-wrapper"> - <div className="virtualKeyboards-col"> - <Title - text={i18n.keyboardSelect.virtualKeyboard.newVirtualKeyboardTitle} - headingLevel={4} - svgICO={<IconCloudDownload />} - /> - <p>{i18n.keyboardSelect.virtualKeyboard.newVirtualKeyboardDescription}</p> - <label>{i18n.keyboardSelect.virtualKeyboard.newVirtualKeyboardLabel}</label> - <Dropdown className="custom-dropdown" onSelect={this.selectVirtualKeyboard}> - <Dropdown.Toggle id="dropdown-custom"> - <div className="dropdownItemSelected"> - <div className="dropdownIcon"> - <IconKeyboard /> - </div> - <div className="dropdownItem">{enumerator[selectedVirtualKeyboard].device.info.displayName}</div> - </div> - </Dropdown.Toggle> - <Dropdown.Menu className="super-colors virtualKeyboardsMenu"> - {enumerator.map((item, index) => ( - <Dropdown.Item - eventKey={index} - key={index} - className={`${selectedVirtualKeyboard == index ? "active" : ""}`} - > - <div className="dropdownInner"> - <div className="dropdownIcon"> - <IconKeyboard /> - </div> - <div className="dropdownItem">{item.device.info.displayName}</div> - </div> - </Dropdown.Item> - ))} - </Dropdown.Menu> - </Dropdown> - <RegularButton - buttonText={i18n.keyboardSelect.virtualKeyboard.createButtonLabel} - style="primary" - onClick={() => { - let fileName = enumerator[selectedVirtualKeyboard].device.info.product; - fileName = - fileName === "Defy" - ? "Virtual" + fileName - : "Virtual" + fileName + enumerator[selectedVirtualKeyboard].device.info.keyboardType; - this.newFile(enumerator[selectedVirtualKeyboard], fileName); - }} - /> - </div> - <div className="virtualKeyboards-col virtualKeyboards-col--text"> - <span>OR</span> - </div> - <div className="virtualKeyboards-col"> - <Title - text={i18n.keyboardSelect.virtualKeyboard.loadVirtualKeyboardTitle} - headingLevel={4} - svgICO={<IconUpload />} - /> - <p>{i18n.keyboardSelect.virtualKeyboard.loadVirtualKeyboardDescription}</p> - <RegularButton buttonText={i18n.general.loadFile} style="primary" onClick={() => this.useAFile()} /> - </div> - </div> - </Modal.Body> - </Modal> - </div> - </div> - </Container> - </Styles> - ); - } -} - -export default SelectKeyboard; diff --git a/src/renderer/views/SelectKeyboard.tsx b/src/renderer/views/SelectKeyboard.tsx new file mode 100644 index 000000000..6872fa2af --- /dev/null +++ b/src/renderer/views/SelectKeyboard.tsx @@ -0,0 +1,697 @@ +// -*- mode: js-jsx -*- +/* Bazecor + * Copyright (C) 2022 Dygmalab, Inc. + * + * This program is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free Software + * Foundation, version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-nocheck + +import React, { useState, useEffect, useMemo, useCallback } from "react"; +import Styled from "styled-components"; +import { toast } from "react-toastify"; +import fs from "fs"; +import path from "path"; +import { ipcRenderer } from "electron"; +import Container from "react-bootstrap/Container"; +import Modal from "react-bootstrap/Modal"; + +import Dropdown from "react-bootstrap/Dropdown"; +import { USBDevice, USBDeviceDescriptor, NonSerialDeviceDescriptor } from "@Renderer/types/devices"; +import { PageHeader } from "../modules/PageHeader"; +import { RegularButton } from "../component/Button"; + +import Focus from "../../api/focus"; +import Hardware from "../../api/hardware"; +import { RaiseISO, RaiseANSI, DefyWired, DefyWireless, enumerator } from "../../api/hardware-virtual"; + +import i18n from "../i18n"; +import NeuronConnection from "../modules/NeuronConnection"; +import ToastMessage from "../component/ToastMessage"; + +import { IconArrowRight, IconCloudDownload, IconUpload, IconKeyboard } from "../component/Icon"; +import Title from "../component/Title"; +import Store from "../utils/Store"; + +const store = Store.getStore(); + +const Styles = Styled.div` +height: 100vh; +.main-container { + overflow: hidden; + height: 100vh; +} +.cardButton-wrapper { + display: block; + width: 100%; + text-align: left; + padding-top: 16px; + margin-top: 16px; + border-top: 1px solid ${({ theme }) => theme.styles.virtualKeyboard.cardButtonDivider}; + .cardButton { + padding: 8px 24px; + background: ${({ theme }) => theme.styles.virtualKeyboard.cardButtonBackground}; + border-radius: 6px; + width: 100%; + .button-link { + padding-left: 0; + font-size: 14px; + color: ${({ theme }) => theme.colors.purple200}; + } + } +} +.keyboard-select { + height: 100%; + display: flex; + flex-wrap: wrap; + justify-content: center; + .keyboard-row { + justify-content: center; + align-items: center; + display: flex; + padding-top: 15vh; + .keyboard-col { + min-width: 500px; + max-width: 500px; + + .keyboard-card { + background: ${({ theme }) => theme.card.background}; + border: none; + box-shadow: none; + .loader { + align-self: center; + .spinner-border { + width: 4rem; + height: 4rem; + } + } + .preview { + justify-content: center; + align-items: center; + display: flex; + padding: 0px; + + .keyboard { + justify-content: center; + align-items: center; + display: flex; + svg { + width: 80%; + margin-bottom: 10px; + } + } + .options { + text-align: center; + .selector { + width: 100%; + .dropdown-toggle::after{ + position: absolute; + right: 10px; + top: 30px; + } + .toggler { + width: 100%; + background-color: transparent; + color: ${({ theme }) => theme.colors.button.text}; + border: 0; + border-bottom: black 1px solid; + border-radius: 0px; + padding-bottom: 6px; + :hover { + background-color: transparent; + } + } + .toggler:hover { + border-bottom: black 2px solid; + padding-bottom: 5px; + } + .toggler:focus { + border-bottom: rgba($color: red, $alpha: 0.8) 2px solid; + box-shadow: none; + } + .menu { + width: inherit; + justify-content: center; + align-items: center; + text-align: center; + } + .key-icon { + background-color: ${({ theme }) => theme.colors.button.background} !important; + border-radius: 100%; + padding: 0; + max-width: 50px; + height: 50px; + svg { + font-size: 2.1em; + margin-top: 18%; + width: 100%; + color: ${({ theme }) => theme.colors.button.text}; + } + } + .key-text { + span { + width: 100%; + } + } + .muted { + color: rgba(140,140,140,0.8) !important; + } + a:hover { + background-color: ${({ theme }) => theme.colors.button.hover} !important; + } + .dropdown-item { + display: inherit; + } + } + .selector-error { + color: red; + } + } + } + } + .buttons { + padding: 0px; + button { + width: 100%; + } + } + } + } +} + + +`; + +interface SelectKeyboardProps { + onConnect: (...args: any[]) => any; + connected: any; + onDisconnect: any; + device: any; +} + +const SelectKeyboard: React.FC<SelectKeyboardProps> = (props): JSX.Element => { + const [selectedPortIndex, setSelectedPortIndex] = useState(0); + const [opening, setOpening] = useState(false); + const [devices, setDevices] = useState([]); + const [isLoading, setIsLoading] = useState(true); + const [showVirtualKeyboardModal, setShowVirtualKeyboardModal] = useState(false); + const [selectedVirtualKeyboard, setSelectedVirtualKeyboard] = useState(0); + const [scanFoundDevices, setScanFoundDevices] = useState(false); + const focus = useMemo(() => new Focus(), []); + const { onConnect, connected, device, onDisconnect } = props; + + const findNonSerialKeyboards = useCallback(async (deviceList: any[]) => { + const connectedDevices: USBDevice[] = await ipcRenderer.invoke("usb-devices"); + const nonSerialDeviceList = Hardware.nonSerial; + let connectedDeviceData: USBDeviceDescriptor; + let nonSerialDeviceData: NonSerialDeviceDescriptor; + connectedDevices.forEach(connectedDevice => { + connectedDeviceData = connectedDevice.deviceDescriptor; + nonSerialDeviceList.forEach(nonSerialDevice => { + nonSerialDeviceData = nonSerialDevice.usb; + if ( + connectedDeviceData.idVendor === nonSerialDeviceData.vendorId && + connectedDeviceData.idProduct === nonSerialDeviceData.productId + ) { + let found = false; + deviceList.forEach(sDevice => { + if ( + sDevice.device.usb.vendorId === connectedDeviceData.idVendor && + sDevice.device.usb.productId === connectedDeviceData.idProduct + ) { + found = true; + } + }); + if (!found) deviceList.push({ device: nonSerialDevice }); + } + }); + }); + return deviceList; + }, []); + + const findKeyboards = useCallback(async (): Promise<any[]> => { + setIsLoading(true); + const isIterable = devices.length > 0 && typeof devices[Symbol.iterator] === "function"; + if (focus.closed === false && isIterable) { + setIsLoading(false); + return []; + } + // if (!focus.closed && device) { + // setDevices([device]); + // return []; + // } + try { + const serialDevices = await focus.find(...Hardware.serial); + // console.log("Printing devices: ", serialDevices); + const supportedDevices = []; + let device; + for (let i = 0; i < serialDevices.length; i += 1) { + device = serialDevices[i]; + /* eslint-disable no-await-in-loop */ + device.accessible = await focus.isDeviceAccessible(device); + // console.log("before checking device supported", device, focus); + if (device.accessible && (await focus.isDeviceSupported(device))) { + supportedDevices.push(device); + } else if (!device.accessible) { + supportedDevices.push(device); + } + /* eslint-disable no-await-in-loop */ + } + console.log("Supported devices", supportedDevices); + const list = await findNonSerialKeyboards(supportedDevices); + console.log("Non serial keyboards", list); + setIsLoading(false); + setDevices(list); + if (connected) { + const connectedDev = list.findIndex(dev => focus.serialNumber?.includes(dev.serialNumber)); + // console.log("check connected", connectedDev); + setSelectedPortIndex(connectedDev); + } else if (list.length > 0) { + setSelectedPortIndex(0); + } else { + setSelectedPortIndex(-1); + } + + return list; + } catch (err) { + console.log("Error while finding keyboards", err); + const list = await findNonSerialKeyboards([]); + console.log("Non serial keyboards", list); + setIsLoading(false); + setDevices(list); + return list; + } + }, [findNonSerialKeyboards, device, focus]); + + useEffect(() => { + const finder = () => findKeyboards(); + const disconnectedfinder = () => { + setSelectedPortIndex(0); + findKeyboards(); + }; + ipcRenderer.on("usb-connected", finder); + ipcRenderer.on("usb-disconnected", disconnectedfinder); + if (!connected) { + findKeyboards(); + } + return () => { + ipcRenderer.removeListener("usb-connected", finder); + ipcRenderer.removeListener("usb-disconnected", disconnectedfinder); + }; + }, [connected, findKeyboards]); + + useEffect(() => { + if (connected && device) { + findKeyboards(); + } + }, [connected, device, findKeyboards]); + + const scanDevices = async (): Promise<void> => { + const keyboards = await findKeyboards(); + setScanFoundDevices(keyboards?.length > 0); + setTimeout(() => { + setScanFoundDevices(false); + }, 1000); + }; + + const toggleVirtualKeyboardModal = (): void => { + setShowVirtualKeyboardModal(currentValue => !currentValue); + }; + + const selectVirtualKeyboard = (event: any) => { + // console.log(event); + setSelectedVirtualKeyboard(event); + }; + + const selectPort = (event: any) => { + // console.log(event); + setSelectedPortIndex(parseInt(event, 10)); + }; + + const onKeyboardConnect = async () => { + setOpening(true); + try { + if (!devices[selectedPortIndex].path) { + devices[selectedPortIndex].device.device = devices[selectedPortIndex].device; + } + const focus = new Focus(); + focus.serialNumber = devices[selectedPortIndex].serialNumber; + await onConnect(devices[selectedPortIndex], null); + } catch (err) { + setOpening(false); + const errorMessage = err.toString(); + toast.error(<ToastMessage title={errorMessage} />, { icon: "" }); + } + (i18n as any).refreshHardware(devices[selectedPortIndex]); // we use any because i18n indeed has that function defined + }; + + const convertBackupToVK = async (backup: any): any => { + let vk; + let fileName; + + Hardware.serial.forEach(hardwareDevice => { + if ( + backup.neuron.device.usb.productId === hardwareDevice.usb.productId && + backup.neuron.device.usb.vendorId === hardwareDevice.usb.vendorId && + backup.neuron.device.info.keyboardType === hardwareDevice.info.keyboardType + ) { + if (hardwareDevice.info.keyboardType === "ANSI") { + vk = { ...RaiseANSI }; + fileName = "VirtualRaiseANSI"; + } + if (hardwareDevice.info.keyboardType === "ISO") { + vk = { ...RaiseISO }; + fileName = "VirtualRaiseISO"; + } + if (hardwareDevice.info.keyboardType === "wired") { + vk = { ...DefyWired }; + fileName = "VirtualDefy"; + } + // TODO: replace this DEFY with the wireless version + if (hardwareDevice.info.keyboardType === "wireless") { + vk = { ...DefyWireless }; + fileName = "VirtualDefy"; + } + vk.device.components = hardwareDevice.components; + } + }); + + backup.backup.forEach(line => { + vk.virtual[line.command].data = line.data; + }); + + // Ask the user for the place to put the backup + + const options = { + title: i18n.keyboardSelect.virtualKeyboard.newTitle, + buttonLabel: i18n.keyboardSelect.virtualKeyboard.buttonLabelSave, + defaultPath: path.join(store.get("settings.backupFolder"), `${fileName}.json`), + filters: [{ name: "Json", extensions: ["json"] }], + }; + const newPath = await ipcRenderer.invoke("save-dialog", options); + console.log("Save file to", newPath); + if (newPath === undefined) { + toast.warning("Path not defined! aborting...", { + autoClose: 2000, + icon: "", + }); + return; + } + // Save the virtual KB in the specified location + const json = JSON.stringify(vk, null, 2); + fs.writeFileSync(newPath, json, err => { + if (err) { + console.error(err); + throw err; + } + }); + + vk.device.path = "VIRTUAL"; + vk.device.bootloader = false; + vk.device.filePath = newPath; + return vk; + }; + + const getDateTime = () => { + const d = new Date(); + return `-${ + d.getFullYear() + + `0${d.getMonth() + 1}`.slice(-2) + + `0${d.getDate()}`.slice(-2) + + `0${d.getHours()}`.slice(-2) + + `0${d.getMinutes()}`.slice(-2) + + `0${d.getSeconds()}`.slice(-2) + }`; + }; + + const onLoadFile = async () => { + // Read a file that is a backup + const options = { + title: i18n.keyboardSelect.virtualKeyboard.useTitle, + buttonLabel: i18n.keyboardSelect.virtualKeyboard.buttonLabel, + filters: [ + { name: "Json", extensions: ["json"] }, + { name: i18n.dialog.allFiles, extensions: ["*"] }, + ], + }; + const data = await ipcRenderer.invoke("open-dialog", options); + let filePath; + if (!data.canceled) { + [filePath] = data.filePaths; + } else { + console.log("user closed file connect dialog"); + return; + } + console.log("Opening file", filePath); + // Open the file and load it's contents + let file; + try { + file = JSON.parse(fs.readFileSync(filePath)); + // console.log(file); + // console.log("loaded backup", file.device.info.product + " " + file.device.info.keyboardType, file.virtual.version.data); + if (!file.virtual && !file.backup) throw Error("not a valid file, no virtual or backup objects"); + } catch (e) { + console.error(e); + window.alert(i18n.keyboardSelect.virtualKeyboard.errorLoadingFile); + return; + } + if (!file.virtual && file.backup) { + if (!window.confirm(i18n.keyboardSelect.virtualKeyboard.backupTransform)) { + return; + } + file = await convertBackupToVK(file); + file.virtual["hardware.chip_id"].data += getDateTime(); + await onConnect(file.device, file); + return; + } + + Hardware.serial.forEach(device => { + if ( + file.device.usb.productId === device.usb.productId && + file.device.usb.vendorId === device.usb.vendorId && + file.device.info.keyboardType === device.info.keyboardType + ) { + file.device.components = device.components; + } + }); + + file.device.path = "VIRTUAL"; + file.device.bootloader = false; + file.device.filePath = filePath; + await onConnect(file.device, file); + }; + + const newFile = async (virtualKeyboard, fileName: string) => { + // Ask the user for the place to put the backup + const options = { + title: i18n.keyboardSelect.virtualKeyboard.newTitle, + buttonLabel: i18n.keyboardSelect.virtualKeyboard.buttonLabelSave, + defaultPath: path.join(store.get("settings.backupFolder"), `${fileName}.json`), + filters: [{ name: "Json", extensions: ["json"] }], + }; + const newPath = await ipcRenderer.invoke("save-dialog", options); + console.log("Save file to", newPath); + if (newPath === undefined) { + toast.warning("Path not defined! aborting..."); + return; + } + console.log("Exchange focus for file access"); + Hardware.serial.forEach(device => { + if ( + virtualKeyboard.device.usb.productId === device.usb.productId && + virtualKeyboard.device.usb.vendorId === device.usb.vendorId && + virtualKeyboard.device.info.keyboardType === device.info.keyboardType + ) { + virtualKeyboard.device.components = device.components; + } + }); + + virtualKeyboard.device.path = "VIRTUAL"; + virtualKeyboard.device.bootloader = false; + virtualKeyboard.device.filePath = newPath; + virtualKeyboard.virtual["hardware.chip_id"].data += getDateTime(); + + // Retarded virtualKeyboard storage to save ti with new hardware.chipID + // Save the virtual KB in the specified location + const json = JSON.stringify(virtualKeyboard, null, 2); + fs.writeFileSync(newPath, json, err => { + if (err) { + console.error(err); + throw err; + } + }); + + // Final connection function + await onConnect(virtualKeyboard.device, virtualKeyboard); + }; + + const handleOnDisconnect = async () => { + await onDisconnect(); + }; + + const handleOnDisconnectConnect = async () => { + await onDisconnect(); + const delay = ms => new Promise(res => setTimeout(res, ms)); + await delay(500); + await onKeyboardConnect(); + }; + + const getDeviceItems = () => { + const neurons = store.get("neurons"); + const result = devices.map((device, index) => { + console.log("checking device :", device); + if (device.device.bootloader) + return { + index, + displayName: device?.device?.info?.displayName, + userName: "", + path: device.path || i18n.keyboardSelect.unknown, + }; + const preparedSN = device.productId === "2201" ? device.serialNumber.slice(0, 32) : device.serialNumber; + const neuron = neurons.find(neuron => neuron.id.toLowerCase() === preparedSN.toLowerCase()); + + return { + index, + displayName: device?.device?.info?.displayName, + userName: neuron ? neuron.name : "", + path: device.path || i18n.keyboardSelect.unknown, + }; + }); + return result; + }; + + let deviceItems = null; + if (devices && devices.length > 0) { + deviceItems = getDeviceItems(); + } + + const selectedDevice = devices && devices[selectedPortIndex]; + const connectedDevice = devices && devices.findIndex(dev => focus.serialNumber?.includes(dev.serialNumber)); + // console.log("Checking connected Data: ", connectedDevice, selectedPortIndex); + return ( + <Styles> + <Container fluid className="keyboard-select center-content"> + <PageHeader text={i18n.keyboardSelect.title} /> + <div className="keyboardSelection-wrapper"> + <NeuronConnection + loading={isLoading} + scanFoundDevices={scanFoundDevices !== undefined ? scanFoundDevices : false} + scanDevices={scanDevices} + cantConnect={(selectedDevice ? !selectedDevice.accessible : false) || opening || (devices && devices.length === 0)} + onKeyboardConnect={onKeyboardConnect} + connected={connected} + onDisconnect={handleOnDisconnect} + onDisconnectConnect={handleOnDisconnectConnect} + deviceItems={deviceItems != null ? deviceItems : []} + selectPort={selectPort} + selectedPortIndex={selectedPortIndex} + isVirtual={focus.file} + virtualDevice={focus.device} + connectedDevice={connectedDevice} + /> + <div className="cardButton-wrapper"> + <div className="cardButton"> + <RegularButton + buttonText={i18n.keyboardSelect.virtualKeyboard.buttonText} + styles="button-link transp-bg" + icoSVG={<IconArrowRight />} + icoPosition="right" + size="sm" + onClick={() => { + toggleVirtualKeyboardModal(); + }} + /> + </div> + <Modal + show={showVirtualKeyboardModal} + size="lg" + onHide={() => toggleVirtualKeyboardModal()} + aria-labelledby="contained-modal-title-vcenter" + centered + > + <Modal.Header closeButton> + <Modal.Title>{i18n.keyboardSelect.virtualKeyboard.modaltitle}</Modal.Title> + </Modal.Header> + <Modal.Body> + <div className="virtualKeyboards-wrapper"> + <div className="virtualKeyboards-col"> + <Title + text={i18n.keyboardSelect.virtualKeyboard.newVirtualKeyboardTitle} + headingLevel={4} + svgICO={<IconCloudDownload />} + /> + <p>{i18n.keyboardSelect.virtualKeyboard.newVirtualKeyboardDescription}</p> + <label>{i18n.keyboardSelect.virtualKeyboard.newVirtualKeyboardLabel}</label> + <Dropdown className="custom-dropdown" onSelect={selectVirtualKeyboard}> + <Dropdown.Toggle id="dropdown-custom"> + <div className="dropdownItemSelected"> + <div className="dropdownIcon"> + <IconKeyboard /> + </div> + <div className="dropdownItem">{enumerator[selectedVirtualKeyboard].device.info.displayName}</div> + </div> + </Dropdown.Toggle> + <Dropdown.Menu className="super-colors virtualKeyboardsMenu"> + {enumerator.map((item, index) => ( + <Dropdown.Item + eventKey={index} + key={`${item.device.info.displayName}-dropdown`} + className={`${selectedVirtualKeyboard === index ? "active" : ""}`} + > + <div className="dropdownInner"> + <div className="dropdownIcon"> + <IconKeyboard /> + </div> + <div className="dropdownItem">{item?.device?.info?.displayName}</div> + </div> + </Dropdown.Item> + ))} + </Dropdown.Menu> + </Dropdown> + <RegularButton + buttonText={i18n.keyboardSelect.virtualKeyboard.createButtonLabel} + styles="primary" + onClick={() => { + let fileName = enumerator[selectedVirtualKeyboard].device.info.product; + fileName = + fileName === "Defy" + ? `Virtual${fileName}` + : `Virtual${fileName}${enumerator[selectedVirtualKeyboard].device.info.keyboardType}`; + newFile(enumerator[selectedVirtualKeyboard], fileName); + }} + /> + </div> + <div className="virtualKeyboards-col virtualKeyboards-col--text"> + <span>OR</span> + </div> + <div className="virtualKeyboards-col"> + <Title + text={i18n.keyboardSelect.virtualKeyboard.loadVirtualKeyboardTitle} + headingLevel={4} + svgICO={<IconUpload />} + /> + <p>{i18n.keyboardSelect.virtualKeyboard.loadVirtualKeyboardDescription}</p> + <RegularButton buttonText={i18n.general.loadFile} styles="primary" onClick={() => onLoadFile()} /> + </div> + </div> + </Modal.Body> + </Modal> + </div> + </div> + </Container> + </Styles> + ); +}; + +export default SelectKeyboard; diff --git a/src/renderer/views/SuperkeysEditor.js b/src/renderer/views/SuperkeysEditor.js index 9e9592db5..99ed7260b 100644 --- a/src/renderer/views/SuperkeysEditor.js +++ b/src/renderer/views/SuperkeysEditor.js @@ -24,24 +24,23 @@ import Styled from "styled-components"; import Container from "react-bootstrap/Container"; import Row from "react-bootstrap/Row"; import Col from "react-bootstrap/Col"; -import Button from "react-bootstrap/Button"; -import Spinner from "react-bootstrap/Spinner"; import Modal from "react-bootstrap/Modal"; // Components -import Callout from "../component/Callout"; -import { LayoutViewSelector } from "../component/ToggleButtons"; -import { SuperkeysSelector } from "../component/Select"; -import { RegularButton } from "../component/Button"; +import Callout from "@Renderer/component/Callout"; +import { LayoutViewSelector } from "@Renderer/component/ToggleButtons"; +import { SuperkeysSelector } from "@Renderer/component/Select"; +import { RegularButton } from "@Renderer/component/Button"; +import { LogoLoaderCentered } from "@Renderer/component/Loader"; -import ToastMessage from "../component/ToastMessage"; -import { IconFloppyDisk } from "../component/Icon"; +import ToastMessage from "@Renderer/component/ToastMessage"; +import { IconFloppyDisk } from "@Renderer/component/Icon"; // Modules -import PageHeader from "../modules/PageHeader"; -import { SuperKeysFeatures, SuperkeyActions } from "../modules/Superkeys"; -import { KeyPickerKeyboard } from "../modules/KeyPickerKeyboard"; -import StandardView from "../modules/StandardView"; +import { PageHeader } from "@Renderer/modules/PageHeader"; +import { SuperKeysFeatures, SuperkeyActions } from "@Renderer/modules/Superkeys"; +import { KeyPickerKeyboard } from "@Renderer/modules/KeyPickerKeyboard"; +import StandardView from "@Renderer/modules/StandardView"; // API's import i18n from "../i18n"; @@ -49,8 +48,9 @@ import Keymap, { KeymapDB } from "../../api/keymap"; import Focus from "../../api/focus"; import Backup from "../../api/backup"; -const Store = require("electron-store"); -const store = new Store(); +import Store from "../utils/Store"; + +const store = Store.getStore(); const Styles = Styled.div` &.superkeys { @@ -121,7 +121,6 @@ class SuperkeysEditor extends React.Component { macros: [], storedMacros: [], superkeys: [], - storedSuper: [], maxSuperKeys: 128, modified: false, modifiedKeymap: false, @@ -133,7 +132,7 @@ class SuperkeysEditor extends React.Component { futureSSK: 0, currentLanguageLayout: store.get("settings.language") || "english", isStandardViewSuperkeys: store.get("settings.isStandardViewSuperkeys") || true, - showStandardView: false + showStandardView: false, }; this.changeSelected = this.changeSelected.bind(this); this.updateSuper = this.updateSuper.bind(this); @@ -154,26 +153,107 @@ class SuperkeysEditor extends React.Component { await this.configStandarView(); } + handleSaveStandardView = () => { + this.setState({ showStandardView: false, selectedAction: -1 }); + }; + + closeStandardViewModal = code => { + this.onKeyChange(code); + this.setState({ showStandardView: false, selectedAction: -1 }); + }; + + onToggle = () => { + const { isStandardViewSuperkeys } = this.state; + if (isStandardViewSuperkeys) { + this.setState({ isStandardViewSuperkeys: false, selectedAction: -1 }); + } else { + this.setState({ isStandardViewSuperkeys: true, selectedAction: -1 }); + } + }; + + deleteSuperkey = () => { + const { superkeys, selectedSuper } = this.state; + if (superkeys.length > 0) { + let aux = JSON.parse(JSON.stringify(superkeys)); + const selected = selectedSuper; + aux.splice(selected, 1); + aux = aux.map((item, index) => { + const newItem = item; + newItem.id = index; + return newItem; + }); + if (selected >= superkeys.length - 1) { + this.checkKBSuperkeys(aux, aux.length - 1, aux.length + 53980); + } else { + this.checkKBSuperkeys(aux, selected, selected + 53980); + } + } + }; + + duplicateSuperkey = () => { + const { superkeys, selectedSuper } = this.state; + const aux = { ...superkeys[selectedSuper] }; + aux.id = superkeys.length; + aux.name = `Copy of ${aux.name}`; + superkeys.push(aux); + this.updateSuper(superkeys, -1); + this.changeSelected(aux.id); + }; + + addSuperkey = SKname => { + const { superkeys, maxSuperKeys } = this.state; + console.log("TEST", superkeys.length, maxSuperKeys); + if (superkeys.length < maxSuperKeys) { + const aux = superkeys; + const newID = aux.length; + aux.push({ + actions: [], + name: SKname, + id: newID, + superkey: "", + }); + this.updateSuper(aux, newID); + } + }; + + componentDidUpdate(prevProps, prevState) { + const { isStandardViewSuperkeys } = this.state; + if (prevState.isStandardViewSuperkeys !== isStandardViewSuperkeys) { + store.set("settings.isStandardViewSuperkeys", isStandardViewSuperkeys); + } + } + + onKeyChange(keyCode) { + const { superkeys, selectedSuper, selectedAction } = this.state; + const newData = superkeys; + newData[selectedSuper].actions[selectedAction] = keyCode; + console.log("keyCode: ", keyCode); + this.setState({ + superkeys: newData, + modified: true, + }); + } + async loadSuperkeys() { - let focus = new Focus(); + const focus = new Focus(); + const { onDisconnect } = this.props; try { /** * Create property language to the object 'options', to call KeymapDB in Keymap and modify languagu layout */ - let chipID = (await focus.command("hardware.chip_id")).replace(/\s/g, ""); - let neurons = store.get("neurons"); + const chipID = (await focus.command("hardware.chip_id")).replace(/\s/g, ""); + const neurons = store.get("neurons"); let neuron = {}; - if (neurons.some(n => n.id == chipID)) { - console.log(neurons.filter(n => n.id == chipID)); - neuron = neurons.filter(n => n.id == chipID)[0]; + if (neurons.some(n => n.id === chipID)) { + console.log(neurons.filter(n => n.id === chipID)); + [neuron] = neurons.filter(n => n.id === chipID); } this.setState({ neurons, - neuronID: neurons.findIndex(n => n.id == chipID), + neuronID: neurons.findIndex(n => n.id === chipID), storedMacros: neuron.macros, - storedSuper: neuron.superkeys }); - let deviceLang = { ...focus.device, language: true }; + const deviceLang = { ...focus.device, language: true }; focus.commands.keymap = new Keymap(deviceLang); this.keymapDB = focus.commands.keymap.db; let kbtype = "iso"; @@ -184,7 +264,7 @@ class SuperkeysEditor extends React.Component { return false; } - let keymap = await focus.command("keymap"); + const keymap = await focus.command("keymap"); console.log(keymap); let raw = await focus.command("macros.map"); if (raw.search(" 0 0") !== -1) { @@ -206,8 +286,8 @@ class SuperkeysEditor extends React.Component { actions: [], name: "Empty Superkey", id: 0, - superkey: "" - } + superkey: "", + }, ]; } this.setState({ @@ -216,17 +296,19 @@ class SuperkeysEditor extends React.Component { superkeys: parsedSuper, selectedSuper: 0, keymap, - kbtype + kbtype, }); } catch (e) { console.log("error when loading SuperKeys"); console.error(e); toast.error(e); - this.props.onDisconnect(); + onDisconnect(); } + return true; } macroTranslator(raw) { + const { storedMacros, macros } = this.state; if (raw === "") { return [ { @@ -246,34 +328,34 @@ class SuperkeysEditor extends React.Component { { keyCode: 16, type: 8, id: 12 }, { keyCode: 4, type: 8, id: 13 }, { keyCode: 23, type: 8, id: 14 }, - { keyCode: 8, type: 8, id: 15 } + { keyCode: 8, type: 8, id: 15 }, ], id: 0, macro: "RIGHT SHIFT H RIGHT SHIFT E Y , SPACE RIGHT SHIFT D RIGHT SHIFT Y G M A T E", - name: "Hey, Dygmate!" - } + name: "Hey, Dygmate!", + }, ]; } // Translate received macros to human readable text - let i = 0, - iter = 0, - kcs = 0, - type = 0, - keyCode = [], - actions = [], - macros = []; + let i = 0; + let iter = 0; + let kcs = 0; + let type = 0; + let keyCode = []; + let actions = []; + let localMacros = []; actions = []; while (raw.length > iter) { if (kcs > 0) { keyCode.push(raw[iter]); - kcs--; - iter++; + kcs -= 1; + iter += 1; continue; } if (iter !== 0 && type !== 0) { actions.push({ - type: type, - keyCode: keyCode + type, + keyCode, }); keyCode = []; } @@ -285,71 +367,71 @@ class SuperkeysEditor extends React.Component { } if (type === 0) { kcs = 0; - macros[i] = {}; - macros[i].actions = actions; - macros[i].id = i; - macros[i].name = ""; - macros[i].macro = ""; - i++; + localMacros[i] = {}; + localMacros[i].actions = actions; + localMacros[i].id = i; + localMacros[i].name = ""; + localMacros[i].macro = ""; + i += 1; actions = []; - iter++; + iter += 1; continue; } - iter++; + iter += 1; } actions.push({ - type: type, - keyCode: keyCode + type, + keyCode, }); - macros[i] = {}; - macros[i].actions = actions; - macros[i].id = i; - macros[i].name = ""; - macros[i].macro = ""; - macros = macros.map(macro => { - let aux = macro.actions.map(action => { - let aux = 0; + localMacros[i] = {}; + localMacros[i].actions = actions; + localMacros[i].id = i; + localMacros[i].name = ""; + localMacros[i].macro = ""; + localMacros = localMacros.map(macro => { + const aux = macro.actions.map(action => { + let act = 0; if (action.keyCode.length > 1) { - aux = (action.keyCode[0] << 8) + action.keyCode[1]; + act = (action.keyCode[0] << 8) + action.keyCode[1]; } else { - aux = action.keyCode[0]; + [act] = action.keyCode; } return { type: action.type, - keyCode: aux + keyCode: act, }; }); return { ...macro, actions: aux }; }); // TODO: Check if stored macros match the received ones, if they match, retrieve name and apply it to current macros - let equal = []; + const equal = []; let finalMacros = []; - const stored = this.state.storedMacros; - console.log(macros, stored); + const stored = storedMacros; + console.log(localMacros, stored); if (stored === undefined) { - return macros; + return localMacros; } - finalMacros = macros.map((macro, i) => { - if (stored.length > i && stored.length > 0) { - console.log("compare between: ", macro.actions, stored[i].actions); - let aux = macro; - aux.name = stored[i].name; + finalMacros = localMacros.map((macro, idx) => { + if (stored.length > idx && stored.length > 0) { + console.log("compare between: ", macro.actions, stored[idx].actions); + const aux = macro; + aux.name = stored[idx].name; aux.macro = macro.actions.map(k => this.keymapDB.parse(k.keyCode).label).join(" "); return aux; - } else { - return macro; } + return macro; }); this.setState({ equalMacros: equal }); - console.log("Checking differences", this.state.macros, finalMacros); + console.log("Checking differences", macros, finalMacros); return finalMacros; } superTranslator(raw) { - let superkey = [], - superkeys = [], - iter = 0, - superindex = 0; + const { neurons, neuronID } = this.state; + let superkey = []; + const superkeys = []; + let iter = 0; + let superindex = 0; if (raw === "") { return [{ actions: [53, 2101, 1077, 41, 0], name: "Welcome to superkeys", id: superindex }]; @@ -359,61 +441,59 @@ class SuperkeysEditor extends React.Component { // console.log(iter, raw[iter], superkey); if (raw[iter] === 0) { superkeys[superindex] = { actions: superkey, name: "", id: superindex }; - superindex++; + superindex += 1; superkey = []; } else { superkey.push(raw[iter]); } - iter++; + iter += 1; } superkeys[superindex] = { actions: superkey, name: "", id: superindex }; - console.log("Got Superkeys:" + JSON.stringify(superkeys) + " from " + raw); + console.log(`Got Superkeys:${JSON.stringify(superkeys)} from ${raw}`); if ( - superkeys[0].actions == undefined || - superkeys[0].actions == [0] || - superkeys[0].actions.filter(v => v === 0).length == superkeys[0].length - 1 + superkeys[0].actions === undefined || + superkeys[0].actions === [0] || + superkeys[0].actions.filter(v => v === 0).length === superkeys[0].length - 1 ) return []; // TODO: Check if stored superKeys match the received ones, if they match, retrieve name and apply it to current superKeys let finalSuper = []; - const stored = this.state.neurons[this.state.neuronID].superkeys; - finalSuper = superkeys.map((superk, i) => { + const stored = neurons[neuronID].superkeys; + finalSuper = superkeys.map((superky, i) => { + const superk = superky; superk.id = i; if (stored.length > i && stored.length > 0) { - let aux = superk; + const aux = superk; aux.name = stored[i].name; return aux; - } else { - return superk; } + return superk; }); console.log("final superkeys", finalSuper); - this.setState({ storedSuper: stored }); return finalSuper; } superkeyMap(superkeys) { if ( superkeys.length === 0 || - (superkeys.length === 1 && superkeys[0].actions == []) || - (superkeys.length === 1 && superkeys[0].actions == [0]) + (superkeys.length === 1 && superkeys[0].actions.lenght === 0) || + (superkeys.length === 1 && superkeys[0].actions.lenght === 1 && superkeys[0].actions[0] === 0) ) { return Array.from({ length: 512 }, 65535).join(" "); } let keyMap = JSON.parse(JSON.stringify(superkeys)); console.log("First", JSON.parse(JSON.stringify(keyMap))); - keyMap = keyMap.map(sk => { + keyMap = keyMap.map(sky => { + const sk = sky; sk.actions = sk.actions.map(act => { - if (act == 0 || act == null) return 1; + if (act === 0 || act == null) return 1; return act; }); return sk; }); console.log("Third", JSON.parse(JSON.stringify(keyMap))); - keyMap = keyMap.map(superkey => { - return superkey.actions.filter(act => act != 0).concat([0]); - }); + keyMap = keyMap.map(superkey => superkey.actions.filter(act => act !== 0).concat([0])); console.log("Fifth", JSON.parse(JSON.stringify(keyMap))); const mapped = [].concat.apply([], keyMap.flat()).concat([0]).join(" ").replaceAll(",", " "); console.log(mapped, keyMap); @@ -424,17 +504,16 @@ class SuperkeysEditor extends React.Component { if (macros.length === 0 || (macros.length === 1 && macros[0].actions === [])) { return "255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255"; } - const actionMap = macros.map(macro => { - return macro.actions + const actionMap = macros.map(macro => + macro.actions .map(action => { if (action.type > 1 && action.type < 6) { return [[action.type], [action.keyCode >> 8], [action.keyCode & 255]]; - } else { - return [[action.type], [action.keyCode]]; } + return [[action.type], [action.keyCode]]; }) - .concat([0]); - }); + .concat([0]), + ); const mapped = [].concat.apply([], actionMap.flat()).concat([0]).join(" ").replaceAll(",", " "); console.log(mapped); return mapped; @@ -443,27 +522,28 @@ class SuperkeysEditor extends React.Component { changeSelected(id) { this.setState({ selectedSuper: id < 0 ? 0 : id, - selectedAction: -1 + selectedAction: -1, }); } changeAction(id) { - if (this.state.isStandardViewSuperkeys) { + const { isStandardViewSuperkeys, selectedAction } = this.state; + if (isStandardViewSuperkeys) { this.setState({ selectedAction: id < 0 ? 0 : id, - showStandardView: true + showStandardView: true, }); } else { - if (id == this.state.selectedAction) { - //Some action is already selected + if (id === selectedAction) { + // Some action is already selected this.setState({ - selectedAction: -1 + selectedAction: -1, }); return; } this.setState({ selectedAction: id < 0 ? 0 : id, - showStandardView: false + showStandardView: false, }); } } @@ -474,48 +554,39 @@ class SuperkeysEditor extends React.Component { this.setState({ superkeys: newSuper, selectedSuper: newID, - modified: true + modified: true, }); } updateAction(actionNumber, newAction) { + const { superkeys, selectedSuper } = this.state; console.log("launched update action using data:", newAction); - const newData = this.state.superkeys; - newData[this.state.selectedSuper].actions[actionNumber] = newAction; + const newData = superkeys; + newData[selectedSuper].actions[actionNumber] = newAction; this.setState({ superkeys: newData, selectedAction: actionNumber, - modified: true - }); - } - - onKeyChange(keyCode) { - const newData = this.state.superkeys; - newData[this.state.selectedSuper].actions[this.state.selectedAction] = keyCode; - console.log("keyCode: ", keyCode); - this.setState({ - superkeys: newData, - modified: true + modified: true, }); } saveName(name) { - let superkeys = this.state.superkeys; - superkeys[this.state.selectedSuper].name = name; + const { superkeys, selectedSuper } = this.state; + superkeys[selectedSuper].name = name; this.setState({ superkeys, modified: true }); } async writeSuper() { - let focus = new Focus(); - let { superkeys, modifiedKeymap, keymap } = this.state; + const focus = new Focus(); + const { superkeys, modifiedKeymap, keymap, neurons, neuronID } = this.state; this.setState({ modified: false, - modifiedKeymap: false + modifiedKeymap: false, }); - let neurons = JSON.parse(JSON.stringify(this.state.neurons)); - neurons[this.state.neuronID].superkeys = superkeys; - console.log(JSON.stringify(neurons)); - store.set("neurons", neurons); + const localNeurons = JSON.parse(JSON.stringify(neurons)); + localNeurons[neuronID].superkeys = superkeys; + console.log(JSON.stringify(localNeurons)); + store.set("neurons", localNeurons); try { await focus.command("superkeys.map", this.superkeyMap(superkeys)); if (modifiedKeymap) { @@ -523,11 +594,11 @@ class SuperkeysEditor extends React.Component { } console.log("Changes saved."); const commands = await this.bkp.Commands(); - const backup = await this.bkp.DoBackup(commands, this.state.neurons[this.state.neuronID].id); + const backup = await this.bkp.DoBackup(commands, neurons[neuronID].id); this.bkp.SaveBackup(backup); toast.success(<ToastMessage title={i18n.editor.superkeys.successFlashTitle} content="" icon={<IconFloppyDisk />} />, { autoClose: 2000, - icon: "" + icon: "", }); } catch (error) { toast.error(error); @@ -535,17 +606,18 @@ class SuperkeysEditor extends React.Component { } checkKBSuperkeys(newSuper, newID, SKC) { - if (newSuper.length == 0) { + const { keymap, selected, superkeys } = this.state; + if (newSuper.length === 0) { newSuper = [{ actions: [53, 2101, 1077, 41, 0], name: "Welcome to superkeys", id: 0 }]; newID = 0; } - let LOK = this.state.keymap.custom + const LOK = keymap.custom .map((l, c) => l .map((k, i) => { - if (k.keyCode == SKC) return { layer: c, pos: i, sk: SKC }; + if (k.keyCode === SKC) return { layer: c, pos: i, sk: SKC }; }) - .filter(x => x != undefined) + .filter(x => x !== undefined), ) .flat(); if (LOK.length > 0) { @@ -553,14 +625,12 @@ class SuperkeysEditor extends React.Component { showDeleteModal: true, listToDelete: LOK, futureSK: newSuper, - futureSSK: newID + futureSSK: newID, }); + } else if (selected !== superkeys.length - 1) { + this.SortSK(newSuper, newID); } else { - if (this.state.selected != this.state.superkeys.length - 1) { - this.SortSK(newSuper, newID); - } else { - this.updateSuper(newSuper, newID); - } + this.updateSuper(newSuper, newID); } } @@ -569,77 +639,33 @@ class SuperkeysEditor extends React.Component { showDeleteModal: false, listToDelete: [], futureSK: [], - futureSSK: 0 + futureSSK: 0, }); } - addSuperkey = SKname => { - console.log("TEST", this.state.superkeys.length, this.state.maxSuperKeys); - if (this.state.superkeys.length < this.state.maxSuperKeys) { - let aux = this.state.superkeys; - const newID = aux.length; - aux.push({ - actions: [], - name: SKname, - id: newID, - superkey: "" - }); - this.updateSuper(aux, newID); - } - }; - - duplicateSuperkey = () => { - let { superkeys, selectedSuper } = this.state; - let aux = Object.assign({}, this.state.superkeys[selectedSuper]); - aux.id = this.state.superkeys.length; - aux.name = "Copy of " + aux.name; - superkeys.push(aux); - this.updateSuper(superkeys, -1); - this.changeSelected(aux.id); - }; - - deleteSuperkey = () => { - const { superkeys } = this.state; - if (superkeys.length > 0) { - let aux = JSON.parse(JSON.stringify(superkeys)); - let selected = this.state.selectedSuper; - aux.splice(selected, 1); - aux = aux.map((item, index) => { - let aux = item; - aux.id = index; - return aux; - }); - if (selected >= superkeys.length - 1) { - this.checkKBSuperkeys(aux, aux.length - 1, aux.length + 53980); - } else { - this.checkKBSuperkeys(aux, selected, selected + 53980); - } - } - }; - RemoveDeletedSK() { - let { keymap } = this.state; + const { keymap } = this.state; const { selectedSuper, superkeys, listToDelete, futureSK, futureSSK } = this.state; let listToDecrease = []; for (const key of superkeys.slice(selectedSuper + 1)) { listToDecrease.push( - this.state.keymap.custom + keymap.custom .map((l, c) => l .map((k, i) => { - if (k.keyCode == key.id + 53980) return { layer: c, pos: i, sk: key.id + 53980 }; + if (k.keyCode === key.id + 53980) return { layer: c, pos: i, sk: key.id + 53980 }; }) - .filter(x => x != undefined) + .filter(x => x !== undefined), ) - .flat() + .flat(), ); } - for (let i = 0; i < listToDelete.length; i++) { + for (let i = 0; i < listToDelete.length; i += 1) { keymap.custom[listToDelete[i].layer][listToDelete[i].pos] = this.keymapDB.parse(0); } console.log("now decreasing... ", listToDecrease.flat()); listToDecrease = listToDecrease.flat(); - for (let i = 0; i < listToDecrease.length; i++) { + for (let i = 0; i < listToDecrease.length; i += 1) { keymap.custom[listToDecrease[i].layer][listToDecrease[i].pos] = this.keymapDB.parse(listToDecrease[i].sk - 1); } this.setState({ @@ -647,32 +673,30 @@ class SuperkeysEditor extends React.Component { superkeys: futureSK, selectedSuper: futureSSK, modified: true, - modifiedKeymap: true + modifiedKeymap: true, }); this.toggleDeleteModal(); - return; } SortSK(newSuper, newID) { - let { keymap } = this.state; - const { selectedSuper, superkeys } = this.state; + const { keymap, selectedSuper, superkeys } = this.state; let listToDecrease = []; for (const key of superkeys.slice(selectedSuper + 1)) { listToDecrease.push( - this.state.keymap.custom + keymap.custom .map((l, c) => l .map((k, i) => { - if (k.keyCode == key.id + 53980) return { layer: c, pos: i, sk: key.id + 53980 }; + if (k.keyCode === key.id + 53980) return { layer: c, pos: i, sk: key.id + 53980 }; }) - .filter(x => x != undefined) + .filter(x => x !== undefined), ) - .flat() + .flat(), ); } console.log("now decreasing... ", listToDecrease.flat()); listToDecrease = listToDecrease.flat(); - for (let i = 0; i < listToDecrease.length; i++) { + for (let i = 0; i < listToDecrease.length; i += 1) { keymap.custom[listToDecrease[i].layer][listToDecrease[i].pos] = this.keymapDB.parse(listToDecrease[i].sk - 1); } this.setState({ @@ -680,20 +704,17 @@ class SuperkeysEditor extends React.Component { superkeys: newSuper, selectedSuper: newID, modified: true, - modifiedKeymap: true + modifiedKeymap: true, }); this.toggleDeleteModal(); - return; } - ReNumberAllGreaterSK() {} - - //Manage Standard/Single view + // Manage Standard/Single view async configStandarView() { try { const preferencesStandardView = JSON.parse(store.get("settings.isStandardViewSuperkeys")); - //const preferencesStandardView = false; - //console.log("Preferences StandardView", preferencesStandardViewJSON); + // const preferencesStandardView = false; + // console.log("Preferences StandardView", preferencesStandardViewJSON); if (preferencesStandardView !== null) { this.setState({ isStandardViewSuperkeys: preferencesStandardView }); } else { @@ -704,66 +725,44 @@ class SuperkeysEditor extends React.Component { } } - componentDidUpdate(prevProps, prevState) { - if (prevState.isStandardViewSuperkeys !== this.state.isStandardViewSuperkeys) { - store.set("settings.isStandardViewSuperkeys", this.state.isStandardViewSuperkeys); - } - } - - onToggle = () => { - if (this.state.isStandardViewSuperkeys) { - this.setState({ isStandardViewSuperkeys: false, selectedAction: -1 }); - } else { - this.setState({ isStandardViewSuperkeys: true, selectedAction: -1 }); - } - }; - - closeStandardViewModal = code => { - this.onKeyChange(code); - this.setState({ showStandardView: false, selectedAction: -1 }); - }; - - handleSaveStandardView = () => { - this.setState({ showStandardView: false, selectedAction: -1 }); - }; - render() { const { currentLanguageLayout, kbtype, selectedSuper, superkeys, - maxSuperKeys, macros, selectedAction, isStandardViewSuperkeys, - showStandardView + listToDelete, + modified, + showStandardView, + showDeleteModal, } = this.state; let code = 0; const tempkey = this.keymapDB.parse( - superkeys[selectedSuper] != undefined ? superkeys[selectedSuper].actions[selectedAction] : 0 + superkeys[selectedSuper] !== undefined ? superkeys[selectedSuper].actions[selectedAction] : 0, ); code = this.keymapDB.keySegmentator(tempkey.keyCode); // console.log(selectedSuper, JSON.stringify(code), JSON.stringify(superkeys)); - let actions = superkeys.length > 0 && superkeys.length > selectedSuper ? superkeys[selectedSuper].actions : []; - let superName = superkeys.length > 0 && superkeys.length > selectedSuper ? superkeys[selectedSuper].name : ""; - - const listOfSKK = this.state.listToDelete.map(({ layer, pos, sk }, id) => { - return ( - <Row key={id}> - <Col xs={12} className="px-0 text-center gridded"> - <p className="titles alignvert">{`Key in layer ${layer + 1} and pos ${pos}`}</p> - </Col> - </Row> - ); - }); + const actions = superkeys.length > 0 && superkeys.length > selectedSuper ? superkeys[selectedSuper].actions : []; + const superName = superkeys.length > 0 && superkeys.length > selectedSuper ? superkeys[selectedSuper].name : ""; + + const listOfSKK = listToDelete.map(({ layer, pos, sk }, id) => ( + <Row key={id}> + <Col xs={12} className="px-0 text-center gridded"> + <p className="titles alignvert">{`Key in layer ${layer + 1} and pos ${pos}`}</p> + </Col> + </Row> + )); + if (superkeys.length === 0 || !Array.isArray(superkeys)) return <LogoLoaderCentered />; return ( <Styles className="superkeys"> <Container fluid className={`${isStandardViewSuperkeys ? "standarViewMode" : "singleViewMode"}`}> <PageHeader text={i18n.app.menu.superkeys} - showSaving={true} + showSaving contentSelector={ <SuperkeysSelector itemList={superkeys} @@ -778,27 +777,32 @@ class SuperkeysEditor extends React.Component { } saveContext={this.writeSuper} destroyContext={this.loadSuperkeys} - inContext={this.state.modified} + inContext={modified} /> - <Callout content={i18n.editor.superkeys.callout} className="mt-md" size="sm" /> - {superkeys.length == 0 || !Array.isArray(superkeys) ? ( - <div className="loading marginCenter mt-md"> - <Spinner className="spinner-border" role="status" /> - </div> - ) : ( - <SuperkeyActions - isStandardViewSuperkeys={isStandardViewSuperkeys} - superkeys={superkeys} - selected={selectedSuper} - selectedAction={selectedAction} - macros={macros} - changeSelected={this.changeSelected} - updateSuper={this.updateSuper} - updateAction={this.updateAction} - changeAction={this.changeAction} - keymapDB={this.keymapDB} - /> - )} + + <Callout + content={i18n.editor.superkeys.callout} + className="mt-md" + size="sm" + hasVideo + media="6Az05_Yl6AU" + videoTitle="The Greatest Keyboard Feature Of All Time: SUPERKEYS! 🦹‍♀️" + videoDuration="5:34" + /> + + <SuperkeyActions + isStandardViewSuperkeys={isStandardViewSuperkeys} + superkeys={superkeys} + selected={selectedSuper} + selectedAction={selectedAction} + macros={macros} + changeSelected={this.changeSelected} + updateSuper={this.updateSuper} + updateAction={this.updateAction} + changeAction={this.changeAction} + keymapDB={this.keymapDB} + /> + {isStandardViewSuperkeys && <SuperKeysFeatures />} </Container> {!isStandardViewSuperkeys ? ( @@ -811,7 +815,7 @@ class SuperkeysEditor extends React.Component { superkeys={superkeys} actions={actions} action={selectedAction} - actTab={"super"} + actTab="super" superName={superName} selectedlanguage={currentLanguageLayout} kbtype={kbtype} @@ -827,7 +831,7 @@ class SuperkeysEditor extends React.Component { /> {isStandardViewSuperkeys ? ( <StandardView - showStandardView={this.state.showStandardView} + showStandardView={showStandardView} closeStandardView={this.closeStandardViewModal} handleSave={this.handleSaveStandardView} onKeySelect={this.onKeyChange} @@ -849,7 +853,7 @@ class SuperkeysEditor extends React.Component { )} <Modal - show={this.state.showDeleteModal} + show={showDeleteModal} onHide={this.toggleDeleteModal} size="lg" aria-labelledby="contained-modal-title-vcenter" @@ -865,13 +869,13 @@ class SuperkeysEditor extends React.Component { <Modal.Footer> <RegularButton buttonText={i18n.editor.superkeys.deleteModal.cancelButton} - style="outline" + styles="outline transp-bg" size="sm" onClick={this.toggleDeleteModal} /> <RegularButton buttonText={i18n.editor.superkeys.deleteModal.applyButton} - style="outline gradient" + styles="outline gradient" size="sm" onClick={this.RemoveDeletedSK} /> diff --git a/src/renderer/views/Welcome.js b/src/renderer/views/Welcome.js deleted file mode 100644 index 573a4eafd..000000000 --- a/src/renderer/views/Welcome.js +++ /dev/null @@ -1,199 +0,0 @@ -// -*- mode: js-jsx -*- -/* Bazecor - * Copyright (C) 2022 Dygmalab, Inc. - * - * This program is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by the Free Software - * Foundation, version 3. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -import React from "react"; -import Focus from "../../api/focus"; -import Styled from "styled-components"; -import { toast } from "react-toastify"; -import { withRouter } from "react-router-dom"; - -import Container from "react-bootstrap/Container"; -import Card from "react-bootstrap/Card"; -import i18n from "../i18n"; - -import PageHeader from "../modules/PageHeader"; -import Title from "../component/Title"; -import ToastMessage from "../component/ToastMessage"; -import { RegularButton } from "../component/Button"; -import { IconKeyboard, IconFloppyDisk } from "../component/Icon"; - -const Styles = Styled.div` -height: inherit; -.main-container { - overflow: hidden; - height: 100vh; -} -.welcome { - height: 100%; - display: flex; - flex-wrap: wrap; - justify-content: center; - &.center-content { - height: 100vh; - } -} -.welcomeInner { - max-width: 960px; - width: 100%; - margin: auto; -} -.disclaimerContent { - font-size: 15px; - margin-top: 32px; - line-height: 1.5em; - font-weight: 500; -} -.card { - padding: 0; - -} -.card-header { - padding: 24px 32px; - background-color: transparent; -} -.card-body { - padding: 24px 32px; - font-size: 14px; - font-weight: 401; - border-radius: 16px; - h3 { - margin-bottom: 16px; - } - ul { - margin: 0; - } - a { - color: ${({ theme }) => theme.styles.dropdown.dropdownMenu.linkColor}; - } -} -.card-footer { - padding: 24px 32px; - border: none; - background-color: ${({ theme }) => theme.styles.standardView.footerBackground}; -} -.firmwareButton { - display: flex; - justify-content: flex-end; - grid-gap: 8px; -} - -.keyboardSelected { - display: flex; - grid-gap: 16px; - align-items: center; - justify-content: space-between; - h6 { - opacity: 0.6; - margin: 0; - } -} -`; - -class Welcome extends React.Component { - state = { - factoryResetStarted: false - }; - - startFactoryReset = () => { - this.setState({ factoryResetStarted: true }); - }; - cancelFactoryReset = () => { - this.setState({ factoryResetStarted: false }); - }; - - reconnect = async () => { - let focus = new Focus(); - const device = { - path: focus._port.path, - device: focus.device - }; - - try { - await this.props.onConnect(device, null); - } catch (err) { - toast.error(<ToastMessage title={i18n.errors.preferenceFailOnSave} content={err.toString()} icon={<IconFloppyDisk />} />, { - icon: "" - }); - } - }; - - render() { - let focus = new Focus(); - const device = this.props.device.device || focus.device; - - const reconnectButton = focus._port && ( - <RegularButton onClick={this.reconnect} buttonText={i18n.welcome.reconnect} style="outline" /> - ); - - return ( - <Styles> - <Container fluid className="welcome center-content"> - <PageHeader text={i18n.welcome.title} /> - <div className="welcomeWrapper"> - <div className="welcomeInner"> - <Card className="welcomeCard"> - <Card.Header> - <div className="keyboardSelected"> - <div className="content"> - <Title text={device.info.displayName} headingLevel={4} /> - {focus._port ? <Title text={focus._port.path} headingLevel={6} /> : ""} - </div> - <div className="icon"> - <IconKeyboard /> - </div> - </div> - </Card.Header> - <Card.Body> - <div> - <Title type="warning" text={i18n.welcome.bootloaderTitle} headingLevel={3} /> - <p>{i18n.welcome.description}</p> - - <span className="cardsub"> - <ul style={{ lineHeight: "2rem" }}> - <li>{"This process will revert your keyboard's configuration back to factory settings."}</li> - <li> - {"Before proceeding, we recommend that you "} - <a href="https://support.dygma.com/hc/en-us/articles/360014262298">{"export and save your layers"}</a> - {"."} - </li> - <li>{"To exit Bootloader Mode, unplug and replug the USB-C cable to your Neuron."}</li> - </ul> - </span> - </div> - </Card.Body> - <Card.Footer> - <div className="firmwareButton"> - {reconnectButton} - <RegularButton - buttonText={i18n.formatString(i18n.welcome.gotoUpdate, i18n.app.menu.firmwareUpdate)} - style={"primary"} - onClick={async () => { - this.props.history.push("/firmware-update"); - }} - /> - </div> - </Card.Footer> - </Card> - </div> - </div> - </Container> - </Styles> - ); - } -} - -export default withRouter(Welcome); diff --git a/src/renderer/views/Welcome.tsx b/src/renderer/views/Welcome.tsx new file mode 100644 index 000000000..35dff2b52 --- /dev/null +++ b/src/renderer/views/Welcome.tsx @@ -0,0 +1,191 @@ +// -*- mode: js-jsx -*- +/* Bazecor + * Copyright (C) 2022 Dygmalab, Inc. + * + * This program is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free Software + * Foundation, version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +import React from "react"; +import Styled from "styled-components"; +import { toast } from "react-toastify"; + +import Container from "react-bootstrap/Container"; +import Card from "react-bootstrap/Card"; +import { useNavigate } from "react-router-dom"; +import Focus from "../../api/focus"; +import i18n from "../i18n"; + +import { PageHeader } from "../modules/PageHeader"; +import Title from "../component/Title"; +import ToastMessage from "../component/ToastMessage"; +import { RegularButton } from "../component/Button"; +import { IconKeyboard, IconFloppyDisk } from "../component/Icon"; + +const Styles = Styled.div` +height: inherit; +.main-container { + overflow: hidden; + height: 100vh; +} +.welcome { + height: 100%; + display: flex; + flex-wrap: wrap; + justify-content: center; + &.center-content { + height: 100vh; + } +} +.welcomeInner { + max-width: 960px; + width: 100%; + margin: auto; +} +.disclaimerContent { + font-size: 15px; + margin-top: 32px; + line-height: 1.5em; + font-weight: 500; +} +.card { + padding: 0; + +} +.card-header { + padding: 24px 32px; + background-color: transparent; +} +.card-body { + padding: 24px 32px; + font-size: 14px; + font-weight: 401; + border-radius: 16px; + h3 { + margin-bottom: 16px; + } + ul { + margin: 0; + } + a { + color: ${({ theme }) => theme.styles.dropdown.dropdownMenu.linkColor}; + } +} +.card-footer { + padding: 24px 32px; + border: none; + background-color: ${({ theme }) => theme.styles.standardView.footerBackground}; +} +.firmwareButton { + display: flex; + justify-content: flex-end; + grid-gap: 8px; +} + +.keyboardSelected { + display: flex; + grid-gap: 16px; + align-items: center; + justify-content: space-between; + h6 { + opacity: 0.6; + margin: 0; + } +} +`; + +function Welcome(props: any) { + const navigate = useNavigate(); + const { onConnect, device } = props; + + const reconnect = async () => { + const focus = new Focus(); + const dev = { + path: focus._port.path, + device: focus.device, + }; + + try { + if (!dev.path) { + dev.device.device = dev.device; + } + await onConnect(dev, null); + } catch (err) { + toast.error(<ToastMessage title={i18n.errors.preferenceFailOnSave} content={err.toString()} icon={<IconFloppyDisk />} />, { + icon: "", + }); + } + }; + + const focus = new Focus(); + const dev = device.device || focus.device; + + const reconnectButton = focus._port && ( + <RegularButton onClick={reconnect} buttonText={i18n.welcome.reconnect} styles="outline transp-bg" /> + ); + + return ( + <Styles> + <Container fluid className="welcome center-content"> + <PageHeader text={i18n.welcome.title} /> + <div className="welcomeWrapper"> + <div className="welcomeInner"> + <Card className="welcomeCard"> + <Card.Header> + <div className="keyboardSelected"> + <div className="content"> + <Title text={dev.info.displayName} headingLevel={4} /> + {focus._port ? <Title text={focus._port.path} headingLevel={6} /> : ""} + </div> + <div className="icon"> + <IconKeyboard /> + </div> + </div> + </Card.Header> + <Card.Body> + <div> + <Title type="warning" text={i18n.welcome.bootloaderTitle} headingLevel={3} /> + <p>{i18n.welcome.description}</p> + + <span className="cardsub"> + <ul style={{ lineHeight: "2rem" }}> + <li>This process will revert your keyboard's configuration back to factory settings.</li> + <li> + {"Before proceeding, we recommend that you "} + <a href="https://support.dygma.com/hc/en-us/articles/360014262298">export and save your layers</a>. + </li> + <li>To exit Bootloader Mode, unplug and replug the USB-C cable to your Neuron.</li> + </ul> + </span> + </div> + </Card.Body> + <Card.Footer> + <div className="firmwareButton"> + {reconnectButton} + <RegularButton + buttonText={i18n.welcome.gotoUpdate} + styles="primary" + onClick={async () => { + navigate("/firmware-update"); + }} + /> + </div> + </Card.Footer> + </Card> + </div> + </div> + </Container> + </Styles> + ); +} + +export default Welcome; diff --git a/src/renderer/views/Wireless.tsx b/src/renderer/views/Wireless.tsx new file mode 100644 index 000000000..b11bd2115 --- /dev/null +++ b/src/renderer/views/Wireless.tsx @@ -0,0 +1,222 @@ +// General imports +import React, { useState, useEffect } from "react"; + +// Bootstrap components imports +import Styled from "styled-components"; +import Container from "react-bootstrap/Container"; +import Row from "react-bootstrap/Row"; +import Col from "react-bootstrap/Col"; + +// Custom component imports +import { LogoLoader } from "@Renderer/component/Loader"; +import ConnectionStatus from "@Renderer/component/ConnectionStatus"; +import { PageHeader } from "@Renderer/modules/PageHeader"; +import { BatterySettings, EnergyManagement, RFSettings } from "@Renderer/modules/Settings"; + +// Import Types for wireless +import { WirelessPropsInterface, WirelessInterface } from "@Renderer/types/wireless"; + +import Focus from "../../api/focus"; +import i18n from "../i18n"; + +const Styles = Styled.div` + height: 100%; + .wireless { + display: flex; + flex-wrap: wrap; + justify-content: center; + height: 100%; + } + .wirelessInner { + max-width: 960px; + width: 100%; + margin: auto; + padding: 2rem 0; + } +`; + +const initialWireless = { + battery: { + LeftLevel: 0, + RightLevel: 0, + LeftState: 0, + RightState: 0, + savingMode: false, + }, + energy: { + modes: 0, + currentMode: 0, + disable: 0, + }, + bluetooth: { + infoChannel1: "", + infoChannel2: "", + infoChannel3: "", + infoChannel4: "", + infoChannel5: "", + deviceName: "", + }, + rf: { + channelHop: 0, + power: 0, + }, + brightness: 0, + brightnessUG: 0, + fade: 0, + idleleds: 0, +}; + +function Wireless(props: WirelessPropsInterface) { + const { startContext, cancelContext } = props; + const [wireless, setWireless] = useState<WirelessInterface>(initialWireless); + const [modified, setModified] = useState(false); + const [loading, setLoading] = useState(true); + + async function getWirelessPreferences() { + const focus = new Focus(); + // Use focus commands to retrieve wireless data + // Battery commands + + await focus.command("wireless.battery.left.level").then(batteryLevel => { + wireless.battery.LeftLevel = batteryLevel ? parseInt(batteryLevel, 10) : 100; + }); + await focus.command("wireless.battery.right.level").then(batteryLevel => { + wireless.battery.RightLevel = batteryLevel ? parseInt(batteryLevel, 10) : 100; + }); + await focus.command("wireless.battery.left.status").then(state => { + wireless.battery.LeftState = state ? parseInt(state, 10) : 0; + }); + await focus.command("wireless.battery.right.status").then(state => { + wireless.battery.RightState = state ? parseInt(state, 10) : 0; + }); + await focus.command("wireless.battery.savingMode").then(batteryMode => { + wireless.battery.savingMode = parseInt(batteryMode, 10) > 0; + }); + + // Energy saving commands + + await focus.command("led.brightness.wireless").then(brightness => { + wireless.brightness = brightness ? parseInt(brightness, 10) : 0; + }); + await focus.command("led.brightnessUG.wireless").then(brightnessUG => { + wireless.brightnessUG = brightnessUG ? parseInt(brightnessUG, 10) : 0; + }); + await focus.command("led.fade").then(fade => { + wireless.fade = fade ? parseInt(fade, 10) : 0; + }); + await focus.command("idleleds.wireless").then(idleleds => { + wireless.idleleds = idleleds ? parseInt(idleleds, 10) : 0; + }); + + // Bluetooth commands + + await focus.command("wireless.bluetooth.infoChannel 1").then(infoChannel1 => { + wireless.bluetooth.infoChannel1 = infoChannel1; + }); + await focus.command("wireless.bluetooth.infoChannel 2").then(infoChannel2 => { + wireless.bluetooth.infoChannel2 = infoChannel2; + }); + await focus.command("wireless.bluetooth.infoChannel 3").then(infoChannel3 => { + wireless.bluetooth.infoChannel3 = infoChannel3; + }); + await focus.command("wireless.bluetooth.infoChannel 4").then(infoChannel4 => { + wireless.bluetooth.infoChannel4 = infoChannel4; + }); + await focus.command("wireless.bluetooth.infoChannel 5").then(infoChannel5 => { + wireless.bluetooth.infoChannel5 = infoChannel5; + }); + await focus.command("wireless.bluetooth.deviceName").then(bluetoothState => { + wireless.bluetooth.deviceName = bluetoothState; + }); + + // rf commands + + await focus.command("wireless.rf.channelHop").then(rfChannelHop => { + wireless.rf.channelHop = rfChannelHop; + }); + await focus.command("wireless.rf.power").then(rfPower => { + wireless.rf.power = rfPower ? parseInt(rfPower, 10) : 0; + }); + + setWireless(wireless); + setLoading(false); + } + + useEffect(() => { + getWirelessPreferences(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + async function sendRePairCommand() { + const focus = new Focus(); + const result = await focus.command("wireless.rf.syncPairing"); + console.log("command returned", result); + } + + async function destroyContext() { + setWireless(initialWireless); + setModified(false); + getWirelessPreferences(); + cancelContext(); + } + + async function changeWireless(wless: WirelessInterface) { + setWireless(wless); + if (!modified) { + setModified(true); + startContext(); + } + } + + async function saveWirelessChanges() { + const focus = new Focus(); + + // Commands to be sent to the keyboard + await focus.command("wireless.battery.savingMode", wireless.battery.savingMode ? 1 : 0); + await focus.command("wireless.bluetooth.deviceName", wireless.bluetooth.deviceName); + await focus.command("wireless.rf.channelHop", wireless.rf.channelHop); + await focus.command("wireless.rf.power", wireless.rf.power); + + await focus.command("led.brightness.wireless", wireless.brightness); + await focus.command("led.brightnessUG.wireless", wireless.brightnessUG); + await focus.command("led.fade", wireless.fade); + await focus.command("idleleds.wireless", wireless.idleleds); + + destroyContext(); + } + + if (loading) <LogoLoader />; + return ( + <Styles> + <Container fluid className="wireless center-content"> + <PageHeader + text={i18n.wireless.title} + showSaving + saveContext={saveWirelessChanges} + destroyContext={destroyContext} + inContext={modified} + /> + <div className="wirelessWrapper"> + <div className="wirelessInner"> + {/* <Row> + <Col md={12}> + <ConnectionStatus connection={0} /> + </Col> + </Row> */} + <Row> + <Col lg={6}> + <BatterySettings wireless={wireless} changeWireless={changeWireless} isCharging={false} /> + <EnergyManagement wireless={wireless} changeWireless={changeWireless} /> + </Col> + <Col lg={6}> + <RFSettings wireless={wireless} changeWireless={changeWireless} sendRePair={sendRePairCommand} /> + </Col> + </Row> + </div> + </div> + </Container> + </Styles> + ); +} + +export default Wireless; diff --git a/static/Dygma/Defy/wired/default.uf2 b/src/static/Dygma/Defy/wired/default.uf2 similarity index 100% rename from static/Dygma/Defy/wired/default.uf2 rename to src/static/Dygma/Defy/wired/default.uf2 diff --git a/static/Dygma/Defy/wired/experimental.uf2 b/src/static/Dygma/Defy/wired/experimental.uf2 similarity index 100% rename from static/Dygma/Defy/wired/experimental.uf2 rename to src/static/Dygma/Defy/wired/experimental.uf2 diff --git a/static/Dygma/Defy/wired/keyscanner.bin b/src/static/Dygma/Defy/wired/keyscanner.bin similarity index 100% rename from static/Dygma/Defy/wired/keyscanner.bin rename to src/static/Dygma/Defy/wired/keyscanner.bin diff --git a/static/Dygma/Defy/wired/keyscannerX.bin b/src/static/Dygma/Defy/wired/keyscannerX.bin similarity index 100% rename from static/Dygma/Defy/wired/keyscannerX.bin rename to src/static/Dygma/Defy/wired/keyscannerX.bin diff --git a/static/Dygma/Defy/wireless/default.hex b/src/static/Dygma/Defy/wireless/default.hex similarity index 100% rename from static/Dygma/Defy/wireless/default.hex rename to src/static/Dygma/Defy/wireless/default.hex diff --git a/static/Dygma/Defy/wireless/keyscanner.bin b/src/static/Dygma/Defy/wireless/keyscanner.bin similarity index 100% rename from static/Dygma/Defy/wireless/keyscanner.bin rename to src/static/Dygma/Defy/wireless/keyscanner.bin diff --git a/static/Dygma/Raise/default.hex b/src/static/Dygma/Raise/default.hex similarity index 100% rename from static/Dygma/Raise/default.hex rename to src/static/Dygma/Raise/default.hex diff --git a/static/RaiseANSIKeyMap.png b/src/static/RaiseANSIKeyMap.png similarity index 100% rename from static/RaiseANSIKeyMap.png rename to src/static/RaiseANSIKeyMap.png diff --git a/static/base/cursorBucket.png b/src/static/base/cursorBucket.png similarity index 100% rename from static/base/cursorBucket.png rename to src/static/base/cursorBucket.png diff --git a/static/base/icon-arrow--chevron-down.svg b/src/static/base/icon-arrow--chevron-down.svg similarity index 100% rename from static/base/icon-arrow--chevron-down.svg rename to src/static/base/icon-arrow--chevron-down.svg diff --git a/static/base/icon-arrow--chevron-down_white.svg b/src/static/base/icon-arrow--chevron-down_white.svg similarity index 100% rename from static/base/icon-arrow--chevron-down_white.svg rename to src/static/base/icon-arrow--chevron-down_white.svg diff --git a/static/base/icon-checkmark-green.svg b/src/static/base/icon-checkmark-green.svg similarity index 100% rename from static/base/icon-checkmark-green.svg rename to src/static/base/icon-checkmark-green.svg diff --git a/static/base/icon-connected.svg b/src/static/base/icon-connected.svg similarity index 100% rename from static/base/icon-connected.svg rename to src/static/base/icon-connected.svg diff --git a/static/base/icon-keyboard.svg b/src/static/base/icon-keyboard.svg similarity index 100% rename from static/base/icon-keyboard.svg rename to src/static/base/icon-keyboard.svg diff --git a/static/base/light-accent--md.png b/src/static/base/light-accent--md.png similarity index 100% rename from static/base/light-accent--md.png rename to src/static/base/light-accent--md.png diff --git a/static/base/light-danger.png b/src/static/base/light-danger.png similarity index 100% rename from static/base/light-danger.png rename to src/static/base/light-danger.png diff --git a/static/base/light-success.png b/src/static/base/light-success.png similarity index 100% rename from static/base/light-success.png rename to src/static/base/light-success.png diff --git a/static/base/light-warning.png b/src/static/base/light-warning.png similarity index 100% rename from static/base/light-warning.png rename to src/static/base/light-warning.png diff --git a/static/base/neuron-blinking.gif b/src/static/base/neuron-blinking.gif similarity index 100% rename from static/base/neuron-blinking.gif rename to src/static/base/neuron-blinking.gif diff --git a/static/base/neuron-defy--black.png b/src/static/base/neuron-defy--black.png similarity index 100% rename from static/base/neuron-defy--black.png rename to src/static/base/neuron-defy--black.png diff --git a/static/base/neuron-defy--white.png b/src/static/base/neuron-defy--white.png similarity index 100% rename from static/base/neuron-defy--white.png rename to src/static/base/neuron-defy--white.png diff --git a/static/base/neuron-loader.gif b/src/static/base/neuron-loader.gif similarity index 100% rename from static/base/neuron-loader.gif rename to src/static/base/neuron-loader.gif diff --git a/static/videos/release-key.mp4 b/src/static/base/release-key.mp4 similarity index 100% rename from static/videos/release-key.mp4 rename to src/static/base/release-key.mp4 diff --git a/static/videos/update-firmware.mp4 b/src/static/base/update-firmware.mp4 similarity index 100% rename from static/videos/update-firmware.mp4 rename to src/static/base/update-firmware.mp4 diff --git a/static/base/update-keep-holding-firmware--once.gif b/src/static/base/update-keep-holding-firmware--once.gif similarity index 100% rename from static/base/update-keep-holding-firmware--once.gif rename to src/static/base/update-keep-holding-firmware--once.gif diff --git a/static/dark/MouseWheel.svg b/src/static/dark/MouseWheel.svg similarity index 100% rename from static/dark/MouseWheel.svg rename to src/static/dark/MouseWheel.svg diff --git a/static/dark/X.svg b/src/static/dark/X.svg similarity index 100% rename from static/dark/X.svg rename to src/static/dark/X.svg diff --git a/static/dark/darkBackground-2x.png b/src/static/dark/darkBackground-2x.png similarity index 100% rename from static/dark/darkBackground-2x.png rename to src/static/dark/darkBackground-2x.png diff --git a/static/dark/darkBackground.png b/src/static/dark/darkBackground.png similarity index 100% rename from static/dark/darkBackground.png rename to src/static/dark/darkBackground.png diff --git a/static/dark/defyFirmwareupgrade.svg b/src/static/dark/defyFirmwareupgrade.svg similarity index 100% rename from static/dark/defyFirmwareupgrade.svg rename to src/static/dark/defyFirmwareupgrade.svg diff --git a/static/dark/icon-check-animated.gif b/src/static/dark/icon-check-animated.gif similarity index 100% rename from static/dark/icon-check-animated.gif rename to src/static/dark/icon-check-animated.gif diff --git a/static/dark/light-accent--lg.png b/src/static/dark/light-accent--lg.png similarity index 100% rename from static/dark/light-accent--lg.png rename to src/static/dark/light-accent--lg.png diff --git a/static/dark/mouseWheel.png b/src/static/dark/mouseWheel.png similarity index 100% rename from static/dark/mouseWheel.png rename to src/static/dark/mouseWheel.png diff --git a/static/dark/neuron-loader.jpg b/src/static/dark/neuron-loader.jpg similarity index 100% rename from static/dark/neuron-loader.jpg rename to src/static/dark/neuron-loader.jpg diff --git a/static/dark/oldValueToNewValue.svg b/src/static/dark/oldValueToNewValue.svg similarity index 100% rename from static/dark/oldValueToNewValue.svg rename to src/static/dark/oldValueToNewValue.svg diff --git a/static/dark/plusIcon.svg b/src/static/dark/plusIcon.svg similarity index 100% rename from static/dark/plusIcon.svg rename to src/static/dark/plusIcon.svg diff --git a/static/dark/raiseFirmwareupgrade.svg b/src/static/dark/raiseFirmwareupgrade.svg similarity index 100% rename from static/dark/raiseFirmwareupgrade.svg rename to src/static/dark/raiseFirmwareupgrade.svg diff --git a/static/flags/denmark.png b/src/static/flags/denmark.png similarity index 100% rename from static/flags/denmark.png rename to src/static/flags/denmark.png diff --git a/static/flags/english.png b/src/static/flags/english.png similarity index 100% rename from static/flags/english.png rename to src/static/flags/english.png diff --git a/src/static/flags/englishUK.png b/src/static/flags/englishUK.png new file mode 100644 index 000000000..8c53fc7b7 Binary files /dev/null and b/src/static/flags/englishUK.png differ diff --git a/src/static/flags/englishUS.png b/src/static/flags/englishUS.png new file mode 100644 index 000000000..bfe630a84 Binary files /dev/null and b/src/static/flags/englishUS.png differ diff --git a/src/static/flags/eurkey.png b/src/static/flags/eurkey.png new file mode 100644 index 000000000..60897d381 Binary files /dev/null and b/src/static/flags/eurkey.png differ diff --git a/static/flags/finland.png b/src/static/flags/finland.png similarity index 100% rename from static/flags/finland.png rename to src/static/flags/finland.png diff --git a/static/flags/france.png b/src/static/flags/france.png similarity index 100% rename from static/flags/france.png rename to src/static/flags/france.png diff --git a/static/flags/germany.png b/src/static/flags/germany.png similarity index 100% rename from static/flags/germany.png rename to src/static/flags/germany.png diff --git a/static/flags/iceland.png b/src/static/flags/iceland.png similarity index 100% rename from static/flags/iceland.png rename to src/static/flags/iceland.png diff --git a/static/flags/japan.png b/src/static/flags/japan.png similarity index 100% rename from static/flags/japan.png rename to src/static/flags/japan.png diff --git a/src/static/flags/korean.png b/src/static/flags/korean.png new file mode 100644 index 000000000..1608060b4 Binary files /dev/null and b/src/static/flags/korean.png differ diff --git a/static/flags/norway.png b/src/static/flags/norway.png similarity index 100% rename from static/flags/norway.png rename to src/static/flags/norway.png diff --git a/static/flags/spain.png b/src/static/flags/spain.png similarity index 100% rename from static/flags/spain.png rename to src/static/flags/spain.png diff --git a/static/flags/sweden.png b/src/static/flags/sweden.png similarity index 100% rename from static/flags/sweden.png rename to src/static/flags/sweden.png diff --git a/static/flags/switzerland.png b/src/static/flags/switzerland.png similarity index 100% rename from static/flags/switzerland.png rename to src/static/flags/switzerland.png diff --git a/static/icon-check-aimated-light.gif b/src/static/icon-check-aimated-light.gif similarity index 100% rename from static/icon-check-aimated-light.gif rename to src/static/icon-check-aimated-light.gif diff --git a/static/icons/iconBolt-2stroke.svg b/src/static/icons/iconBolt-2stroke.svg similarity index 100% rename from static/icons/iconBolt-2stroke.svg rename to src/static/icons/iconBolt-2stroke.svg diff --git a/static/icons/iconKeyboard-2stroke.svg b/src/static/icons/iconKeyboard-2stroke.svg similarity index 100% rename from static/icons/iconKeyboard-2stroke.svg rename to src/static/icons/iconKeyboard-2stroke.svg diff --git a/static/icons/iconKeyboardSelection-2stroke.svg b/src/static/icons/iconKeyboardSelection-2stroke.svg similarity index 100% rename from static/icons/iconKeyboardSelection-2stroke.svg rename to src/static/icons/iconKeyboardSelection-2stroke.svg diff --git a/static/icons/iconMemory-2stroke.svg b/src/static/icons/iconMemory-2stroke.svg similarity index 100% rename from static/icons/iconMemory-2stroke.svg rename to src/static/icons/iconMemory-2stroke.svg diff --git a/static/icons/iconRobot-2stroke.svg b/src/static/icons/iconRobot-2stroke.svg similarity index 100% rename from static/icons/iconRobot-2stroke.svg rename to src/static/icons/iconRobot-2stroke.svg diff --git a/static/light/MouseWheel.svg b/src/static/light/MouseWheel.svg similarity index 100% rename from static/light/MouseWheel.svg rename to src/static/light/MouseWheel.svg diff --git a/static/light/X.svg b/src/static/light/X.svg similarity index 100% rename from static/light/X.svg rename to src/static/light/X.svg diff --git a/static/light/defyFirmwareupgrade.svg b/src/static/light/defyFirmwareupgrade.svg similarity index 100% rename from static/light/defyFirmwareupgrade.svg rename to src/static/light/defyFirmwareupgrade.svg diff --git a/static/light/icon-check-animated.gif b/src/static/light/icon-check-animated.gif similarity index 100% rename from static/light/icon-check-animated.gif rename to src/static/light/icon-check-animated.gif diff --git a/static/light/lightBackground-2x.png b/src/static/light/lightBackground-2x.png similarity index 100% rename from static/light/lightBackground-2x.png rename to src/static/light/lightBackground-2x.png diff --git a/static/light/lightBackground.png b/src/static/light/lightBackground.png similarity index 100% rename from static/light/lightBackground.png rename to src/static/light/lightBackground.png diff --git a/static/light/mouseWheel.png b/src/static/light/mouseWheel.png similarity index 100% rename from static/light/mouseWheel.png rename to src/static/light/mouseWheel.png diff --git a/static/light/neuron-loader.jpg b/src/static/light/neuron-loader.jpg similarity index 100% rename from static/light/neuron-loader.jpg rename to src/static/light/neuron-loader.jpg diff --git a/static/light/neuron-loaderOLD.jpg b/src/static/light/neuron-loaderOLD.jpg similarity index 100% rename from static/light/neuron-loaderOLD.jpg rename to src/static/light/neuron-loaderOLD.jpg diff --git a/static/light/oldValueToNewValue.svg b/src/static/light/oldValueToNewValue.svg similarity index 100% rename from static/light/oldValueToNewValue.svg rename to src/static/light/oldValueToNewValue.svg diff --git a/static/light/plusIcon.svg b/src/static/light/plusIcon.svg similarity index 100% rename from static/light/plusIcon.svg rename to src/static/light/plusIcon.svg diff --git a/static/light/raiseFirmwareupgrade.svg b/src/static/light/raiseFirmwareupgrade.svg similarity index 100% rename from static/light/raiseFirmwareupgrade.svg rename to src/static/light/raiseFirmwareupgrade.svg diff --git a/static/logo.png b/src/static/logo.png similarity index 100% rename from static/logo.png rename to src/static/logo.png diff --git a/static/logo.svg b/src/static/logo.svg similarity index 100% rename from static/logo.svg rename to src/static/logo.svg diff --git a/static/press_esc.png b/src/static/press_esc.png similarity index 100% rename from static/press_esc.png rename to src/static/press_esc.png diff --git a/static/videos/connectCablesDefy.mp4 b/src/static/videos/connectCablesDefy.mp4 similarity index 100% rename from static/videos/connectCablesDefy.mp4 rename to src/static/videos/connectCablesDefy.mp4 diff --git a/src/static/videos/release-key-defy--sm.mp4 b/src/static/videos/release-key-defy--sm.mp4 new file mode 100644 index 000000000..5f494a573 Binary files /dev/null and b/src/static/videos/release-key-defy--sm.mp4 differ diff --git a/src/static/videos/release-key-defy.mp4 b/src/static/videos/release-key-defy.mp4 new file mode 100644 index 000000000..751982961 Binary files /dev/null and b/src/static/videos/release-key-defy.mp4 differ diff --git a/src/static/videos/release-key.mp4 b/src/static/videos/release-key.mp4 new file mode 100755 index 000000000..12061ce11 Binary files /dev/null and b/src/static/videos/release-key.mp4 differ diff --git a/src/static/videos/update-firmware-defy--sm.mp4 b/src/static/videos/update-firmware-defy--sm.mp4 new file mode 100644 index 000000000..5fdcc2007 Binary files /dev/null and b/src/static/videos/update-firmware-defy--sm.mp4 differ diff --git a/static/videos/update-firmware-defy-compress.mp4 b/src/static/videos/update-firmware-defy-compress-old.mp4 similarity index 100% rename from static/videos/update-firmware-defy-compress.mp4 rename to src/static/videos/update-firmware-defy-compress-old.mp4 diff --git a/static/videos/update-firmware-defy-releaseKeys-compress.mp4 b/src/static/videos/update-firmware-defy-releaseKeys-compressOld.mp4 similarity index 100% rename from static/videos/update-firmware-defy-releaseKeys-compress.mp4 rename to src/static/videos/update-firmware-defy-releaseKeys-compressOld.mp4 diff --git a/src/static/videos/update-firmware-defy.mp4 b/src/static/videos/update-firmware-defy.mp4 new file mode 100644 index 000000000..3b8e2c481 Binary files /dev/null and b/src/static/videos/update-firmware-defy.mp4 differ diff --git a/src/static/videos/update-firmware.mp4 b/src/static/videos/update-firmware.mp4 new file mode 100755 index 000000000..a48fc7c93 Binary files /dev/null and b/src/static/videos/update-firmware.mp4 differ diff --git a/static/tools/bossac/linux/bossac b/static/tools/bossac/linux/bossac deleted file mode 100755 index fbda4606b..000000000 Binary files a/static/tools/bossac/linux/bossac and /dev/null differ diff --git a/static/tools/bossac/win32/bossac.exe b/static/tools/bossac/win32/bossac.exe deleted file mode 100644 index de31e1168..000000000 Binary files a/static/tools/bossac/win32/bossac.exe and /dev/null differ diff --git a/tests-examples/demo-todo-app.spec.ts b/tests-examples/demo-todo-app.spec.ts new file mode 100644 index 000000000..2fd6016fe --- /dev/null +++ b/tests-examples/demo-todo-app.spec.ts @@ -0,0 +1,437 @@ +import { test, expect, type Page } from '@playwright/test'; + +test.beforeEach(async ({ page }) => { + await page.goto('https://demo.playwright.dev/todomvc'); +}); + +const TODO_ITEMS = [ + 'buy some cheese', + 'feed the cat', + 'book a doctors appointment' +]; + +test.describe('New Todo', () => { + test('should allow me to add todo items', async ({ page }) => { + // create a new todo locator + const newTodo = page.getByPlaceholder('What needs to be done?'); + + // Create 1st todo. + await newTodo.fill(TODO_ITEMS[0]); + await newTodo.press('Enter'); + + // Make sure the list only has one todo item. + await expect(page.getByTestId('todo-title')).toHaveText([ + TODO_ITEMS[0] + ]); + + // Create 2nd todo. + await newTodo.fill(TODO_ITEMS[1]); + await newTodo.press('Enter'); + + // Make sure the list now has two todo items. + await expect(page.getByTestId('todo-title')).toHaveText([ + TODO_ITEMS[0], + TODO_ITEMS[1] + ]); + + await checkNumberOfTodosInLocalStorage(page, 2); + }); + + test('should clear text input field when an item is added', async ({ page }) => { + // create a new todo locator + const newTodo = page.getByPlaceholder('What needs to be done?'); + + // Create one todo item. + await newTodo.fill(TODO_ITEMS[0]); + await newTodo.press('Enter'); + + // Check that input is empty. + await expect(newTodo).toBeEmpty(); + await checkNumberOfTodosInLocalStorage(page, 1); + }); + + test('should append new items to the bottom of the list', async ({ page }) => { + // Create 3 items. + await createDefaultTodos(page); + + // create a todo count locator + const todoCount = page.getByTestId('todo-count') + + // Check test using different methods. + await expect(page.getByText('3 items left')).toBeVisible(); + await expect(todoCount).toHaveText('3 items left'); + await expect(todoCount).toContainText('3'); + await expect(todoCount).toHaveText(/3/); + + // Check all items in one call. + await expect(page.getByTestId('todo-title')).toHaveText(TODO_ITEMS); + await checkNumberOfTodosInLocalStorage(page, 3); + }); +}); + +test.describe('Mark all as completed', () => { + test.beforeEach(async ({ page }) => { + await createDefaultTodos(page); + await checkNumberOfTodosInLocalStorage(page, 3); + }); + + test.afterEach(async ({ page }) => { + await checkNumberOfTodosInLocalStorage(page, 3); + }); + + test('should allow me to mark all items as completed', async ({ page }) => { + // Complete all todos. + await page.getByLabel('Mark all as complete').check(); + + // Ensure all todos have 'completed' class. + await expect(page.getByTestId('todo-item')).toHaveClass(['completed', 'completed', 'completed']); + await checkNumberOfCompletedTodosInLocalStorage(page, 3); + }); + + test('should allow me to clear the complete state of all items', async ({ page }) => { + const toggleAll = page.getByLabel('Mark all as complete'); + // Check and then immediately uncheck. + await toggleAll.check(); + await toggleAll.uncheck(); + + // Should be no completed classes. + await expect(page.getByTestId('todo-item')).toHaveClass(['', '', '']); + }); + + test('complete all checkbox should update state when items are completed / cleared', async ({ page }) => { + const toggleAll = page.getByLabel('Mark all as complete'); + await toggleAll.check(); + await expect(toggleAll).toBeChecked(); + await checkNumberOfCompletedTodosInLocalStorage(page, 3); + + // Uncheck first todo. + const firstTodo = page.getByTestId('todo-item').nth(0); + await firstTodo.getByRole('checkbox').uncheck(); + + // Reuse toggleAll locator and make sure its not checked. + await expect(toggleAll).not.toBeChecked(); + + await firstTodo.getByRole('checkbox').check(); + await checkNumberOfCompletedTodosInLocalStorage(page, 3); + + // Assert the toggle all is checked again. + await expect(toggleAll).toBeChecked(); + }); +}); + +test.describe('Item', () => { + + test('should allow me to mark items as complete', async ({ page }) => { + // create a new todo locator + const newTodo = page.getByPlaceholder('What needs to be done?'); + + // Create two items. + for (const item of TODO_ITEMS.slice(0, 2)) { + await newTodo.fill(item); + await newTodo.press('Enter'); + } + + // Check first item. + const firstTodo = page.getByTestId('todo-item').nth(0); + await firstTodo.getByRole('checkbox').check(); + await expect(firstTodo).toHaveClass('completed'); + + // Check second item. + const secondTodo = page.getByTestId('todo-item').nth(1); + await expect(secondTodo).not.toHaveClass('completed'); + await secondTodo.getByRole('checkbox').check(); + + // Assert completed class. + await expect(firstTodo).toHaveClass('completed'); + await expect(secondTodo).toHaveClass('completed'); + }); + + test('should allow me to un-mark items as complete', async ({ page }) => { + // create a new todo locator + const newTodo = page.getByPlaceholder('What needs to be done?'); + + // Create two items. + for (const item of TODO_ITEMS.slice(0, 2)) { + await newTodo.fill(item); + await newTodo.press('Enter'); + } + + const firstTodo = page.getByTestId('todo-item').nth(0); + const secondTodo = page.getByTestId('todo-item').nth(1); + const firstTodoCheckbox = firstTodo.getByRole('checkbox'); + + await firstTodoCheckbox.check(); + await expect(firstTodo).toHaveClass('completed'); + await expect(secondTodo).not.toHaveClass('completed'); + await checkNumberOfCompletedTodosInLocalStorage(page, 1); + + await firstTodoCheckbox.uncheck(); + await expect(firstTodo).not.toHaveClass('completed'); + await expect(secondTodo).not.toHaveClass('completed'); + await checkNumberOfCompletedTodosInLocalStorage(page, 0); + }); + + test('should allow me to edit an item', async ({ page }) => { + await createDefaultTodos(page); + + const todoItems = page.getByTestId('todo-item'); + const secondTodo = todoItems.nth(1); + await secondTodo.dblclick(); + await expect(secondTodo.getByRole('textbox', { name: 'Edit' })).toHaveValue(TODO_ITEMS[1]); + await secondTodo.getByRole('textbox', { name: 'Edit' }).fill('buy some sausages'); + await secondTodo.getByRole('textbox', { name: 'Edit' }).press('Enter'); + + // Explicitly assert the new text value. + await expect(todoItems).toHaveText([ + TODO_ITEMS[0], + 'buy some sausages', + TODO_ITEMS[2] + ]); + await checkTodosInLocalStorage(page, 'buy some sausages'); + }); +}); + +test.describe('Editing', () => { + test.beforeEach(async ({ page }) => { + await createDefaultTodos(page); + await checkNumberOfTodosInLocalStorage(page, 3); + }); + + test('should hide other controls when editing', async ({ page }) => { + const todoItem = page.getByTestId('todo-item').nth(1); + await todoItem.dblclick(); + await expect(todoItem.getByRole('checkbox')).not.toBeVisible(); + await expect(todoItem.locator('label', { + hasText: TODO_ITEMS[1], + })).not.toBeVisible(); + await checkNumberOfTodosInLocalStorage(page, 3); + }); + + test('should save edits on blur', async ({ page }) => { + const todoItems = page.getByTestId('todo-item'); + await todoItems.nth(1).dblclick(); + await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).fill('buy some sausages'); + await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).dispatchEvent('blur'); + + await expect(todoItems).toHaveText([ + TODO_ITEMS[0], + 'buy some sausages', + TODO_ITEMS[2], + ]); + await checkTodosInLocalStorage(page, 'buy some sausages'); + }); + + test('should trim entered text', async ({ page }) => { + const todoItems = page.getByTestId('todo-item'); + await todoItems.nth(1).dblclick(); + await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).fill(' buy some sausages '); + await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).press('Enter'); + + await expect(todoItems).toHaveText([ + TODO_ITEMS[0], + 'buy some sausages', + TODO_ITEMS[2], + ]); + await checkTodosInLocalStorage(page, 'buy some sausages'); + }); + + test('should remove the item if an empty text string was entered', async ({ page }) => { + const todoItems = page.getByTestId('todo-item'); + await todoItems.nth(1).dblclick(); + await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).fill(''); + await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).press('Enter'); + + await expect(todoItems).toHaveText([ + TODO_ITEMS[0], + TODO_ITEMS[2], + ]); + }); + + test('should cancel edits on escape', async ({ page }) => { + const todoItems = page.getByTestId('todo-item'); + await todoItems.nth(1).dblclick(); + await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).fill('buy some sausages'); + await todoItems.nth(1).getByRole('textbox', { name: 'Edit' }).press('Escape'); + await expect(todoItems).toHaveText(TODO_ITEMS); + }); +}); + +test.describe('Counter', () => { + test('should display the current number of todo items', async ({ page }) => { + // create a new todo locator + const newTodo = page.getByPlaceholder('What needs to be done?'); + + // create a todo count locator + const todoCount = page.getByTestId('todo-count') + + await newTodo.fill(TODO_ITEMS[0]); + await newTodo.press('Enter'); + + await expect(todoCount).toContainText('1'); + + await newTodo.fill(TODO_ITEMS[1]); + await newTodo.press('Enter'); + await expect(todoCount).toContainText('2'); + + await checkNumberOfTodosInLocalStorage(page, 2); + }); +}); + +test.describe('Clear completed button', () => { + test.beforeEach(async ({ page }) => { + await createDefaultTodos(page); + }); + + test('should display the correct text', async ({ page }) => { + await page.locator('.todo-list li .toggle').first().check(); + await expect(page.getByRole('button', { name: 'Clear completed' })).toBeVisible(); + }); + + test('should remove completed items when clicked', async ({ page }) => { + const todoItems = page.getByTestId('todo-item'); + await todoItems.nth(1).getByRole('checkbox').check(); + await page.getByRole('button', { name: 'Clear completed' }).click(); + await expect(todoItems).toHaveCount(2); + await expect(todoItems).toHaveText([TODO_ITEMS[0], TODO_ITEMS[2]]); + }); + + test('should be hidden when there are no items that are completed', async ({ page }) => { + await page.locator('.todo-list li .toggle').first().check(); + await page.getByRole('button', { name: 'Clear completed' }).click(); + await expect(page.getByRole('button', { name: 'Clear completed' })).toBeHidden(); + }); +}); + +test.describe('Persistence', () => { + test('should persist its data', async ({ page }) => { + // create a new todo locator + const newTodo = page.getByPlaceholder('What needs to be done?'); + + for (const item of TODO_ITEMS.slice(0, 2)) { + await newTodo.fill(item); + await newTodo.press('Enter'); + } + + const todoItems = page.getByTestId('todo-item'); + const firstTodoCheck = todoItems.nth(0).getByRole('checkbox'); + await firstTodoCheck.check(); + await expect(todoItems).toHaveText([TODO_ITEMS[0], TODO_ITEMS[1]]); + await expect(firstTodoCheck).toBeChecked(); + await expect(todoItems).toHaveClass(['completed', '']); + + // Ensure there is 1 completed item. + await checkNumberOfCompletedTodosInLocalStorage(page, 1); + + // Now reload. + await page.reload(); + await expect(todoItems).toHaveText([TODO_ITEMS[0], TODO_ITEMS[1]]); + await expect(firstTodoCheck).toBeChecked(); + await expect(todoItems).toHaveClass(['completed', '']); + }); +}); + +test.describe('Routing', () => { + test.beforeEach(async ({ page }) => { + await createDefaultTodos(page); + // make sure the app had a chance to save updated todos in storage + // before navigating to a new view, otherwise the items can get lost :( + // in some frameworks like Durandal + await checkTodosInLocalStorage(page, TODO_ITEMS[0]); + }); + + test('should allow me to display active items', async ({ page }) => { + const todoItem = page.getByTestId('todo-item'); + await page.getByTestId('todo-item').nth(1).getByRole('checkbox').check(); + + await checkNumberOfCompletedTodosInLocalStorage(page, 1); + await page.getByRole('link', { name: 'Active' }).click(); + await expect(todoItem).toHaveCount(2); + await expect(todoItem).toHaveText([TODO_ITEMS[0], TODO_ITEMS[2]]); + }); + + test('should respect the back button', async ({ page }) => { + const todoItem = page.getByTestId('todo-item'); + await page.getByTestId('todo-item').nth(1).getByRole('checkbox').check(); + + await checkNumberOfCompletedTodosInLocalStorage(page, 1); + + await test.step('Showing all items', async () => { + await page.getByRole('link', { name: 'All' }).click(); + await expect(todoItem).toHaveCount(3); + }); + + await test.step('Showing active items', async () => { + await page.getByRole('link', { name: 'Active' }).click(); + }); + + await test.step('Showing completed items', async () => { + await page.getByRole('link', { name: 'Completed' }).click(); + }); + + await expect(todoItem).toHaveCount(1); + await page.goBack(); + await expect(todoItem).toHaveCount(2); + await page.goBack(); + await expect(todoItem).toHaveCount(3); + }); + + test('should allow me to display completed items', async ({ page }) => { + await page.getByTestId('todo-item').nth(1).getByRole('checkbox').check(); + await checkNumberOfCompletedTodosInLocalStorage(page, 1); + await page.getByRole('link', { name: 'Completed' }).click(); + await expect(page.getByTestId('todo-item')).toHaveCount(1); + }); + + test('should allow me to display all items', async ({ page }) => { + await page.getByTestId('todo-item').nth(1).getByRole('checkbox').check(); + await checkNumberOfCompletedTodosInLocalStorage(page, 1); + await page.getByRole('link', { name: 'Active' }).click(); + await page.getByRole('link', { name: 'Completed' }).click(); + await page.getByRole('link', { name: 'All' }).click(); + await expect(page.getByTestId('todo-item')).toHaveCount(3); + }); + + test('should highlight the currently applied filter', async ({ page }) => { + await expect(page.getByRole('link', { name: 'All' })).toHaveClass('selected'); + + //create locators for active and completed links + const activeLink = page.getByRole('link', { name: 'Active' }); + const completedLink = page.getByRole('link', { name: 'Completed' }); + await activeLink.click(); + + // Page change - active items. + await expect(activeLink).toHaveClass('selected'); + await completedLink.click(); + + // Page change - completed items. + await expect(completedLink).toHaveClass('selected'); + }); +}); + +async function createDefaultTodos(page: Page) { + // create a new todo locator + const newTodo = page.getByPlaceholder('What needs to be done?'); + + for (const item of TODO_ITEMS) { + await newTodo.fill(item); + await newTodo.press('Enter'); + } +} + +async function checkNumberOfTodosInLocalStorage(page: Page, expected: number) { + return await page.waitForFunction(e => { + return JSON.parse(localStorage['react-todos']).length === e; + }, expected); +} + +async function checkNumberOfCompletedTodosInLocalStorage(page: Page, expected: number) { + return await page.waitForFunction(e => { + return JSON.parse(localStorage['react-todos']).filter((todo: any) => todo.completed).length === e; + }, expected); +} + +async function checkTodosInLocalStorage(page: Page, title: string) { + return await page.waitForFunction(t => { + return JSON.parse(localStorage['react-todos']).map((todo: any) => todo.title).includes(t); + }, title); +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 000000000..0059c053b --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "target": "ES6", + "allowJs": true, + "jsx": "react-jsx", + "module": "commonjs", + "skipLibCheck": true, + "esModuleInterop": true, + "noImplicitAny": true, + "sourceMap": true, + "baseUrl": ".", + "outDir": "dist", + "moduleResolution": "node", + "resolveJsonModule": true, + "paths": { + "*": ["node_modules/*"], + "@Assets/*": ["src/static/*"], + "@Renderer/*": ["src/renderer/*"], + "@Types/*": ["src/renderer/types/*"], + "@appigram/react-rangeslider": ["./node_modules/@types/react-rangeslider"] + } + }, + "include": ["src/**/*"], + "files": ["src/renderer/theme/styled.d.ts"] +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 000000000..5190dd62b --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,5 @@ +import { defineConfig } from "vite"; + +export default defineConfig({ + plugins: [], +}); diff --git a/webpack.main.config.ts b/webpack.main.config.ts new file mode 100644 index 000000000..6382c99ec --- /dev/null +++ b/webpack.main.config.ts @@ -0,0 +1,27 @@ +import type { Configuration } from "webpack"; + +import rules from "./webpack.rules"; + +const mainConfig: Configuration = { + /** + * This is the main entry point for your application, it's the first file + * that runs in the main process. + */ + entry: "./src/main/index.ts", + // Put your normal webpack config below here + module: { + rules, + }, + resolve: { + extensions: [".js", ".ts", ".jsx", ".tsx", ".css", ".json"], + }, + target: "electron-main", + externals: { + "uiohook-napi": "uiohook-napi", + serialport: "serialport", + "@serialport": "@serialport", + usb: "usb", + }, +}; + +export default mainConfig; diff --git a/webpack.plugins.ts b/webpack.plugins.ts new file mode 100644 index 000000000..aec2e2a29 --- /dev/null +++ b/webpack.plugins.ts @@ -0,0 +1,12 @@ +import type IForkTsCheckerWebpackPlugin from "fork-ts-checker-webpack-plugin"; + +/* eslint-disable @typescript-eslint/no-var-requires */ +const ForkTsCheckerWebpackPlugin: typeof IForkTsCheckerWebpackPlugin = require("fork-ts-checker-webpack-plugin"); + +const plugins = [ + new ForkTsCheckerWebpackPlugin({ + logger: "webpack-infrastructure", + }), +]; + +export default plugins; diff --git a/webpack.renderer.config.ts b/webpack.renderer.config.ts new file mode 100644 index 000000000..db780168f --- /dev/null +++ b/webpack.renderer.config.ts @@ -0,0 +1,32 @@ +import type { Configuration } from "webpack"; +import path from "path"; +import rules from "./webpack.rules"; +import plugins from "./webpack.plugins"; + +rules.push({ + test: /\.css$/, + use: [{ loader: "style-loader" }, { loader: "css-loader" }], +}); + +const rendererConfig: Configuration = { + target: "electron-renderer", + module: { + rules, + }, + plugins, + resolve: { + extensions: [".js", ".ts", ".jsx", ".tsx", ".css"], + alias: { + "@Assets": path.resolve(__dirname, "src", "static"), + "@Renderer": path.resolve(__dirname, "src", "renderer"), + "@Types": path.resolve(__dirname, "src", "renderer", "types"), + }, + }, + externals: { + serialport: "serialport", + "@serialport": "@serialport", + usb: "usb", + }, +}; + +export default rendererConfig; diff --git a/webpack.rules.ts b/webpack.rules.ts new file mode 100644 index 000000000..b04d89de2 --- /dev/null +++ b/webpack.rules.ts @@ -0,0 +1,57 @@ +import type { ModuleOptions } from "webpack"; + +const rules: Required<ModuleOptions>["rules"] = [ + // Add support for native node modules + { + // We're specifying native_modules in the test because the asset relocator loader generates a + // "fake" .node file which is really a cjs file. + test: /native_modules[/\\].+\.node$/, + use: "node-loader", + }, + { + test: /[/\\]node_modules[/\\].+\.(m?js|node)$/, + parser: { amd: false }, + use: { + loader: "@vercel/webpack-asset-relocator-loader", + options: { + outputAssetBase: "native_modules", + }, + }, + }, + { + test: /\.jsx?$/, + exclude: /node_modules/, + use: { + loader: "babel-loader", + options: { + presets: ["@babel/preset-react"], + }, + }, + }, + { + test: /\.tsx?$/, + exclude: /(node_modules|\.webpack)/, + use: { + loader: "ts-loader", + options: { + transpileOnly: true, + }, + }, + }, + { + test: /\.(woff|woff2|eot|ttf|otf)$/i, + type: "asset/resource", + generator: { + filename: "static/[name][hash][ext][query]", + }, + }, + { + test: /\.(svg|png|mp4|gif|jpg)$/i, + type: "asset/resource", + generator: { + filename: "static/[name][hash][ext][query]", + }, + }, +]; + +export default rules; diff --git a/webpack.standalone.config.ts b/webpack.standalone.config.ts new file mode 100644 index 000000000..e927b3817 --- /dev/null +++ b/webpack.standalone.config.ts @@ -0,0 +1,55 @@ +import path from "path"; +import HtmlWebpackPlugin from "html-webpack-plugin"; + +/* We are basically telling webpack to take index.js from entry. Then check for all file extensions in resolve. +After that apply all the rules in module.rules and produce the output and place it in main.js in the public folder. */ + +// this is for future, is not meant to be used!!! also it is for development mode +export default { + mode: "development", + entry: "./src/renderer/renderer.tsx", + output: { + path: path.resolve(__dirname, "dist"), + filename: "bundle.js", + }, + target: "web", + devServer: { + port: "3000", + static: { + directory: path.join(__dirname, "dist"), + }, + open: true, + hot: true, + liveReload: true, + }, + plugins: [ + new HtmlWebpackPlugin({ + template: path.join(__dirname, "src", "renderer", "index.html"), + }), + ], + resolve: { + extensions: [".js", ".jsx", ".json", ".ts", ".tsx"], + alias: { + Assets: path.resolve(__dirname, "src", "static"), + Renderer: path.resolve(__dirname, "src", "renderer"), + }, + }, + module: { + rules: [ + { + test: /\.(js|jsx)$/, // kind of file extension this rule should look for and apply in test + exclude: /node_modules/, // folder to be excluded + use: "babel-loader", // loader which we are going to use + }, + { + test: /\.tsx?$/, + use: "ts-loader", + exclude: /node_modules/, + }, + { + test: /\.css$/i, + use: ["style-loader", "css-loader"], + }, + ], + }, +}; diff --git a/yarn.lock b/yarn.lock index bdd7866e2..4db61dbf1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4,20 +4,20 @@ "7zip-bin@~5.1.1": version "5.1.1" - resolved "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.1.1.tgz" + resolved "https://registry.yarnpkg.com/7zip-bin/-/7zip-bin-5.1.1.tgz#9274ec7460652f9c632c59addf24efb1684ef876" integrity sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ== -"7zip@0.0.6": - version "0.0.6" - resolved "https://registry.npmjs.org/7zip/-/7zip-0.0.6.tgz" - integrity sha1-nK+xca+CMpSQNTtIFvAzR6oVCjA= +"@aashutoshrathi/word-wrap@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" + integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== -"@ampproject/remapping@^2.1.0": - version "2.2.0" - resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz" - integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== +"@ampproject/remapping@^2.2.0": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" + integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== dependencies: - "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" "@appigram/react-rangeslider@2.2.10": @@ -28,896 +28,913 @@ classnames "^2.2.6" resize-observer-polyfill "^1.5.1" -"@babel/cli@^7.13.10": - version "7.13.14" - resolved "https://registry.npmjs.org/@babel/cli/-/cli-7.13.14.tgz" - integrity sha512-zmEFV8WBRsW+mPQumO1/4b34QNALBVReaiHJOkxhUsdo/AvYM62c+SKSuLi2aZ42t3ocK6OI0uwUXRvrIbREZw== - dependencies: - commander "^4.0.1" - convert-source-map "^1.1.0" - fs-readdir-recursive "^1.1.0" - glob "^7.0.0" - lodash "^4.17.19" - make-dir "^2.1.0" - slash "^2.0.0" - source-map "^0.5.0" - optionalDependencies: - "@nicolo-ribaudo/chokidar-2" "2.1.8-no-fsevents" - chokidar "^3.4.0" - -"@babel/code-frame@7.12.11": - version "7.12.11" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== - dependencies: - "@babel/highlight" "^7.10.4" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz" - integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== - dependencies: - "@babel/highlight" "^7.16.7" - -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.17.10": - version "7.18.5" - resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.5.tgz" - integrity sha512-BxhE40PVCBxVEJsSBhB6UWyAuqJRxGsAw8BdHMJ3AKGydcwuWW4kOO3HmqBQAdcq/OP+/DlTVxLvsCzRTnZuGg== - -"@babel/core@>=7.9.0", "@babel/core@^7.13.13", "@babel/core@^7.15.5", "@babel/core@^7.9.0": - version "7.18.5" - resolved "https://registry.npmjs.org/@babel/core/-/core-7.18.5.tgz" - integrity sha512-MGY8vg3DxMnctw0LdvSEojOsumc70g0t18gNyUdAZqB1Rpd1Bqo/svHGvt+UJ6JcGX+DIekGFDxxIWofBxLCnQ== - dependencies: - "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.18.2" - "@babel/helper-compilation-targets" "^7.18.2" - "@babel/helper-module-transforms" "^7.18.0" - "@babel/helpers" "^7.18.2" - "@babel/parser" "^7.18.5" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.18.5" - "@babel/types" "^7.18.4" +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.21.4", "@babel/code-frame@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.5.tgz#234d98e1551960604f1246e6475891a570ad5658" + integrity sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ== + dependencies: + "@babel/highlight" "^7.22.5" + +"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.5", "@babel/compat-data@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.5.tgz#b1f6c86a02d85d2dd3368a2b67c09add8cd0c255" + integrity sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA== + +"@babel/core@^7.22.1": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.5.tgz#d67d9747ecf26ee7ecd3ebae1ee22225fe902a89" + integrity sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.22.5" + "@babel/generator" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.5" + "@babel/helper-module-transforms" "^7.22.5" + "@babel/helpers" "^7.22.5" + "@babel/parser" "^7.22.5" + "@babel/template" "^7.22.5" + "@babel/traverse" "^7.22.5" + "@babel/types" "^7.22.5" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" - json5 "^2.2.1" - semver "^6.3.0" - -"@babel/eslint-parser@^7.13.10": - version "7.13.14" - resolved "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.13.14.tgz" - integrity sha512-I0HweR36D73Ibn/FfrRDMKlMqJHFwidIUgYdMpH+aXYuQC+waq59YaJ6t9e9N36axJ82v1jR041wwqDrDXEwRA== - dependencies: - eslint-scope "^5.1.0" - eslint-visitor-keys "^1.3.0" + json5 "^2.2.2" semver "^6.3.0" -"@babel/generator@^7.18.2": - version "7.18.2" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz" - integrity sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw== +"@babel/generator@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.5.tgz#1e7bf768688acfb05cf30b2369ef855e82d984f7" + integrity sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA== dependencies: - "@babel/types" "^7.18.2" - "@jridgewell/gen-mapping" "^0.3.0" + "@babel/types" "^7.22.5" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/helper-annotate-as-pure@^7.16.0", "@babel/helper-annotate-as-pure@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz" - integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== +"@babel/helper-annotate-as-pure@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" + integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== dependencies: - "@babel/types" "^7.16.7" + "@babel/types" "^7.22.5" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz" - integrity sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz#a3f4758efdd0190d8927fcffd261755937c71878" + integrity sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw== dependencies: - "@babel/helper-explode-assignable-expression" "^7.16.7" - "@babel/types" "^7.16.7" + "@babel/types" "^7.22.5" -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7", "@babel/helper-compilation-targets@^7.17.10", "@babel/helper-compilation-targets@^7.18.2": - version "7.18.2" - resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz" - integrity sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ== +"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz#fc7319fc54c5e2fa14b2909cf3c5fd3046813e02" + integrity sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw== dependencies: - "@babel/compat-data" "^7.17.10" - "@babel/helper-validator-option" "^7.16.7" - browserslist "^4.20.2" + "@babel/compat-data" "^7.22.5" + "@babel/helper-validator-option" "^7.22.5" + browserslist "^4.21.3" + lru-cache "^5.1.1" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.17.12", "@babel/helper-create-class-features-plugin@^7.18.0": - version "7.18.0" - resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.0.tgz" - integrity sha512-Kh8zTGR9de3J63e5nS0rQUdRs/kbtwoeQQ0sriS0lItjC96u8XXZN6lKpuyWd2coKSU13py/y+LTmThLuVX0Pg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.17.9" - "@babel/helper-member-expression-to-functions" "^7.17.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz#2192a1970ece4685fbff85b48da2c32fcb130b7c" + integrity sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-member-expression-to-functions" "^7.22.5" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.5" + semver "^6.3.0" -"@babel/helper-create-regexp-features-plugin@^7.16.7", "@babel/helper-create-regexp-features-plugin@^7.17.12": - version "7.17.12" - resolved "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.12.tgz" - integrity sha512-b2aZrV4zvutr9AIa6/gA3wsZKRwTKYoDxYiFKcESS3Ug2GTXzwBEvMuuFLhCQpEnRXs1zng4ISAXSUxxKBIcxw== +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz#bb2bf0debfe39b831986a4efbf4066586819c6e4" + integrity sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - regexpu-core "^5.0.1" + "@babel/helper-annotate-as-pure" "^7.22.5" + regexpu-core "^5.3.1" + semver "^6.3.0" -"@babel/helper-define-polyfill-provider@^0.3.1": - version "0.3.1" - resolved "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz" - integrity sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA== +"@babel/helper-define-polyfill-provider@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz#487053f103110f25b9755c5980e031e93ced24d8" + integrity sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg== dependencies: - "@babel/helper-compilation-targets" "^7.13.0" - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/traverse" "^7.13.0" + "@babel/helper-compilation-targets" "^7.17.7" + "@babel/helper-plugin-utils" "^7.16.7" debug "^4.1.1" lodash.debounce "^4.0.8" resolve "^1.14.2" semver "^6.1.2" -"@babel/helper-environment-visitor@^7.16.7", "@babel/helper-environment-visitor@^7.18.2": - version "7.18.2" - resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz" - integrity sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ== - -"@babel/helper-explode-assignable-expression@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz" - integrity sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-function-name@^7.16.7", "@babel/helper-function-name@^7.17.9": - version "7.17.9" - resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz" - integrity sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg== - dependencies: - "@babel/template" "^7.16.7" - "@babel/types" "^7.17.0" - -"@babel/helper-hoist-variables@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz" - integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-member-expression-to-functions@^7.17.7": - version "7.17.7" - resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz" - integrity sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw== - dependencies: - "@babel/types" "^7.17.0" - -"@babel/helper-module-imports@7.0.0-beta.35": - version "7.0.0-beta.35" - resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0-beta.35.tgz" - integrity sha512-vaC1KyIZSuyWb3Lj277fX0pxivyHwuDU4xZsofqgYAbkDxNieMg2vuhzP5AgMweMY7fCQUMTi+BgPqTLjkxXFg== - dependencies: - "@babel/types" "7.0.0-beta.35" - lodash "^4.2.0" - -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.0", "@babel/helper-module-imports@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz" - integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-module-transforms@^7.18.0": - version "7.18.0" - resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz" - integrity sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA== - dependencies: - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-simple-access" "^7.17.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/helper-validator-identifier" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.18.0" - "@babel/types" "^7.18.0" - -"@babel/helper-optimise-call-expression@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz" - integrity sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.17.12", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.17.12" - resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz" - integrity sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA== - -"@babel/helper-remap-async-to-generator@^7.16.8": - version "7.16.8" - resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz" - integrity sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-wrap-function" "^7.16.8" - "@babel/types" "^7.16.8" - -"@babel/helper-replace-supers@^7.16.7", "@babel/helper-replace-supers@^7.18.2": - version "7.18.2" - resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.2.tgz" - integrity sha512-XzAIyxx+vFnrOxiQrToSUOzUOn0e1J2Li40ntddek1Y69AXUTXoDJ40/D5RdjFu7s7qHiaeoTiempZcbuVXh2Q== - dependencies: - "@babel/helper-environment-visitor" "^7.18.2" - "@babel/helper-member-expression-to-functions" "^7.17.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/traverse" "^7.18.2" - "@babel/types" "^7.18.2" - -"@babel/helper-simple-access@^7.17.7", "@babel/helper-simple-access@^7.18.2": - version "7.18.2" - resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz" - integrity sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ== - dependencies: - "@babel/types" "^7.18.2" - -"@babel/helper-skip-transparent-expression-wrappers@^7.16.0": - version "7.16.0" - resolved "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz" - integrity sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw== - dependencies: - "@babel/types" "^7.16.0" - -"@babel/helper-split-export-declaration@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz" - integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-validator-identifier@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz" - integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== - -"@babel/helper-validator-option@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz" - integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== - -"@babel/helper-wrap-function@^7.16.8": - version "7.16.8" - resolved "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz" - integrity sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw== - dependencies: - "@babel/helper-function-name" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.16.8" - "@babel/types" "^7.16.8" - -"@babel/helpers@^7.18.2": - version "7.18.2" - resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.2.tgz" - integrity sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg== - dependencies: - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.18.2" - "@babel/types" "^7.18.2" - -"@babel/highlight@^7.10.4", "@babel/highlight@^7.16.7": - version "7.17.12" - resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz" - integrity sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg== - dependencies: - "@babel/helper-validator-identifier" "^7.16.7" +"@babel/helper-environment-visitor@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz#f06dd41b7c1f44e1f8da6c4055b41ab3a09a7e98" + integrity sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q== + +"@babel/helper-function-name@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz#ede300828905bb15e582c037162f99d5183af1be" + integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ== + dependencies: + "@babel/template" "^7.22.5" + "@babel/types" "^7.22.5" + +"@babel/helper-hoist-variables@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" + integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-member-expression-to-functions@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz#0a7c56117cad3372fbf8d2fb4bf8f8d64a1e76b2" + integrity sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz#1a8f4c9f4027d23f520bd76b364d44434a72660c" + integrity sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-module-transforms@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz#0f65daa0716961b6e96b164034e737f60a80d2ef" + integrity sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw== + dependencies: + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.5" + "@babel/template" "^7.22.5" + "@babel/traverse" "^7.22.5" + "@babel/types" "^7.22.5" + +"@babel/helper-optimise-call-expression@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" + integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" + integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== + +"@babel/helper-remap-async-to-generator@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz#14a38141a7bf2165ad38da61d61cf27b43015da2" + integrity sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-wrap-function" "^7.22.5" + "@babel/types" "^7.22.5" + +"@babel/helper-replace-supers@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz#71bc5fb348856dea9fdc4eafd7e2e49f585145dc" + integrity sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg== + dependencies: + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-member-expression-to-functions" "^7.22.5" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/template" "^7.22.5" + "@babel/traverse" "^7.22.5" + "@babel/types" "^7.22.5" + +"@babel/helper-simple-access@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" + integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-skip-transparent-expression-wrappers@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" + integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-split-export-declaration@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz#88cf11050edb95ed08d596f7a044462189127a08" + integrity sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-string-parser@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" + integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== + +"@babel/helper-validator-identifier@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193" + integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ== + +"@babel/helper-validator-option@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz#de52000a15a177413c8234fa3a8af4ee8102d0ac" + integrity sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw== + +"@babel/helper-wrap-function@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz#44d205af19ed8d872b4eefb0d2fa65f45eb34f06" + integrity sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw== + dependencies: + "@babel/helper-function-name" "^7.22.5" + "@babel/template" "^7.22.5" + "@babel/traverse" "^7.22.5" + "@babel/types" "^7.22.5" + +"@babel/helpers@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.5.tgz#74bb4373eb390d1ceed74a15ef97767e63120820" + integrity sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q== + dependencies: + "@babel/template" "^7.22.5" + "@babel/traverse" "^7.22.5" + "@babel/types" "^7.22.5" + +"@babel/highlight@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.5.tgz#aa6c05c5407a67ebce408162b7ede789b4d22031" + integrity sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw== + dependencies: + "@babel/helper-validator-identifier" "^7.22.5" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.16.7", "@babel/parser@^7.18.5", "@babel/parser@^7.7.0": - version "7.18.5" - resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.18.5.tgz" - integrity sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw== - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.17.12": - version "7.17.12" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.17.12.tgz" - integrity sha512-xCJQXl4EeQ3J9C4yOmpTrtVGmzpm2iSzyxbkZHw7UCnZBftHpF/hpII80uWVyVrc40ytIClHjgWGTG1g/yB+aw== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.17.12": - version "7.17.12" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.17.12.tgz" - integrity sha512-/vt0hpIw0x4b6BLKUkwlvEoiGZYYLNZ96CzyHYPbtG2jZGz6LBe7/V+drYrc/d+ovrF9NBi0pmtvmNb/FsWtRQ== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" - "@babel/plugin-proposal-optional-chaining" "^7.17.12" - -"@babel/plugin-proposal-async-generator-functions@^7.17.12": - version "7.17.12" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.17.12.tgz" - integrity sha512-RWVvqD1ooLKP6IqWTA5GyFVX2isGEgC5iFxKzfYOIy/QEFdxYyCybBDtIGjipHpb9bDWHzcqGqFakf+mVmBTdQ== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-remap-async-to-generator" "^7.16.8" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-proposal-class-properties@^7.13.0", "@babel/plugin-proposal-class-properties@^7.17.12": - version "7.17.12" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.17.12.tgz" - integrity sha512-U0mI9q8pW5Q9EaTHFPwSVusPMV/DV9Mm8p7csqROFLtIE9rBF5piLqyrBGigftALrBcsBGu4m38JneAe7ZDLXw== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.17.12" - "@babel/helper-plugin-utils" "^7.17.12" - -"@babel/plugin-proposal-class-static-block@^7.18.0": - version "7.18.0" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.0.tgz" - integrity sha512-t+8LsRMMDE74c6sV7KShIw13sqbqd58tlqNrsWoWBTIMw7SVQ0cZ905wLNS/FBCy/3PyooRHLFFlfrUNyyz5lA== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.0" - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - -"@babel/plugin-proposal-dynamic-import@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz" - integrity sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - -"@babel/plugin-proposal-export-namespace-from@^7.17.12": - version "7.17.12" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.17.12.tgz" - integrity sha512-j7Ye5EWdwoXOpRmo5QmRyHPsDIe6+u70ZYZrd7uz+ebPYFKfRcLcNu3Ro0vOlJ5zuv8rU7xa+GttNiRzX56snQ== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-proposal-json-strings@^7.17.12": - version "7.17.12" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.17.12.tgz" - integrity sha512-rKJ+rKBoXwLnIn7n6o6fulViHMrOThz99ybH+hKHcOZbnN14VuMnH9fo2eHE69C8pO4uX1Q7t2HYYIDmv8VYkg== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/plugin-syntax-json-strings" "^7.8.3" +"@babel/parser@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.5.tgz#721fd042f3ce1896238cf1b341c77eb7dee7dbea" + integrity sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q== -"@babel/plugin-proposal-logical-assignment-operators@^7.17.12": - version "7.17.12" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.17.12.tgz" - integrity sha512-EqFo2s1Z5yy+JeJu7SFfbIUtToJTVlC61/C7WLKDntSw4Sz6JNAIfL7zQ74VvirxpjB5kz/kIx0gCcb+5OEo2Q== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz#87245a21cd69a73b0b81bcda98d443d6df08f05e" + integrity sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.17.12": - version "7.17.12" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.17.12.tgz" - integrity sha512-ws/g3FSGVzv+VH86+QvgtuJL/kR67xaEIF2x0iPqdDfYW6ra6JF3lKVBkWynRLcNtIC1oCTfDRVxmm2mKzy+ag== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz#fef09f9499b1f1c930da8a0c419db42167d792ca" + integrity sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/plugin-transform-optional-chaining" "^7.22.5" -"@babel/plugin-proposal-numeric-separator@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz" - integrity sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw== +"@babel/plugin-proposal-class-properties@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" + integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-proposal-object-rest-spread@^7.18.0": - version "7.18.0" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.0.tgz" - integrity sha512-nbTv371eTrFabDfHLElkn9oyf9VG+VKK6WMzhY2o4eHKaG19BToD9947zzGMO6I/Irstx9d8CwX6njPNIAR/yw== +"@babel/plugin-proposal-object-rest-spread@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz#aa662940ef425779c75534a5c41e9d936edc390a" + integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg== dependencies: - "@babel/compat-data" "^7.17.10" - "@babel/helper-compilation-targets" "^7.17.10" - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/compat-data" "^7.20.5" + "@babel/helper-compilation-targets" "^7.20.7" + "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.17.12" - -"@babel/plugin-proposal-optional-catch-binding@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz" - integrity sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.20.7" -"@babel/plugin-proposal-optional-chaining@^7.17.12": - version "7.17.12" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.17.12.tgz" - integrity sha512-7wigcOs/Z4YWlK7xxjkvaIw84vGhDv/P1dFGQap0nHkc8gFKY/r+hXc8Qzf5k1gY7CvGIcHqAnOagVKJJ1wVOQ== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-proposal-private-methods@^7.17.12": - version "7.17.12" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.17.12.tgz" - integrity sha512-SllXoxo19HmxhDWm3luPz+cPhtoTSKLJE9PXshsfrOzBqs60QP0r8OaJItrPhAj0d7mZMnNF0Y1UUggCDgMz1A== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.17.12" - "@babel/helper-plugin-utils" "^7.17.12" +"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": + version "7.21.0-placeholder-for-preset-env.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" + integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== -"@babel/plugin-proposal-private-property-in-object@^7.17.12": - version "7.17.12" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.17.12.tgz" - integrity sha512-/6BtVi57CJfrtDNKfK5b66ydK2J5pXUKBKSPD2G1whamMuEnZWgoOIfO8Vf9F/DoD4izBLD/Au4NMQfruzzykg== +"@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" + integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-create-class-features-plugin" "^7.17.12" - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - -"@babel/plugin-proposal-unicode-property-regex@^7.17.12", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.17.12" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.17.12.tgz" - integrity sha512-Wb9qLjXf3ZazqXA7IvI7ozqRIXIGPtSo+L5coFmEkhTQK18ao4UDDD0zdTGAarmbLj2urpRwrc6893cu5Bfh0A== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.17.12" - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-class-properties@^7.12.13": version "7.12.13" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== dependencies: "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-syntax-class-static-block@^7.14.5": version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-export-namespace-from@^7.8.3": version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-import-assertions@^7.17.12": - version "7.17.12" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.17.12.tgz" - integrity sha512-n/loy2zkq9ZEM8tEOwON9wTQSTNDTDEz6NujPtJGLU7qObzT1N4c4YZZf8E6ATB2AjNQg/Ib2AIpO03EZaCehw== +"@babel/plugin-syntax-import-assertions@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz#07d252e2aa0bc6125567f742cd58619cb14dce98" + integrity sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-import-attributes@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz#ab840248d834410b829f569f5262b9e517555ecb" + integrity sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-import-meta@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-json-strings@^7.8.3": version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.17.12": - version "7.17.12" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.17.12.tgz" - integrity sha512-spyY3E3AURfxh/RHtjx5j6hs8am5NbUBGfcZ2vB3uShSpZdQyXSf5rR5Mk76vbtlAZOelyVQ71Fg0x9SG4fsog== +"@babel/plugin-syntax-jsx@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz#a6b68e84fb76e759fc3b93e901876ffabbe1d918" + integrity sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-logical-assignment-operators@^7.10.4": version "7.10.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-numeric-separator@^7.10.4": version "7.10.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-object-rest-spread@^7.8.3": version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-catch-binding@^7.8.3": version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-chaining@^7.8.3": version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-private-property-in-object@^7.14.5": version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-top-level-await@^7.14.5": version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.17.12": - version "7.17.12" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.17.12.tgz" - integrity sha512-TYY0SXFiO31YXtNg3HtFwNJHjLsAyIIhAhNWkQ5whPPS7HWUFlg9z0Ta4qAQNjQbP1wsSt/oKkmZ/4/WWdMUpw== +"@babel/plugin-syntax-typescript@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz#aac8d383b062c5072c647a31ef990c1d0af90272" + integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-arrow-functions@^7.17.12": - version "7.17.12" - resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.17.12.tgz" - integrity sha512-PHln3CNi/49V+mza4xMwrg+WGYevSF1oaiXaC2EQfdp4HWlSjRsrDXWJiQBKpP7749u6vQ9mcry2uuFOv5CXvA== +"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" + integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-async-to-generator@^7.17.12": - version "7.17.12" - resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.17.12.tgz" - integrity sha512-J8dbrWIOO3orDzir57NRsjg4uxucvhby0L/KZuGsWDj0g7twWK3g7JhJhOrXtuXiw8MeiSdJ3E0OW9H8LYEzLQ== +"@babel/plugin-transform-arrow-functions@^7.21.5", "@babel/plugin-transform-arrow-functions@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz#e5ba566d0c58a5b2ba2a8b795450641950b71958" + integrity sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw== dependencies: - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-remap-async-to-generator" "^7.16.8" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-block-scoped-functions@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz" - integrity sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg== +"@babel/plugin-transform-async-generator-functions@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz#7336356d23380eda9a56314974f053a020dab0c3" + integrity sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.5" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-transform-async-to-generator@^7.20.7", "@babel/plugin-transform-async-to-generator@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz#c7a85f44e46f8952f6d27fe57c2ed3cc084c3775" + integrity sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ== + dependencies: + "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.5" + +"@babel/plugin-transform-block-scoped-functions@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz#27978075bfaeb9fa586d3cb63a3d30c1de580024" + integrity sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-block-scoping@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz#8bfc793b3a4b2742c0983fadc1480d843ecea31b" + integrity sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-class-properties@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz#97a56e31ad8c9dc06a0b3710ce7803d5a48cca77" + integrity sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-class-static-block@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz#3e40c46f048403472d6f4183116d5e46b1bff5ba" + integrity sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-transform-block-scoping@^7.17.12": - version "7.18.4" - resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.4.tgz" - integrity sha512-+Hq10ye+jlvLEogSOtq4mKvtk7qwcUQ1f0Mrueai866C82f844Yom2cttfJdMdqRLTxWpsbfbkIkOIfovyUQXw== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - -"@babel/plugin-transform-classes@^7.17.12": - version "7.18.4" - resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.4.tgz" - integrity sha512-e42NSG2mlKWgxKUAD9EJJSkZxR67+wZqzNxLSpc51T8tRU5SLFHsPmgYR5yr7sdgX4u+iHA1C5VafJ6AyImV3A== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-environment-visitor" "^7.18.2" - "@babel/helper-function-name" "^7.17.9" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-replace-supers" "^7.18.2" - "@babel/helper-split-export-declaration" "^7.16.7" +"@babel/plugin-transform-classes@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz#635d4e98da741fad814984639f4c0149eb0135e1" + integrity sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.5" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.17.12": - version "7.17.12" - resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.17.12.tgz" - integrity sha512-a7XINeplB5cQUWMg1E/GI1tFz3LfK021IjV1rj1ypE+R7jHm+pIHmHl25VNkZxtx9uuYp7ThGk8fur1HHG7PgQ== +"@babel/plugin-transform-computed-properties@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz#cd1e994bf9f316bd1c2dafcd02063ec261bb3869" + integrity sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/template" "^7.22.5" -"@babel/plugin-transform-destructuring@^7.18.0": - version "7.18.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.0.tgz" - integrity sha512-Mo69klS79z6KEfrLg/1WkmVnB8javh75HX4pi2btjvlIoasuxilEyjtsQW6XPrubNd7AQy0MMaNIaQE4e7+PQw== +"@babel/plugin-transform-destructuring@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz#d3aca7438f6c26c78cdd0b0ba920a336001b27cc" + integrity sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-dotall-regex@^7.16.7", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz" - integrity sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ== +"@babel/plugin-transform-dotall-regex@^7.22.5", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz#dbb4f0e45766eb544e193fb00e65a1dd3b2a4165" + integrity sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-duplicate-keys@^7.17.12": - version "7.17.12" - resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.17.12.tgz" - integrity sha512-EA5eYFUG6xeerdabina/xIoB95jJ17mAkR8ivx6ZSu9frKShBjpOGZPn511MTDTkiCO+zXnzNczvUM69YSf3Zw== +"@babel/plugin-transform-duplicate-keys@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz#b6e6428d9416f5f0bba19c70d1e6e7e0b88ab285" + integrity sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-exponentiation-operator@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz" - integrity sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA== +"@babel/plugin-transform-dynamic-import@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz#d6908a8916a810468c4edff73b5b75bda6ad393e" + integrity sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-transform-for-of@^7.18.1": - version "7.18.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.1.tgz" - integrity sha512-+TTB5XwvJ5hZbO8xvl2H4XaMDOAK57zF4miuC9qQJgysPNEAZZ9Z69rdF5LJkozGdZrjBIUAIyKUWRMmebI7vg== +"@babel/plugin-transform-exponentiation-operator@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz#402432ad544a1f9a480da865fda26be653e48f6a" + integrity sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-function-name@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz" - integrity sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA== +"@babel/plugin-transform-export-namespace-from@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz#57c41cb1d0613d22f548fddd8b288eedb9973a5b" + integrity sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg== dependencies: - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-transform-literals@^7.17.12": - version "7.17.12" - resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.17.12.tgz" - integrity sha512-8iRkvaTjJciWycPIZ9k9duu663FT7VrBdNqNgxnVXEFwOIp55JWcZd23VBRySYbnS3PwQ3rGiabJBBBGj5APmQ== +"@babel/plugin-transform-for-of@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz#ab1b8a200a8f990137aff9a084f8de4099ab173f" + integrity sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-member-expression-literals@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz" - integrity sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw== +"@babel/plugin-transform-function-name@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz#935189af68b01898e0d6d99658db6b164205c143" + integrity sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-compilation-targets" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-amd@^7.18.0": - version "7.18.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.0.tgz" - integrity sha512-h8FjOlYmdZwl7Xm2Ug4iX2j7Qy63NANI+NQVWQzv6r25fqgg7k2dZl03p95kvqNclglHs4FZ+isv4p1uXMA+QA== +"@babel/plugin-transform-json-strings@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz#14b64352fdf7e1f737eed68de1a1468bd2a77ec0" + integrity sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A== dependencies: - "@babel/helper-module-transforms" "^7.18.0" - "@babel/helper-plugin-utils" "^7.17.12" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-transform-modules-commonjs@^7.18.2": - version "7.18.2" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.2.tgz" - integrity sha512-f5A865gFPAJAEE0K7F/+nm5CmAE3y8AWlMBG9unu5j9+tk50UQVK0QS8RNxSp7MJf0wh97uYyLWt3Zvu71zyOQ== +"@babel/plugin-transform-literals@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz#e9341f4b5a167952576e23db8d435849b1dd7920" + integrity sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g== dependencies: - "@babel/helper-module-transforms" "^7.18.0" - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-simple-access" "^7.18.2" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-systemjs@^7.18.0": - version "7.18.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.5.tgz" - integrity sha512-SEewrhPpcqMF1V7DhnEbhVJLrC+nnYfe1E0piZMZXBpxi9WvZqWGwpsk7JYP7wPWeqaBh4gyKlBhHJu3uz5g4Q== +"@babel/plugin-transform-logical-assignment-operators@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz#66ae5f068fd5a9a5dc570df16f56c2a8462a9d6c" + integrity sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA== dependencies: - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-module-transforms" "^7.18.0" - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-validator-identifier" "^7.16.7" - babel-plugin-dynamic-import-node "^2.3.3" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-transform-modules-umd@^7.18.0": - version "7.18.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.0.tgz" - integrity sha512-d/zZ8I3BWli1tmROLxXLc9A6YXvGK8egMxHp+E/rRwMh1Kip0AP77VwZae3snEJ33iiWwvNv2+UIIhfalqhzZA== +"@babel/plugin-transform-member-expression-literals@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz#4fcc9050eded981a468347dd374539ed3e058def" + integrity sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew== dependencies: - "@babel/helper-module-transforms" "^7.18.0" - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-named-capturing-groups-regex@^7.17.12": - version "7.17.12" - resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.17.12.tgz" - integrity sha512-vWoWFM5CKaTeHrdUJ/3SIOTRV+MBVGybOC9mhJkaprGNt5demMymDW24yC74avb915/mIRe3TgNb/d8idvnCRA== +"@babel/plugin-transform-modules-amd@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz#4e045f55dcf98afd00f85691a68fc0780704f526" + integrity sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.17.12" - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-new-target@^7.17.12": - version "7.18.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.5.tgz" - integrity sha512-TuRL5uGW4KXU6OsRj+mLp9BM7pO8e7SGNTEokQRRxHFkXYMFiy2jlKSZPFtI/mKORDzciH+hneskcSOp0gU8hg== +"@babel/plugin-transform-modules-commonjs@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz#7d9875908d19b8c0536085af7b053fd5bd651bfa" + integrity sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-simple-access" "^7.22.5" -"@babel/plugin-transform-object-super@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz" - integrity sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw== +"@babel/plugin-transform-modules-systemjs@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz#18c31410b5e579a0092638f95c896c2a98a5d496" + integrity sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.5" -"@babel/plugin-transform-parameters@^7.17.12": - version "7.17.12" - resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.17.12.tgz" - integrity sha512-6qW4rWo1cyCdq1FkYri7AHpauchbGLXpdwnYsfxFb+KtddHENfsY5JZb35xUwkK5opOLcJ3BNd2l7PhRYGlwIA== +"@babel/plugin-transform-modules-umd@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz#4694ae40a87b1745e3775b6a7fe96400315d4f98" + integrity sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-property-literals@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz" - integrity sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw== +"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" + integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-react-constant-elements@^7.14.5": - version "7.17.12" - resolved "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.17.12.tgz" - integrity sha512-maEkX2xs2STuv2Px8QuqxqjhV2LsFobT1elCgyU5704fcyTu9DyD/bJXxD/mrRiVyhpHweOQ00OJ5FKhHq9oEw== +"@babel/plugin-transform-new-target@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz#1b248acea54ce44ea06dfd37247ba089fcf9758d" + integrity sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-react-display-name@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz" - integrity sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg== +"@babel/plugin-transform-nullish-coalescing-operator@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz#f8872c65776e0b552e0849d7596cddd416c3e381" + integrity sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-transform-numeric-separator@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz#57226a2ed9e512b9b446517ab6fa2d17abb83f58" + integrity sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-transform-react-jsx-development@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz" - integrity sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A== +"@babel/plugin-transform-object-rest-spread@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz#9686dc3447df4753b0b2a2fae7e8bc33cdc1f2e1" + integrity sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ== dependencies: - "@babel/plugin-transform-react-jsx" "^7.16.7" + "@babel/compat-data" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.22.5" -"@babel/plugin-transform-react-jsx@^7.16.7", "@babel/plugin-transform-react-jsx@^7.17.12": - version "7.17.12" - resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.12.tgz" - integrity sha512-Lcaw8bxd1DKht3thfD4A12dqo1X16he1Lm8rIv8sTwjAYNInRS1qHa9aJoqvzpscItXvftKDCfaEQzwoVyXpEQ== +"@babel/plugin-transform-object-super@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz#794a8d2fcb5d0835af722173c1a9d704f44e218c" + integrity sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/plugin-syntax-jsx" "^7.17.12" - "@babel/types" "^7.17.12" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.5" -"@babel/plugin-transform-react-pure-annotations@^7.16.7": - version "7.18.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.0.tgz" - integrity sha512-6+0IK6ouvqDn9bmEG7mEyF/pwlJXVj5lwydybpyyH3D0A7Hftk+NCTdYjnLNZksn261xaOV5ksmp20pQEmc2RQ== +"@babel/plugin-transform-optional-catch-binding@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz#842080be3076703be0eaf32ead6ac8174edee333" + integrity sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-transform-regenerator@^7.18.0": - version "7.18.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.0.tgz" - integrity sha512-C8YdRw9uzx25HSIzwA7EM7YP0FhCe5wNvJbZzjVNHHPGVcDJ3Aie+qGYYdS1oVQgn+B3eAIJbWFLrJ4Jipv7nw== +"@babel/plugin-transform-optional-chaining@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz#1003762b9c14295501beb41be72426736bedd1e0" + integrity sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - regenerator-transform "^0.15.0" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-transform-reserved-words@^7.17.12": - version "7.17.12" - resolved "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.17.12.tgz" - integrity sha512-1KYqwbJV3Co03NIi14uEHW8P50Md6KqFgt0FfpHdK6oyAHQVTosgPuPSiWud1HX0oYJ1hGRRlk0fP87jFpqXZA== +"@babel/plugin-transform-parameters@^7.20.7", "@babel/plugin-transform-parameters@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz#c3542dd3c39b42c8069936e48717a8d179d63a18" + integrity sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-shorthand-properties@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz" - integrity sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg== +"@babel/plugin-transform-private-methods@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz#21c8af791f76674420a147ae62e9935d790f8722" + integrity sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-spread@^7.17.12": - version "7.17.12" - resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.17.12.tgz" - integrity sha512-9pgmuQAtFi3lpNUstvG9nGfk9DkrdmWNp9KeKPFmuZCpEnxRzYlS8JgwPjYj+1AWDOSvoGN0H30p1cBOmT/Svg== +"@babel/plugin-transform-private-property-in-object@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz#07a77f28cbb251546a43d175a1dda4cf3ef83e32" + integrity sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-transform-sticky-regex@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz" - integrity sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw== +"@babel/plugin-transform-property-literals@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz#b5ddabd73a4f7f26cd0e20f5db48290b88732766" + integrity sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-template-literals@^7.18.2": - version "7.18.2" - resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.2.tgz" - integrity sha512-/cmuBVw9sZBGZVOMkpAEaVLwm4JmK2GZ1dFKOGGpMzEHWFmyZZ59lUU0PdRr8YNYeQdNzTDwuxP2X2gzydTc9g== +"@babel/plugin-transform-react-display-name@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz#3c4326f9fce31c7968d6cb9debcaf32d9e279a2b" + integrity sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-typeof-symbol@^7.17.12": - version "7.17.12" - resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.17.12.tgz" - integrity sha512-Q8y+Jp7ZdtSPXCThB6zjQ74N3lj0f6TDh1Hnf5B+sYlzQ8i5Pjp8gW0My79iekSpT4WnI06blqP6DT0OmaXXmw== +"@babel/plugin-transform-react-jsx-development@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz#e716b6edbef972a92165cd69d92f1255f7e73e87" + integrity sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A== dependencies: - "@babel/helper-plugin-utils" "^7.17.12" + "@babel/plugin-transform-react-jsx" "^7.22.5" -"@babel/plugin-transform-typescript@^7.17.12": - version "7.18.4" - resolved "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.4.tgz" - integrity sha512-l4vHuSLUajptpHNEOUDEGsnpl9pfRLsN1XUoDQDD/YBuXTM+v37SHGS+c6n4jdcZy96QtuUuSvZYMLSSsjH8Mw== +"@babel/plugin-transform-react-jsx@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.5.tgz#932c291eb6dd1153359e2a90cb5e557dcf068416" + integrity sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA== dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.0" - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/plugin-syntax-typescript" "^7.17.12" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-jsx" "^7.22.5" + "@babel/types" "^7.22.5" -"@babel/plugin-transform-unicode-escapes@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz" - integrity sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q== +"@babel/plugin-transform-react-pure-annotations@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.22.5.tgz#1f58363eef6626d6fa517b95ac66fe94685e32c0" + integrity sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA== dependencies: - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-regex@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz" - integrity sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q== +"@babel/plugin-transform-regenerator@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz#cd8a68b228a5f75fa01420e8cc2fc400f0fc32aa" + integrity sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.16.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-plugin-utils" "^7.22.5" + regenerator-transform "^0.15.1" + +"@babel/plugin-transform-reserved-words@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz#832cd35b81c287c4bcd09ce03e22199641f964fb" + integrity sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-runtime@^7.22.4": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.5.tgz#ca975fb5e260044473c8142e1b18b567d33c2a3b" + integrity sha512-bg4Wxd1FWeFx3daHFTWk1pkSWK/AyQuiyAoeZAOkAOUBjnZPH6KT7eMxouV47tQ6hl6ax2zyAWBdWZXbrvXlaw== + dependencies: + "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + babel-plugin-polyfill-corejs2 "^0.4.3" + babel-plugin-polyfill-corejs3 "^0.8.1" + babel-plugin-polyfill-regenerator "^0.5.0" + semver "^6.3.0" + +"@babel/plugin-transform-shorthand-properties@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz#6e277654be82b5559fc4b9f58088507c24f0c624" + integrity sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-spread@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz#6487fd29f229c95e284ba6c98d65eafb893fea6b" + integrity sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + +"@babel/plugin-transform-sticky-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz#295aba1595bfc8197abd02eae5fc288c0deb26aa" + integrity sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-template-literals@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz#8f38cf291e5f7a8e60e9f733193f0bcc10909bff" + integrity sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-typeof-symbol@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz#5e2ba478da4b603af8673ff7c54f75a97b716b34" + integrity sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-typescript@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.5.tgz#5c0f7adfc1b5f38c4dbc8f79b1f0f8074134bd7d" + integrity sha512-SMubA9S7Cb5sGSFFUlqxyClTA9zWJ8qGQrppNUm05LtFuN1ELRFNndkix4zUJrC9F+YivWwa1dHMSyo0e0N9dA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-typescript" "^7.22.5" + +"@babel/plugin-transform-unicode-escapes@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz#ce0c248522b1cb22c7c992d88301a5ead70e806c" + integrity sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-property-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz#098898f74d5c1e86660dc112057b2d11227f1c81" + integrity sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz#ce7e7bb3ef208c4ff67e02a22816656256d7a183" + integrity sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/preset-env@^7.13.12", "@babel/preset-env@^7.15.6", "@babel/preset-env@^7.9.0": - version "7.18.2" - resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.2.tgz" - integrity sha512-PfpdxotV6afmXMU47S08F9ZKIm2bJIQ0YbAAtDfIENX7G1NUAXigLREh69CWDjtgUy7dYn7bsMzkgdtAlmS68Q== - dependencies: - "@babel/compat-data" "^7.17.10" - "@babel/helper-compilation-targets" "^7.18.2" - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-validator-option" "^7.16.7" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.17.12" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.17.12" - "@babel/plugin-proposal-async-generator-functions" "^7.17.12" - "@babel/plugin-proposal-class-properties" "^7.17.12" - "@babel/plugin-proposal-class-static-block" "^7.18.0" - "@babel/plugin-proposal-dynamic-import" "^7.16.7" - "@babel/plugin-proposal-export-namespace-from" "^7.17.12" - "@babel/plugin-proposal-json-strings" "^7.17.12" - "@babel/plugin-proposal-logical-assignment-operators" "^7.17.12" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.17.12" - "@babel/plugin-proposal-numeric-separator" "^7.16.7" - "@babel/plugin-proposal-object-rest-spread" "^7.18.0" - "@babel/plugin-proposal-optional-catch-binding" "^7.16.7" - "@babel/plugin-proposal-optional-chaining" "^7.17.12" - "@babel/plugin-proposal-private-methods" "^7.17.12" - "@babel/plugin-proposal-private-property-in-object" "^7.17.12" - "@babel/plugin-proposal-unicode-property-regex" "^7.17.12" +"@babel/plugin-transform-unicode-sets-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz#77788060e511b708ffc7d42fdfbc5b37c3004e91" + integrity sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/preset-env@^7.22.4": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.5.tgz#3da66078b181f3d62512c51cf7014392c511504e" + integrity sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A== + dependencies: + "@babel/compat-data" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-option" "^7.22.5" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.5" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.5" + "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.17.12" + "@babel/plugin-syntax-import-assertions" "^7.22.5" + "@babel/plugin-syntax-import-attributes" "^7.22.5" + "@babel/plugin-syntax-import-meta" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" @@ -927,49 +944,66 @@ "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-transform-arrow-functions" "^7.17.12" - "@babel/plugin-transform-async-to-generator" "^7.17.12" - "@babel/plugin-transform-block-scoped-functions" "^7.16.7" - "@babel/plugin-transform-block-scoping" "^7.17.12" - "@babel/plugin-transform-classes" "^7.17.12" - "@babel/plugin-transform-computed-properties" "^7.17.12" - "@babel/plugin-transform-destructuring" "^7.18.0" - "@babel/plugin-transform-dotall-regex" "^7.16.7" - "@babel/plugin-transform-duplicate-keys" "^7.17.12" - "@babel/plugin-transform-exponentiation-operator" "^7.16.7" - "@babel/plugin-transform-for-of" "^7.18.1" - "@babel/plugin-transform-function-name" "^7.16.7" - "@babel/plugin-transform-literals" "^7.17.12" - "@babel/plugin-transform-member-expression-literals" "^7.16.7" - "@babel/plugin-transform-modules-amd" "^7.18.0" - "@babel/plugin-transform-modules-commonjs" "^7.18.2" - "@babel/plugin-transform-modules-systemjs" "^7.18.0" - "@babel/plugin-transform-modules-umd" "^7.18.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.17.12" - "@babel/plugin-transform-new-target" "^7.17.12" - "@babel/plugin-transform-object-super" "^7.16.7" - "@babel/plugin-transform-parameters" "^7.17.12" - "@babel/plugin-transform-property-literals" "^7.16.7" - "@babel/plugin-transform-regenerator" "^7.18.0" - "@babel/plugin-transform-reserved-words" "^7.17.12" - "@babel/plugin-transform-shorthand-properties" "^7.16.7" - "@babel/plugin-transform-spread" "^7.17.12" - "@babel/plugin-transform-sticky-regex" "^7.16.7" - "@babel/plugin-transform-template-literals" "^7.18.2" - "@babel/plugin-transform-typeof-symbol" "^7.17.12" - "@babel/plugin-transform-unicode-escapes" "^7.16.7" - "@babel/plugin-transform-unicode-regex" "^7.16.7" + "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" + "@babel/plugin-transform-arrow-functions" "^7.22.5" + "@babel/plugin-transform-async-generator-functions" "^7.22.5" + "@babel/plugin-transform-async-to-generator" "^7.22.5" + "@babel/plugin-transform-block-scoped-functions" "^7.22.5" + "@babel/plugin-transform-block-scoping" "^7.22.5" + "@babel/plugin-transform-class-properties" "^7.22.5" + "@babel/plugin-transform-class-static-block" "^7.22.5" + "@babel/plugin-transform-classes" "^7.22.5" + "@babel/plugin-transform-computed-properties" "^7.22.5" + "@babel/plugin-transform-destructuring" "^7.22.5" + "@babel/plugin-transform-dotall-regex" "^7.22.5" + "@babel/plugin-transform-duplicate-keys" "^7.22.5" + "@babel/plugin-transform-dynamic-import" "^7.22.5" + "@babel/plugin-transform-exponentiation-operator" "^7.22.5" + "@babel/plugin-transform-export-namespace-from" "^7.22.5" + "@babel/plugin-transform-for-of" "^7.22.5" + "@babel/plugin-transform-function-name" "^7.22.5" + "@babel/plugin-transform-json-strings" "^7.22.5" + "@babel/plugin-transform-literals" "^7.22.5" + "@babel/plugin-transform-logical-assignment-operators" "^7.22.5" + "@babel/plugin-transform-member-expression-literals" "^7.22.5" + "@babel/plugin-transform-modules-amd" "^7.22.5" + "@babel/plugin-transform-modules-commonjs" "^7.22.5" + "@babel/plugin-transform-modules-systemjs" "^7.22.5" + "@babel/plugin-transform-modules-umd" "^7.22.5" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" + "@babel/plugin-transform-new-target" "^7.22.5" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.5" + "@babel/plugin-transform-numeric-separator" "^7.22.5" + "@babel/plugin-transform-object-rest-spread" "^7.22.5" + "@babel/plugin-transform-object-super" "^7.22.5" + "@babel/plugin-transform-optional-catch-binding" "^7.22.5" + "@babel/plugin-transform-optional-chaining" "^7.22.5" + "@babel/plugin-transform-parameters" "^7.22.5" + "@babel/plugin-transform-private-methods" "^7.22.5" + "@babel/plugin-transform-private-property-in-object" "^7.22.5" + "@babel/plugin-transform-property-literals" "^7.22.5" + "@babel/plugin-transform-regenerator" "^7.22.5" + "@babel/plugin-transform-reserved-words" "^7.22.5" + "@babel/plugin-transform-shorthand-properties" "^7.22.5" + "@babel/plugin-transform-spread" "^7.22.5" + "@babel/plugin-transform-sticky-regex" "^7.22.5" + "@babel/plugin-transform-template-literals" "^7.22.5" + "@babel/plugin-transform-typeof-symbol" "^7.22.5" + "@babel/plugin-transform-unicode-escapes" "^7.22.5" + "@babel/plugin-transform-unicode-property-regex" "^7.22.5" + "@babel/plugin-transform-unicode-regex" "^7.22.5" + "@babel/plugin-transform-unicode-sets-regex" "^7.22.5" "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.18.2" - babel-plugin-polyfill-corejs2 "^0.3.0" - babel-plugin-polyfill-corejs3 "^0.5.0" - babel-plugin-polyfill-regenerator "^0.3.0" - core-js-compat "^3.22.1" + "@babel/types" "^7.22.5" + babel-plugin-polyfill-corejs2 "^0.4.3" + babel-plugin-polyfill-corejs3 "^0.8.1" + babel-plugin-polyfill-regenerator "^0.5.0" + core-js-compat "^3.30.2" semver "^6.3.0" "@babel/preset-modules@^0.1.5": version "0.1.5" - resolved "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" @@ -978,221 +1012,724 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/preset-react@^7.13.13", "@babel/preset-react@^7.14.5": - version "7.17.12" - resolved "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.17.12.tgz" - integrity sha512-h5U+rwreXtZaRBEQhW1hOJLMq8XNJBQ/9oymXiCXTuT/0uOwpbT0gUt+sXeOqoXBgNuUKI7TaObVwoEyWkpFgA== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-validator-option" "^7.16.7" - "@babel/plugin-transform-react-display-name" "^7.16.7" - "@babel/plugin-transform-react-jsx" "^7.17.12" - "@babel/plugin-transform-react-jsx-development" "^7.16.7" - "@babel/plugin-transform-react-pure-annotations" "^7.16.7" - -"@babel/preset-typescript@^7.15.0": - version "7.17.12" - resolved "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.17.12.tgz" - integrity sha512-S1ViF8W2QwAKUGJXxP9NAfNaqGDdEBJKpYkxHf5Yy2C4NPPzXGeR3Lhk7G8xJaaLcFTRfNjVbtbVtm8Gb0mqvg== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-validator-option" "^7.16.7" - "@babel/plugin-transform-typescript" "^7.17.12" - -"@babel/runtime-corejs3@^7.10.2": - version "7.13.10" - resolved "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.13.10.tgz" - integrity sha512-x/XYVQ1h684pp1mJwOV4CyvqZXqbc8CMsMGUnAbuc82ZCdv1U63w5RSUzgDSXQHG5Rps/kiksH6g2D5BuaKyXg== - dependencies: - core-js-pure "^3.0.0" - regenerator-runtime "^0.13.4" +"@babel/preset-react@^7.22.3": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.22.5.tgz#c4d6058fbf80bccad02dd8c313a9aaa67e3c3dd6" + integrity sha512-M+Is3WikOpEJHgR385HbuCITPTaPRaNkibTEa9oiofmJvIsrceb4yp9RL9Kb+TE8LznmeyZqpP+Lopwcx59xPQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-option" "^7.22.5" + "@babel/plugin-transform-react-display-name" "^7.22.5" + "@babel/plugin-transform-react-jsx" "^7.22.5" + "@babel/plugin-transform-react-jsx-development" "^7.22.5" + "@babel/plugin-transform-react-pure-annotations" "^7.22.5" + +"@babel/preset-typescript@^7.21.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.22.5.tgz#16367d8b01d640e9a507577ed4ee54e0101e51c8" + integrity sha512-YbPaal9LxztSGhmndR46FmAbkJ/1fAsw293tSU+I5E5h+cnJ3d4GTwyUgGYmOXJYdGA+uNePle4qbaRzj2NISQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-option" "^7.22.5" + "@babel/plugin-syntax-jsx" "^7.22.5" + "@babel/plugin-transform-modules-commonjs" "^7.22.5" + "@babel/plugin-transform-typescript" "^7.22.5" + +"@babel/regjsgen@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" + integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== + +"@babel/runtime@^7.13.8", "@babel/runtime@^7.15.4", "@babel/runtime@^7.20.6", "@babel/runtime@^7.20.7", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.5.tgz#8564dd588182ce0047d55d7a75e93921107b57ec" + integrity sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA== + dependencies: + regenerator-runtime "^0.13.11" + +"@babel/template@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec" + integrity sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw== + dependencies: + "@babel/code-frame" "^7.22.5" + "@babel/parser" "^7.22.5" + "@babel/types" "^7.22.5" + +"@babel/traverse@^7.22.5", "@babel/traverse@^7.4.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.5.tgz#44bd276690db6f4940fdb84e1cb4abd2f729ccd1" + integrity sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ== + dependencies: + "@babel/code-frame" "^7.22.5" + "@babel/generator" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.5" + "@babel/parser" "^7.22.5" + "@babel/types" "^7.22.5" + debug "^4.1.0" + globals "^11.1.0" -"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.13", "@babel/runtime@^7.13.6", "@babel/runtime@^7.13.8", "@babel/runtime@^7.14.0", "@babel/runtime@^7.15.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": - version "7.18.3" - resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.3.tgz" - integrity sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug== +"@babel/types@^7.22.5", "@babel/types@^7.4.4": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.5.tgz#cd93eeaab025880a3a47ec881f4b096a5b786fbe" + integrity sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA== dependencies: - regenerator-runtime "^0.13.4" + "@babel/helper-string-parser" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.5" + to-fast-properties "^2.0.0" -"@babel/template@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz" - integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/parser" "^7.16.7" - "@babel/types" "^7.16.7" +"@colors/colors@1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" + integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== + +"@commitlint/config-validator@^17.4.4": + version "17.4.4" + resolved "https://registry.yarnpkg.com/@commitlint/config-validator/-/config-validator-17.4.4.tgz#d0742705719559a101d2ee49c0c514044af6d64d" + integrity sha512-bi0+TstqMiqoBAQDvdEP4AFh0GaKyLFlPPEObgI29utoKEYoPQTvF0EYqIwYYLEoJYhj5GfMIhPHJkTJhagfeg== + dependencies: + "@commitlint/types" "^17.4.4" + ajv "^8.11.0" + +"@commitlint/execute-rule@^17.4.0": + version "17.4.0" + resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-17.4.0.tgz#4518e77958893d0a5835babe65bf87e2638f6939" + integrity sha512-LIgYXuCSO5Gvtc0t9bebAMSwd68ewzmqLypqI2Kke1rqOqqDbMpYcYfoPfFlv9eyLIh4jocHWwCK5FS7z9icUA== + +"@commitlint/load@>6.1.1": + version "17.5.0" + resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-17.5.0.tgz#be45dbbb50aaf5eb7e8e940e1e0d6171d1426bab" + integrity sha512-l+4W8Sx4CD5rYFsrhHH8HP01/8jEP7kKf33Xlx2Uk2out/UKoKPYMOIRcDH5ppT8UXLMV+x6Wm5osdRKKgaD1Q== + dependencies: + "@commitlint/config-validator" "^17.4.4" + "@commitlint/execute-rule" "^17.4.0" + "@commitlint/resolve-extends" "^17.4.4" + "@commitlint/types" "^17.4.4" + "@types/node" "*" + chalk "^4.1.0" + cosmiconfig "^8.0.0" + cosmiconfig-typescript-loader "^4.0.0" + lodash.isplainobject "^4.0.6" + lodash.merge "^4.6.2" + lodash.uniq "^4.5.0" + resolve-from "^5.0.0" + ts-node "^10.8.1" + typescript "^4.6.4 || ^5.0.0" -"@babel/traverse@^7.13.0", "@babel/traverse@^7.16.8", "@babel/traverse@^7.18.0", "@babel/traverse@^7.18.2", "@babel/traverse@^7.18.5", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.0": - version "7.18.5" - resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.5.tgz" - integrity sha512-aKXj1KT66sBj0vVzk6rEeAO6Z9aiiQ68wfDgge3nHhA/my6xMM/7HGQUNumKZaoa2qUPQ5whJG9aAifsxUKfLA== +"@commitlint/resolve-extends@^17.4.4": + version "17.4.4" + resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-17.4.4.tgz#8f931467dea8c43b9fe38373e303f7c220de6fdc" + integrity sha512-znXr1S0Rr8adInptHw0JeLgumS11lWbk5xAWFVno+HUFVN45875kUtqjrI6AppmD3JI+4s0uZlqqlkepjJd99A== dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.18.2" - "@babel/helper-environment-visitor" "^7.18.2" - "@babel/helper-function-name" "^7.17.9" - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/parser" "^7.18.5" - "@babel/types" "^7.18.4" - debug "^4.1.0" - globals "^11.1.0" + "@commitlint/config-validator" "^17.4.4" + "@commitlint/types" "^17.4.4" + import-fresh "^3.0.0" + lodash.mergewith "^4.6.2" + resolve-from "^5.0.0" + resolve-global "^1.0.0" -"@babel/types@7.0.0-beta.35": - version "7.0.0-beta.35" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.35.tgz" - integrity sha512-y9XT11CozHDgjWcTdxmhSj13rJVXpa5ZXwjjOiTedjaM0ba5ItqdS02t31EhPl7HtOWxsZkYCCUNrSfrOisA6w== +"@commitlint/types@^17.4.4": + version "17.4.4" + resolved "https://registry.yarnpkg.com/@commitlint/types/-/types-17.4.4.tgz#1416df936e9aad0d6a7bbc979ecc31e55dade662" + integrity sha512-amRN8tRLYOsxRr6mTnGGGvB5EmW/4DDjLMgiwK3CCVEmN6Sr/6xePGEpWaspKkckILuUORCwe6VfDBw6uj4axQ== dependencies: - esutils "^2.0.2" - lodash "^4.2.0" - to-fast-properties "^2.0.0" + chalk "^4.1.0" -"@babel/types@^7.15.6", "@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.17.12", "@babel/types@^7.18.0", "@babel/types@^7.18.2", "@babel/types@^7.18.4", "@babel/types@^7.4.4", "@babel/types@^7.7.0": - version "7.18.4" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz" - integrity sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw== +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - to-fast-properties "^2.0.0" + "@jridgewell/trace-mapping" "0.3.9" "@develar/schema-utils@~2.6.5": version "2.6.5" - resolved "https://registry.npmjs.org/@develar/schema-utils/-/schema-utils-2.6.5.tgz" + resolved "https://registry.yarnpkg.com/@develar/schema-utils/-/schema-utils-2.6.5.tgz#3ece22c5838402419a6e0425f85742b961d9b6c6" integrity sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig== dependencies: ajv "^6.12.0" ajv-keywords "^3.4.1" -"@electron/get@^1.13.0": - version "1.14.1" - resolved "https://registry.yarnpkg.com/@electron/get/-/get-1.14.1.tgz#16ba75f02dffb74c23965e72d617adc721d27f40" - integrity sha512-BrZYyL/6m0ZXz/lDxy/nlVhQz+WF+iPS6qXolEU8atw7h6v1aYkjwJZ63m+bJMBTxDE66X+r2tPS4a/8C82sZw== - dependencies: - debug "^4.1.1" - env-paths "^2.2.0" - fs-extra "^8.1.0" - got "^9.6.0" - progress "^2.0.3" - semver "^6.2.0" - sumchecker "^3.0.1" - optionalDependencies: - global-agent "^3.0.0" - global-tunnel-ng "^2.7.1" +"@discoveryjs/json-ext@^0.5.0": + version "0.5.7" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" + integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== -"@electron/universal@1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@electron/universal/-/universal-1.2.1.tgz#3c2c4ff37063a4e9ab1e6ff57db0bc619bc82339" - integrity sha512-7323HyMh7KBAl/nPDppdLsC87G6RwRU02dy5FPeGB1eS7rUePh55+WNWiDPLhFQqqVPHzh77M69uhmoT8XnwMQ== +"@electron-forge/cli@^6.1.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@electron-forge/cli/-/cli-6.2.1.tgz#e5f4c5d51743de8c8ab93a3656b58b85ac68bfb8" + integrity sha512-AyCJ1m7LBgttgUTS3kDwiBLhPHJ+6mFwoMSqu847EJ4Fe1DJ1Hi6gnMsSga7Mv4KsF7iA23Ss1fo+3TGZnvrWw== dependencies: - "@malept/cross-spawn-promise" "^1.1.0" - asar "^3.1.0" + "@electron-forge/core" "6.2.1" + "@electron-forge/shared-types" "6.2.1" + "@electron/get" "^2.0.0" + chalk "^4.0.0" + commander "^4.1.1" debug "^4.3.1" - dir-compare "^2.4.0" - fs-extra "^9.0.1" - minimatch "^3.0.4" - plist "^3.0.4" + fs-extra "^10.0.0" + listr2 "^5.0.3" + semver "^7.2.1" -"@emotion/is-prop-valid@^1.1.0": - version "1.1.3" - resolved "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.1.3.tgz" - integrity sha512-RFg04p6C+1uO19uG8N+vqanzKqiM9eeV1LDOG3bmkYmuOj7NbKNlFC/4EZq5gnwAIlcC/jOT24f8Td0iax2SXA== +"@electron-forge/core-utils@6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@electron-forge/core-utils/-/core-utils-6.2.1.tgz#556c8cd0b72d2e1c34aca141562825e4727a9d14" + integrity sha512-mJUpy8mZ7/l1BddReFrNZyM5iNEuYwjpeIqZ2E0E/hQPH26QreAV3rPfTj7WhA3V69ftmn++QRt82pNZFhHVEg== dependencies: - "@emotion/memoize" "^0.7.4" - -"@emotion/memoize@^0.7.4": - version "0.7.5" - resolved "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.5.tgz" - integrity sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ== + "@electron-forge/shared-types" "6.2.1" + "@electron/rebuild" "^3.2.10" + "@malept/cross-spawn-promise" "^2.0.0" + chalk "^4.0.0" + debug "^4.3.1" + find-up "^5.0.0" + fs-extra "^10.0.0" + log-symbols "^4.0.0" + semver "^7.2.1" + yarn-or-npm "^3.0.1" -"@emotion/stylis@^0.8.4": - version "0.8.5" - resolved "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz" - integrity sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ== +"@electron-forge/core@6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@electron-forge/core/-/core-6.2.1.tgz#eee1dbeae0417dee8a8fba8b8aefe5bbc63024a8" + integrity sha512-udjU8r9dzuV/dPMPxONmkWYoqM0uY6ezpdjTLgO9aNdWTbBeBLIOMVT0jdx7GBoTuPu6ul/VhDEFNUaojEOrVA== + dependencies: + "@electron-forge/core-utils" "6.2.1" + "@electron-forge/maker-base" "6.2.1" + "@electron-forge/plugin-base" "6.2.1" + "@electron-forge/publisher-base" "6.2.1" + "@electron-forge/shared-types" "6.2.1" + "@electron-forge/template-base" "6.2.1" + "@electron-forge/template-vite" "6.2.1" + "@electron-forge/template-webpack" "6.2.1" + "@electron-forge/template-webpack-typescript" "6.2.1" + "@electron/get" "^2.0.0" + "@electron/rebuild" "^3.2.10" + "@malept/cross-spawn-promise" "^2.0.0" + chalk "^4.0.0" + debug "^4.3.1" + electron-packager "^17.1.1" + fast-glob "^3.2.7" + filenamify "^4.1.0" + find-up "^5.0.0" + fs-extra "^10.0.0" + got "^11.8.5" + interpret "^3.1.1" + listr2 "^5.0.3" + lodash "^4.17.20" + log-symbols "^4.0.0" + node-fetch "^2.6.7" + progress "^2.0.3" + rechoir "^0.8.0" + resolve-package "^1.0.1" + semver "^7.2.1" + source-map-support "^0.5.13" + sudo-prompt "^9.1.1" + username "^5.1.0" + yarn-or-npm "^3.0.1" -"@emotion/unitless@^0.7.4": - version "0.7.5" - resolved "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz" - integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== +"@electron-forge/maker-base@6.2.1", "@electron-forge/maker-base@^6.0.4": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@electron-forge/maker-base/-/maker-base-6.2.1.tgz#04dcc6163a2938480ed5c887fa2894646c7eebb8" + integrity sha512-LnvGtTJ/RNojKdUKktYEcbLqPggXdMBs1uscQRgXkI3XnVGdEi+/j5+Eg5ka4d6FnsaUkz//U5yhPtNFhDbNSw== + dependencies: + "@electron-forge/shared-types" "6.2.1" + fs-extra "^10.0.0" + which "^2.0.2" -"@eslint/eslintrc@^0.4.0": - version "0.4.0" - resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz" - integrity sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog== +"@electron-forge/maker-dmg@^6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@electron-forge/maker-dmg/-/maker-dmg-6.2.1.tgz#1439cf8fa1770429e6cc40c738b869ccceb4f31b" + integrity sha512-Cqy7zFpgqm5pL/2LdRnoSePQTz9DtpVd5YQwSTPi4hnE1EHir77dplg0xkkx876w9YNmusE7sT+xoT3xr8XB/Q== dependencies: - ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" - globals "^12.1.0" - ignore "^4.0.6" - import-fresh "^3.2.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" - strip-json-comments "^3.1.1" + "@electron-forge/maker-base" "6.2.1" + "@electron-forge/shared-types" "6.2.1" + fs-extra "^10.0.0" + optionalDependencies: + electron-installer-dmg "^4.0.0" -"@icons/material@^0.2.4": - version "0.2.4" - resolved "https://registry.npmjs.org/@icons/material/-/material-0.2.4.tgz" - integrity sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw== +"@electron-forge/maker-rpm@^6.1.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@electron-forge/maker-rpm/-/maker-rpm-6.2.1.tgz#ef87a55618f4876fe361aa7b00413328994c07c9" + integrity sha512-FIoU9cvtNOIgrqSCdAMjDKvOnFGSf7RGEtLuZ7Q/BEkwUoXxqphqTzxiIxZocvhVfDtaSU18l9k7u/HrXSL9JQ== + dependencies: + "@electron-forge/maker-base" "6.2.1" + "@electron-forge/shared-types" "6.2.1" + optionalDependencies: + electron-installer-redhat "^3.2.0" -"@jridgewell/gen-mapping@^0.1.0": - version "0.1.1" - resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz" - integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== +"@electron-forge/maker-squirrel@^6.1.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@electron-forge/maker-squirrel/-/maker-squirrel-6.2.1.tgz#21213e57d7aa4868f1b69e46f4c5c03f514aba83" + integrity sha512-331Pdt6eZh3nvjQaaDGlu2q1ZtBFrUSZWox2wHxG5B9l7/IoJY60dLgkkftsSrT+zUjZmKR67ZV3Fmh7qL/bPw== dependencies: - "@jridgewell/set-array" "^1.0.0" - "@jridgewell/sourcemap-codec" "^1.4.10" + "@electron-forge/maker-base" "6.2.1" + "@electron-forge/shared-types" "6.2.1" + fs-extra "^10.0.0" + optionalDependencies: + electron-winstaller "^5.0.0" -"@jridgewell/gen-mapping@^0.3.0": - version "0.3.1" - resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz" - integrity sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg== +"@electron-forge/plugin-base@6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@electron-forge/plugin-base/-/plugin-base-6.2.1.tgz#55d46e0025c236240869ba961c2ba94ec89f5061" + integrity sha512-8mVbFgTlxQKDZ7jzeHyWrzOSiv/DpE29flPLgpyeFuz/zbC7oLNdxBCYo7WptQgI+HArphqehKUBf1UOkXmRPg== dependencies: - "@jridgewell/set-array" "^1.0.0" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" + "@electron-forge/shared-types" "6.2.1" -"@jridgewell/resolve-uri@^3.0.3": - version "3.0.7" - resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz" - integrity sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA== +"@electron-forge/plugin-webpack@^6.1.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@electron-forge/plugin-webpack/-/plugin-webpack-6.2.1.tgz#36aff149f442c4d382da2300ef4592d61d42ccee" + integrity sha512-kBeGufqweaKghakVzlu/K2njztVLoQ8RFhNuq3Yw797njZ7MEyrXxAMY7p41cEmnItyERGjhPCdUNkCF2ggNww== + dependencies: + "@electron-forge/core-utils" "6.2.1" + "@electron-forge/plugin-base" "6.2.1" + "@electron-forge/shared-types" "6.2.1" + "@electron-forge/web-multi-logger" "6.2.1" + chalk "^4.0.0" + debug "^4.3.1" + fs-extra "^10.0.0" + html-webpack-plugin "^5.3.1" + webpack "^5.69.1" + webpack-dev-server "^4.0.0" + webpack-merge "^5.7.3" -"@jridgewell/set-array@^1.0.0": - version "1.1.1" - resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz" - integrity sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ== +"@electron-forge/publisher-base@6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@electron-forge/publisher-base/-/publisher-base-6.2.1.tgz#196f6ce14e0a99609f2ea0c79b5c7bf8947f6e25" + integrity sha512-clrrEPsamoe4543smfyZUBp2IRSZ4EEhdj/bm0zmODS2qs/V1cCEf7y8P29huxMskT5bXDxSzothG72or3b2WQ== + dependencies: + "@electron-forge/shared-types" "6.2.1" -"@jridgewell/source-map@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" - integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== +"@electron-forge/shared-types@6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@electron-forge/shared-types/-/shared-types-6.2.1.tgz#6e60904e0436bd371db9ab21337d699b45523d6a" + integrity sha512-kLazG5XUAqb3Duyhq7XyGluINRwCQRaIiuvHwlvnZYYu6NZQTz9xUm6tQ9v05EtFblUx2iRjY67DJRZSt3dzTQ== dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" + "@electron/rebuild" "^3.2.10" + electron-packager "^17.1.1" + listr2 "^5.0.3" -"@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.13" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz" - integrity sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w== +"@electron-forge/template-base@6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@electron-forge/template-base/-/template-base-6.2.1.tgz#6b7e49254675f986a3b3120f91bc63d7a030de72" + integrity sha512-hSMaefJRptpszPsZLvEfHV22KO6/XK0kJ6Lota1x3xQEFQs4IpCwUv446JE5hde+5Fukw5vZawbK2m937Te24Q== + dependencies: + "@electron-forge/shared-types" "6.2.1" + "@malept/cross-spawn-promise" "^2.0.0" + debug "^4.3.1" + fs-extra "^10.0.0" + username "^5.1.0" -"@jridgewell/trace-mapping@^0.3.9": - version "0.3.13" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz" - integrity sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w== +"@electron-forge/template-vite@6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@electron-forge/template-vite/-/template-vite-6.2.1.tgz#51992e6f98bf1256849cde5cd5b5e4e00eac94aa" + integrity sha512-t05p8ZWtkixjuUFJpaupq2t+ap8vjPjULO2knKC12TqWTxo53M8lKwx0f7h0zvgyqWdtEGQr8KiVfeFS0Lh3jA== dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" + "@electron-forge/shared-types" "6.2.1" + "@electron-forge/template-base" "6.2.1" + fs-extra "^10.0.0" -"@malept/cross-spawn-promise@^1.1.0": - version "1.1.1" - resolved "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz" - integrity sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ== +"@electron-forge/template-webpack-typescript@6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@electron-forge/template-webpack-typescript/-/template-webpack-typescript-6.2.1.tgz#2dd66562a30e3d687ff13d0c151586729a6aceeb" + integrity sha512-8dXu54OsvfeBVGFyHfzVaBlxH+dPFxgLKu+/gsip82OEmLghXWyfvwhpXBw3rhxqG8V2/nbxDYUghSJackWZYA== dependencies: - cross-spawn "^7.0.1" + "@electron-forge/shared-types" "6.2.1" + "@electron-forge/template-base" "6.2.1" + fs-extra "^10.0.0" + +"@electron-forge/template-webpack@6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@electron-forge/template-webpack/-/template-webpack-6.2.1.tgz#84b1b8d04f9a86f83a14f3ffab9b551731ce98a1" + integrity sha512-u2/Cm6HjCah07larN1npHDG1dhDZMyqdDnPDh0iQNv+BEV6kCMSHX/8R9Uc7uIpkRVj+uCfcYBnkoKHKbUgKcQ== + dependencies: + "@electron-forge/shared-types" "6.2.1" + "@electron-forge/template-base" "6.2.1" + fs-extra "^10.0.0" + +"@electron-forge/web-multi-logger@6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@electron-forge/web-multi-logger/-/web-multi-logger-6.2.1.tgz#659a95765eb2ccc389f4ae15292685c87fde6c04" + integrity sha512-7Wn/MisYGLI4aFzyKxq4iLl6uMkn/lVKq+6VTu1jYiokEa88jFb5B5d3660WY1vLezErZHiS+PGV43kyRZcWSg== + dependencies: + express "^4.17.1" + express-ws "^5.0.2" + xterm "^4.9.0" + xterm-addon-fit "^0.5.0" + xterm-addon-search "^0.8.0" + +"@electron/asar@^3.2.1", "@electron/asar@^3.2.4": + version "3.2.4" + resolved "https://registry.yarnpkg.com/@electron/asar/-/asar-3.2.4.tgz#7e8635a3c4f6d8b3f8ae6efaf5ecb9fbf3bd9864" + integrity sha512-lykfY3TJRRWFeTxccEKdf1I6BLl2Plw81H0bbp4Fc5iEc67foDCa5pjJQULVgo0wF+Dli75f3xVcdb/67FFZ/g== + dependencies: + chromium-pickle-js "^0.2.0" + commander "^5.0.0" + glob "^7.1.6" + minimatch "^3.0.4" + +"@electron/get@^2.0.0": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@electron/get/-/get-2.0.2.tgz#ae2a967b22075e9c25aaf00d5941cd79c21efd7e" + integrity sha512-eFZVFoRXb3GFGd7Ak7W4+6jBl9wBtiZ4AaYOse97ej6mKj5tkyO0dUnUChs1IhJZtx1BENo4/p4WUTXpi6vT+g== + dependencies: + debug "^4.1.1" + env-paths "^2.2.0" + fs-extra "^8.1.0" + got "^11.8.5" + progress "^2.0.3" + semver "^6.2.0" + sumchecker "^3.0.1" + optionalDependencies: + global-agent "^3.0.0" + +"@electron/notarize@^1.2.3": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@electron/notarize/-/notarize-1.2.4.tgz#a7d38773f4cad40df111a5edc64037e5d768ea1e" + integrity sha512-W5GQhJEosFNafewnS28d3bpQ37/s91CDWqxVchHfmv2dQSTWpOzNlUVQwYzC1ay5bChRV/A9BTL68yj0Pa+TSg== + dependencies: + debug "^4.1.1" + fs-extra "^9.0.1" + +"@electron/osx-sign@^1.0.1", "@electron/osx-sign@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@electron/osx-sign/-/osx-sign-1.0.4.tgz#8e91442846471636ca0469426a82b253b9170151" + integrity sha512-xfhdEcIOfAZg7scZ9RQPya1G1lWo8/zMCwUXAulq0SfY7ONIW+b9qGyKdMyuMctNYwllrIS+vmxfijSfjeh97g== + dependencies: + compare-version "^0.1.2" + debug "^4.3.4" + fs-extra "^10.0.0" + isbinaryfile "^4.0.8" + minimist "^1.2.6" + plist "^3.0.5" + +"@electron/rebuild@3.2.13", "@electron/rebuild@^3.2.10": + version "3.2.13" + resolved "https://registry.yarnpkg.com/@electron/rebuild/-/rebuild-3.2.13.tgz#98fbb98981b1a86162546a2ab91b2355569cca4c" + integrity sha512-DH9Ol4JCnHDYVOD0fKWq+Qqbn/0WU1O6QR0mIpMXEVU4YFM4PlaqNC9K36mGShNBxxGFotZCMDrB1wl/iHM12g== + dependencies: + "@malept/cross-spawn-promise" "^2.0.0" + chalk "^4.0.0" + debug "^4.1.1" + detect-libc "^2.0.1" + fs-extra "^10.0.0" + got "^11.7.0" + node-abi "^3.0.0" + node-api-version "^0.1.4" + node-gyp "^9.0.0" + ora "^5.1.0" + semver "^7.3.5" + tar "^6.0.5" + yargs "^17.0.1" + +"@electron/universal@1.3.4": + version "1.3.4" + resolved "https://registry.yarnpkg.com/@electron/universal/-/universal-1.3.4.tgz#bccd94b635d7c85eeed5eabba457eb4ed2be2777" + integrity sha512-BdhBgm2ZBnYyYRLRgOjM5VHkyFItsbggJ0MHycOjKWdFGYwK97ZFXH54dTvUWEfha81vfvwr5On6XBjt99uDcg== + dependencies: + "@electron/asar" "^3.2.1" + "@malept/cross-spawn-promise" "^1.1.0" + debug "^4.3.1" + dir-compare "^3.0.0" + fs-extra "^9.0.1" + minimatch "^3.0.4" + plist "^3.0.4" + +"@electron/universal@^1.3.2", "@electron/universal@^1.4.1": + version "1.4.1" + resolved "https://registry.yarnpkg.com/@electron/universal/-/universal-1.4.1.tgz#3fbda2a5ed9ff9f3304c8e8316b94c1e3a7b3785" + integrity sha512-lE/U3UNw1YHuowNbTmKNs9UlS3En3cPgwM5MI+agIgr/B1hSze9NdOP0qn7boZaI9Lph8IDv3/24g9IxnJP7aQ== + dependencies: + "@electron/asar" "^3.2.1" + "@malept/cross-spawn-promise" "^1.1.0" + debug "^4.3.1" + dir-compare "^3.0.0" + fs-extra "^9.0.1" + minimatch "^3.0.4" + plist "^3.0.4" + +"@emotion/is-prop-valid@^1.1.0": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz#23116cf1ed18bfeac910ec6436561ecb1a3885cc" + integrity sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw== + dependencies: + "@emotion/memoize" "^0.8.1" + +"@emotion/memoize@^0.8.1": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.1.tgz#c1ddb040429c6d21d38cc945fe75c818cfb68e17" + integrity sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA== + +"@emotion/stylis@^0.8.4": + version "0.8.5" + resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.5.tgz#deacb389bd6ee77d1e7fcaccce9e16c5c7e78e04" + integrity sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ== + +"@emotion/unitless@^0.7.4": + version "0.7.5" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed" + integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== + +"@esbuild/android-arm64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd" + integrity sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA== + +"@esbuild/android-arm@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.19.tgz#5898f7832c2298bc7d0ab53701c57beb74d78b4d" + integrity sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A== + +"@esbuild/android-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.19.tgz#658368ef92067866d95fb268719f98f363d13ae1" + integrity sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww== + +"@esbuild/darwin-arm64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz#584c34c5991b95d4d48d333300b1a4e2ff7be276" + integrity sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg== + +"@esbuild/darwin-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz#7751d236dfe6ce136cce343dce69f52d76b7f6cb" + integrity sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw== + +"@esbuild/freebsd-arm64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz#cacd171665dd1d500f45c167d50c6b7e539d5fd2" + integrity sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ== + +"@esbuild/freebsd-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz#0769456eee2a08b8d925d7c00b79e861cb3162e4" + integrity sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ== + +"@esbuild/linux-arm64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz#38e162ecb723862c6be1c27d6389f48960b68edb" + integrity sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg== + +"@esbuild/linux-arm@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz#1a2cd399c50040184a805174a6d89097d9d1559a" + integrity sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA== + +"@esbuild/linux-ia32@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz#e28c25266b036ce1cabca3c30155222841dc035a" + integrity sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ== + +"@esbuild/linux-loong64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz#0f887b8bb3f90658d1a0117283e55dbd4c9dcf72" + integrity sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ== + +"@esbuild/linux-mips64el@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz#f5d2a0b8047ea9a5d9f592a178ea054053a70289" + integrity sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A== + +"@esbuild/linux-ppc64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz#876590e3acbd9fa7f57a2c7d86f83717dbbac8c7" + integrity sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg== + +"@esbuild/linux-riscv64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz#7f49373df463cd9f41dc34f9b2262d771688bf09" + integrity sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA== + +"@esbuild/linux-s390x@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz#e2afd1afcaf63afe2c7d9ceacd28ec57c77f8829" + integrity sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q== + +"@esbuild/linux-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz#8a0e9738b1635f0c53389e515ae83826dec22aa4" + integrity sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw== + +"@esbuild/netbsd-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz#c29fb2453c6b7ddef9a35e2c18b37bda1ae5c462" + integrity sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q== + +"@esbuild/openbsd-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz#95e75a391403cb10297280d524d66ce04c920691" + integrity sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g== + +"@esbuild/sunos-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz#722eaf057b83c2575937d3ffe5aeb16540da7273" + integrity sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg== + +"@esbuild/win32-arm64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz#9aa9dc074399288bdcdd283443e9aeb6b9552b6f" + integrity sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag== + +"@esbuild/win32-ia32@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz#95ad43c62ad62485e210f6299c7b2571e48d2b03" + integrity sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw== + +"@esbuild/win32-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz#8cfaf2ff603e9aabb910e9c0558c26cf32744061" + integrity sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA== + +"@eslint-community/eslint-utils@^4.2.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.4.0": + version "4.5.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.1.tgz#cdd35dce4fa1a89a4fd42b1599eb35b3af408884" + integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ== + +"@eslint/eslintrc@^2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.0.3.tgz#4910db5505f4d503f27774bf356e3704818a0331" + integrity sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.5.2" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@8.43.0": + version "8.43.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.43.0.tgz#559ca3d9ddbd6bf907ad524320a0d14b85586af0" + integrity sha512-s2UHCoiXfxMvmfzqoN+vrQ84ahUSYde9qNO1MdxmoEhyHWsfmwOpFlwYV+ePJEVc7gFnATGUi376WowX1N7tFg== + +"@humanwhocodes/config-array@^0.11.10": + version "0.11.10" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2" + integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@icons/material@^0.2.4": + version "0.2.4" + resolved "https://registry.yarnpkg.com/@icons/material/-/material-0.2.4.tgz#e90c9f71768b3736e76d7dd6783fc6c2afa88bc8" + integrity sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw== + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + dependencies: + string-width "^5.1.2" + string-width-cjs "npm:string-width@^4.2.0" + strip-ansi "^7.0.1" + strip-ansi-cjs "npm:strip-ansi@^6.0.1" + wrap-ansi "^8.1.0" + wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" + +"@isaacs/string-locale-compare@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz#291c227e93fd407a96ecd59879a35809120e432b" + integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== + +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/source-map@^0.3.3": + version "0.3.4" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.4.tgz#856a142864530d4059dda415659b48d37db2d556" + integrity sha512-KE/SxsDqNs3rrWwFHcRh15ZLVFrI0YoZtgAdIyIq9k5hUNmiWRXXThPomIxHuL20sLdgzbDFyvkUMna14bvtrw== + +"@jridgewell/sourcemap-codec@1.4.14": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.18" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" + integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== + dependencies: + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" + +"@leichtgewicht/ip-codec@^2.0.1": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" + integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== + +"@malept/cross-spawn-promise@^1.0.0", "@malept/cross-spawn-promise@^1.1.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz#504af200af6b98e198bce768bc1730c6936ae01d" + integrity sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ== + dependencies: + cross-spawn "^7.0.1" + +"@malept/cross-spawn-promise@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz#d0772de1aa680a0bfb9ba2f32b4c828c7857cb9d" + integrity sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg== + dependencies: + cross-spawn "^7.0.1" "@malept/flatpak-bundler@^0.4.0": version "0.4.0" - resolved "https://registry.npmjs.org/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz" + resolved "https://registry.yarnpkg.com/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz#e8a32c30a95d20c2b1bb635cc580981a06389858" integrity sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q== dependencies: debug "^4.1.1" @@ -1200,127 +1737,192 @@ lodash "^4.17.15" tmp-promise "^3.0.2" -"@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents": - version "2.1.8-no-fsevents" - resolved "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.tgz" - integrity sha512-+nb9vWloHNNMFHjGofEam3wopE3m1yuambrrd/fnPc+lFOMB9ROTqQlche9ByFWNkdNqfSgR/kkQtQ8DzEWt2w== +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^3.1.0" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" - -"@nodelib/fs.scandir@2.1.4": - version "2.1.4" - resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz" - integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA== - dependencies: - "@nodelib/fs.stat" "2.0.4" + "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2": - version "2.0.4" - resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz" - integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== -"@nodelib/fs.walk@^1.2.3": - version "1.2.6" - resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz" - integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow== +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: - "@nodelib/fs.scandir" "2.1.4" + "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@octokit/app@^13.1.1": - version "13.1.3" - resolved "https://registry.yarnpkg.com/@octokit/app/-/app-13.1.3.tgz#eefeefa90f608f01cd048f578dc46ecc58b4110f" - integrity sha512-qG3a3AddK/XLmtpQuB2eICbOUTwwdvqfdnyOzU6PlHhhhVapLfuutkbTOllHB/5OS/slUamIBD3zhOYpKsLFDQ== +"@npmcli/arborist@^6.2.10": + version "6.2.10" + resolved "https://registry.yarnpkg.com/@npmcli/arborist/-/arborist-6.2.10.tgz#d12dbc772b5f2894e7eb680fde2b03ada81331ed" + integrity sha512-YpGd6RgYZ4JzIZCP6d+PfH81tD0XynOE7HyKUZPLss/YQZXR5pO6hyXWNYb1fcQw4yJrh9ed9umhGbxPhcjBRA== + dependencies: + "@isaacs/string-locale-compare" "^1.1.0" + "@npmcli/fs" "^3.1.0" + "@npmcli/installed-package-contents" "^2.0.2" + "@npmcli/map-workspaces" "^3.0.2" + "@npmcli/metavuln-calculator" "^5.0.0" + "@npmcli/name-from-folder" "^2.0.0" + "@npmcli/node-gyp" "^3.0.0" + "@npmcli/package-json" "^3.0.0" + "@npmcli/query" "^3.0.0" + "@npmcli/run-script" "^6.0.0" + bin-links "^4.0.1" + cacache "^17.0.4" + common-ancestor-path "^1.0.1" + hosted-git-info "^6.1.1" + json-parse-even-better-errors "^3.0.0" + json-stringify-nice "^1.1.4" + minimatch "^9.0.0" + nopt "^7.0.0" + npm-install-checks "^6.0.0" + npm-package-arg "^10.1.0" + npm-pick-manifest "^8.0.1" + npm-registry-fetch "^14.0.3" + npmlog "^7.0.1" + pacote "^15.0.8" + parse-conflict-json "^3.0.0" + proc-log "^3.0.0" + promise-all-reject-late "^1.0.0" + promise-call-limit "^1.0.2" + read-package-json-fast "^3.0.2" + semver "^7.3.7" + ssri "^10.0.1" + treeverse "^3.0.0" + walk-up-path "^3.0.1" + +"@npmcli/config@^6.2.1": + version "6.2.1" + resolved "https://registry.yarnpkg.com/@npmcli/config/-/config-6.2.1.tgz#954cc09b727b6bfc087cb1d2a48994dc342e45cc" + integrity sha512-Cj/OrSbrLvnwWuzquFCDTwFN8QmR+SWH6qLNCBttUreDkKM5D5p36SeSMbcEUiCGdwjUrVy2yd8C0REwwwDPEw== + dependencies: + "@npmcli/map-workspaces" "^3.0.2" + ci-info "^3.8.0" + ini "^4.1.0" + nopt "^7.0.0" + proc-log "^3.0.0" + read-package-json-fast "^3.0.2" + semver "^7.3.5" + walk-up-path "^3.0.1" + +"@npmcli/disparity-colors@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/disparity-colors/-/disparity-colors-3.0.0.tgz#60ea8c6eb5ba9de2d1950e15b06205b2c3ab7833" + integrity sha512-5R/z157/f20Fi0Ou4ZttL51V0xz0EdPEOauFtPCEYOLInDBRCj1/TxOJ5aGTrtShxEshN2d+hXb9ZKSi5RLBcg== dependencies: - "@octokit/auth-app" "^4.0.8" - "@octokit/auth-unauthenticated" "^3.0.0" - "@octokit/core" "^4.0.0" - "@octokit/oauth-app" "^4.0.7" - "@octokit/plugin-paginate-rest" "^6.0.0" - "@octokit/types" "^9.0.0" - "@octokit/webhooks" "^10.0.0" + ansi-styles "^4.3.0" -"@octokit/auth-app@^4.0.8": - version "4.0.10" - resolved "https://registry.yarnpkg.com/@octokit/auth-app/-/auth-app-4.0.10.tgz#e34767dc62990f3a5f686310db38005b013ac575" - integrity sha512-cLFDd7Z0TkBB0BLt3rWXNS5f2eTeAjzG9iQlFQ6ttNPaXNdYMtnQmr2NBDFq3WnZFSct9dpSdFaVuquRrCY67w== +"@npmcli/fs@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-3.1.0.tgz#233d43a25a91d68c3a863ba0da6a3f00924a173e" + integrity sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w== dependencies: - "@octokit/auth-oauth-app" "^5.0.0" - "@octokit/auth-oauth-user" "^2.0.0" - "@octokit/request" "^6.0.0" - "@octokit/request-error" "^3.0.0" - "@octokit/types" "^9.0.0" - "@types/lru-cache" "^5.1.0" - deprecation "^2.3.1" - lru-cache "^6.0.0" - universal-github-app-jwt "^1.1.1" - universal-user-agent "^6.0.0" + semver "^7.3.5" -"@octokit/auth-oauth-app@^5.0.0": - version "5.0.5" - resolved "https://registry.yarnpkg.com/@octokit/auth-oauth-app/-/auth-oauth-app-5.0.5.tgz#be2a93d72835133b4866ac4721aa628849475525" - integrity sha512-UPX1su6XpseaeLVCi78s9droxpGtBWIgz9XhXAx9VXabksoF0MyI5vaa1zo1njyYt6VaAjFisC2A2Wchcu2WmQ== +"@npmcli/git@^4.0.0", "@npmcli/git@^4.0.1", "@npmcli/git@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-4.1.0.tgz#ab0ad3fd82bc4d8c1351b6c62f0fa56e8fe6afa6" + integrity sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ== dependencies: - "@octokit/auth-oauth-device" "^4.0.0" - "@octokit/auth-oauth-user" "^2.0.0" - "@octokit/request" "^6.0.0" - "@octokit/types" "^9.0.0" - "@types/btoa-lite" "^1.0.0" - btoa-lite "^1.0.0" - universal-user-agent "^6.0.0" + "@npmcli/promise-spawn" "^6.0.0" + lru-cache "^7.4.4" + npm-pick-manifest "^8.0.0" + proc-log "^3.0.0" + promise-inflight "^1.0.1" + promise-retry "^2.0.1" + semver "^7.3.5" + which "^3.0.0" -"@octokit/auth-oauth-device@^4.0.0": - version "4.0.4" - resolved "https://registry.yarnpkg.com/@octokit/auth-oauth-device/-/auth-oauth-device-4.0.4.tgz#b8dde812a38bf5cb0696b6e7d0a74681d437c390" - integrity sha512-Xl85BZYfqCMv+Uvz33nVVUjE7I/PVySNaK6dRRqlkvYcArSr9vRcZC9KVjXYObGRTCN6mISeYdakAZvWEN4+Jw== +"@npmcli/installed-package-contents@^2.0.1", "@npmcli/installed-package-contents@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz#bfd817eccd9e8df200919e73f57f9e3d9e4f9e33" + integrity sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ== dependencies: - "@octokit/oauth-methods" "^2.0.0" - "@octokit/request" "^6.0.0" - "@octokit/types" "^9.0.0" - universal-user-agent "^6.0.0" + npm-bundled "^3.0.0" + npm-normalize-package-bin "^3.0.0" -"@octokit/auth-oauth-user@^2.0.0": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@octokit/auth-oauth-user/-/auth-oauth-user-2.1.1.tgz#d900972f3d9247924637ab3343a8305746feadb2" - integrity sha512-JgqnNNPf9CaWLxWm9uh2WgxcaVYhxBR09NVIPTiMU2dVZ3FObOHs3njBiLNw+zq84k+rEdm5Y7AsiASrZ84Apg== +"@npmcli/map-workspaces@^3.0.2", "@npmcli/map-workspaces@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@npmcli/map-workspaces/-/map-workspaces-3.0.4.tgz#15ad7d854292e484f7ba04bc30187a8320dba799" + integrity sha512-Z0TbvXkRbacjFFLpVpV0e2mheCh+WzQpcqL+4xp49uNJOxOnIAPZyXtUxZ5Qn3QBTGKA11Exjd9a5411rBrhDg== dependencies: - "@octokit/auth-oauth-device" "^4.0.0" - "@octokit/oauth-methods" "^2.0.0" - "@octokit/request" "^6.0.0" - "@octokit/types" "^9.0.0" - btoa-lite "^1.0.0" - universal-user-agent "^6.0.0" + "@npmcli/name-from-folder" "^2.0.0" + glob "^10.2.2" + minimatch "^9.0.0" + read-package-json-fast "^3.0.0" -"@octokit/auth-token@^3.0.0": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-3.0.3.tgz#ce7e48a3166731f26068d7a7a7996b5da58cbe0c" - integrity sha512-/aFM2M4HVDBT/jjDBa84sJniv1t9Gm/rLkalaz9htOm+L+8JMj1k9w0CkUdcxNyNxZPlTxKPVko+m1VlM58ZVA== +"@npmcli/metavuln-calculator@^5.0.0": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/metavuln-calculator/-/metavuln-calculator-5.0.1.tgz#426b3e524c2008bcc82dbc2ef390aefedd643d76" + integrity sha512-qb8Q9wIIlEPj3WeA1Lba91R4ZboPL0uspzV0F9uwP+9AYMVB2zOoa7Pbk12g6D2NHAinSbHh6QYmGuRyHZ874Q== dependencies: - "@octokit/types" "^9.0.0" + cacache "^17.0.0" + json-parse-even-better-errors "^3.0.0" + pacote "^15.0.0" + semver "^7.3.5" -"@octokit/auth-unauthenticated@^3.0.0": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@octokit/auth-unauthenticated/-/auth-unauthenticated-3.0.4.tgz#347d3f3a6fefb22d399a941b986bac5361fc95df" - integrity sha512-AT74XGBylcLr4lmUp1s6mjSUgphGdlse21Qjtv5DzpX1YOl5FXKwvNcZWESdhyBbpDT8VkVyLFqa/7a7eqpPNw== +"@npmcli/name-from-folder@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz#c44d3a7c6d5c184bb6036f4d5995eee298945815" + integrity sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg== + +"@npmcli/node-gyp@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz#101b2d0490ef1aa20ed460e4c0813f0db560545a" + integrity sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA== + +"@npmcli/package-json@^3.0.0", "@npmcli/package-json@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@npmcli/package-json/-/package-json-3.1.1.tgz#5628332aac90fa1b4d6f98e03988c5958b35e0c5" + integrity sha512-+UW0UWOYFKCkvszLoTwrYGrjNrT8tI5Ckeb/h+Z1y1fsNJEctl7HmerA5j2FgmoqFaLI2gsA1X9KgMFqx/bRmA== dependencies: - "@octokit/request-error" "^3.0.0" - "@octokit/types" "^9.0.0" + "@npmcli/git" "^4.1.0" + glob "^10.2.2" + json-parse-even-better-errors "^3.0.0" + normalize-package-data "^5.0.0" + npm-normalize-package-bin "^3.0.1" + proc-log "^3.0.0" -"@octokit/core@^4.0.0", "@octokit/core@^4.0.4": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@octokit/core/-/core-4.2.0.tgz#8c253ba9605aca605bc46187c34fcccae6a96648" - integrity sha512-AgvDRUg3COpR82P7PBdGZF/NNqGmtMq2NiPqeSsDIeCfYFOZ9gddqWNQHnFdEUf+YwOj4aZYmJnlPp7OXmDIDg== +"@npmcli/promise-spawn@^6.0.0", "@npmcli/promise-spawn@^6.0.1": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz#c8bc4fa2bd0f01cb979d8798ba038f314cfa70f2" + integrity sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg== + dependencies: + which "^3.0.0" + +"@npmcli/query@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@npmcli/query/-/query-3.0.0.tgz#51a0dfb85811e04f244171f164b6bc83b36113a7" + integrity sha512-MFNDSJNgsLZIEBVZ0Q9w9K7o07j5N4o4yjtdz2uEpuCZlXGMuPENiRaFYk0vRqAA64qVuUQwC05g27fRtfUgnA== + dependencies: + postcss-selector-parser "^6.0.10" + +"@npmcli/run-script@^6.0.0", "@npmcli/run-script@^6.0.2": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@npmcli/run-script/-/run-script-6.0.2.tgz#a25452d45ee7f7fb8c16dfaf9624423c0c0eb885" + integrity sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA== + dependencies: + "@npmcli/node-gyp" "^3.0.0" + "@npmcli/promise-spawn" "^6.0.0" + node-gyp "^9.0.0" + read-package-json-fast "^3.0.0" + which "^3.0.0" + +"@octokit/auth-token@^3.0.0": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-3.0.4.tgz#70e941ba742bdd2b49bdb7393e821dea8520a3db" + integrity sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ== + +"@octokit/core@^4.2.1": + version "4.2.4" + resolved "https://registry.yarnpkg.com/@octokit/core/-/core-4.2.4.tgz#d8769ec2b43ff37cc3ea89ec4681a20ba58ef907" + integrity sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ== dependencies: "@octokit/auth-token" "^3.0.0" "@octokit/graphql" "^5.0.0" @@ -1331,91 +1933,54 @@ universal-user-agent "^6.0.0" "@octokit/endpoint@^7.0.0": - version "7.0.5" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-7.0.5.tgz#2bb2a911c12c50f10014183f5d596ce30ac67dd1" - integrity sha512-LG4o4HMY1Xoaec87IqQ41TQ+glvIeTKqfjkCEmt5AIwDZJwQeVZFIEYXrYY6yLwK+pAScb9Gj4q+Nz2qSw1roA== + version "7.0.6" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-7.0.6.tgz#791f65d3937555141fb6c08f91d618a7d645f1e2" + integrity sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg== dependencies: "@octokit/types" "^9.0.0" is-plain-object "^5.0.0" universal-user-agent "^6.0.0" "@octokit/graphql@^5.0.0": - version "5.0.5" - resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-5.0.5.tgz#a4cb3ea73f83b861893a6370ee82abb36e81afd2" - integrity sha512-Qwfvh3xdqKtIznjX9lz2D458r7dJPP8l6r4GQkIdWQouZwHQK0mVT88uwiU2bdTU2OtT1uOlKpRciUWldpG0yQ== + version "5.0.6" + resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-5.0.6.tgz#9eac411ac4353ccc5d3fca7d76736e6888c5d248" + integrity sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw== dependencies: "@octokit/request" "^6.0.0" "@octokit/types" "^9.0.0" universal-user-agent "^6.0.0" -"@octokit/oauth-app@^4.0.6", "@octokit/oauth-app@^4.0.7": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@octokit/oauth-app/-/oauth-app-4.2.1.tgz#19b6eefcca434c396de2d2f6dcd814d9c91b2605" - integrity sha512-HtRWLzvAAizuFKJEoNlhWOktNNhfnLSXJXu2htt5+x2exhHibHupz/+1AAHU4xlBFtQLQh79OB/bQf+1GP5LBg== - dependencies: - "@octokit/auth-oauth-app" "^5.0.0" - "@octokit/auth-oauth-user" "^2.0.0" - "@octokit/auth-unauthenticated" "^3.0.0" - "@octokit/core" "^4.0.0" - "@octokit/oauth-authorization-url" "^5.0.0" - "@octokit/oauth-methods" "^2.0.0" - "@types/aws-lambda" "^8.10.83" - fromentries "^1.3.1" - universal-user-agent "^6.0.0" - -"@octokit/oauth-authorization-url@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@octokit/oauth-authorization-url/-/oauth-authorization-url-5.0.0.tgz#029626ce87f3b31addb98cd0d2355c2381a1c5a1" - integrity sha512-y1WhN+ERDZTh0qZ4SR+zotgsQUE1ysKnvBt1hvDRB2WRzYtVKQjn97HEPzoehh66Fj9LwNdlZh+p6TJatT0zzg== - -"@octokit/oauth-methods@^2.0.0": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@octokit/oauth-methods/-/oauth-methods-2.0.5.tgz#b11ce2205c46ffcd731c7332b21bb62dad10ce24" - integrity sha512-yQP6B5gE3axNxuM3U9KqWs/ErAQ+WLPaPgC/7EjsZsQibkf8sjdAfF8/y/EJW+Dd05XQvadX4WhQZPMnO1SE1A== - dependencies: - "@octokit/oauth-authorization-url" "^5.0.0" - "@octokit/request" "^6.2.3" - "@octokit/request-error" "^3.0.3" - "@octokit/types" "^9.0.0" - btoa-lite "^1.0.0" - -"@octokit/openapi-types@^17.1.2": - version "17.2.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-17.2.0.tgz#f1800b5f9652b8e1b85cc6dfb1e0dc888810bdb5" - integrity sha512-MazrFNx4plbLsGl+LFesMo96eIXkFgEtaKbnNpdh4aQ0VM10aoylFsTYP1AEjkeoRNZiiPe3T6Gl2Hr8dJWdlQ== +"@octokit/openapi-types@^18.0.0": + version "18.0.0" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-18.0.0.tgz#f43d765b3c7533fd6fb88f3f25df079c24fccf69" + integrity sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw== -"@octokit/plugin-paginate-rest@^6.0.0": - version "6.1.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.0.tgz#3522ef5c2712436332655085b197eafe4ac7afc4" - integrity sha512-5T4iXjJdYCVA1rdWS1C+uZV9AvtZY9QgTG74kFiSFVj94dZXowyi/YK8f4SGjZaL69jZthGlBaDKRdCMCF9log== - dependencies: - "@octokit/types" "^9.2.2" - -"@octokit/plugin-rest-endpoint-methods@^7.0.0": - version "7.1.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.1.0.tgz#7f3f4fac10bf72f8c5cd0c343252cd5f73dbf2d8" - integrity sha512-SWwz/hc47GaKJR6BlJI4WIVRodbAFRvrR0QRPSoPMs7krb7anYPML3psg+ThEz/kcwOdSNh/oA8qThi/Wvs4Fw== +"@octokit/plugin-paginate-rest@^7.0.0": + version "7.1.2" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-7.1.2.tgz#1e25e88acab8198858960f6ef7ae02e6c9f7139f" + integrity sha512-Jx8KuKqEAVRsK6fMzZKv3h6UH9/NRDHsDRtUAROqqmZlCptM///Uef7A1ViZ/cbDplekz7VbDWdFLAZ/mpuDww== dependencies: - "@octokit/types" "^9.2.2" - deprecation "^2.3.1" + "@octokit/tsconfig" "^2.0.0" + "@octokit/types" "^9.3.2" -"@octokit/plugin-retry@^4.0.3": - version "4.1.3" - resolved "https://registry.yarnpkg.com/@octokit/plugin-retry/-/plugin-retry-4.1.3.tgz#c717d7908be26a5570941d9688e3e8a3da95e714" - integrity sha512-3YKBj7d0J/4mpEc4xzMociWsMNl5lZqrpAnYcW6mqiSGF3wFjU+c6GHih6GLClk31JNvKDr0x9jc5cfm7evkZg== +"@octokit/plugin-retry@^5.0.0": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@octokit/plugin-retry/-/plugin-retry-5.0.4.tgz#c726c0e4e3fcd3b34a010e709f2c8b92cce1915a" + integrity sha512-hw00fDIhOgijy4aSxS6weWF5uqZVeoiC/AptLLyjL8KFCJRGRaXfcfgj76h/Z3cSLTjRsEIQnNCTig8INttL/g== dependencies: - "@octokit/types" "^9.0.0" + "@octokit/request-error" "^4.0.1" + "@octokit/types" "^10.0.0" bottleneck "^2.15.3" -"@octokit/plugin-throttling@^5.0.0": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@octokit/plugin-throttling/-/plugin-throttling-5.2.1.tgz#0600a0165bb439afaf40cf7cccae21cea7b3fd03" - integrity sha512-UUTFP301/gYEgsPABIP35QZR4dEXPtyoXHCQhPXU8U4FphXKjXOahoMlHg/T4IQVWMmSy607zsqThuBkpV9Gjg== +"@octokit/plugin-throttling@^6.0.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@octokit/plugin-throttling/-/plugin-throttling-6.1.0.tgz#093275e6b542be371acb0631252a428f2f1b0615" + integrity sha512-JqMbTiPC0sUSTsLQsdq3JVx1mx8UtTo5mwR80YqPXE93+XhevvSyOR1rO2Z+NbO/r0TK4hqFJSSi/9oIZBxZTg== dependencies: "@octokit/types" "^9.0.0" bottleneck "^2.15.3" -"@octokit/request-error@^3.0.0", "@octokit/request-error@^3.0.3": +"@octokit/request-error@^3.0.0": version "3.0.3" resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-3.0.3.tgz#ef3dd08b8e964e53e55d471acfe00baa892b9c69" integrity sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ== @@ -1424,10 +1989,19 @@ deprecation "^2.0.0" once "^1.4.0" -"@octokit/request@^6.0.0", "@octokit/request@^6.2.3": - version "6.2.3" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-6.2.3.tgz#76d5d6d44da5c8d406620a4c285d280ae310bdb4" - integrity sha512-TNAodj5yNzrrZ/VxP+H5HiYaZep0H3GU0O7PaF+fhDrt8FPrnkei9Aal/txsN/1P7V3CPiThG0tIvpPDYUsyAA== +"@octokit/request-error@^4.0.1": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-4.0.2.tgz#0e16802f3e688e1dd6807e81c7810f419b2c530d" + integrity sha512-uqwUEmZw3x4I9DGYq9fODVAAvcLsPQv97NRycP6syEFu5916M189VnNBW2zANNwqg3OiligNcAey7P0SET843w== + dependencies: + "@octokit/types" "^10.0.0" + deprecation "^2.0.0" + once "^1.4.0" + +"@octokit/request@^6.0.0": + version "6.2.8" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-6.2.8.tgz#aaf480b32ab2b210e9dadd8271d187c93171d8eb" + integrity sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw== dependencies: "@octokit/endpoint" "^7.0.0" "@octokit/request-error" "^3.0.0" @@ -1436,50 +2010,216 @@ node-fetch "^2.6.7" universal-user-agent "^6.0.0" -"@octokit/types@^9.0.0", "@octokit/types@^9.2.2": - version "9.2.2" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-9.2.2.tgz#d111d33928f288f48083bfe49d8a9a5945e67db1" - integrity sha512-9BjDxjgQIvCjNWZsbqyH5QC2Yni16oaE6xL+8SUBMzcYPF4TGQBXGA97Cl3KceK9mwiNMb1mOYCz6FbCCLEL+g== +"@octokit/tsconfig@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@octokit/tsconfig/-/tsconfig-2.0.0.tgz#9f316995c2fd49516b2d2ffb2e02a4341e347fe8" + integrity sha512-tWnrai3quGt8+gRN2edzo9fmraWekeryXPeXDomMw2oFSpu/lH3VSWGn/q4V+rwjTRMeeXk/ci623/01Zet4VQ== + +"@octokit/types@^10.0.0": + version "10.0.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-10.0.0.tgz#7ee19c464ea4ada306c43f1a45d444000f419a4a" + integrity sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg== dependencies: - "@octokit/openapi-types" "^17.1.2" + "@octokit/openapi-types" "^18.0.0" -"@octokit/webhooks-methods@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@octokit/webhooks-methods/-/webhooks-methods-3.0.2.tgz#cece91cc72714a1c83b35d121e04334f051e509c" - integrity sha512-Vlnv5WBscf07tyAvfDbp7pTkMZUwk7z7VwEF32x6HqI+55QRwBTcT+D7DDjZXtad/1dU9E32x0HmtDlF9VIRaQ== +"@octokit/types@^9.0.0", "@octokit/types@^9.3.2": + version "9.3.2" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-9.3.2.tgz#3f5f89903b69f6a2d196d78ec35f888c0013cac5" + integrity sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA== + dependencies: + "@octokit/openapi-types" "^18.0.0" -"@octokit/webhooks-types@6.11.0": - version "6.11.0" - resolved "https://registry.yarnpkg.com/@octokit/webhooks-types/-/webhooks-types-6.11.0.tgz#1fb903bff3f2883490d6ba88d8cb8f8a55f68176" - integrity sha512-AanzbulOHljrku1NGfafxdpTCfw2ENaWzH01N2vqQM+cUFbk868Cgh0xylz0JIM9BoKbfI++bdD6EYX0Q/UTEw== +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== -"@octokit/webhooks@^10.0.0": - version "10.9.1" - resolved "https://registry.yarnpkg.com/@octokit/webhooks/-/webhooks-10.9.1.tgz#4674a6924567419d7d0187a8b6c88ec468a97a86" - integrity sha512-5NXU4VfsNOo2VSU/SrLrpPH2Z1ZVDOWFcET4EpnEBX1uh/v8Uz65UVuHIRx5TZiXhnWyRE9AO1PXHa+M/iWwZA== +"@pkgr/utils@^2.3.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.4.1.tgz#adf291d0357834c410ce80af16e711b56c7b1cd3" + integrity sha512-JOqwkgFEyi+OROIyq7l4Jy28h/WwhDnG/cPkXG2Z1iFbubB6jsHW1NDvmyOzTBxHr3yg68YGirmh1JUgMqa+9w== dependencies: - "@octokit/request-error" "^3.0.0" - "@octokit/webhooks-methods" "^3.0.0" - "@octokit/webhooks-types" "6.11.0" - aggregate-error "^3.1.0" + cross-spawn "^7.0.3" + fast-glob "^3.2.12" + is-glob "^4.0.3" + open "^9.1.0" + picocolors "^1.0.0" + tslib "^2.5.0" -"@popperjs/core@^2.8.6": - version "2.11.5" - resolved "https://registry.npmjs.org/@popperjs/core/-/core-2.11.5.tgz" - integrity sha512-9X2obfABZuDVLCgPK9aX0a/x4jaOEweTTWE2+9sr0Qqqevj2Uv5XorvusThmc9XGYpS9yI+fhh8RTafBtGposw== +"@playwright/test@^1.36.0": + version "1.36.0" + resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.36.0.tgz#df2c0b09bbd27016adf1892b0c3502c4ce88d307" + integrity sha512-yN+fvMYtiyLFDCQos+lWzoX4XW3DNuaxjBu68G0lkgLgC6BP+m/iTxJQoSicz/x2G5EsrqlZTqTIP9sTgLQerg== + dependencies: + "@types/node" "*" + playwright-core "1.36.0" + optionalDependencies: + fsevents "2.3.2" + +"@pnpm/config.env-replace@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz#ab29da53df41e8948a00f2433f085f54de8b3a4c" + integrity sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w== + +"@pnpm/network.ca-file@^1.0.1": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz#2ab05e09c1af0cdf2fcf5035bea1484e222f7983" + integrity sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA== + dependencies: + graceful-fs "4.2.10" + +"@pnpm/npm-conf@^2.1.0": + version "2.2.2" + resolved "https://registry.yarnpkg.com/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz#0058baf1c26cbb63a828f0193795401684ac86f0" + integrity sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA== + dependencies: + "@pnpm/config.env-replace" "^1.1.0" + "@pnpm/network.ca-file" "^1.0.1" + config-chain "^1.1.11" + +"@popperjs/core@^2.11.6": + version "2.11.8" + resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" + integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== + +"@reforged/maker-appimage@^3.3.0": + version "3.3.0" + resolved "https://registry.yarnpkg.com/@reforged/maker-appimage/-/maker-appimage-3.3.0.tgz#c1420dd4bc81d3d037206cea834b98003cfa0c5f" + integrity sha512-UxQP/RJwxzBp6pflCeifw/sB/RHMWF0ZyIypUI5B4341VC2NSwa5za1L5ZD3vYTmJzUcP+SJDHgIVTCdZ0Qt9g== + dependencies: + "@electron-forge/maker-base" "^6.0.4" + "@spacingbat3/lss" "^1.0.0" + node-fetch "^3.2.5" + semver "^7.3.8" + +"@remix-run/router@1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.7.0.tgz#550a8d5760b78efc5d60f62b5829b0f74c1fde81" + integrity sha512-Eu1V3kz3mV0wUpVTiFHuaT8UD1gj/0VnoFHQYX35xlslQUpe8CuYoKFn9d4WZFHm3yDywz6ALZuGdnUPKrNeAw== "@restart/context@^2.1.4": version "2.1.4" - resolved "https://registry.npmjs.org/@restart/context/-/context-2.1.4.tgz" + resolved "https://registry.yarnpkg.com/@restart/context/-/context-2.1.4.tgz#a99d87c299a34c28bd85bb489cb07bfd23149c02" integrity sha512-INJYZQJP7g+IoDUh/475NlGiTeMfwTXUEr3tmRneckHIxNolGOW9CTq83S8cxq0CgJwwcMzMJFchxvlwe7Rk8Q== +"@restart/hooks@^0.3.26": + version "0.3.27" + resolved "https://registry.yarnpkg.com/@restart/hooks/-/hooks-0.3.27.tgz#91f356d66d4699a8cd8b3d008402708b6a9dc505" + integrity sha512-s984xV/EapUIfkjlf8wz9weP2O9TNKR96C68FfMEy2bE69+H4cNv3RD4Mf97lW7Htt7PjZrYTjSC8f3SB9VCXw== + dependencies: + dequal "^2.0.2" + "@restart/hooks@^0.4.7": - version "0.4.7" - resolved "https://registry.npmjs.org/@restart/hooks/-/hooks-0.4.7.tgz" - integrity sha512-ZbjlEHcG+FQtpDPHd7i4FzNNvJf2enAwZfJbpM8CW7BhmOAbsHpZe3tsHwfQUrBuyrxWqPYp2x5UMnilWcY22A== + version "0.4.9" + resolved "https://registry.yarnpkg.com/@restart/hooks/-/hooks-0.4.9.tgz#ad858fb39d99e252cccce19416adc18fc3f18fcb" + integrity sha512-3BekqcwB6Umeya+16XPooARn4qEPW6vNvwYnlofIYe6h9qG1/VeD7UvShCWx11eFz5ELYmwIEshz+MkPX3wjcQ== dependencies: dequal "^2.0.2" +"@semantic-release/changelog@^6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@semantic-release/changelog/-/changelog-6.0.3.tgz#6195630ecbeccad174461de727d5f975abc23eeb" + integrity sha512-dZuR5qByyfe3Y03TpmCvAxCyTnp7r5XwtHRf/8vD9EAn4ZWbavUX8adMtXYzE86EVh0gyLA7lm5yW4IV30XUag== + dependencies: + "@semantic-release/error" "^3.0.0" + aggregate-error "^3.0.0" + fs-extra "^11.0.0" + lodash "^4.17.4" + +"@semantic-release/commit-analyzer@^10.0.0", "@semantic-release/commit-analyzer@^10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@semantic-release/commit-analyzer/-/commit-analyzer-10.0.1.tgz#be6fcc1703459294c394ede41b37fd9a21d39807" + integrity sha512-9ejHzTAijYs9z246sY/dKBatmOPcd0GQ7lH4MgLCkv1q4GCiDZRkjHJkaQZXZVaK7mJybS+sH3Ng6G8i3pYMGQ== + dependencies: + conventional-changelog-angular "^6.0.0" + conventional-commits-filter "^3.0.0" + conventional-commits-parser "^4.0.0" + debug "^4.0.0" + import-from "^4.0.0" + lodash-es "^4.17.21" + micromatch "^4.0.2" + +"@semantic-release/error@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@semantic-release/error/-/error-3.0.0.tgz#30a3b97bbb5844d695eb22f9d3aa40f6a92770c2" + integrity sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw== + +"@semantic-release/error@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@semantic-release/error/-/error-4.0.0.tgz#692810288239637f74396976a9340fbc0aa9f6f9" + integrity sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ== + +"@semantic-release/git@^10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@semantic-release/git/-/git-10.0.1.tgz#c646e55d67fae623875bf3a06a634dd434904498" + integrity sha512-eWrx5KguUcU2wUPaO6sfvZI0wPafUKAMNC18aXY4EnNcrZL86dEmpNVnC9uMpGZkmZJ9EfCVJBQx4pV4EMGT1w== + dependencies: + "@semantic-release/error" "^3.0.0" + aggregate-error "^3.0.0" + debug "^4.0.0" + dir-glob "^3.0.0" + execa "^5.0.0" + lodash "^4.17.4" + micromatch "^4.0.0" + p-reduce "^2.0.0" + +"@semantic-release/github@^9.0.0", "@semantic-release/github@^9.0.3": + version "9.0.3" + resolved "https://registry.yarnpkg.com/@semantic-release/github/-/github-9.0.3.tgz#2559da9bcedeacb572f240469270a281c2a83615" + integrity sha512-X6gq4USKVlCxPwIIyXb99jU7gwVWlnsKOevs+OyABRdoqc+OIRITbFmrrYU3eE1vGMGk+Qu/GAoLUQQQwC3YOA== + dependencies: + "@octokit/core" "^4.2.1" + "@octokit/plugin-paginate-rest" "^7.0.0" + "@octokit/plugin-retry" "^5.0.0" + "@octokit/plugin-throttling" "^6.0.0" + "@semantic-release/error" "^4.0.0" + aggregate-error "^4.0.1" + debug "^4.3.4" + dir-glob "^3.0.1" + globby "^13.1.4" + http-proxy-agent "^7.0.0" + https-proxy-agent "^7.0.0" + issue-parser "^6.0.0" + lodash-es "^4.17.21" + mime "^3.0.0" + p-filter "^3.0.0" + url-join "^5.0.0" + +"@semantic-release/npm@^10.0.2", "@semantic-release/npm@^10.0.4": + version "10.0.4" + resolved "https://registry.yarnpkg.com/@semantic-release/npm/-/npm-10.0.4.tgz#b55df5cb86d4b10b4e8eb56d5ce0bd3537c641e1" + integrity sha512-6R3timIQ7VoL2QWRkc9DG8v74RQtRp7UOe/2KbNaqwJ815qOibAv65bH3RtTEhs4axEaHoZf7HDgFs5opaZ9Jw== + dependencies: + "@semantic-release/error" "^4.0.0" + aggregate-error "^4.0.1" + execa "^7.0.0" + fs-extra "^11.0.0" + lodash-es "^4.17.21" + nerf-dart "^1.0.0" + normalize-url "^8.0.0" + npm "^9.5.0" + rc "^1.2.8" + read-pkg "^8.0.0" + registry-auth-token "^5.0.0" + semver "^7.1.2" + tempy "^3.0.0" + +"@semantic-release/release-notes-generator@^11.0.0", "@semantic-release/release-notes-generator@^11.0.3": + version "11.0.3" + resolved "https://registry.yarnpkg.com/@semantic-release/release-notes-generator/-/release-notes-generator-11.0.3.tgz#9d7d94e305441d3b31385e29aa5a79ce3f6a21ae" + integrity sha512-NU77dWKQf+QcZrv/Hcp3DPeSxglPu8hYKCipGxAPpeaneLkg6S0zfTVug4tg4mfDhZHC6RtoI7ljQDK8VoJ2Dw== + dependencies: + conventional-changelog-angular "^6.0.0" + conventional-changelog-writer "^6.0.0" + conventional-commits-filter "^3.0.0" + conventional-commits-parser "^4.0.0" + debug "^4.0.0" + get-stream "^7.0.0" + import-from "^4.0.0" + into-stream "^7.0.0" + lodash-es "^4.17.21" + read-pkg-up "^9.0.0" + "@serialport/binding-mock@10.2.2": version "10.2.2" resolved "https://registry.yarnpkg.com/@serialport/binding-mock/-/binding-mock-10.2.2.tgz#d322a8116a97806addda13c62f50e73d16125874" @@ -1514,16 +2254,11 @@ resolved "https://registry.yarnpkg.com/@serialport/parser-cctalk/-/parser-cctalk-10.5.0.tgz#0ee88db0768a361b7cfb9a394b74e480c38e1992" integrity sha512-Iwsdr03xmCKAiibLSr7b3w6ZUTBNiS+PwbDQXdKU/clutXjuoex83XvsOtYVcNZmwJlVNhAUbkG+FJzWwIa4DA== -"@serialport/parser-delimiter@10.5.0": +"@serialport/parser-delimiter@10.5.0", "@serialport/parser-delimiter@^10.0.0": version "10.5.0" resolved "https://registry.yarnpkg.com/@serialport/parser-delimiter/-/parser-delimiter-10.5.0.tgz#b0d93100cdfd0619d020a427d652495073f3b828" integrity sha512-/uR/yT3jmrcwnl2FJU/2ySvwgo5+XpksDUR4NF/nwTS5i3CcuKS+FKi/tLzy1k8F+rCx5JzpiK+koqPqOUWArA== -"@serialport/parser-delimiter@^11.0.0": - version "11.0.0" - resolved "https://registry.yarnpkg.com/@serialport/parser-delimiter/-/parser-delimiter-11.0.0.tgz#e830c6bb49723d4446131277dc3243b502d09388" - integrity sha512-aZLJhlRTjSmEwllLG7S4J8s8ctRAS0cbvCpO87smLvl3e4BgzbVgF6Z6zaJd3Aji2uSiYgfedCdNc4L6W+1E2g== - "@serialport/parser-inter-byte-timeout@10.5.0": version "10.5.0" resolved "https://registry.yarnpkg.com/@serialport/parser-inter-byte-timeout/-/parser-inter-byte-timeout-10.5.0.tgz#8665ee5e6138f794ac055e83ef2d1c3653a577c0" @@ -1569,187 +2304,193 @@ "@serialport/bindings-interface" "1.2.2" debug "^4.3.2" -"@sindresorhus/is@^0.14.0": - version "0.14.0" - resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz" - integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== +"@sigstore/protobuf-specs@^0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@sigstore/protobuf-specs/-/protobuf-specs-0.1.0.tgz#957cb64ea2f5ce527cc9cf02a096baeb0d2b99b4" + integrity sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ== -"@stylelint/postcss-css-in-js@^0.37.2": - version "0.37.2" - resolved "https://registry.npmjs.org/@stylelint/postcss-css-in-js/-/postcss-css-in-js-0.37.2.tgz" - integrity sha512-nEhsFoJurt8oUmieT8qy4nk81WRHmJynmVwn/Vts08PL9fhgIsMhk1GId5yAN643OzqEEb5S/6At2TZW7pqPDA== +"@sigstore/tuf@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@sigstore/tuf/-/tuf-1.0.0.tgz#13b69323e7bf8de458cd6c952c57acd1169772a5" + integrity sha512-bLzi9GeZgMCvjJeLUIfs8LJYCxrPRA8IXQkzUtaFKKVPTz0mucRyqFcV2U20yg9K+kYAD0YSitzGfRZCFLjdHQ== dependencies: - "@babel/core" ">=7.9.0" + "@sigstore/protobuf-specs" "^0.1.0" + make-fetch-happen "^11.0.1" + tuf-js "^1.1.3" -"@stylelint/postcss-markdown@^0.36.2": - version "0.36.2" - resolved "https://registry.npmjs.org/@stylelint/postcss-markdown/-/postcss-markdown-0.36.2.tgz" - integrity sha512-2kGbqUVJUGE8dM+bMzXG/PYUWKkjLIkRLWNh39OaADkiabDRdw8ATFCgbMz5xdIcvwspPAluSL7uY+ZiTWdWmQ== - dependencies: - remark "^13.0.0" - unist-util-find-all-after "^3.0.2" +"@sindresorhus/is@^4.0.0": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" + integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== -"@svgr/babel-plugin-add-jsx-attribute@^6.0.0": - version "6.0.0" - resolved "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.0.0.tgz" - integrity sha512-MdPdhdWLtQsjd29Wa4pABdhWbaRMACdM1h31BY+c6FghTZqNGT7pEYdBoaGeKtdTOBC/XNFQaKVj+r/Ei2ryWA== +"@spacingbat3/lss@^1.0.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@spacingbat3/lss/-/lss-1.2.0.tgz#0d04ddee2e41682fd09b7eda67d43c1d49e28c05" + integrity sha512-aywhxHNb6l7COooF3m439eT/6QN8E/RSl5IVboSKthMHcp0GlZYMSoS7546rqDLmFRxTD8f1tu/NIS9vtDwYAg== -"@svgr/babel-plugin-remove-jsx-attribute@^6.0.0": - version "6.0.0" - resolved "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.0.0.tgz" - integrity sha512-aVdtfx9jlaaxc3unA6l+M9YRnKIZjOhQPthLKqmTXC8UVkBLDRGwPKo+r8n3VZN8B34+yVajzPTZ+ptTSuZZCw== +"@szmarczak/http-timer@^4.0.5": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" + integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== + dependencies: + defer-to-connect "^2.0.0" -"@svgr/babel-plugin-remove-jsx-empty-expression@^6.0.0": - version "6.0.0" - resolved "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.0.0.tgz" - integrity sha512-Ccj42ApsePD451AZJJf1QzTD1B/BOU392URJTeXFxSK709i0KUsGtbwyiqsKu7vsYxpTM0IA5clAKDyf9RCZyA== +"@tootallnate/once@2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== -"@svgr/babel-plugin-replace-jsx-attribute-value@^6.0.0": - version "6.0.0" - resolved "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.0.0.tgz" - integrity sha512-88V26WGyt1Sfd1emBYmBJRWMmgarrExpKNVmI9vVozha4kqs6FzQJ/Kp5+EYli1apgX44518/0+t9+NU36lThQ== +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== -"@svgr/babel-plugin-svg-dynamic-title@^6.0.0": - version "6.0.0" - resolved "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.0.0.tgz" - integrity sha512-F7YXNLfGze+xv0KMQxrl2vkNbI9kzT9oDK55/kUuymh1ACyXkMV+VZWX1zEhSTfEKh7VkHVZGmVtHg8eTZ6PRg== +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== -"@svgr/babel-plugin-svg-em-dimensions@^6.0.0": - version "6.0.0" - resolved "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.0.0.tgz" - integrity sha512-+rghFXxdIqJNLQK08kwPBD3Z22/0b2tEZ9lKiL/yTfuyj1wW8HUXu4bo/XkogATIYuXSghVQOOCwURXzHGKyZA== +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== -"@svgr/babel-plugin-transform-react-native-svg@^6.0.0": - version "6.0.0" - resolved "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.0.0.tgz" - integrity sha512-VaphyHZ+xIKv5v0K0HCzyfAaLhPGJXSk2HkpYfXIOKb7DjLBv0soHDxNv6X0vr2titsxE7klb++u7iOf7TSrFQ== +"@tsconfig/node16@^1.0.2": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== -"@svgr/babel-plugin-transform-svg-component@^6.2.0": - version "6.2.0" - resolved "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.2.0.tgz" - integrity sha512-bhYIpsORb++wpsp91fymbFkf09Z/YEKR0DnFjxvN+8JHeCUD2unnh18jIMKnDJTWtvpTaGYPXELVe4OOzFI0xg== +"@tufjs/canonical-json@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz#eade9fd1f537993bc1f0949f3aea276ecc4fab31" + integrity sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ== -"@svgr/babel-preset@^6.2.0": - version "6.2.0" - resolved "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.2.0.tgz" - integrity sha512-4WQNY0J71JIaL03DRn0vLiz87JXx0b9dYm2aA8XHlQJQoixMl4r/soYHm8dsaJZ3jWtkCiOYy48dp9izvXhDkQ== - dependencies: - "@svgr/babel-plugin-add-jsx-attribute" "^6.0.0" - "@svgr/babel-plugin-remove-jsx-attribute" "^6.0.0" - "@svgr/babel-plugin-remove-jsx-empty-expression" "^6.0.0" - "@svgr/babel-plugin-replace-jsx-attribute-value" "^6.0.0" - "@svgr/babel-plugin-svg-dynamic-title" "^6.0.0" - "@svgr/babel-plugin-svg-em-dimensions" "^6.0.0" - "@svgr/babel-plugin-transform-react-native-svg" "^6.0.0" - "@svgr/babel-plugin-transform-svg-component" "^6.2.0" - -"@svgr/core@^6.2.1": - version "6.2.1" - resolved "https://registry.npmjs.org/@svgr/core/-/core-6.2.1.tgz" - integrity sha512-NWufjGI2WUyrg46mKuySfviEJ6IxHUOm/8a3Ph38VCWSp+83HBraCQrpEM3F3dB6LBs5x8OElS8h3C0oOJaJAA== +"@tufjs/models@1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@tufjs/models/-/models-1.0.4.tgz#5a689630f6b9dbda338d4b208019336562f176ef" + integrity sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A== dependencies: - "@svgr/plugin-jsx" "^6.2.1" - camelcase "^6.2.0" - cosmiconfig "^7.0.1" + "@tufjs/canonical-json" "1.0.0" + minimatch "^9.0.0" -"@svgr/hast-util-to-babel-ast@^6.2.1": - version "6.2.1" - resolved "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.2.1.tgz" - integrity sha512-pt7MMkQFDlWJVy9ULJ1h+hZBDGFfSCwlBNW1HkLnVi7jUhyEXUaGYWi1x6bM2IXuAR9l265khBT4Av4lPmaNLQ== +"@types/body-parser@*": + version "1.19.2" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" + integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== dependencies: - "@babel/types" "^7.15.6" - entities "^3.0.1" + "@types/connect" "*" + "@types/node" "*" -"@svgr/plugin-jsx@^6.2.1": - version "6.2.1" - resolved "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.2.1.tgz" - integrity sha512-u+MpjTsLaKo6r3pHeeSVsh9hmGRag2L7VzApWIaS8imNguqoUwDq/u6U/NDmYs/KAsrmtBjOEaAAPbwNGXXp1g== +"@types/bonjour@^3.5.9": + version "3.5.10" + resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.10.tgz#0f6aadfe00ea414edc86f5d106357cda9701e275" + integrity sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw== dependencies: - "@babel/core" "^7.15.5" - "@svgr/babel-preset" "^6.2.0" - "@svgr/hast-util-to-babel-ast" "^6.2.1" - svg-parser "^2.0.2" + "@types/node" "*" -"@svgr/plugin-svgo@^6.2.0": - version "6.2.0" - resolved "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.2.0.tgz" - integrity sha512-oDdMQONKOJEbuKwuy4Np6VdV6qoaLLvoY86hjvQEgU82Vx1MSWRyYms6Sl0f+NtqxLI/rDVufATbP/ev996k3Q== +"@types/cacheable-request@^6.0.1": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" + integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== dependencies: - cosmiconfig "^7.0.1" - deepmerge "^4.2.2" - svgo "^2.5.0" + "@types/http-cache-semantics" "*" + "@types/keyv" "^3.1.4" + "@types/node" "*" + "@types/responselike" "^1.0.0" -"@svgr/webpack@^6.2.1": - version "6.2.1" - resolved "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.2.1.tgz" - integrity sha512-h09ngMNd13hnePwgXa+Y5CgOjzlCvfWLHg+MBnydEedAnuLRzUHUJmGS3o2OsrhxTOOqEsPOFt5v/f6C5Qulcw== - dependencies: - "@babel/core" "^7.15.5" - "@babel/plugin-transform-react-constant-elements" "^7.14.5" - "@babel/preset-env" "^7.15.6" - "@babel/preset-react" "^7.14.5" - "@babel/preset-typescript" "^7.15.0" - "@svgr/core" "^6.2.1" - "@svgr/plugin-jsx" "^6.2.1" - "@svgr/plugin-svgo" "^6.2.0" - -"@szmarczak/http-timer@^1.1.2": - version "1.1.2" - resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz" - integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== +"@types/chai-subset@^1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@types/chai-subset/-/chai-subset-1.3.3.tgz#97893814e92abd2c534de422cb377e0e0bdaac94" + integrity sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw== dependencies: - defer-to-connect "^1.0.1" - -"@tootallnate/once@2": - version "2.0.0" - resolved "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz" - integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== + "@types/chai" "*" -"@trysound/sax@0.2.0": - version "0.2.0" - resolved "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz" - integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== +"@types/chai@*", "@types/chai@^4.3.5": + version "4.3.5" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.5.tgz#ae69bcbb1bebb68c4ac0b11e9d8ed04526b3562b" + integrity sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng== -"@types/anymatch@*": - version "1.3.1" - resolved "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz" - integrity sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA== +"@types/classnames@^2.2.10": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@types/classnames/-/classnames-2.3.1.tgz#3c2467aa0f1a93f1f021e3b9bcf938bd5dfdc0dd" + integrity sha512-zeOWb0JGBoVmlQoznvqXbE0tEC/HONsnoUNH19Hc96NFsTAwTXbTqb8FMYkru1F/iqp7a18Ws3nWJvtA1sHD1A== + dependencies: + classnames "*" -"@types/aws-lambda@^8.10.83": - version "8.10.115" - resolved "https://registry.yarnpkg.com/@types/aws-lambda/-/aws-lambda-8.10.115.tgz#0b5ba361c8e95430ce25fa8d67640c5ac6c857b6" - integrity sha512-kCZuFXKLV3y8NjSoaD5+qKTpRWvPz3uh3W/u1uwlw3Mg+MtaStg1NWgjAwUXo/VJDb6n6KF1ljykFNlNwEJ53Q== +"@types/connect-history-api-fallback@^1.3.5": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#9fd20b3974bdc2bcd4ac6567e2e0f6885cb2cf41" + integrity sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig== + dependencies: + "@types/express-serve-static-core" "*" + "@types/node" "*" -"@types/btoa-lite@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/btoa-lite/-/btoa-lite-1.0.0.tgz#e190a5a548e0b348adb0df9ac7fa5f1151c7cca4" - integrity sha512-wJsiX1tosQ+J5+bY5LrSahHxr2wT+uME5UDwdN1kg4frt40euqA+wzECkmq4t5QbveHiJepfdThgQrPw6KiSlg== +"@types/connect@*": + version "3.4.35" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" + integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== + dependencies: + "@types/node" "*" -"@types/debug@^4.0.0": +"@types/debug@^4.0.0", "@types/debug@^4.1.6": version "4.1.8" resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.8.tgz#cef723a5d0a90990313faec2d1e22aee5eecb317" integrity sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ== dependencies: "@types/ms" "*" -"@types/debug@^4.1.6": - version "4.1.7" - resolved "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz" - integrity sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg== +"@types/eslint-scope@^3.7.3": + version "3.7.4" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" + integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== dependencies: - "@types/ms" "*" + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*": + version "8.40.2" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.40.2.tgz#2833bc112d809677864a4b0e7d1de4f04d7dac2d" + integrity sha512-PRVjQ4Eh9z9pmmtaq8nTjZjQwKFk7YIHIud3lRoKRBgUQjgjRmoGxxGEPXQkF+lH7QkHJRNr5F4aBgYCW0lqpQ== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" -"@types/fs-extra@^9.0.11": +"@types/estree@*", "@types/estree@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" + integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== + +"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": + version "4.17.35" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz#c95dd4424f0d32e525d23812aa8ab8e4d3906c4f" + integrity sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + "@types/send" "*" + +"@types/express@*", "@types/express@^4.17.13": + version "4.17.17" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.17.tgz#01d5437f6ef9cfa8668e616e13c2f2ac9a491ae4" + integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.33" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/fs-extra@9.0.13", "@types/fs-extra@^9.0.1", "@types/fs-extra@^9.0.11": version "9.0.13" - resolved "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz" + resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.13.tgz#7594fbae04fe7f1918ce8b3d213f74ff44ac1f45" integrity sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA== dependencies: "@types/node" "*" "@types/glob@^7.1.1": - version "7.1.3" - resolved "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz" - integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== + version "7.2.0" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" + integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== dependencies: "@types/minimatch" "*" "@types/node" "*" @@ -1761,100 +2502,143 @@ dependencies: "@types/unist" "*" -"@types/hoist-non-react-statics@^3.3.0": - version "3.3.1" - resolved "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz" - integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA== +"@types/hoist-non-react-statics@*", "@types/hoist-non-react-statics@^3.3.0": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f" + integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA== + dependencies: + "@types/react" "*" + hoist-non-react-statics "^3.3.0" + +"@types/html-minifier-terser@^6.0.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" + integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== + +"@types/http-cache-semantics@*": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" + integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== + +"@types/http-errors@*": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.1.tgz#20172f9578b225f6c7da63446f56d4ce108d5a65" + integrity sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ== + +"@types/http-proxy@^1.17.8": + version "1.17.11" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.11.tgz#0ca21949a5588d55ac2b659b69035c84bd5da293" + integrity sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA== dependencies: - "@types/react" "*" - hoist-non-react-statics "^3.3.0" - -"@types/html-minifier-terser@^5.0.0": - version "5.1.1" - resolved "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz" - integrity sha512-giAlZwstKbmvMk1OO7WXSj4OZ0keXAcl2TQq4LWHiiPH2ByaH7WeUzng+Qej8UPxxv+8lRTuouo0iaNDBuzIBA== + "@types/node" "*" "@types/invariant@^2.2.33": version "2.2.35" - resolved "https://registry.npmjs.org/@types/invariant/-/invariant-2.2.35.tgz" + resolved "https://registry.yarnpkg.com/@types/invariant/-/invariant-2.2.35.tgz#cd3ebf581a6557452735688d8daba6cf0bd5a3be" integrity sha512-DxX1V9P8zdJPYQat1gHyY0xj3efl8gnMVjiM9iCY6y27lj+PoQWkgjt8jDqmovPqULkKVpKRg8J36iQiA+EtEg== -"@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6": - version "7.0.7" - resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz" - integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== +"@types/json-schema@*", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": + version "7.0.12" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" + integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== -"@types/jsonwebtoken@^9.0.0": - version "9.0.2" - resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz#9eeb56c76dd555039be2a3972218de5bd3b8d83e" - integrity sha512-drE6uz7QBKq1fYqqoFKTDRdFCPHd5TCub75BM+D+cMx7NU9hUz7SESLfC2fSCXVFMO5Yj8sOWHuGqPgjc+fz0Q== +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + +"@types/keyv@^3.1.4": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" + integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== dependencies: "@types/node" "*" -"@types/lru-cache@^5.1.0": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" - integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== - "@types/mdast@^3.0.0": - version "3.0.3" - resolved "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz" - integrity sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw== + version "3.0.11" + resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.11.tgz#dc130f7e7d9306124286f6d6cee40cf4d14a3dc0" + integrity sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw== dependencies: "@types/unist" "*" +"@types/mime@*": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" + integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== + +"@types/mime@^1": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" + integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== + "@types/minimatch@*": - version "3.0.4" - resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz" - integrity sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA== + version "5.1.2" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" + integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== "@types/minimist@^1.2.0": - version "1.2.1" - resolved "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.1.tgz" - integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg== + version "1.2.2" + resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" + integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== "@types/ms@*": version "0.7.31" - resolved "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197" integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== -"@types/node@*", "@types/node@^16.11.26": - version "16.18.26" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.26.tgz#a18b88726a67bc6a8a5bdac9a40c093ecb03ccd0" - integrity sha512-pCNBzNQqCXE4A6FWDmrn/o1Qu+qBf8tnorBlNoPNSBQJF+jXzvTKNI/aMiE+hGJbK5sDAD65g7OS/YwSHIEJdw== +"@types/node@*": + version "20.3.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.3.2.tgz#fa6a90f2600e052a03c18b8cb3fd83dd4e599898" + integrity sha512-vOBLVQeCQfIcF/2Y7eKFTqrMnizK5lRNQ7ykML/5RuwVXVWxYkgwS7xbt4B6fKCUPgbSL5FSsjHQpaGQP/dQmw== -"@types/normalize-package-data@^2.4.0": - version "2.4.0" - resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz" - integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== +"@types/node@^18.11.18": + version "18.16.19" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.16.19.tgz#cb03fca8910fdeb7595b755126a8a78144714eea" + integrity sha512-IXl7o+R9iti9eBW4Wg2hx1xQDig183jj7YLn8F7udNceyfkbn1ZxmzZXuak20gR40D7pIkIY1kYGx5VIGbaHKA== + +"@types/normalize-package-data@^2.4.0", "@types/normalize-package-data@^2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" + integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== "@types/parse-json@^4.0.0": version "4.0.0" - resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== -"@types/plist@^3.0.1": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/plist/-/plist-3.0.2.tgz#61b3727bba0f5c462fe333542534a0c3e19ccb01" - integrity sha512-ULqvZNGMv0zRFvqn8/4LSPtnmN4MfhlPNtJCTpKuIIxGVGZ2rYWzFXrvEBoh9CVyqSE7D6YFRJ1hydLHI6kbWw== - dependencies: - "@types/node" "*" - xmlbuilder ">=11.0.1" - -"@types/prop-types@*", "@types/prop-types@^15.7.3": - version "15.7.3" - resolved "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz" - integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== - -"@types/prop-types@^15.0.0": +"@types/prop-types@*", "@types/prop-types@^15.0.0", "@types/prop-types@^15.7.3": version "15.7.5" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== +"@types/qs@*": + version "6.9.7" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" + integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + +"@types/range-parser@*": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" + integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== + +"@types/react-dom@^18.2.4": + version "18.2.6" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.6.tgz#ad621fa71a8db29af7c31b41b2ea3d8a6f4144d1" + integrity sha512-2et4PDvg6PVCyS7fuTc4gPoksV58bW0RwSxWKcPRcHZf0PRUGq03TKcD/rUHe3azfV6/5/biUBJw+HhCQjaP0A== + dependencies: + "@types/react" "*" + +"@types/react-rangeslider@^2.2.4": + version "2.2.4" + resolved "https://registry.yarnpkg.com/@types/react-rangeslider/-/react-rangeslider-2.2.4.tgz#191e3d3418d35ea2ef65b3795531cba1d0e37a0d" + integrity sha512-WUgIfk7pCvat5QbTpJDh/0m3e8NZvqzVy3RXTaU8UaDliNM+SBz8hFsIfVXhwN/ruOvILOvCdh2+D6sKvzr+Ng== + dependencies: + "@types/react" "*" + "@types/react-redux@^7.1.20": - version "7.1.24" - resolved "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.24.tgz" - integrity sha512-7FkurKcS1k0FHZEtdbbgN8Oc6b+stGSfZYjQGicofJ0j4U0qIn/jaSvnP2pLwZKiai3/17xqqxkkrxTgN8UNbQ== + version "7.1.25" + resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.25.tgz#de841631205b24f9dfb4967dd4a7901e048f9a88" + integrity sha512-bAGh4e+w5D8dajd6InASVIyCo4pZLJ66oLb80F9OBLO1gKESbZcRCJpTT6uLXX+HAB57zw1WTdwJdAsewuTweg== dependencies: "@types/hoist-non-react-statics" "^3.3.0" "@types/react" "*" @@ -1862,251 +2646,383 @@ redux "^4.0.0" "@types/react-transition-group@^4.4.1": - version "4.4.1" - resolved "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.1.tgz" - integrity sha512-vIo69qKKcYoJ8wKCJjwSgCTM+z3chw3g18dkrDfVX665tMH7tmbDxEAnPdey4gTlwZz5QuHGzd+hul0OVZDqqQ== + version "4.4.6" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.6.tgz#18187bcda5281f8e10dfc48f0943e2fdf4f75e2e" + integrity sha512-VnCdSxfcm08KjsJVQcfBmhEQAPnLB8G08hAxn39azX1qYBQ/5RVQuoHuKIcfKOdncuaUvEpFKFzEvbtIMsfVew== dependencies: "@types/react" "*" -"@types/react@*", "@types/react@>=16.14.8", "@types/react@>=16.9.11": - version "17.0.3" - resolved "https://registry.npmjs.org/@types/react/-/react-17.0.3.tgz" - integrity sha512-wYOUxIgs2HZZ0ACNiIayItyluADNbONl7kt8lkLjVK8IitMH5QMyAh75Fwhmo37r1m7L2JaFj03sIfxBVDvRAg== +"@types/react@*", "@types/react@>=16.9.11", "@types/react@>=16.9.35", "@types/react@^18.2.8": + version "18.2.14" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.14.tgz#fa7a6fecf1ce35ca94e74874f70c56ce88f7a127" + integrity sha512-A0zjq+QN/O0Kpe30hA1GidzyFjatVvrpIvWLxD+xv67Vt91TWWgco9IvrJBkeyHm1trGaFS/FSGqPlhyeZRm0g== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" csstype "^3.0.2" +"@types/responselike@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" + integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== + dependencies: + "@types/node" "*" + +"@types/retry@0.12.0": + version "0.12.0" + resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" + integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== + "@types/scheduler@*": - version "0.16.1" - resolved "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.1.tgz" - integrity sha512-EaCxbanVeyxDRTQBkdLb3Bvl/HK7PBK6UJjsSixB0iHKoWxE5uu2Q/DgtpOhPIojN0Zl1whvOd7PoHs2P0s5eA== + version "0.16.3" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.3.tgz#cef09e3ec9af1d63d2a6cc5b383a737e24e6dcf5" + integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ== -"@types/semver@^7.3.6": - version "7.3.10" - resolved "https://registry.npmjs.org/@types/semver/-/semver-7.3.10.tgz" - integrity sha512-zsv3fsC7S84NN6nPK06u79oWgrPVd0NvOyqgghV1haPaFcVxIrP4DLomRwGAXk0ui4HZA7mOcSFL98sMVW9viw== +"@types/semver@^7.3.12": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a" + integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw== -"@types/source-list-map@*": - version "0.1.2" - resolved "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz" - integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== +"@types/send@*": + version "0.17.1" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.1.tgz#ed4932b8a2a805f1fe362a70f4e62d0ac994e301" + integrity sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q== + dependencies: + "@types/mime" "^1" + "@types/node" "*" -"@types/tapable@^1", "@types/tapable@^1.0.5": - version "1.0.7" - resolved "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.7.tgz" - integrity sha512-0VBprVqfgFD7Ehb2vd8Lh9TG3jP98gvr8rgehQqzztZNI7o8zS8Ad4jyZneKELphpuE212D8J70LnSNQSyO6bQ== +"@types/serve-index@^1.9.1": + version "1.9.1" + resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278" + integrity sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg== + dependencies: + "@types/express" "*" -"@types/uglify-js@*": - version "3.13.0" - resolved "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.13.0.tgz" - integrity sha512-EGkrJD5Uy+Pg0NUR8uA4bJ5WMfljyad0G+784vLCNUkD+QwOJXUbBYExXfVGf7YtyzdQp3L/XMYcliB987kL5Q== +"@types/serve-static@*", "@types/serve-static@^1.13.10": + version "1.15.2" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.2.tgz#3e5419ecd1e40e7405d34093f10befb43f63381a" + integrity sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw== dependencies: - source-map "^0.6.1" + "@types/http-errors" "*" + "@types/mime" "*" + "@types/node" "*" -"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2": - version "2.0.2" - resolved "https://registry.npmjs.org/@types/unist/-/unist-2.0.2.tgz" - integrity sha512-iHI60IbyfQilNubmxsq4zqSjdynlmc2Q/QvH9kjzg9+CCYVVzq1O6tc7VBzSygIwnmOt07w80IG6HDQvjv3Liw== +"@types/sockjs@^0.3.33": + version "0.3.33" + resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.33.tgz#570d3a0b99ac995360e3136fd6045113b1bd236f" + integrity sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw== + dependencies: + "@types/node" "*" + +"@types/styled-components@^5.1.26": + version "5.1.26" + resolved "https://registry.yarnpkg.com/@types/styled-components/-/styled-components-5.1.26.tgz#5627e6812ee96d755028a98dae61d28e57c233af" + integrity sha512-KuKJ9Z6xb93uJiIyxo/+ksS7yLjS1KzG6iv5i78dhVg/X3u5t1H7juRWqVmodIdz6wGVaIApo1u01kmFRdJHVw== + dependencies: + "@types/hoist-non-react-statics" "*" + "@types/react" "*" + csstype "^3.0.2" -"@types/verror@^1.10.3": - version "1.10.5" - resolved "https://registry.yarnpkg.com/@types/verror/-/verror-1.10.5.tgz#2a1413aded46e67a1fe2386800e291123ed75eb1" - integrity sha512-9UjMCHK5GPgQRoNbqdLIAvAy0EInuiqbW0PBMtVP6B5B2HQJlvoJHM+KodPZMEjOa5VkSc+5LH7xy+cUzQdmHw== +"@types/unist@*", "@types/unist@^2.0.0": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" + integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ== -"@types/w3c-web-usb@1.0.6": +"@types/w3c-web-usb@^1.0.6": version "1.0.6" - resolved "https://registry.npmjs.org/@types/w3c-web-usb/-/w3c-web-usb-1.0.6.tgz" + resolved "https://registry.yarnpkg.com/@types/w3c-web-usb/-/w3c-web-usb-1.0.6.tgz#5d8560d0d9f585ffc80865bc773db7bc975b680c" integrity sha512-cSjhgrr8g4KbPnnijAr/KJDNKa/bBa+ixYkywFRvrhvi9n1WEl7yYbtRyzE6jqNQiSxxJxoAW3STaOQwJHndaw== "@types/warning@^3.0.0": version "3.0.0" - resolved "https://registry.npmjs.org/@types/warning/-/warning-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/@types/warning/-/warning-3.0.0.tgz#0d2501268ad8f9962b740d387c4654f5f8e23e52" integrity sha512-t/Tvs5qR47OLOr+4E9ckN8AmP2Tf16gWq+/qA4iUGS/OOyHVO8wv2vjJuX8SNOUTJyWb+2t7wJm6cXILFnOROA== -"@types/webpack-env@^1.15.1": - version "1.16.0" - resolved "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.16.0.tgz" - integrity sha512-Fx+NpfOO0CpeYX2g9bkvX8O5qh9wrU1sOF4g8sft4Mu7z+qfe387YlyY8w8daDyDsKY5vUxM0yxkAYnbkRbZEw== - -"@types/webpack-sources@*": - version "2.1.0" - resolved "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-2.1.0.tgz" - integrity sha512-LXn/oYIpBeucgP1EIJbKQ2/4ZmpvRl+dlrFdX7+94SKRUV3Evy3FsfMZY318vGhkWUS5MPhtOM3w1/hCOAOXcg== +"@types/ws@^8.5.5": + version "8.5.5" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.5.tgz#af587964aa06682702ee6dcbc7be41a80e4b28eb" + integrity sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg== dependencies: "@types/node" "*" - "@types/source-list-map" "*" - source-map "^0.7.3" -"@types/webpack@^4.41.8": - version "4.41.27" - resolved "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.27.tgz" - integrity sha512-wK/oi5gcHi72VMTbOaQ70VcDxSQ1uX8S2tukBK9ARuGXrYM/+u4ou73roc7trXDNmCxCoerE8zruQqX/wuHszA== +"@types/yauzl@^2.9.1": + version "2.10.0" + resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599" + integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw== dependencies: - "@types/anymatch" "*" "@types/node" "*" - "@types/tapable" "^1" - "@types/uglify-js" "*" - "@types/webpack-sources" "*" - source-map "^0.6.0" -"@types/yargs-parser@*": - version "20.2.0" - resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.0.tgz" - integrity sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA== - -"@types/yargs@^17.0.1": - version "17.0.10" - resolved "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz" - integrity sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA== +"@typescript-eslint/eslint-plugin@^5.0.0": + version "5.60.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.60.1.tgz#81382d6ecb92b8dda70e91f9035611cb2fecd1c3" + integrity sha512-KSWsVvsJsLJv3c4e73y/Bzt7OpqMCADUO846bHcuWYSYM19bldbAeDv7dYyV0jwkbMfJ2XdlzwjhXtuD7OY6bw== dependencies: - "@types/yargs-parser" "*" + "@eslint-community/regexpp" "^4.4.0" + "@typescript-eslint/scope-manager" "5.60.1" + "@typescript-eslint/type-utils" "5.60.1" + "@typescript-eslint/utils" "5.60.1" + debug "^4.3.4" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + natural-compare-lite "^1.4.0" + semver "^7.3.7" + tsutils "^3.21.0" -"@webassemblyjs/ast@1.9.0": - version "1.9.0" - resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz" - integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== +"@typescript-eslint/parser@^5.0.0": + version "5.60.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.60.1.tgz#0f2f58209c0862a73e3d5a56099abfdfa21d0fd3" + integrity sha512-pHWlc3alg2oSMGwsU/Is8hbm3XFbcrb6P5wIxcQW9NsYBfnrubl/GhVVD/Jm/t8HXhA2WncoIRfBtnCgRGV96Q== dependencies: - "@webassemblyjs/helper-module-context" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/wast-parser" "1.9.0" - -"@webassemblyjs/floating-point-hex-parser@1.9.0": - version "1.9.0" - resolved "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz" - integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== - -"@webassemblyjs/helper-api-error@1.9.0": - version "1.9.0" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz" - integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== - -"@webassemblyjs/helper-buffer@1.9.0": - version "1.9.0" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz" - integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== + "@typescript-eslint/scope-manager" "5.60.1" + "@typescript-eslint/types" "5.60.1" + "@typescript-eslint/typescript-estree" "5.60.1" + debug "^4.3.4" -"@webassemblyjs/helper-code-frame@1.9.0": - version "1.9.0" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz" - integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== +"@typescript-eslint/scope-manager@5.60.1": + version "5.60.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.60.1.tgz#35abdb47f500c68c08f2f2b4f22c7c79472854bb" + integrity sha512-Dn/LnN7fEoRD+KspEOV0xDMynEmR3iSHdgNsarlXNLGGtcUok8L4N71dxUgt3YvlO8si7E+BJ5Fe3wb5yUw7DQ== dependencies: - "@webassemblyjs/wast-printer" "1.9.0" + "@typescript-eslint/types" "5.60.1" + "@typescript-eslint/visitor-keys" "5.60.1" -"@webassemblyjs/helper-fsm@1.9.0": - version "1.9.0" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz" - integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== - -"@webassemblyjs/helper-module-context@1.9.0": - version "1.9.0" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz" - integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== +"@typescript-eslint/type-utils@5.60.1": + version "5.60.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.60.1.tgz#17770540e98d65ab4730c7aac618003f702893f4" + integrity sha512-vN6UztYqIu05nu7JqwQGzQKUJctzs3/Hg7E2Yx8rz9J+4LgtIDFWjjl1gm3pycH0P3mHAcEUBd23LVgfrsTR8A== dependencies: - "@webassemblyjs/ast" "1.9.0" + "@typescript-eslint/typescript-estree" "5.60.1" + "@typescript-eslint/utils" "5.60.1" + debug "^4.3.4" + tsutils "^3.21.0" -"@webassemblyjs/helper-wasm-bytecode@1.9.0": - version "1.9.0" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz" - integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== +"@typescript-eslint/types@5.60.1": + version "5.60.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.60.1.tgz#a17473910f6b8d388ea83c9d7051af89c4eb7561" + integrity sha512-zDcDx5fccU8BA0IDZc71bAtYIcG9PowaOwaD8rjYbqwK7dpe/UMQl3inJ4UtUK42nOCT41jTSCwg76E62JpMcg== -"@webassemblyjs/helper-wasm-section@1.9.0": - version "1.9.0" - resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz" - integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== +"@typescript-eslint/typescript-estree@5.60.1": + version "5.60.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.1.tgz#8c71824b7165b64d5ebd7aa42968899525959834" + integrity sha512-hkX70J9+2M2ZT6fhti5Q2FoU9zb+GeZK2SLP1WZlvUDqdMbEKhexZODD1WodNRyO8eS+4nScvT0dts8IdaBzfw== dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" + "@typescript-eslint/types" "5.60.1" + "@typescript-eslint/visitor-keys" "5.60.1" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.60.1": + version "5.60.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.60.1.tgz#6861ebedbefba1ac85482d2bdef6f2ff1eb65b80" + integrity sha512-tiJ7FFdFQOWssFa3gqb94Ilexyw0JVxj6vBzaSpfN/8IhoKkDuSAenUKvsSHw2A/TMpJb26izIszTXaqygkvpQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.60.1" + "@typescript-eslint/types" "5.60.1" + "@typescript-eslint/typescript-estree" "5.60.1" + eslint-scope "^5.1.1" + semver "^7.3.7" -"@webassemblyjs/ieee754@1.9.0": - version "1.9.0" - resolved "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz" - integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== +"@typescript-eslint/visitor-keys@5.60.1": + version "5.60.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.1.tgz#19a877358bf96318ec35d90bfe6bd1445cce9434" + integrity sha512-xEYIxKcultP6E/RMKqube11pGjXH1DCo60mQoWhVYyKfLkwbIVVjYxmOenNMxILx0TjCujPTjjnTIVzm09TXIw== dependencies: - "@xtuc/ieee754" "^1.2.0" + "@typescript-eslint/types" "5.60.1" + eslint-visitor-keys "^3.3.0" -"@webassemblyjs/leb128@1.9.0": - version "1.9.0" - resolved "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz" - integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== +"@vercel/webpack-asset-relocator-loader@1.7.3": + version "1.7.3" + resolved "https://registry.yarnpkg.com/@vercel/webpack-asset-relocator-loader/-/webpack-asset-relocator-loader-1.7.3.tgz#e65ca1fd9feb045039788f9b4710e5acc84b01b0" + integrity sha512-vizrI18v8Lcb1PmNNUBz7yxPxxXoOeuaVEjTG9MjvDrphjiSxFZrRJ5tIghk+qdLFRCXI5HBCshgobftbmrC5g== dependencies: + resolve "^1.10.0" + +"@vitest/expect@0.32.2": + version "0.32.2" + resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-0.32.2.tgz#8111f6ab1ff3b203efbe3a25e8bb2d160ce4b720" + integrity sha512-6q5yzweLnyEv5Zz1fqK5u5E83LU+gOMVBDuxBl2d2Jfx1BAp5M+rZgc5mlyqdnxquyoiOXpXmFNkcGcfFnFH3Q== + dependencies: + "@vitest/spy" "0.32.2" + "@vitest/utils" "0.32.2" + chai "^4.3.7" + +"@vitest/runner@0.32.2": + version "0.32.2" + resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-0.32.2.tgz#18dd979ce4e8766bcc90948d11b4c8ae6ed90b89" + integrity sha512-06vEL0C1pomOEktGoLjzZw+1Fb+7RBRhmw/06WkDrd1akkT9i12su0ku+R/0QM69dfkIL/rAIDTG+CSuQVDcKw== + dependencies: + "@vitest/utils" "0.32.2" + concordance "^5.0.4" + p-limit "^4.0.0" + pathe "^1.1.0" + +"@vitest/snapshot@0.32.2": + version "0.32.2" + resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-0.32.2.tgz#500b6453e88e4c50a0aded39839352c16b519b9e" + integrity sha512-JwhpeH/PPc7GJX38vEfCy9LtRzf9F4er7i4OsAJyV7sjPwjj+AIR8cUgpMTWK4S3TiamzopcTyLsZDMuldoi5A== + dependencies: + magic-string "^0.30.0" + pathe "^1.1.0" + pretty-format "^27.5.1" + +"@vitest/spy@0.32.2": + version "0.32.2" + resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-0.32.2.tgz#f3ef7afe0d34e863b90df7c959fa5af540a6aaf9" + integrity sha512-Q/ZNILJ4ca/VzQbRM8ur3Si5Sardsh1HofatG9wsJY1RfEaw0XKP8IVax2lI1qnrk9YPuG9LA2LkZ0EI/3d4ug== + dependencies: + tinyspy "^2.1.0" + +"@vitest/utils@0.32.2": + version "0.32.2" + resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-0.32.2.tgz#809c720cafbf4b35ce651deb8570d57785e77819" + integrity sha512-lnJ0T5i03j0IJaeW73hxe2AuVnZ/y1BhhCOuIcl9LIzXnbpXJT9Lrt6brwKHXLOiA7MZ6N5hSJjt0xE1dGNCzQ== + dependencies: + diff-sequences "^29.4.3" + loupe "^2.3.6" + pretty-format "^27.5.1" + +"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.6.tgz#db046555d3c413f8966ca50a95176a0e2c642e24" + integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q== + dependencies: + "@webassemblyjs/helper-numbers" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + +"@webassemblyjs/floating-point-hex-parser@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431" + integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== + +"@webassemblyjs/helper-api-error@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" + integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== + +"@webassemblyjs/helper-buffer@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz#b66d73c43e296fd5e88006f18524feb0f2c7c093" + integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA== + +"@webassemblyjs/helper-numbers@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5" + integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.11.6" + "@webassemblyjs/helper-api-error" "1.11.6" "@xtuc/long" "4.2.2" -"@webassemblyjs/utf8@1.9.0": - version "1.9.0" - resolved "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz" - integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== +"@webassemblyjs/helper-wasm-bytecode@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" + integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== -"@webassemblyjs/wasm-edit@1.9.0": - version "1.9.0" - resolved "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz" - integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/helper-wasm-section" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - "@webassemblyjs/wasm-opt" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - "@webassemblyjs/wast-printer" "1.9.0" - -"@webassemblyjs/wasm-gen@1.9.0": - version "1.9.0" - resolved "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz" - integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== +"@webassemblyjs/helper-wasm-section@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz#ff97f3863c55ee7f580fd5c41a381e9def4aa577" + integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g== dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/ieee754" "1.9.0" - "@webassemblyjs/leb128" "1.9.0" - "@webassemblyjs/utf8" "1.9.0" + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/wasm-gen" "1.11.6" -"@webassemblyjs/wasm-opt@1.9.0": - version "1.9.0" - resolved "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz" - integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== +"@webassemblyjs/ieee754@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a" + integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" + "@xtuc/ieee754" "^1.2.0" -"@webassemblyjs/wasm-parser@1.9.0": - version "1.9.0" - resolved "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz" - integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== +"@webassemblyjs/leb128@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7" + integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-api-error" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/ieee754" "1.9.0" - "@webassemblyjs/leb128" "1.9.0" - "@webassemblyjs/utf8" "1.9.0" - -"@webassemblyjs/wast-parser@1.9.0": - version "1.9.0" - resolved "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz" - integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/floating-point-hex-parser" "1.9.0" - "@webassemblyjs/helper-api-error" "1.9.0" - "@webassemblyjs/helper-code-frame" "1.9.0" - "@webassemblyjs/helper-fsm" "1.9.0" "@xtuc/long" "4.2.2" -"@webassemblyjs/wast-printer@1.9.0": - version "1.9.0" - resolved "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz" - integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/wast-parser" "1.9.0" +"@webassemblyjs/utf8@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" + integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== + +"@webassemblyjs/wasm-edit@^1.11.5": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz#c72fa8220524c9b416249f3d94c2958dfe70ceab" + integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/helper-wasm-section" "1.11.6" + "@webassemblyjs/wasm-gen" "1.11.6" + "@webassemblyjs/wasm-opt" "1.11.6" + "@webassemblyjs/wasm-parser" "1.11.6" + "@webassemblyjs/wast-printer" "1.11.6" + +"@webassemblyjs/wasm-gen@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz#fb5283e0e8b4551cc4e9c3c0d7184a65faf7c268" + integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/ieee754" "1.11.6" + "@webassemblyjs/leb128" "1.11.6" + "@webassemblyjs/utf8" "1.11.6" + +"@webassemblyjs/wasm-opt@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz#d9a22d651248422ca498b09aa3232a81041487c2" + integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/wasm-gen" "1.11.6" + "@webassemblyjs/wasm-parser" "1.11.6" + +"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz#bb85378c527df824004812bbdb784eea539174a1" + integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-api-error" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/ieee754" "1.11.6" + "@webassemblyjs/leb128" "1.11.6" + "@webassemblyjs/utf8" "1.11.6" + +"@webassemblyjs/wast-printer@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz#a7bf8dd7e362aeb1668ff43f35cb849f188eff20" + integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A== + dependencies: + "@webassemblyjs/ast" "1.11.6" "@xtuc/long" "4.2.2" +"@webpack-cli/configtest@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-2.1.1.tgz#3b2f852e91dac6e3b85fb2a314fb8bef46d94646" + integrity sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw== + +"@webpack-cli/info@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-2.0.2.tgz#cc3fbf22efeb88ff62310cf885c5b09f44ae0fdd" + integrity sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A== + +"@webpack-cli/serve@^2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.5.tgz#325db42395cd49fe6c14057f9a900e427df8810e" + integrity sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ== + "@xstate/react@^3.2.2": version "3.2.2" resolved "https://registry.yarnpkg.com/@xstate/react/-/react-3.2.2.tgz#ddf0f9d75e2c19375b1e1b7335e72cb99762aed8" @@ -2117,14 +3033,39 @@ "@xtuc/ieee754@^1.2.0": version "1.2.0" - resolved "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== "@xtuc/long@4.2.2": version "4.2.2" - resolved "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== +JSONStream@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +abbrev@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +abbrev@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf" + integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== + +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" @@ -2133,95 +3074,64 @@ accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: mime-types "~2.1.34" negotiator "0.6.3" -"acorn-base@npm:acorn@^7.3.1": - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -acorn-class-fields@^0.3.7: - version "0.3.7" - resolved "https://registry.yarnpkg.com/acorn-class-fields/-/acorn-class-fields-0.3.7.tgz#a35122f3cc6ad2bb33b1857e79215677fcfdd720" - integrity sha512-jdUWSFce0fuADUljmExz4TWpPkxmRW/ZCPRqeeUzbGf0vFUcpQYbyq52l75qGd0oSwwtAepeL6hgb/naRgvcKQ== - dependencies: - acorn-private-class-elements "^0.2.7" - -acorn-jsx@^5.2.0, acorn-jsx@^5.3.1: - version "5.3.1" - resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz" - integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== - -acorn-logical-assignment@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/acorn-logical-assignment/-/acorn-logical-assignment-0.1.4.tgz#1a143a21f022e1707b2bc82f587ae2943f0a570e" - integrity sha512-SeqO1iRtc/NeXo4bTkyK0hN0CIoKi/FQMN1NqhTr5UxqEn4p2wKNTZl+xzvU7i2u/k0f66YR7pNPi2ckPwYubg== - -acorn-numeric-separator@^0.3.6: - version "0.3.6" - resolved "https://registry.yarnpkg.com/acorn-numeric-separator/-/acorn-numeric-separator-0.3.6.tgz#af7f0abaf8e74bd9ca1117602954d0a3b75804f3" - integrity sha512-jUr5esgChu4k7VzesH/Nww3EysuyGJJcTEEiXqILUFKpO96PNyEXmK21M6nE0TSqGA1PeEg1MzgqJaoFsn9JMw== +acorn-import-assertions@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" + integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== -acorn-private-class-elements@^0.2.7: - version "0.2.7" - resolved "https://registry.yarnpkg.com/acorn-private-class-elements/-/acorn-private-class-elements-0.2.7.tgz#b14902c705bcff267adede1c9f61c1a317ef95d2" - integrity sha512-+GZH2wOKNZOBI4OOPmzpo4cs6mW297sn6fgIk1dUI08jGjhAaEwvC39mN2gJAg2lmAQJ1rBkFqKWonL3Zz6PVA== +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn-private-methods@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/acorn-private-methods/-/acorn-private-methods-0.3.3.tgz#724414ce5b2fec733089d73a5cbba8f7beff75b1" - integrity sha512-46oeEol3YFvLSah5m9hGMlNpxDBCEkdceJgf01AjqKYTK9r6HexKs2rgSbLK81pYjZZMonhftuUReGMlbbv05w== - dependencies: - acorn-private-class-elements "^0.2.7" +acorn-walk@^8.1.1, acorn-walk@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== -acorn-stage3@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/acorn-stage3/-/acorn-stage3-3.1.0.tgz#545dea4d78c8405190463fc8e79413273e7b19f0" - integrity sha512-iKDUmzlsw5Rs3lOTCuq3lcOddHTn3xX9gpCfoXSXAr5E9IxqJWkECKBVcSYJZRCaiNGCGNops87AdB8I1fIl2A== - dependencies: - acorn-class-fields "^0.3.7" - acorn-logical-assignment "^0.1.4" - acorn-numeric-separator "^0.3.6" - acorn-private-methods "^0.3.3" - acorn-static-class-features "^0.2.4" +acorn@^8.4.1, acorn@^8.7.1, acorn@^8.8.0, acorn@^8.8.2, acorn@^8.9.0: + version "8.9.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.9.0.tgz#78a16e3b2bcc198c10822786fa6679e245db5b59" + integrity sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ== -acorn-static-class-features@^0.2.4: - version "0.2.4" - resolved "https://registry.yarnpkg.com/acorn-static-class-features/-/acorn-static-class-features-0.2.4.tgz#a0f5261dd483f25196716854f2d7652a1deb39ee" - integrity sha512-5X4mpYq5J3pdndLmIB0+WtFd/mKWnNYpuTlTzj32wUu/PMmEGOiayQ5UrqgwdBNiaZBtDDh5kddpP7Yg2QaQYA== +agent-base@6, agent-base@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== dependencies: - acorn-private-class-elements "^0.2.7" + debug "4" -acorn@^6.4.1, acorn@^7.1.1, acorn@^7.4.0, acorn@^8.5.0, "acorn@npm:acorn-with-stage3": - version "1.0.2" - resolved "https://registry.yarnpkg.com/acorn-with-stage3/-/acorn-with-stage3-1.0.2.tgz#7ab1d6aa346072f8c6b19c8ef7eb0fc26cb89756" - integrity sha512-9RQEyavZ1djNZJrT1QH7yu0OpgcLtlTZHMK22N1tD7O+sXnXfGCT1kbgtFtCu47Rf05ddV9XNVzqFANU2CuF1Q== +agent-base@^7.0.2, agent-base@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.0.tgz#536802b76bc0b34aa50195eb2442276d613e3434" + integrity sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg== dependencies: - acorn-base "npm:acorn@^7.3.1" - acorn-stage3 "^3.0.0" - -acorn@^8.8.2: - version "8.8.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" - integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== + debug "^4.3.4" -agent-base@6: - version "6.0.2" - resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== +agentkeepalive@^4.2.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.3.0.tgz#bb999ff07412653c1803b3ced35e50729830a255" + integrity sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg== dependencies: - debug "4" + debug "^4.1.0" + depd "^2.0.0" + humanize-ms "^1.2.1" -aggregate-error@^3.0.0, aggregate-error@^3.1.0: +aggregate-error@^3.0.0: version "3.1.0" - resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== dependencies: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv-errors@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz" - integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== +aggregate-error@^4.0.0, aggregate-error@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-4.0.1.tgz#25091fe1573b9e0be892aeda15c7c66a545f758e" + integrity sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w== + dependencies: + clean-stack "^4.0.0" + indent-string "^5.0.0" ajv-formats@^2.1.1: version "2.1.1" @@ -2230,14 +3140,21 @@ ajv-formats@^2.1.1: dependencies: ajv "^8.0.0" -ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: +ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: version "3.5.2" - resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.1, ajv@^6.10.2, ajv@^6.12.0, ajv@^6.12.4, ajv@^6.12.5, ajv@^6.9.1: +ajv-keywords@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" + integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== + dependencies: + fast-deep-equal "^3.1.3" + +ajv@^6.10.0, ajv@^6.12.0, ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" - resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" @@ -2245,17 +3162,7 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.1, ajv@^6.10.2, ajv@^6.12.0, ajv@^6.12.4, ajv json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^7.0.2: - version "7.2.4" - resolved "https://registry.npmjs.org/ajv/-/ajv-7.2.4.tgz" - integrity sha512-nBeQgg/ZZA3u3SYxyaDvpvDtgZ/EZPF547ARgZBrG9Bhu1vKDwAIjtIf+sDtJUKa2zOcEbmRLBRSyMraS/Oy1A== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ajv@^8.0.0, ajv@^8.6.3: +ajv@^8.0.0, ajv@^8.11.0, ajv@^8.6.3, ajv@^8.9.0: version "8.12.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== @@ -2265,332 +3172,323 @@ ajv@^8.0.0, ajv@^8.6.3: require-from-string "^2.0.2" uri-js "^4.2.2" -ansi-colors@^3.0.0: - version "3.2.4" - resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz" - integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== - -ansi-colors@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - ansi-escapes@^4.2.1, ansi-escapes@^4.3.0: version "4.3.2" - resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== dependencies: type-fest "^0.21.3" -ansi-html@0.0.7: - version "0.0.7" - resolved "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz" - integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= +ansi-escapes@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-6.2.0.tgz#8a13ce75286f417f1963487d86ba9f90dccf9947" + integrity sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw== + dependencies: + type-fest "^3.0.0" -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== +ansi-html-community@^0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" + integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== ansi-regex@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-styles@^3.2.0, ansi-styles@^3.2.1: +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + +ansi-styles@^3.2.1: version "3.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" -ansi-styles@^4.0.0, ansi-styles@^4.1.0: +ansi-styles@^4.0.0, ansi-styles@^4.1.0, ansi-styles@^4.3.0: version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== -anymatch@~3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz" - integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + +ansicolors@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" + integrity sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg== + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" app-builder-bin@4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-4.0.0.tgz#1df8e654bd1395e4a319d82545c98667d7eed2f0" integrity sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA== -app-builder-lib@23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-23.6.0.tgz#03cade02838c077db99d86212d61c5fc1d6da1a8" - integrity sha512-dQYDuqm/rmy8GSCE6Xl/3ShJg6Ab4bZJMT8KaTKGzT436gl1DN4REP3FCWfXoh75qGTJ+u+WsdnnpO9Jl8nyMA== +app-builder-lib@24.5.2: + version "24.5.2" + resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-24.5.2.tgz#f61ceb71c975b4d9278fcfe1e2f0a007fdb620db" + integrity sha512-fZbUrFl3FW7yw92KiDpXV3Nd84EW+D7/WU7MEjX2eHDWM45Qx4hYOZpL9PaT9ZzZbaNfNLmt2EOnoqHQXHLdKw== dependencies: "7zip-bin" "~5.1.1" "@develar/schema-utils" "~2.6.5" - "@electron/universal" "1.2.1" + "@electron/notarize" "^1.2.3" + "@electron/osx-sign" "^1.0.4" + "@electron/rebuild" "3.2.13" + "@electron/universal" "1.3.4" "@malept/flatpak-bundler" "^0.4.0" + "@types/fs-extra" "9.0.13" async-exit-hook "^2.0.1" bluebird-lst "^1.0.9" - builder-util "23.6.0" - builder-util-runtime "9.1.1" + builder-util "24.5.0" + builder-util-runtime "9.2.1" chromium-pickle-js "^0.2.0" debug "^4.3.4" - ejs "^3.1.7" - electron-osx-sign "^0.6.0" - electron-publish "23.6.0" + ejs "^3.1.8" + electron-publish "24.5.0" form-data "^4.0.0" fs-extra "^10.1.0" hosted-git-info "^4.1.0" is-ci "^3.0.0" - isbinaryfile "^4.0.10" + isbinaryfile "^5.0.0" js-yaml "^4.1.0" lazy-val "^1.0.5" - minimatch "^3.1.2" - read-config-file "6.2.0" + minimatch "^5.1.1" + read-config-file "6.3.2" sanitize-filename "^1.6.3" - semver "^7.3.7" - tar "^6.1.11" + semver "^7.3.8" + tar "^6.1.12" temp-file "^3.4.0" -aproba@^1.1.1: - version "1.2.0" - resolved "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== +appdmg@^0.6.4: + version "0.6.6" + resolved "https://registry.yarnpkg.com/appdmg/-/appdmg-0.6.6.tgz#d06bd82b530032fd7a8f0970a1c6ee6196e1efce" + integrity sha512-GRmFKlCG+PWbcYF4LUNonTYmy0GjguDy6Jh9WP8mpd0T6j80XIJyXBiWlD0U+MLNhqV9Nhx49Gl9GpVToulpLg== + dependencies: + async "^1.4.2" + ds-store "^0.1.5" + execa "^1.0.0" + fs-temp "^1.0.0" + fs-xattr "^0.3.0" + image-size "^0.7.4" + is-my-json-valid "^2.20.0" + minimist "^1.1.3" + parse-color "^1.0.0" + path-exists "^4.0.0" + repeat-string "^1.5.4" + +"aproba@^1.0.3 || ^2.0.0", aproba@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + +archy@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" + integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw== + +are-we-there-yet@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" + integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== +are-we-there-yet@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-4.0.0.tgz#3ff397dc14f08b52dd8b2a64d3cee154ab8760d2" + integrity sha512-nSXlV+u3vtVjRgihdTzbfWYzxPWGo424zPgQbHD0ZqIla3jqYAewDcvee0Ua2hjS5IfTAmjGlx1Jf0PKwjZDEw== dependencies: - sprintf-js "~1.0.2" + delegates "^1.0.0" + readable-stream "^4.1.0" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== argparse@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -aria-query@^4.2.2: - version "4.2.2" - resolved "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz" - integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== - dependencies: - "@babel/runtime" "^7.10.2" - "@babel/runtime-corejs3" "^7.10.2" - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= +argv-formatter@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/argv-formatter/-/argv-formatter-1.0.0.tgz#a0ca0cbc29a5b73e836eebe1cbf6c5e0e4eb82f9" + integrity sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw== -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== +aria-query@^5.1.3: + version "5.3.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" + integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== + dependencies: + dequal "^2.0.3" -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= +array-buffer-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" + integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== + dependencies: + call-bind "^1.0.2" + is-array-buffer "^3.0.1" array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== -array-flatten@^2.1.0: +array-flatten@^2.1.2: version "2.1.2" - resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== -array-includes@^3.1.1, array-includes@^3.1.2, array-includes@^3.1.3: - version "3.1.3" - resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz" - integrity sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - get-intrinsic "^1.1.1" - is-string "^1.0.5" +array-ify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" + integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz" - integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= +array-includes@^3.1.6: + version "3.1.6" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.6.tgz#9e9e720e194f198266ba9e18c29e6a9b0e4b225f" + integrity sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw== dependencies: - array-uniq "^1.0.1" + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" + is-string "^1.0.7" array-union@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" - integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= - -array.prototype.flatmap@^1.2.4: - version "1.2.4" - resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz" - integrity sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q== +array.prototype.flat@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" + integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - function-bind "^1.1.1" - -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz" - integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" -asar@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/asar/-/asar-3.1.0.tgz" - integrity sha512-vyxPxP5arcAqN4F/ebHd/HhwnAiZtwhglvdmc7BR2f0ywbVNTOpSeyhLDbGXtE/y58hv1oC75TaNIXutnsOZsQ== +array.prototype.flatmap@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" + integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== dependencies: - chromium-pickle-js "^0.2.0" - commander "^5.0.0" - glob "^7.1.6" - minimatch "^3.0.4" - optionalDependencies: - "@types/glob" "^7.1.1" + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" -asn1.js@^5.2.0: - version "5.4.1" - resolved "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz" - integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== +array.prototype.tosorted@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz#ccf44738aa2b5ac56578ffda97c03fd3e23dd532" + integrity sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ== dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - safer-buffer "^2.1.0" + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-shim-unscopables "^1.0.0" + get-intrinsic "^1.1.3" -assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== -assert@^1.1.1: - version "1.5.0" - resolved "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz" - integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== +asar@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/asar/-/asar-3.2.0.tgz#e6edb5edd6f627ebef04db62f771c61bea9c1221" + integrity sha512-COdw2ZQvKdFGFxXwX3oYh2/sOsJWJegrdJCGxnN4MZ7IULgRBp9P6665aqj9z1v9VwP4oP1hRBojRDQ//IGgAg== dependencies: - object-assign "^4.1.1" - util "0.10.3" + chromium-pickle-js "^0.2.0" + commander "^5.0.0" + glob "^7.1.6" + minimatch "^3.0.4" + optionalDependencies: + "@types/glob" "^7.1.1" -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== ast-types-flow@^0.0.7: version "0.0.7" - resolved "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz" - integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= - -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + integrity sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag== astral-regex@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== -async-each@^1.0.1: - version "1.0.3" - resolved "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz" - integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== - async-exit-hook@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/async-exit-hook/-/async-exit-hook-2.0.1.tgz#8bd8b024b0ec9b1c01cccb9af9db29bd717dfaf3" integrity sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw== -async-limiter@~1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz" - integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== - -async@^2.6.2: - version "2.6.4" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" - integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== - dependencies: - lodash "^4.17.14" +async@^1.4.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + integrity sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w== -async@^3.2.3: +async@^3.2.3, async@^3.2.4: version "3.2.4" - resolved "https://registry.npmjs.org/async/-/async-3.2.4.tgz" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== asynckit@^0.4.0: version "0.4.0" - resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== at-least-node@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - atomically@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/atomically/-/atomically-1.7.0.tgz#c07a0458432ea6dbc9a3506fffa424b48bccaafe" integrity sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w== -autoprefixer@^9.8.6: - version "9.8.6" - resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz" - integrity sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg== - dependencies: - browserslist "^4.12.0" - caniuse-lite "^1.0.30001109" - colorette "^1.2.1" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^7.0.32" - postcss-value-parser "^4.1.0" +author-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/author-regex/-/author-regex-1.0.0.tgz#d08885be6b9bbf9439fe087c76287245f0a81450" + integrity sha512-KbWgR8wOYRAPekEmMXrYYdc7BRyhn2Ftk7KWfMUnQ43hFdojWEFRxhhRUm3/OFEdPa1r0KAvTTg9YQK57xTe0g== -axe-core@^4.0.2: - version "4.1.3" - resolved "https://registry.npmjs.org/axe-core/-/axe-core-4.1.3.tgz" - integrity sha512-vwPpH4Aj4122EW38mxO/fxhGKtwWTMLDIJfZ1He0Edbtjcfna/R3YB67yVhezUMzqc3Jr3+Ii50KRntlENL4xQ== +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + +axe-core@^4.6.2: + version "4.7.2" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.7.2.tgz#040a7342b20765cb18bb50b628394c21bccc17a0" + integrity sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g== axios@^1.4.0: version "1.4.0" @@ -2601,91 +3499,55 @@ axios@^1.4.0: form-data "^4.0.0" proxy-from-env "^1.1.0" -axobject-query@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz" - integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== - -babel-eslint@^10.1.0: - version "10.1.0" - resolved "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz" - integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.7.0" - "@babel/traverse" "^7.7.0" - "@babel/types" "^7.7.0" - eslint-visitor-keys "^1.0.0" - resolve "^1.12.0" - -babel-loader@^8.1.0, babel-loader@^8.2.2: - version "8.2.2" - resolved "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz" - integrity sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g== - dependencies: - find-cache-dir "^3.3.1" - loader-utils "^1.4.0" - make-dir "^3.1.0" - schema-utils "^2.6.5" - -babel-plugin-component@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/babel-plugin-component/-/babel-plugin-component-1.1.1.tgz" - integrity sha512-WUw887kJf2GH80Ng/ZMctKZ511iamHNqPhd9uKo14yzisvV7Wt1EckIrb8oq/uCz3B3PpAW7Xfl7AkTLDYT6ag== +axobject-query@^3.1.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-3.2.1.tgz#39c378a6e3b06ca679f29138151e45b2b32da62a" + integrity sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg== dependencies: - "@babel/helper-module-imports" "7.0.0-beta.35" + dequal "^2.0.3" -babel-plugin-dynamic-import-node@^2.3.3: - version "2.3.3" - resolved "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz" - integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== +babel-loader@^9.1.2: + version "9.1.2" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-9.1.2.tgz#a16a080de52d08854ee14570469905a5fc00d39c" + integrity sha512-mN14niXW43tddohGl8HPu5yfQq70iUThvFL/4QzESA7GcZoC0eVOhvWdQ8+3UlSjaDE9MVtsW9mxDY07W7VpVA== dependencies: - object.assign "^4.1.0" + find-cache-dir "^3.3.2" + schema-utils "^4.0.0" -babel-plugin-polyfill-corejs2@^0.3.0: - version "0.3.1" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz" - integrity sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w== +babel-plugin-polyfill-corejs2@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz#75044d90ba5043a5fb559ac98496f62f3eb668fd" + integrity sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw== dependencies: - "@babel/compat-data" "^7.13.11" - "@babel/helper-define-polyfill-provider" "^0.3.1" + "@babel/compat-data" "^7.17.7" + "@babel/helper-define-polyfill-provider" "^0.4.0" semver "^6.1.1" -babel-plugin-polyfill-corejs3@^0.5.0: - version "0.5.2" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz" - integrity sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ== +babel-plugin-polyfill-corejs3@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz#39248263c38191f0d226f928d666e6db1b4b3a8a" + integrity sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q== dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.1" - core-js-compat "^3.21.0" + "@babel/helper-define-polyfill-provider" "^0.4.0" + core-js-compat "^3.30.1" -babel-plugin-polyfill-regenerator@^0.3.0: - version "0.3.1" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz" - integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A== +babel-plugin-polyfill-regenerator@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz#e7344d88d9ef18a3c47ded99362ae4a757609380" + integrity sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g== dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.1" + "@babel/helper-define-polyfill-provider" "^0.4.0" "babel-plugin-styled-components@>= 1.12.0": - version "2.0.7" - resolved "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.7.tgz" - integrity sha512-i7YhvPgVqRKfoQ66toiZ06jPNA3p6ierpfUuEWxNF+fV27Uv5gxBkf8KZLHUCc1nFA9j6+80pYoIpqCeyW3/bA== + version "2.1.4" + resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-2.1.4.tgz#9a1f37c7f32ef927b4b008b529feb4a2c82b1092" + integrity sha512-Xgp9g+A/cG47sUyRwwYxGM4bR/jDRg5N6it/8+HxCnbT5XNKSKDT9xm4oag/osgqjC2It/vH0yXsomOG6k558g== dependencies: - "@babel/helper-annotate-as-pure" "^7.16.0" - "@babel/helper-module-imports" "^7.16.0" - babel-plugin-syntax-jsx "^6.18.0" - lodash "^4.17.11" - picomatch "^2.3.0" - -babel-plugin-syntax-jsx@^6.18.0: - version "6.18.0" - resolved "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz" - integrity sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw== - -bail@^1.0.0: - version "1.0.3" - resolved "https://registry.npmjs.org/bail/-/bail-1.0.3.tgz" - integrity sha512-1X8CnjFVQ+a+KW36uBNMTU5s8+v5FzeqrP7hTG5aTb4aPreSbZJlhwPon9VKMuEVgV++JM+SQrALY3kr7eswdg== + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-module-imports" "^7.22.5" + "@babel/plugin-syntax-jsx" "^7.22.5" + lodash "^4.17.21" + picomatch "^2.3.1" bail@^2.0.0: version "2.0.2" @@ -2693,63 +3555,67 @@ bail@^2.0.0: integrity sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw== balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base64-js@^1.0.2, base64-js@^1.3.1, base64-js@^1.5.1: +"base32-encode@^0.1.0 || ^1.0.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/base32-encode/-/base32-encode-1.2.0.tgz#e150573a5e431af0a998e32bdfde7045725ca453" + integrity sha512-cHFU8XeRyx0GgmoWi5qHMCVRiqU6J3MHWxVgun7jggCBUpVzm1Ir7M9dYr2whjSNc3tFeXfQ/oZjQu/4u55h9A== + dependencies: + to-data-view "^1.1.0" + +base64-js@^1.3.1, base64-js@^1.5.1: version "1.5.1" - resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -base@^0.11.1: - version "0.11.2" - resolved "https://registry.npmjs.org/base/-/base-0.11.2.tgz" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - batch@0.6.1: version "0.6.1" - resolved "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz" - integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== before-after-hook@^2.2.0: version "2.2.3" resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== +big-integer@^1.6.44: + version "1.6.51" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686" + integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg== + big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== -binary-extensions@^1.0.0: - version "1.13.1" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz" - integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== +bin-links@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-4.0.1.tgz#afeb0549e642f61ff889b58ea2f8dca78fb9d8d3" + integrity sha512-bmFEM39CyX336ZGGRsGPlc6jZHriIoHacOQcTt72MktIjpPhZoP4te2jOyUXF3BLILmJ8aNLncoPVeIIFlrDeA== + dependencies: + cmd-shim "^6.0.0" + npm-normalize-package-bin "^3.0.0" + read-cmd-shim "^4.0.0" + write-file-atomic "^5.0.0" -binary-extensions@^2.0.0: +binary-extensions@^2.0.0, binary-extensions@^2.2.0: version "2.2.0" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== bindings@^1.5.0: version "1.5.0" - resolved "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== dependencies: file-uri-to-path "1.0.0" -bl@^4.0.3: +bl@^4.0.3, bl@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== dependencies: buffer "^5.5.0" @@ -2758,25 +3624,20 @@ bl@^4.0.3: bluebird-lst@^1.0.9: version "1.0.9" - resolved "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.9.tgz" + resolved "https://registry.yarnpkg.com/bluebird-lst/-/bluebird-lst-1.0.9.tgz#a64a0e4365658b9ab5fe875eb9dfb694189bb41c" integrity sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw== dependencies: bluebird "^3.5.5" -bluebird@^3.5.0, bluebird@^3.5.5, bluebird@^3.7.2: +bluebird@^3.1.1, bluebird@^3.5.5: version "3.7.2" - resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - -bn.js@^5.0.0, bn.js@^5.1.1: - version "5.2.0" - resolved "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz" - integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== +blueimp-md5@^2.10.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/blueimp-md5/-/blueimp-md5-2.19.0.tgz#b53feea5498dcb53dc6ec4b823adb84b729c4af0" + integrity sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w== body-parser@1.20.1: version "1.20.1" @@ -2796,31 +3657,29 @@ body-parser@1.20.1: type-is "~1.6.18" unpipe "1.0.0" -bonjour@^3.5.0: - version "3.5.0" - resolved "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz" - integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= +bonjour-service@^1.0.11: + version "1.1.1" + resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.1.1.tgz#960948fa0e0153f5d26743ab15baf8e33752c135" + integrity sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg== dependencies: - array-flatten "^2.1.0" - deep-equal "^1.0.1" + array-flatten "^2.1.2" dns-equal "^1.0.0" - dns-txt "^2.0.2" - multicast-dns "^6.0.1" - multicast-dns-service-types "^1.1.0" + fast-deep-equal "^3.1.3" + multicast-dns "^7.2.5" -boolbase@^1.0.0, boolbase@~1.0.0: +boolbase@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" - integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== boolean@^3.0.1: - version "3.0.3" - resolved "https://registry.npmjs.org/boolean/-/boolean-3.0.3.tgz" - integrity sha512-EqrTKXQX6Z3A2nRmMEIlAIfjQOgFnVO2nqZGpbcsPnYGWBwpFqzlrozU1dy+S2iqfYDLh26ef4KrgTxu9xQrxA== + version "3.2.0" + resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.2.0.tgz#9e5294af4e98314494cbb17979fa54ca159f116b" + integrity sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw== bootstrap-css-only@^4.4.1: version "4.4.1" - resolved "https://registry.npmjs.org/bootstrap-css-only/-/bootstrap-css-only-4.4.1.tgz" + resolved "https://registry.yarnpkg.com/bootstrap-css-only/-/bootstrap-css-only-4.4.1.tgz#08012477b1baab52fa1ca304eaba2e40f6ef0d2e" integrity sha512-iBgNli7RnedBFwn6sMTQoAZ8WgIwmX4kF1rckfj+pgro5q/Q0DbLtcpfH60XoFnCXzbEJU/khC/B2EQap89mCg== bottleneck@^2.15.3: @@ -2828,9 +3687,23 @@ bottleneck@^2.15.3: resolved "https://registry.yarnpkg.com/bottleneck/-/bottleneck-2.19.5.tgz#5df0b90f59fd47656ebe63c78a98419205cadd91" integrity sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw== +bplist-creator@~0.0.3: + version "0.0.8" + resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.0.8.tgz#56b2a6e79e9aec3fc33bf831d09347d73794e79c" + integrity sha512-Za9JKzD6fjLC16oX2wsXfc+qBEhJBJB1YPInoAQpMLhDuj5aVOv1baGeIQSq1Fr3OCqzvsoQcSBSwGId/Ja2PA== + dependencies: + stream-buffers "~2.2.0" + +bplist-parser@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.2.0.tgz#43a9d183e5bf9d545200ceac3e712f79ebbe8d0e" + integrity sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw== + dependencies: + big-integer "^1.6.44" + brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" @@ -2838,307 +3711,158 @@ brace-expansion@^1.1.7: brace-expansion@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== dependencies: balanced-match "^1.0.0" -braces@^2.3.1, braces@^2.3.2: - version "2.3.2" - resolved "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -braces@^3.0.1, braces@~3.0.2: +braces@^3.0.2, braces@~3.0.2: version "3.0.2" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" -brorand@^1.0.1, brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz" - integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= - -browserify-aes@^1.0.0, browserify-aes@^1.0.4: - version "1.2.0" - resolved "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz" - integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -browserify-cipher@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz" - integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - -browserify-des@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz" - integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: - version "4.1.0" - resolved "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz" - integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== - dependencies: - bn.js "^5.0.0" - randombytes "^2.0.1" - -browserify-sign@^4.0.0: - version "4.2.1" - resolved "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz" - integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== - dependencies: - bn.js "^5.1.1" - browserify-rsa "^4.0.1" - create-hash "^1.2.0" - create-hmac "^1.1.7" - elliptic "^6.5.3" - inherits "^2.0.4" - parse-asn1 "^5.1.5" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -browserify-zlib@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz" - integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== - dependencies: - pako "~1.0.5" - -browserslist@^4.12.0, browserslist@^4.20.2, browserslist@^4.20.4: - version "4.20.4" - resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.20.4.tgz" - integrity sha512-ok1d+1WpnU24XYN7oC3QWgTyMhY/avPJ/r9T00xxvUOIparA/gc+UPUMaod3i+G6s+nI2nUb9xZ5k794uIwShw== - dependencies: - caniuse-lite "^1.0.30001349" - electron-to-chromium "^1.4.147" - escalade "^3.1.1" - node-releases "^2.0.5" - picocolors "^1.0.0" - -btoa-lite@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" - integrity sha512-gvW7InbIyF8AicrqWoptdW08pUxuhq8BEgowNajy9RhiE86fmGAGl+bLKo6oB8QP0CkqHLowfN0oJdKC/J6LbA== - -buffer-alloc-unsafe@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz" - integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== - -buffer-alloc@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz" - integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== +browserslist@^4.14.5, browserslist@^4.21.3, browserslist@^4.21.5: + version "4.21.9" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.9.tgz#e11bdd3c313d7e2a9e87e8b4b0c7872b13897635" + integrity sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg== dependencies: - buffer-alloc-unsafe "^1.1.0" - buffer-fill "^1.0.0" + caniuse-lite "^1.0.30001503" + electron-to-chromium "^1.4.431" + node-releases "^2.0.12" + update-browserslist-db "^1.0.11" buffer-crc32@~0.2.3: version "0.2.13" - resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" - integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== -buffer-equal-constant-time@1.0.1: +buffer-equal@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" - integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== - -buffer-equal@1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz" - integrity sha512-tcBWO2Dl4e7Asr9hTGcpVrCe+F7DubpmqWCTbj4FHLmjqO2hIaC383acQubWtRJhdceqs5uBHs6Es+Sk//RKiQ== - -buffer-fill@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz" - integrity sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ== + resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.1.tgz#2f7651be5b1b3f057fcd6e7ee16cf34767077d90" + integrity sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg== buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== - -buffer-indexof@^1.0.0: - version "1.1.1" - resolved "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz" - integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz" - integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= - -buffer@^4.3.0: - version "4.9.2" - resolved "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz" - integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -buffer@^5.1.0, buffer@^5.5.0: +buffer@^5.5.0: version "5.7.1" - resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== dependencies: base64-js "^1.3.1" ieee754 "^1.1.13" -builder-util-runtime@8.9.2: - version "8.9.2" - resolved "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.9.2.tgz" - integrity sha512-rhuKm5vh7E0aAmT6i8aoSfEjxzdYEFX7zDApK+eNgOhjofnWb74d9SRJv0H/8nsgOkos0TZ4zxW0P8J4N7xQ2A== +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== dependencies: - debug "^4.3.2" - sax "^1.2.4" + base64-js "^1.3.1" + ieee754 "^1.2.1" -builder-util-runtime@9.1.1: - version "9.1.1" - resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-9.1.1.tgz#2da7b34e78a64ad14ccd070d6eed4662d893bd60" - integrity sha512-azRhYLEoDvRDR8Dhis4JatELC/jUvYjm4cVSj7n9dauGTOM2eeNn9KS0z6YA6oDsjI1xphjNbY6PZZeHPzzqaw== +builder-util-runtime@9.2.1: + version "9.2.1" + resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-9.2.1.tgz#3184dcdf7ed6c47afb8df733813224ced4f624fd" + integrity sha512-2rLv/uQD2x+dJ0J3xtsmI12AlRyk7p45TEbE/6o/fbb633e/S3pPgm+ct+JHsoY7r39dKHnGEFk/AASRFdnXmA== dependencies: debug "^4.3.4" sax "^1.2.4" -builder-util@23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-23.6.0.tgz#1880ec6da7da3fd6fa19b8bd71df7f39e8d17dd9" - integrity sha512-QiQHweYsh8o+U/KNCZFSvISRnvRctb8m/2rB2I1JdByzvNKxPeFLlHFRPQRXab6aYeXc18j9LpsDLJ3sGQmWTQ== +builder-util@24.5.0: + version "24.5.0" + resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-24.5.0.tgz#8683c9a7a1c5c9f9a4c4d2789ecca0e47dddd3f9" + integrity sha512-STnBmZN/M5vGcv01u/K8l+H+kplTaq4PAIn3yeuufUKSpcdro0DhJWxPI81k5XcNfC//bjM3+n9nr8F9uV4uAQ== dependencies: "7zip-bin" "~5.1.1" "@types/debug" "^4.1.6" - "@types/fs-extra" "^9.0.11" app-builder-bin "4.0.0" bluebird-lst "^1.0.9" - builder-util-runtime "9.1.1" - chalk "^4.1.1" + builder-util-runtime "9.2.1" + chalk "^4.1.2" cross-spawn "^7.0.3" debug "^4.3.4" - fs-extra "^10.0.0" + fs-extra "^10.1.0" http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.1" is-ci "^3.0.0" js-yaml "^4.1.0" source-map-support "^0.5.19" stat-mode "^1.0.0" temp-file "^3.4.0" -builtin-status-codes@^3.0.0: +builtins@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" + integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== + dependencies: + semver "^7.0.0" + +bundle-name@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz" - integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-3.0.0.tgz#ba59bcc9ac785fb67ccdbf104a2bf60c099f0e1a" + integrity sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw== + dependencies: + run-applescript "^5.0.0" bytes@3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz" - integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== bytes@3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -cacache@^12.0.2: - version "12.0.4" - resolved "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz" - integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== +cac@^6.7.14: + version "6.7.14" + resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" + integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== + +cacache@^17.0.0, cacache@^17.0.4, cacache@^17.1.3: + version "17.1.3" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-17.1.3.tgz#c6ac23bec56516a7c0c52020fd48b4909d7c7044" + integrity sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg== dependencies: - bluebird "^3.5.5" - chownr "^1.1.1" - figgy-pudding "^3.5.1" - glob "^7.1.4" - graceful-fs "^4.1.15" - infer-owner "^1.0.3" - lru-cache "^5.1.1" - mississippi "^3.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.3" - ssri "^6.0.1" - unique-filename "^1.1.1" - y18n "^4.0.0" - -cacache@^13.0.1: - version "13.0.1" - resolved "https://registry.npmjs.org/cacache/-/cacache-13.0.1.tgz" - integrity sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w== - dependencies: - chownr "^1.1.2" - figgy-pudding "^3.5.1" - fs-minipass "^2.0.0" - glob "^7.1.4" - graceful-fs "^4.2.2" - infer-owner "^1.0.4" - lru-cache "^5.1.1" - minipass "^3.0.0" + "@npmcli/fs" "^3.1.0" + fs-minipass "^3.0.0" + glob "^10.2.2" + lru-cache "^7.7.1" + minipass "^5.0.0" minipass-collect "^1.0.2" minipass-flush "^1.0.5" - minipass-pipeline "^1.2.2" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - p-map "^3.0.0" - promise-inflight "^1.0.1" - rimraf "^2.7.1" - ssri "^7.0.0" - unique-filename "^1.1.1" + minipass-pipeline "^1.2.4" + p-map "^4.0.0" + ssri "^10.0.0" + tar "^6.1.11" + unique-filename "^3.0.0" -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" +cacheable-lookup@^5.0.3: + version "5.0.4" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" + integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== -cacheable-request@^6.0.0: - version "6.1.0" - resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz" - integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== +cacheable-request@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817" + integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg== dependencies: clone-response "^1.0.2" get-stream "^5.1.0" http-cache-semantics "^4.0.0" - keyv "^3.0.0" + keyv "^4.0.0" lowercase-keys "^2.0.0" - normalize-url "^4.1.0" - responselike "^1.0.2" + normalize-url "^6.0.1" + responselike "^2.0.0" + +cachedir@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8" + integrity sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw== call-bind@^1.0.0, call-bind@^1.0.2: version "1.0.2" @@ -3150,12 +3874,12 @@ call-bind@^1.0.0, call-bind@^1.0.2: callsites@^3.0.0: version "3.1.0" - resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camel-case@^4.1.1: +camel-case@^4.1.2: version "4.1.2" - resolved "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== dependencies: pascal-case "^3.1.2" @@ -3163,120 +3887,104 @@ camel-case@^4.1.1: camelcase-keys@^6.2.2: version "6.2.2" - resolved "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== dependencies: camelcase "^5.3.1" map-obj "^4.0.0" quick-lru "^4.0.1" -camelcase@^5.0.0, camelcase@^5.3.1: +camelcase@^5.3.1: version "5.3.1" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -camelcase@^6.2.0: - version "6.3.0" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - camelize@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz" - integrity sha512-W2lPwkBkMZwFlPCXhIlYgxu+7gC/NUlCtdK652DAJ1JdgV0sTrvuPFshNPrFa1TY2JOkLhgdeEBplB4ezEa+xg== + version "1.0.1" + resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.1.tgz#89b7e16884056331a35d6b5ad064332c91daa6c3" + integrity sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ== -caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001349: - version "1.0.30001354" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001354.tgz" - integrity sha512-mImKeCkyGDAHNywYFA4bqnLAzTUvVkqPvhY4DV47X+Gl2c5Z8c3KNETnXp14GQt11LvxE8AwjzGxJ+rsikiOzg== +caniuse-lite@^1.0.30001503: + version "1.0.30001509" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001509.tgz#2b7ad5265392d6d2de25cd8776d1ab3899570d14" + integrity sha512-2uDDk+TRiTX5hMcUYT/7CSyzMZxjfGu0vAUjS2g0LSD8UoXOv0LtpH4LxGMemsiPq6LCVIUjNwVM0erkOkGCDA== -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: +cardinal@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-2.1.1.tgz#7cc1055d822d212954d07b085dea251cc7bc5505" + integrity sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw== + dependencies: + ansicolors "~0.3.2" + redeyed "~2.1.0" + +chai@^4.3.7: + version "4.3.7" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.7.tgz#ec63f6df01829088e8bf55fca839bcd464a8ec51" + integrity sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.2" + deep-eql "^4.1.2" + get-func-name "^2.0.0" + loupe "^2.3.1" + pathval "^1.1.1" + type-detect "^4.0.5" + +chalk@^2.0.0, chalk@^2.3.2, chalk@^2.4.1: version "2.4.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0, chalk@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz" - integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^4.0.2, chalk@^4.1.1: +chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" -character-entities-legacy@^1.0.0: - version "1.1.2" - resolved "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.2.tgz" - integrity sha512-9NB2VbXtXYWdXzqrvAHykE/f0QJxzaKIpZ5QzNZrrgQ7Iyxr2vnfS8fCBNVW9nUEZE0lo57nxKRqnzY/dKrwlA== - -character-entities@^1.0.0: - version "1.2.2" - resolved "https://registry.npmjs.org/character-entities/-/character-entities-1.2.2.tgz" - integrity sha512-sMoHX6/nBiy3KKfC78dnEalnpn0Az0oSNvqUWYTtYrhRI5iUIYsROU48G+E+kMFQzqXaJ8kHJZ85n7y6/PHgwQ== +chalk@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" + integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== character-entities@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22" integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ== -character-reference-invalid@^1.0.0: - version "1.1.2" - resolved "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.2.tgz" - integrity sha512-7I/xceXfKyUJmSAn/jw8ve/9DyOP7XxufNYLI9Px7CmsKgEUaZLUTax6nZxGQtaoiZCjpu6cHPj20xC/vqRReQ== - chardet@^0.7.0: version "0.7.0" - resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== -chokidar@^2.1.8: - version "2.1.8" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz" - integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== - dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^3.1.0" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" - optionalDependencies: - fsevents "^1.2.7" +check-error@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" + integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== -chokidar@^3.4.0, chokidar@^3.4.1: - version "3.5.1" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz" - integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== +chokidar@^3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== dependencies: - anymatch "~3.1.1" + anymatch "~3.1.2" braces "~3.0.2" - glob-parent "~5.1.0" + glob-parent "~5.1.2" is-binary-path "~2.1.0" is-glob "~4.0.1" normalize-path "~3.0.0" - readdirp "~3.5.0" + readdirp "~3.6.0" optionalDependencies: - fsevents "~2.3.1" + fsevents "~2.3.2" -chownr@^1.1.1, chownr@^1.1.2: +chownr@^1.1.1: version "1.1.4" - resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== chownr@^2.0.0: @@ -3285,72 +3993,83 @@ chownr@^2.0.0: integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== chrome-trace-event@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz" - integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== - dependencies: - tslib "^1.9.0" + version "1.0.3" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" + integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== chromium-pickle-js@^0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz" + resolved "https://registry.yarnpkg.com/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz#04a106672c18b085ab774d983dfa3ea138f22205" integrity sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw== -ci-info@^3.2.0: - version "3.3.2" - resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz" - integrity sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg== - -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" +ci-info@^3.2.0, ci-info@^3.6.1, ci-info@^3.7.1, ci-info@^3.8.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" + integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== +cidr-regex@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/cidr-regex/-/cidr-regex-3.1.1.tgz#ba1972c57c66f61875f18fd7dd487469770b571d" + integrity sha512-RBqYd32aDwbCMFJRL6wHOlDNYJsPNTt8vC82ErHF5vKt8QQzxm1FrkW8s/R5pVrXMf17sba09Uoy91PKiddAsw== dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" + ip-regex "^4.1.0" -classnames@^2.2.6: +classnames@*, classnames@^2.2.6: version "2.3.2" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.2.tgz#351d813bf0137fcc6a76a16b88208d2560a0d924" integrity sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw== -classnames@^2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz" - integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA== - -clean-css@^4.2.3: - version "4.2.3" - resolved "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz" - integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== +clean-css@^5.2.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.2.tgz#70ecc7d4d4114921f5d298349ff86a31a9975224" + integrity sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww== dependencies: source-map "~0.6.0" clean-stack@^2.0.0: version "2.2.0" - resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== +clean-stack@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-4.2.0.tgz#c464e4cde4ac789f4e0735c5d75beb49d7b30b31" + integrity sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg== + dependencies: + escape-string-regexp "5.0.0" + +cli-columns@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cli-columns/-/cli-columns-4.0.0.tgz#9fe4d65975238d55218c41bd2ed296a7fa555646" + integrity sha512-XW2Vg+w+L9on9wtwKpyzluIPCWXjaBahI7mTcYjx+BVIYD9c3yqcv/yKC7CmdCZat4rq2yiE1UMSJC5ivKfMtQ== + dependencies: + string-width "^4.2.3" + strip-ansi "^6.0.1" + cli-cursor@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== dependencies: restore-cursor "^3.1.0" +cli-spinners@^2.5.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.0.tgz#5881d0ad96381e117bbe07ad91f2008fe6ffd8db" + integrity sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g== + +cli-table3@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" + integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== + dependencies: + string-width "^4.2.0" + optionalDependencies: + "@colors/colors" "1.5.0" + cli-truncate@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== dependencies: slice-ansi "^3.0.0" @@ -3358,26 +4077,17 @@ cli-truncate@^2.1.0: cli-width@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== - dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" - -cliui@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz" - integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== dependencies: string-width "^4.2.0" strip-ansi "^6.0.0" - wrap-ansi "^6.2.0" + wrap-ansi "^7.0.0" cliui@^8.0.1: version "8.0.1" @@ -3388,75 +4098,87 @@ cliui@^8.0.1: strip-ansi "^6.0.1" wrap-ansi "^7.0.0" -clone-regexp@^2.1.0: - version "2.2.0" - resolved "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz" - integrity sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q== +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== dependencies: - is-regexp "^2.0.0" + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" clone-response@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz" - integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= + version "1.0.3" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" + integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== dependencies: mimic-response "^1.0.0" -clsx@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz" - integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA== +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== -coalescy@1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/coalescy/-/coalescy-1.0.0.tgz" - integrity sha1-SwZYRrg2NhrabEtKSr9LwcrDG/E= +clsx@^1.1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" + integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" +cmd-shim@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-6.0.1.tgz#a65878080548e1dca760b3aea1e21ed05194da9d" + integrity sha512-S9iI9y0nKR4hwEQsVWpyxld/6kRfGepGfzff83FcaiEBpmvlbA2nnGe7Cylgrx2f/p1P5S5wpRm9oL8z1PbS3Q== color-convert@^1.9.0: version "1.9.3" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" +color-convert@~0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-0.5.3.tgz#bdb6c69ce660fadffe0b0007cc447e1b9f7282bd" + integrity sha512-RwBeO/B/vZR3dfKL1ye/vx8MHZ40ugzpyfeVG5GsiuGnrlMWe2o8wxBbLCpw9CsxV+wHuzYlCiWnybrIA0ling== + color-name@1.1.3: version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== color-name@~1.1.4: version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -colorette@^1.2.1: - version "1.2.2" - resolved "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz" - integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== +color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== -colors@1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz" - integrity sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs= +colorette@^2.0.10, colorette@^2.0.14, colorette@^2.0.19: + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== + +columnify@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.6.0.tgz#6989531713c9008bb29735e61e37acf5bd553cf3" + integrity sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q== + dependencies: + strip-ansi "^6.0.1" + wcwidth "^1.0.0" combined-stream@^1.0.8: version "1.0.8" - resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" @@ -3466,63 +4188,84 @@ comma-separated-tokens@^2.0.0: resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee" integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== -commander@2.9.0: - version "2.9.0" - resolved "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz" - integrity sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A== - dependencies: - graceful-readlink ">= 1.0.0" +commander@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== commander@^2.20.0: version "2.20.3" - resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^4.0.1, commander@^4.1.1: +commander@^4.1.1: version "4.1.1" - resolved "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== commander@^5.0.0: version "5.1.0" - resolved "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz" + resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== -commander@^6.2.0: - version "6.2.1" - resolved "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz" - integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== +commander@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== -commander@^7.2.0: - version "7.2.0" - resolved "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz" - integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== +commitizen@^4.0.3: + version "4.3.0" + resolved "https://registry.yarnpkg.com/commitizen/-/commitizen-4.3.0.tgz#0d056c542a2d2b1f9b9aba981aa32575b2849924" + integrity sha512-H0iNtClNEhT0fotHvGV3E9tDejDeS04sN1veIebsKYGMuGscFaswRoYJKmT3eW85eIJAs0F28bG2+a/9wCOfPw== + dependencies: + cachedir "2.3.0" + cz-conventional-changelog "3.3.0" + dedent "0.7.0" + detect-indent "6.1.0" + find-node-modules "^2.1.2" + find-root "1.1.0" + fs-extra "9.1.0" + glob "7.2.3" + inquirer "8.2.5" + is-utf8 "^0.2.1" + lodash "4.17.21" + minimist "1.2.7" + strip-bom "4.0.0" + strip-json-comments "3.1.1" + +common-ancestor-path@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz#4f7d2d1394d91b7abdf51871c62f71eadb0182a7" + integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w== commondir@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== + +compare-func@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" + integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== + dependencies: + array-ify "^1.0.0" + dot-prop "^5.1.0" compare-version@^0.1.2: version "0.1.2" - resolved "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz" + resolved "https://registry.yarnpkg.com/compare-version/-/compare-version-0.1.2.tgz#0162ec2d9351f5ddd59a9202cba935366a725080" integrity sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A== -component-emitter@^1.2.1: - version "1.3.0" - resolved "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== - compressible@~2.0.16: version "2.0.18" - resolved "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== dependencies: mime-db ">= 1.43.0 < 2" compression@^1.7.4: version "1.7.4" - resolved "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== dependencies: accepts "~1.3.5" @@ -3535,18 +4278,22 @@ compression@^1.7.4: concat-map@0.0.1: version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -concat-stream@^1.5.0, concat-stream@^1.6.2: - version "1.6.2" - resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +concordance@^5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/concordance/-/concordance-5.0.4.tgz#9896073261adced72f88d60e4d56f8efc4bbbbd2" + integrity sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw== + dependencies: + date-time "^3.1.0" + esutils "^2.0.3" + fast-diff "^1.2.0" + js-string-escape "^1.0.1" + lodash "^4.17.15" + md5-hex "^3.0.1" + semver "^7.3.2" + well-known-symbols "^2.0.0" conf@^10.2.0: version "10.2.0" @@ -3565,27 +4312,35 @@ conf@^10.2.0: semver "^7.3.5" config-chain@^1.1.11: - version "1.1.12" - resolved "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz" - integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== + version "1.1.13" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" + integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== dependencies: ini "^1.3.4" proto-list "~1.2.1" -connect-history-api-fallback@^1.6.0: - version "1.6.0" - resolved "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz" - integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== +config-file-ts@^0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/config-file-ts/-/config-file-ts-0.2.4.tgz#6c0741fbe118a7cf786c65f139030f0448a2cc99" + integrity sha512-cKSW0BfrSaAUnxpgvpXPLaaW/umg4bqg4k3GO1JqlRfpx+d5W0GDXznCMkWotJQek5Mmz1MJVChQnz3IVaeMZQ== + dependencies: + glob "^7.1.6" + typescript "^4.0.2" + +confusing-browser-globals@^1.0.10: + version "1.0.11" + resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" + integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== -console-browserify@^1.1.0: - version "1.2.0" - resolved "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz" - integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== +connect-history-api-fallback@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" + integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== -constants-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz" - integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= +console-control-strings@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== content-disposition@0.5.4: version "0.5.4" @@ -3595,16 +4350,57 @@ content-disposition@0.5.4: safe-buffer "5.2.1" content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== -convert-source-map@^1.1.0, convert-source-map@^1.7.0: - version "1.7.0" - resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz" - integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== +conventional-changelog-angular@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-6.0.0.tgz#a9a9494c28b7165889144fd5b91573c4aa9ca541" + integrity sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg== dependencies: - safe-buffer "~5.1.1" + compare-func "^2.0.0" + +conventional-changelog-writer@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-6.0.0.tgz#8c8dea0441c6e648c9b25bb784e750d02f8002d5" + integrity sha512-8PyWTnn7zBIt9l4hj4UusFs1TyG+9Ulu1zlOAc72L7Sdv9Hsc8E86ot7htY3HXCVhXHB/NO0pVGvZpwsyJvFfw== + dependencies: + conventional-commits-filter "^3.0.0" + dateformat "^3.0.3" + handlebars "^4.7.7" + json-stringify-safe "^5.0.1" + meow "^8.1.2" + semver "^6.3.0" + split "^1.0.1" + +conventional-commit-types@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/conventional-commit-types/-/conventional-commit-types-3.0.0.tgz#7c9214e58eae93e85dd66dbfbafe7e4fffa2365b" + integrity sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg== + +conventional-commits-filter@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-3.0.0.tgz#bf1113266151dd64c49cd269e3eb7d71d7015ee2" + integrity sha512-1ymej8b5LouPx9Ox0Dw/qAO2dVdfpRFq28e5Y0jJEU8ZrLdy0vOSkkIInwmxErFGhg6SALro60ZrwYFVTUDo4Q== + dependencies: + lodash.ismatch "^4.4.0" + modify-values "^1.0.1" + +conventional-commits-parser@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz#02ae1178a381304839bce7cea9da5f1b549ae505" + integrity sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg== + dependencies: + JSONStream "^1.3.5" + is-text-path "^1.0.1" + meow "^8.1.2" + split2 "^3.2.2" + +convert-source-map@^1.7.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== cookie-signature@1.0.6: version "1.0.6" @@ -3616,50 +4412,44 @@ cookie@0.5.0: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== -copy-concurrently@^1.0.0: - version "1.0.5" - resolved "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz" - integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== +copy-webpack-plugin@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz#96d4dbdb5f73d02dd72d0528d1958721ab72e04a" + integrity sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ== dependencies: - aproba "^1.1.1" - fs-write-stream-atomic "^1.0.8" - iferr "^0.1.5" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.0" - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + fast-glob "^3.2.11" + glob-parent "^6.0.1" + globby "^13.1.1" + normalize-path "^3.0.0" + schema-utils "^4.0.0" + serialize-javascript "^6.0.0" -core-js-compat@^3.21.0, core-js-compat@^3.22.1: - version "3.23.1" - resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.23.1.tgz" - integrity sha512-KeYrEc8t6FJsKYB2qnDwRHWaC0cJNaqlHfCpMe5q3j/W1nje3moib/txNklddLPCtGb+etcBIyJ8zuMa/LN5/A== +core-js-compat@^3.30.1, core-js-compat@^3.30.2: + version "3.31.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.31.0.tgz#4030847c0766cc0e803dcdfb30055d7ef2064bf1" + integrity sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw== dependencies: - browserslist "^4.20.4" - semver "7.0.0" + browserslist "^4.21.5" -core-js-pure@^3.0.0: - version "3.9.1" - resolved "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.9.1.tgz" - integrity sha512-laz3Zx0avrw9a4QEIdmIblnVuJz8W51leY9iLThatCsFawWxC3sE4guASC78JbCin+DkwMpCdp1AVAuzL/GN7A== - -core-util-is@1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= +core-js@^3.30.2: + version "3.31.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.31.0.tgz#4471dd33e366c79d8c0977ed2d940821719db344" + integrity sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ== core-util-is@~1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== -cosmiconfig@^7.0.0, cosmiconfig@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz" - integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== +cosmiconfig-typescript-loader@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.3.0.tgz#c4259ce474c9df0f32274ed162c0447c951ef073" + integrity sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q== + +cosmiconfig@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" + integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== dependencies: "@types/parse-json" "^4.0.0" import-fresh "^3.2.1" @@ -3667,54 +4457,40 @@ cosmiconfig@^7.0.0, cosmiconfig@^7.0.1: path-type "^4.0.0" yaml "^1.10.0" -crc@^3.8.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6" - integrity sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ== - dependencies: - buffer "^5.1.0" - -create-ecdh@^4.0.0: - version "4.0.4" - resolved "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz" - integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== +cosmiconfig@^8.0.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.2.0.tgz#f7d17c56a590856cd1e7cee98734dca272b0d8fd" + integrity sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ== dependencies: - bn.js "^4.1.0" - elliptic "^6.5.3" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" -create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz" - integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== -create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: - version "1.1.7" - resolved "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz" - integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== +cross-env@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" + integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw== dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" + cross-spawn "^7.0.1" -crocket@^0.9.11: - version "0.9.11" - resolved "https://registry.npmjs.org/crocket/-/crocket-0.9.11.tgz" - integrity sha1-KI/KEe8NPdI5tixIgmXzDI7fsMU= +cross-spawn-windows-exe@^1.1.0, cross-spawn-windows-exe@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/cross-spawn-windows-exe/-/cross-spawn-windows-exe-1.2.0.tgz#46253b0f497676e766faf4a7061004618b5ac5ec" + integrity sha512-mkLtJJcYbDCxEG7Js6eUnUNndWjyUZwJ3H7bErmmtOYU/Zb99DyUkpamuIZE0b3bhmJyZ7D90uS6f+CGxRRjOw== dependencies: - xpipe "*" + "@malept/cross-spawn-promise" "^1.1.0" + is-wsl "^2.2.0" + which "^2.0.2" cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== dependencies: nice-try "^1.0.4" @@ -3725,88 +4501,49 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: path-key "^3.1.0" shebang-command "^2.0.0" which "^2.0.1" -cross-unzip@0.0.2: - version "0.0.2" - resolved "https://registry.npmjs.org/cross-unzip/-/cross-unzip-0.0.2.tgz" - integrity sha1-UYO8R6CVWb78+YzEZXlkmZNZNy8= - -crypto-browserify@^3.11.0: - version "3.12.0" - resolved "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz" - integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== - dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" +crypto-random-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-4.0.0.tgz#5a3cc53d7dd86183df5da0312816ceeeb5bb1fc2" + integrity sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA== + dependencies: + type-fest "^1.0.1" css-box-model@^1.2.0: version "1.2.1" - resolved "https://registry.npmjs.org/css-box-model/-/css-box-model-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/css-box-model/-/css-box-model-1.2.1.tgz#59951d3b81fd6b2074a62d49444415b0d2b4d7c1" integrity sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw== dependencies: tiny-invariant "^1.0.6" css-color-keywords@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05" integrity sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg== -css-hot-loader@^1.4.4: - version "1.4.4" - resolved "https://registry.npmjs.org/css-hot-loader/-/css-hot-loader-1.4.4.tgz" - integrity sha512-J/qXHz+r7FOT92qMIJfxUk0LC9fecQNZVr0MswQ4FOpKLyOCBjofVMfc6R268bh/5ktkTShrweMr0wWqerC92g== - dependencies: - loader-utils "^1.1.0" - lodash "^4.17.5" - normalize-url "^1.9.1" - -css-loader@^3.4.2: - version "3.6.0" - resolved "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz" - integrity sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ== - dependencies: - camelcase "^5.3.1" - cssesc "^3.0.0" - icss-utils "^4.1.1" - loader-utils "^1.2.3" - normalize-path "^3.0.0" - postcss "^7.0.32" - postcss-modules-extract-imports "^2.0.0" - postcss-modules-local-by-default "^3.0.2" - postcss-modules-scope "^2.2.0" - postcss-modules-values "^3.0.0" - postcss-value-parser "^4.1.0" - schema-utils "^2.7.0" - semver "^6.3.0" - -css-select@^2.0.2: - version "2.1.0" - resolved "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz" - integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== - dependencies: - boolbase "^1.0.0" - css-what "^3.2.1" - domutils "^1.7.0" - nth-check "^1.0.2" +css-loader@^6.0.0: + version "6.8.1" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.8.1.tgz#0f8f52699f60f5e679eab4ec0fcd68b8e8a50a88" + integrity sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g== + dependencies: + icss-utils "^5.1.0" + postcss "^8.4.21" + postcss-modules-extract-imports "^3.0.0" + postcss-modules-local-by-default "^4.0.3" + postcss-modules-scope "^3.0.0" + postcss-modules-values "^4.0.0" + postcss-value-parser "^4.2.0" + semver "^7.3.8" css-select@^4.1.3: version "4.3.0" - resolved "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== dependencies: boolbase "^1.0.0" @@ -3816,99 +4553,105 @@ css-select@^4.1.3: nth-check "^2.0.1" css-to-react-native@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.0.0.tgz" - integrity sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ== + version "3.2.0" + resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-3.2.0.tgz#cdd8099f71024e149e4f6fe17a7d46ecd55f1e32" + integrity sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ== dependencies: camelize "^1.0.0" css-color-keywords "^1.0.0" postcss-value-parser "^4.0.2" -css-tree@^1.1.2, css-tree@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz" - integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== - dependencies: - mdn-data "2.0.14" - source-map "^0.6.1" - -css-what@^3.2.1: - version "3.4.2" - resolved "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz" - integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== - css-what@^6.0.1: version "6.1.0" - resolved "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== cssesc@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -csso@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz" - integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== +csstype@^3.0.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" + integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== + +cz-conventional-changelog@3.3.0, cz-conventional-changelog@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/cz-conventional-changelog/-/cz-conventional-changelog-3.3.0.tgz#9246947c90404149b3fe2cf7ee91acad3b7d22d2" + integrity sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw== dependencies: - css-tree "^1.1.2" + chalk "^2.4.1" + commitizen "^4.0.3" + conventional-commit-types "^3.0.0" + lodash.map "^4.5.1" + longest "^2.0.1" + word-wrap "^1.0.3" + optionalDependencies: + "@commitlint/load" ">6.1.1" -csstype@^3.0.2: - version "3.0.7" - resolved "https://registry.npmjs.org/csstype/-/csstype-3.0.7.tgz" - integrity sha512-KxnUB0ZMlnUWCsx2Z8MUsr6qV6ja1w9ArPErJaJaF8a5SOWoHLIszeCTKGRGRgtLgYrs1E8CHkNSP1VZTTPc9g== +damerau-levenshtein@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" + integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== -cyclist@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz" - integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= +data-uri-to-buffer@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" + integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== -damerau-levenshtein@^1.0.6: - version "1.0.6" - resolved "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz" - integrity sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug== +date-time@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/date-time/-/date-time-3.1.0.tgz#0d1e934d170579f481ed8df1e2b8ff70ee845e1e" + integrity sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg== + dependencies: + time-zone "^1.0.0" + +dateformat@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" + integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== debounce-fn@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/debounce-fn/-/debounce-fn-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/debounce-fn/-/debounce-fn-4.0.0.tgz#ed76d206d8a50e60de0dd66d494d82835ffe61c7" integrity sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ== dependencies: mimic-fn "^3.0.0" -debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: +debug@2.6.9, debug@^2.2.0: version "2.6.9" - resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: +debug@4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: version "4.3.4" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" -debug@^3.1.1, debug@^3.2.6: +debug@^3.1.0, debug@^3.2.7: version "3.2.7" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" decamelize-keys@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz" - integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= + version "1.1.1" + resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" + integrity sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg== dependencies: decamelize "^1.1.0" map-obj "^1.0.0" -decamelize@^1.1.0, decamelize@^1.2.0: +decamelize@^1.1.0: version "1.2.0" - resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== decode-named-character-reference@^1.0.0: version "1.0.2" @@ -3917,150 +4660,125 @@ decode-named-character-reference@^1.0.0: dependencies: character-entities "^2.0.0" -decode-uri-component@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" - integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== - -decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz" - integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= - dependencies: - mimic-response "^1.0.0" - decompress-response@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== dependencies: mimic-response "^3.1.0" -dedent@^0.7.0: +dedent@0.7.0: version "0.7.0" - resolved "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz" - integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= + resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" + integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== -deep-equal@^1.0.1: - version "1.1.1" - resolved "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz" - integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== +deep-eql@^4.1.2: + version "4.1.3" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" + integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== dependencies: - is-arguments "^1.0.4" - is-date-object "^1.0.1" - is-regex "^1.0.4" - object-is "^1.0.1" - object-keys "^1.1.1" - regexp.prototype.flags "^1.2.0" + type-detect "^4.0.0" deep-extend@^0.6.0: version "0.6.0" - resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== -deep-is@^0.1.3, deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== deepmerge@^4.2.2: - version "4.2.2" - resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== -default-gateway@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz" - integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== +default-browser-id@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-3.0.0.tgz#bee7bbbef1f4e75d31f98f4d3f1556a14cea790c" + integrity sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA== dependencies: - execa "^1.0.0" - ip-regex "^2.1.0" - -defer-to-connect@^1.0.1: - version "1.1.3" - resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz" - integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== + bplist-parser "^0.2.0" + untildify "^4.0.0" -define-properties@^1.1.2, define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== +default-browser@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-4.0.0.tgz#53c9894f8810bf86696de117a6ce9085a3cbc7da" + integrity sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA== dependencies: - object-keys "^1.0.12" + bundle-name "^3.0.0" + default-browser-id "^3.0.0" + execa "^7.1.1" + titleize "^3.0.0" -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= +default-gateway@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" + integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== dependencies: - is-descriptor "^0.1.0" + execa "^5.0.0" -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= +defaults@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" + integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== dependencies: - is-descriptor "^1.0.0" + clone "^1.0.2" -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" +defer-to-connect@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" + integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== -del@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/del/-/del-4.1.1.tgz" - integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +define-lazy-prop@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" + integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== + +define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" + integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== dependencies: - "@types/glob" "^7.1.1" - globby "^6.1.0" - is-path-cwd "^2.0.0" - is-path-in-cwd "^2.0.0" - p-map "^2.0.0" - pify "^4.0.1" - rimraf "^2.6.3" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" delayed-stream@~1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== -depd@2.0.0: +depd@2.0.0, depd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== depd@~1.1.2: version "1.1.2" - resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== -deprecation@^2.0.0, deprecation@^2.3.1: +deprecation@^2.0.0: version "2.3.1" resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== -dequal@^2.0.0: +dequal@^2.0.0, dequal@^2.0.2, dequal@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== -dequal@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/dequal/-/dequal-2.0.2.tgz" - integrity sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug== - -des.js@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz" - integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - destroy@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" @@ -4068,198 +4786,119 @@ destroy@1.2.0: detect-file@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz" - integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= + resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" + integrity sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q== + +detect-indent@6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6" + integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA== -detect-libc@^2.0.0: +detect-libc@^2.0.0, detect-libc@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.1.tgz#e1897aa88fa6ad197862937fbc0441ef352ee0cd" integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== detect-node@^2.0.4: - version "2.0.5" - resolved "https://registry.npmjs.org/detect-node/-/detect-node-2.0.5.tgz" - integrity sha512-qi86tE6hRcFHy8jI1m2VG+LaPUR1LhqDa5G8tVjuUXmOrpuAgqsA1pN0+ldgr3aKUH+QLI9hCY/OcRYisERejw== + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" + integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== + +diff-sequences@^29.4.3: + version "29.4.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.4.3.tgz#9314bc1fabe09267ffeca9cbafc457d8499a13f2" + integrity sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA== -diff@^5.0.0: +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +diff@^5.0.0, diff@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== -diffie-hellman@^5.0.0: - version "5.0.3" - resolved "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz" - integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - -dir-compare@^2.4.0: - version "2.4.0" - resolved "https://registry.npmjs.org/dir-compare/-/dir-compare-2.4.0.tgz" - integrity sha512-l9hmu8x/rjVC9Z2zmGzkhOEowZvW7pmYws5CWHutg8u1JgvsKWMx7Q/UODeu4djLZ4FgW5besw5yvMQnBHzuCA== +dir-compare@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/dir-compare/-/dir-compare-3.3.0.tgz#2c749f973b5c4b5d087f11edaae730db31788416" + integrity sha512-J7/et3WlGUCxjdnD3HAAzQ6nsnc0WL6DD7WcwJb7c39iH1+AWfg+9OqzJNaI6PkBwBvm1mhZNL9iY/nRiZXlPg== dependencies: - buffer-equal "1.0.0" - colors "1.0.3" - commander "2.9.0" - minimatch "3.0.4" + buffer-equal "^1.0.0" + minimatch "^3.0.4" -dir-glob@^3.0.1: +dir-glob@^3.0.0, dir-glob@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== dependencies: path-type "^4.0.0" -dmg-builder@23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-23.6.0.tgz#d39d3871bce996f16c07d2cafe922d6ecbb2a948" - integrity sha512-jFZvY1JohyHarIAlTbfQOk+HnceGjjAdFjVn3n8xlDWKsYNqbO4muca6qXEZTfGXeQMG7TYim6CeS5XKSfSsGA== - dependencies: - 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.11" - -dmg-license@^1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/dmg-license/-/dmg-license-1.0.11.tgz#7b3bc3745d1b52be7506b4ee80cb61df6e4cd79a" - integrity sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q== - dependencies: - "@types/plist" "^3.0.1" - "@types/verror" "^1.10.3" - ajv "^6.10.0" - crc "^3.8.0" - iconv-corefoundation "^1.1.7" - plist "^3.0.4" - smart-buffer "^4.0.2" - verror "^1.10.0" - dns-equal@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz" - integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= - -dns-packet@^1.3.1: - version "1.3.4" - resolved "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz" - integrity sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA== - dependencies: - ip "^1.1.0" - safe-buffer "^5.0.1" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg== -dns-txt@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz" - integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= +dns-packet@^5.2.2: + version "5.6.0" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.6.0.tgz#2202c947845c7a63c23ece58f2f70ff6ab4c2f7d" + integrity sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ== dependencies: - buffer-indexof "^1.0.0" + "@leichtgewicht/ip-codec" "^2.0.1" doctrine@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== dependencies: esutils "^2.0.2" doctrine@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== dependencies: esutils "^2.0.2" -dom-converter@^0.2: +dom-converter@^0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== dependencies: utila "~0.4" -dom-helpers@^5.0.1, dom-helpers@^5.2.0, dom-helpers@^5.2.1: +dom-helpers@^5.0.1, dom-helpers@^5.1.2, dom-helpers@^5.2.0: version "5.2.1" - resolved "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA== dependencies: "@babel/runtime" "^7.8.7" csstype "^3.0.2" -dom-serializer@0: - version "0.2.2" - resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz" - integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== - dependencies: - domelementtype "^2.0.1" - entities "^2.0.0" - dom-serializer@^1.0.1: - version "1.2.0" - resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.2.0.tgz" - integrity sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA== + version "1.4.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" + integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== dependencies: domelementtype "^2.0.1" - domhandler "^4.0.0" + domhandler "^4.2.0" entities "^2.0.0" -domain-browser@^1.1.1: - version "1.2.0" - resolved "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz" - integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== - -domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1: - version "1.3.1" - resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - -domelementtype@^2.0.1, domelementtype@^2.1.0, domelementtype@^2.2.0: +domelementtype@^2.0.1, domelementtype@^2.2.0: version "2.3.0" - resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== -domhandler@^2.3.0: - version "2.4.2" - resolved "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz" - integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== - dependencies: - domelementtype "1" - -domhandler@^3.0.0: - version "3.3.0" - resolved "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz" - integrity sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA== - dependencies: - domelementtype "^2.0.1" - -domhandler@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/domhandler/-/domhandler-4.0.0.tgz" - integrity sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA== - dependencies: - domelementtype "^2.1.0" - -domhandler@^4.2.0, domhandler@^4.3.1: +domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: version "4.3.1" - resolved "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== dependencies: domelementtype "^2.2.0" -domutils@^1.5.1, domutils@^1.7.0: - version "1.7.0" - resolved "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== - dependencies: - dom-serializer "0" - domelementtype "1" - -domutils@^2.0.0, domutils@^2.8.0: +domutils@^2.5.2, domutils@^2.8.0: version "2.8.0" - resolved "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== dependencies: dom-serializer "^1.0.1" @@ -4268,12 +4907,19 @@ domutils@^2.0.0, domutils@^2.8.0: dot-case@^3.0.4: version "3.0.4" - resolved "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== dependencies: no-case "^3.0.4" tslib "^2.0.3" +dot-prop@^5.1.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + dot-prop@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-6.0.1.tgz#fc26b3cf142b9e59b74dbd39ed66ce620c681083" @@ -4283,17 +4929,12 @@ dot-prop@^6.0.1: dotenv-expand@^5.1.0: version "5.1.0" - resolved "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz" + resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== -dotenv@^8.0.0, dotenv@^8.2.0: - version "8.2.0" - resolved "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz" - integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== - dotenv@^9.0.2: version "9.0.2" - resolved "https://registry.npmjs.org/dotenv/-/dotenv-9.0.2.tgz" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-9.0.2.tgz#dacc20160935a37dea6364aa1bef819fb9b6ab05" integrity sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg== drivelist@^11.1.0: @@ -4306,115 +4947,158 @@ drivelist@^11.1.0: node-addon-api "^5.0.0" prebuild-install "^7.1.1" -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz" - integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= +ds-store@^0.1.5: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ds-store/-/ds-store-0.1.6.tgz#d1024ef746ed0c13f0f7fec85c7e858e8c4b7ca7" + integrity sha512-kY21M6Lz+76OS3bnCzjdsJSF7LBpLYGCVfavW8TgQD2XkcqIZ86W0y9qUDZu6fp7SIZzqosMDW2zi7zVFfv4hw== + dependencies: + bplist-creator "~0.0.3" + macos-alias "~0.2.5" + tn1150 "^0.1.0" -duplexify@^3.4.2, duplexify@^3.6.0: - version "3.7.1" - resolved "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz" - integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== +duplexer2@~0.1.0: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" + integrity sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA== dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" + readable-stream "^2.0.2" + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== easy-crc@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/easy-crc/-/easy-crc-1.1.0.tgz#fe59a33a9a33faf3ff54cf8f2ba7f13ab3730c1d" integrity sha512-cvtERLTu8mYt1pOVVekJ4E0VdwyuKgL+VAfE3LY+Lw762i9M1bSEikm6fyGD2grxOdBfI0HgOmSi3HQneKr33A== -ecdsa-sig-formatter@1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" - integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== - dependencies: - safe-buffer "^5.0.1" - ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -ejs@^3.1.7: +ejs@^3.1.8: version "3.1.9" resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361" integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ== dependencies: jake "^10.8.5" -electron-builder@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-23.6.0.tgz#c79050cbdce90ed96c5feb67c34e9e0a21b5331b" - integrity sha512-y8D4zO+HXGCNxFBV/JlyhFnoQ0Y0K7/sFH+XwIbj47pqaW8S6PGYQbjoObolKBR1ddQFPt4rwp4CnwMJrW3HAw== +electron-devtools-installer@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/electron-devtools-installer/-/electron-devtools-installer-3.2.0.tgz#acc48d24eb7033fe5af284a19667e73b78d406d0" + integrity sha512-t3UczsYugm4OAbqvdImMCImIMVdFzJAHgbwHpkl5jmfu1izVgUcP/mnrPqJIpEeCK1uZGpt+yHgWEN+9EwoYhQ== dependencies: - "@types/yargs" "^17.0.1" - app-builder-lib "23.6.0" - builder-util "23.6.0" - builder-util-runtime "9.1.1" - chalk "^4.1.1" - 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" - simple-update-notifier "^1.0.7" - yargs "^17.5.1" + rimraf "^3.0.2" + semver "^7.2.1" + tslib "^2.1.0" + unzip-crx-3 "^0.2.0" -electron-devtools-installer@^2.2.4: - version "2.2.4" - resolved "https://registry.npmjs.org/electron-devtools-installer/-/electron-devtools-installer-2.2.4.tgz" - integrity sha512-b5kcM3hmUqn64+RUcHjjr8ZMpHS2WJ5YO0pnG9+P/RTdx46of/JrEjuciHWux6pE+On6ynWhHJF53j/EDJN0PA== +electron-forge-maker-appimage@^24.5.2: + version "24.5.2" + resolved "https://registry.yarnpkg.com/electron-forge-maker-appimage/-/electron-forge-maker-appimage-24.5.2.tgz#240d4be4cfc9aff1b75e6918cba6e251aaa2abf5" + integrity sha512-8smmXVyl4ofxLAwe1NXPaDLXAC2seSydBncFrbOzk313RvU9DlXQ2YpwnESpkDRDtRMx8iaMDqV1L+vOC8ch0w== dependencies: - "7zip" "0.0.6" - cross-unzip "0.0.2" - rimraf "^2.5.2" - semver "^5.3.0" + app-builder-lib "24.5.2" -electron-devtools-installer@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/electron-devtools-installer/-/electron-devtools-installer-3.1.1.tgz" - integrity sha512-g2D4J6APbpsiIcnLkFMyKZ6bOpEJ0Ltcc2m66F7oKUymyGAt628OWeU9nRZoh1cNmUs/a6Cls2UfOmsZtE496Q== +electron-installer-common@^0.10.2: + version "0.10.3" + resolved "https://registry.yarnpkg.com/electron-installer-common/-/electron-installer-common-0.10.3.tgz#40f9db644ca60eb28673d545b67ee0113aef4444" + integrity sha512-mYbP+6i+nHMIm0WZHXgGdmmXMe+KXncl6jZYQNcCF9C1WsNA9C5SZ2VP4TLQMSIoFO+X4ugkMEA5uld1bmyEvA== dependencies: - rimraf "^3.0.2" - semver "^7.2.1" - unzip-crx-3 "^0.2.0" + "@malept/cross-spawn-promise" "^1.0.0" + asar "^3.0.0" + debug "^4.1.1" + fs-extra "^9.0.0" + glob "^7.1.4" + lodash "^4.17.15" + parse-author "^2.0.0" + semver "^7.1.1" + tmp-promise "^3.0.2" + optionalDependencies: + "@types/fs-extra" "^9.0.1" -electron-notarize@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/electron-notarize/-/electron-notarize-1.0.0.tgz" - integrity sha512-dsib1IAquMn0onCrNMJ6gtEIZn/azG8hZMCYOuZIMVMUeRMgBYHK1s5TK9P8xAcrAjh/2aN5WYHzgVSWX314og== +electron-installer-dmg@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/electron-installer-dmg/-/electron-installer-dmg-4.0.0.tgz#0520bcc8a928e559b3f16fc5cbc12b182a66ea1c" + integrity sha512-g3W6XnyUa7QGrAF7ViewHdt6bXV2KYU1Pm1CY3pZpp+H6mOjCHHAhf/iZAxtaX1ERCb+SQHz7xSsAHuNH9I8ZQ== + dependencies: + debug "^4.3.2" + minimist "^1.1.1" + optionalDependencies: + appdmg "^0.6.4" + +electron-installer-redhat@^3.2.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/electron-installer-redhat/-/electron-installer-redhat-3.4.0.tgz#4a7f8d67b48b7d5b23bd1eb074f4b684ae43b192" + integrity sha512-gEISr3U32Sgtj+fjxUAlSDo3wyGGq6OBx7rF5UdpIgbnpUvMN4W5uYb0ThpnAZ42VEJh/3aODQXHbFS4f5J3Iw== dependencies: + "@malept/cross-spawn-promise" "^1.0.0" debug "^4.1.1" - fs-extra "^9.0.1" + electron-installer-common "^0.10.2" + fs-extra "^9.0.0" + lodash "^4.17.15" + word-wrap "^1.2.3" + yargs "^16.0.2" + +electron-is-dev@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/electron-is-dev/-/electron-is-dev-0.3.0.tgz#14e6fda5c68e9e4ecbeff9ccf037cbd7c05c5afe" + integrity sha512-jLttuuq8QK67n3mXmIe9pkrO7IH3LGIk12xJkhTmc852U2sCJaRAOpRGPSh+1Xnzck5v9escd9YXzuze9nGejg== + +electron-packager@^17.1.1: + version "17.1.1" + resolved "https://registry.yarnpkg.com/electron-packager/-/electron-packager-17.1.1.tgz#f156fc63d3a66f4e902e4b42992550a172982d59" + integrity sha512-r1NDtlajsq7gf2EXgjRfblCVPquvD2yeg+6XGErOKblvxOpDi0iulZLVhgYDP4AEF1P5/HgbX/vwjlkEv7PEIQ== + dependencies: + "@electron/asar" "^3.2.1" + "@electron/get" "^2.0.0" + "@electron/notarize" "^1.2.3" + "@electron/osx-sign" "^1.0.1" + "@electron/universal" "^1.3.2" + cross-spawn-windows-exe "^1.2.0" + debug "^4.0.1" + extract-zip "^2.0.0" + filenamify "^4.1.0" + fs-extra "^10.1.0" + galactus "^0.2.1" + get-package-info "^1.0.0" + junk "^3.1.0" + parse-author "^2.0.0" + plist "^3.0.0" + rcedit "^3.0.1" + resolve "^1.1.6" + semver "^7.1.3" + yargs-parser "^21.1.1" -electron-osx-sign@^0.6.0: - 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== +electron-playwright-helpers@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/electron-playwright-helpers/-/electron-playwright-helpers-1.6.0.tgz#74d17d3e1a4f738afc51e93c0912d2e1e16d496a" + integrity sha512-0csyp77xRAi8m5g1ApcYdTMJ8n0+Geyb4huyMAsIYTInk4wsuUTHmIy2gMfgF3I130ogfpX6ZfEGeffS93FaUA== dependencies: - bluebird "^3.5.0" - compare-version "^0.1.2" - debug "^2.6.8" - isbinaryfile "^3.0.2" - minimist "^1.2.0" - plist "^3.0.1" + "@electron/asar" "^3.2.4" -electron-publish@23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-23.6.0.tgz#ac9b469e0b07752eb89357dd660e5fb10b3d1ce9" - integrity sha512-jPj3y+eIZQJF/+t5SLvsI5eS4mazCbNYqatv5JihbqOstIM13k0d1Z3vAWntvtt13Itl61SO6seicWdioOU5dg== +electron-publish@24.5.0: + version "24.5.0" + resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-24.5.0.tgz#492a4d7caa232e88ee3c18f5c3b4dc637e5e1b3a" + integrity sha512-zwo70suH15L15B4ZWNDoEg27HIYoPsGJUF7xevLJLSI7JUPC8l2yLBdLGwqueJ5XkDL7ucYyRZzxJVR8ElV9BA== dependencies: "@types/fs-extra" "^9.0.11" - builder-util "23.6.0" - builder-util-runtime "9.1.1" - chalk "^4.1.1" - fs-extra "^10.0.0" + builder-util "24.5.0" + builder-util-runtime "9.2.1" + chalk "^4.1.2" + fs-extra "^10.1.0" lazy-val "^1.0.5" mime "^2.5.2" +electron-squirrel-startup@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/electron-squirrel-startup/-/electron-squirrel-startup-1.0.0.tgz#19b4e55933fa0ef8f556784b9c660f772546a0b8" + integrity sha512-Oce8mvgGdFmwr+DsAcXBmFK8jFfN6yaFAP9IvyhTfupM3nFkBku/7VS/mdtJteWumImkC6P+BKGsxScoDDkv9Q== + dependencies: + debug "^2.2.0" + electron-store@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/electron-store/-/electron-store-8.1.0.tgz#46a398f2bd9aa83c4a9daaae28380e2b3b9c7597" @@ -4423,124 +5107,47 @@ electron-store@^8.1.0: conf "^10.2.0" type-fest "^2.17.0" -electron-to-chromium@^1.4.147: - version "1.4.156" - resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.156.tgz" - integrity sha512-/Wj5NC7E0wHaMCdqxWz9B0lv7CcycDTiHyXCtbbu3pXM9TV2AOp8BtMqkVuqvJNdEvltBG6LxT2Q+BxY4LUCIA== - -electron-updater@^4.3.8: - version "4.6.5" - resolved "https://registry.npmjs.org/electron-updater/-/electron-updater-4.6.5.tgz" - integrity sha512-kdTly8O9mSZfm9fslc1mnCY+mYOeaYRy7ERa2Fed240u01BKll3aiupzkd07qKw69KvhBSzuHroIW3mF0D8DWA== - dependencies: - "@types/semver" "^7.3.6" - builder-util-runtime "8.9.2" - fs-extra "^10.0.0" - js-yaml "^4.1.0" - lazy-val "^1.0.5" - lodash.escaperegexp "^4.1.2" - lodash.isequal "^4.5.0" - semver "^7.3.5" - -electron-webpack-eslint@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/electron-webpack-eslint/-/electron-webpack-eslint-6.0.0.tgz" - integrity sha512-a1R9e4Ubno8FUZCJJByXetCvBI+vw55Ch+2pTg7iYS9RqwOkX+sZcvxb9o3le/M0mpetlsT8mIxKu2aYVCC2Vg== - dependencies: - babel-eslint "^10.1.0" - eslint "^6.8.0" - eslint-friendly-formatter "^4.0.1" - eslint-loader "^4.0.0" - -electron-webpack-js@~2.4.1: - version "2.4.1" - resolved "https://registry.npmjs.org/electron-webpack-js/-/electron-webpack-js-2.4.1.tgz" - integrity sha512-NPbcI4nnuclkLEKmwRI8sui2GNe37NKm0pCQR6KZA7YSV3KQdH4I7wOgIZ2AkeCpyeUHrBSMGQY+VqhPD7OtMA== - dependencies: - "@babel/core" "^7.9.0" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/preset-env" "^7.9.0" - babel-loader "^8.1.0" - babel-plugin-component "^1.1.1" - -electron-webpack@^2.8.2: - version "2.8.2" - resolved "https://registry.npmjs.org/electron-webpack/-/electron-webpack-2.8.2.tgz" - integrity sha512-rR7hxoOlZIcJf6R08mVl/4TBtFY+HW6sv4Z28TdMWETvcM4ZBIBdGNGylxF0gNwB8gkTgo8UkkDbXGX48K4Vow== - dependencies: - "@types/webpack-env" "^1.15.1" - async-exit-hook "^2.0.1" - bluebird "^3.7.2" - chalk "^4.0.0" - crocket "^0.9.11" - css-hot-loader "^1.4.4" - css-loader "^3.4.2" - debug "^4.1.1" - dotenv "^8.2.0" - dotenv-expand "^5.1.0" - electron-devtools-installer "^2.2.4" - electron-webpack-js "~2.4.1" - file-loader "^6.0.0" - fs-extra "^9.0.0" - html-loader "^1.1.0" - html-webpack-plugin "^4.0.4" - lazy-val "^1.0.4" - mini-css-extract-plugin "^0.9.0" - node-loader "^0.6.0" - read-config-file "~4.0.1" - semver "^7.1.3" - source-map-support "^0.5.16" - style-loader "^1.1.3" - terser-webpack-plugin "^2.3.5" - url-loader "^4.0.0" - webpack-cli "^3.3.11" - webpack-dev-server "^3.10.3" - webpack-merge "^4.2.2" - yargs "^15.3.1" +electron-to-chromium@^1.4.431: + version "1.4.446" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.446.tgz#c23fbc7884bfe43088d5eb908a858dbb35ab190b" + integrity sha512-4Gnw7ztEQ/E0eOt5JWfPn9jjeupfUlKoeW5ETKP9nLdWj+4spFoS3Stj19fqlKIaX28UQs0fNX+uKEyoLCBnkw== electron-window-state@^5.0.3: version "5.0.3" - resolved "https://registry.npmjs.org/electron-window-state/-/electron-window-state-5.0.3.tgz" + resolved "https://registry.yarnpkg.com/electron-window-state/-/electron-window-state-5.0.3.tgz#4f36d09e3f953d87aff103bf010f460056050aa8" integrity sha512-1mNTwCfkolXl3kMf50yW3vE2lZj0y92P/HYWFBrb+v2S/pCka5mdwN3cagKm458A7NjndSwijynXgcLWRodsVg== dependencies: jsonfile "^4.0.0" mkdirp "^0.5.1" -electron@^18.3.7: - version "18.3.7" - resolved "https://registry.yarnpkg.com/electron/-/electron-18.3.7.tgz#a22a23d63811d067c8e33abc5674122408319265" - integrity sha512-SDvX0VYejR1xw9PrJyvnyiDcuIhdzFVaA1NaRN2LEWXr5R6mEFl8NVTM+i5dtxMm2SHP/FPnkvmsWZs6MHijqg== +electron-winstaller@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/electron-winstaller/-/electron-winstaller-5.1.0.tgz#528ed08a65858dd678d9178e8ae24f82a4e12271" + integrity sha512-4wlZzkUm5cJNiOtp5wL804+QpygdKTKkrZJXA3sSDEI2XnCVPv0kxmxUvVw4KHBwbNS+Yox89agEr+VkR7kxww== dependencies: - "@electron/get" "^1.13.0" - "@types/node" "^16.11.26" - extract-zip "^1.0.3" + "@electron/asar" "^3.2.1" + debug "^4.1.1" + fs-extra "^7.0.1" + lodash.template "^4.2.2" + temp "^0.9.0" -elliptic@^6.5.3: - version "6.5.4" - resolved "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== +electron@^25.2.0: + version "25.2.0" + resolved "https://registry.yarnpkg.com/electron/-/electron-25.2.0.tgz#ff832d88f78481a82cf9feb72e605ec43553d4ba" + integrity sha512-I/rhcW2sV2fyiveVSBr2N7v5ZiCtdGY0UiNCDZgk2fpSC+irQjbeh7JT2b4vWmJ2ogOXBjqesrN9XszTIG6DHg== dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + "@electron/get" "^2.0.0" + "@types/node" "^18.11.18" + extract-zip "^2.0.1" emoji-regex@^8.0.0: version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -emoji-regex@^9.0.0: +emoji-regex@^9.2.2: version "9.2.2" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== emojis-list@^3.0.0: @@ -4548,93 +5155,137 @@ emojis-list@^3.0.0: resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== -encodeurl@^1.0.2, encodeurl@~1.0.2: +encode-utf8@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/encode-utf8/-/encode-utf8-1.0.3.tgz#f30fdd31da07fb596f281beb2f6b027851994cda" + integrity sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw== + +encodeurl@~1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +encoding@^0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" -end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: +end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" - resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" -enhanced-resolve@^4.1.1, enhanced-resolve@^4.5.0: - version "4.5.0" - resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz" - integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.5.0" - tapable "^1.0.0" - -enquirer@^2.3.5, enquirer@^2.3.6: - version "2.3.6" - resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== +enhanced-resolve@^5.0.0, enhanced-resolve@^5.12.0, enhanced-resolve@^5.15.0: + version "5.15.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" + integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== dependencies: - ansi-colors "^4.1.1" - -entities@^1.1.1: - version "1.1.2" - resolved "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz" - integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== + graceful-fs "^4.2.4" + tapable "^2.2.0" entities@^2.0.0: version "2.2.0" - resolved "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== -entities@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz" - integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q== +env-ci@^9.0.0: + version "9.1.1" + resolved "https://registry.yarnpkg.com/env-ci/-/env-ci-9.1.1.tgz#f081684c64a639c6ff5cb801bd70464bd40498a4" + integrity sha512-Im2yEWeF4b2RAMAaWvGioXk6m0UNaIjD8hj28j2ij5ldnIFrDQT0+pzDvpbRkcjurhXhf/AsBKv8P2rtmGi9Aw== + dependencies: + execa "^7.0.0" + java-properties "^1.0.2" env-paths@^2.2.0, env-paths@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== -errno@^0.1.3, errno@~0.1.7: - version "0.1.8" - resolved "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz" - integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== - dependencies: - prr "~1.0.1" +envinfo@^7.7.3: + version "7.10.0" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.10.0.tgz#55146e3909cc5fe63c22da63fb15b05aeac35b13" + integrity sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw== -error-ex@^1.3.1: +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + +error-ex@^1.2.0, error-ex@^1.3.1, error-ex@^1.3.2: version "1.3.2" - resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" -es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2, es-abstract@^1.4.3: - version "1.18.0" - resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz" - integrity sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw== +es-abstract@^1.19.0, es-abstract@^1.20.4: + version "1.21.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.2.tgz#a56b9695322c8a185dc25975aa3b8ec31d0e7eff" + integrity sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg== dependencies: + array-buffer-byte-length "^1.0.0" + available-typed-arrays "^1.0.5" call-bind "^1.0.2" + es-set-tostringtag "^2.0.1" es-to-primitive "^1.2.1" - function-bind "^1.1.1" - get-intrinsic "^1.1.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.2.0" + get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" has "^1.0.3" - has-symbols "^1.0.2" - is-callable "^1.2.3" - is-negative-zero "^2.0.1" - is-regex "^1.1.2" - is-string "^1.0.5" - object-inspect "^1.9.0" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-typed-array "^1.1.10" + is-weakref "^1.0.2" + object-inspect "^1.12.3" object-keys "^1.1.1" - object.assign "^4.1.2" - string.prototype.trimend "^1.0.4" - string.prototype.trimstart "^1.0.4" - unbox-primitive "^1.0.0" + object.assign "^4.1.4" + regexp.prototype.flags "^1.4.3" + safe-regex-test "^1.0.0" + string.prototype.trim "^1.2.7" + string.prototype.trimend "^1.0.6" + string.prototype.trimstart "^1.0.6" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.9" + +es-module-lexer@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.3.0.tgz#6be9c9e0b4543a60cd166ff6f8b4e9dae0b0c16f" + integrity sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA== + +es-set-tostringtag@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" + integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + dependencies: + get-intrinsic "^1.1.3" + has "^1.0.3" + has-tostringtag "^1.0.0" + +es-shim-unscopables@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241" + integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w== + dependencies: + has "^1.0.3" es-to-primitive@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== dependencies: is-callable "^1.1.4" @@ -4643,12 +5294,40 @@ es-to-primitive@^1.2.1: es6-error@^4.1.1: version "4.1.1" - resolved "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz" + resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== +esbuild@^0.17.5: + version "0.17.19" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.19.tgz#087a727e98299f0462a3d0bcdd9cd7ff100bd955" + integrity sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw== + optionalDependencies: + "@esbuild/android-arm" "0.17.19" + "@esbuild/android-arm64" "0.17.19" + "@esbuild/android-x64" "0.17.19" + "@esbuild/darwin-arm64" "0.17.19" + "@esbuild/darwin-x64" "0.17.19" + "@esbuild/freebsd-arm64" "0.17.19" + "@esbuild/freebsd-x64" "0.17.19" + "@esbuild/linux-arm" "0.17.19" + "@esbuild/linux-arm64" "0.17.19" + "@esbuild/linux-ia32" "0.17.19" + "@esbuild/linux-loong64" "0.17.19" + "@esbuild/linux-mips64el" "0.17.19" + "@esbuild/linux-ppc64" "0.17.19" + "@esbuild/linux-riscv64" "0.17.19" + "@esbuild/linux-s390x" "0.17.19" + "@esbuild/linux-x64" "0.17.19" + "@esbuild/netbsd-x64" "0.17.19" + "@esbuild/openbsd-x64" "0.17.19" + "@esbuild/sunos-x64" "0.17.19" + "@esbuild/win32-arm64" "0.17.19" + "@esbuild/win32-ia32" "0.17.19" + "@esbuild/win32-x64" "0.17.19" + escalade@^3.1.1: version "3.1.1" - resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== escape-html@~1.0.3: @@ -4656,267 +5335,270 @@ escape-html@~1.0.3: resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== -escape-string-regexp@^1.0.5: +escape-string-regexp@5.0.0, escape-string-regexp@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" + integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== escape-string-regexp@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -eslint-config-prettier@^8.1.0: - version "8.1.0" - resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.1.0.tgz" - integrity sha512-oKMhGv3ihGbCIimCAjqkdzx2Q+jthoqnXSP+d86M9tptwugycmTFdVR4IpLgq2c4SHifbwO90z2fQ8/Aio73yw== +eslint-config-airbnb-base@^15.0.0: + version "15.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz#6b09add90ac79c2f8d723a2580e07f3925afd236" + integrity sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig== + dependencies: + confusing-browser-globals "^1.0.10" + object.assign "^4.1.2" + object.entries "^1.1.5" + semver "^6.3.0" -eslint-friendly-formatter@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/eslint-friendly-formatter/-/eslint-friendly-formatter-4.0.1.tgz" - integrity sha1-J9UE3IN/fK3b8gGy6EpO5zC6Pvo= +eslint-config-airbnb-typescript@^17.0.0: + version "17.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-17.0.0.tgz#360dbcf810b26bbcf2ff716198465775f1c49a07" + integrity sha512-elNiuzD0kPAPTXjFWg+lE24nMdHMtuxgYoD30OyMD6yrW1AhFZPAg27VX7d3tzOErw+dgJTNWfRSDqEcXb4V0g== dependencies: - chalk "^2.0.1" - coalescy "1.0.0" - extend "^3.0.0" - minimist "^1.2.0" - strip-ansi "^4.0.0" - text-table "^0.2.0" + eslint-config-airbnb-base "^15.0.0" -eslint-loader@^4.0.0, eslint-loader@^4.0.2: - version "4.0.2" - resolved "https://registry.npmjs.org/eslint-loader/-/eslint-loader-4.0.2.tgz" - integrity sha512-EDpXor6lsjtTzZpLUn7KmXs02+nIjGcgees9BYjNkWra3jVq5vVa8IoCKgzT2M7dNNeoMBtaSG83Bd40N3poLw== +eslint-config-airbnb@^19.0.4: + version "19.0.4" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz#84d4c3490ad70a0ffa571138ebcdea6ab085fdc3" + integrity sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew== dependencies: - find-cache-dir "^3.3.1" - fs-extra "^8.1.0" - loader-utils "^2.0.0" - object-hash "^2.0.3" - schema-utils "^2.6.5" + eslint-config-airbnb-base "^15.0.0" + object.assign "^4.1.2" + object.entries "^1.1.5" + +eslint-config-prettier@^8.8.0: + version "8.8.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz#bfda738d412adc917fd7b038857110efe98c9348" + integrity sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA== + +eslint-import-resolver-alias@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-alias/-/eslint-import-resolver-alias-1.1.2.tgz#297062890e31e4d6651eb5eba9534e1f6e68fc97" + integrity sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w== + +eslint-import-resolver-node@^0.3.7: + version "0.3.7" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz#83b375187d412324a1963d84fa664377a23eb4d7" + integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA== + dependencies: + debug "^3.2.7" + is-core-module "^2.11.0" + resolve "^1.22.1" -eslint-plugin-jsx-a11y@^6.4.1: - version "6.4.1" - resolved "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.4.1.tgz" - integrity sha512-0rGPJBbwHoGNPU73/QCLP/vveMlM1b1Z9PponxO87jfr6tuH5ligXbDT6nHSSzBC8ovX2Z+BQu7Bk5D/Xgq9zg== +eslint-import-resolver-typescript@^3.5.5: + version "3.5.5" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.5.tgz#0a9034ae7ed94b254a360fbea89187b60ea7456d" + integrity sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw== dependencies: - "@babel/runtime" "^7.11.2" - aria-query "^4.2.2" - array-includes "^3.1.1" + debug "^4.3.4" + enhanced-resolve "^5.12.0" + eslint-module-utils "^2.7.4" + get-tsconfig "^4.5.0" + globby "^13.1.3" + is-core-module "^2.11.0" + is-glob "^4.0.3" + synckit "^0.8.5" + +eslint-module-utils@^2.7.4: + version "2.8.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" + integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== + dependencies: + debug "^3.2.7" + +eslint-plugin-import@^2.27.5: + version "2.27.5" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz#876a6d03f52608a3e5bb439c2550588e51dd6c65" + integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow== + dependencies: + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + array.prototype.flatmap "^1.3.1" + debug "^3.2.7" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.7" + eslint-module-utils "^2.7.4" + has "^1.0.3" + is-core-module "^2.11.0" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.values "^1.1.6" + resolve "^1.22.1" + semver "^6.3.0" + tsconfig-paths "^3.14.1" + +eslint-plugin-jsx-a11y@^6.7.1: + version "6.7.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz#fca5e02d115f48c9a597a6894d5bcec2f7a76976" + integrity sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA== + dependencies: + "@babel/runtime" "^7.20.7" + aria-query "^5.1.3" + array-includes "^3.1.6" + array.prototype.flatmap "^1.3.1" ast-types-flow "^0.0.7" - axe-core "^4.0.2" - axobject-query "^2.2.0" - damerau-levenshtein "^1.0.6" - emoji-regex "^9.0.0" + axe-core "^4.6.2" + axobject-query "^3.1.1" + damerau-levenshtein "^1.0.8" + emoji-regex "^9.2.2" has "^1.0.3" - jsx-ast-utils "^3.1.0" - language-tags "^1.0.5" + jsx-ast-utils "^3.3.3" + language-tags "=1.0.5" + minimatch "^3.1.2" + object.entries "^1.1.6" + object.fromentries "^2.0.6" + semver "^6.3.0" -eslint-plugin-prettier@^3.3.1: - version "3.3.1" - resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.3.1.tgz" - integrity sha512-Rq3jkcFY8RYeQLgk2cCwuc0P7SEFwDravPhsJZOQ5N4YI4DSg50NyqJ/9gdZHzQlHf8MvafSesbNJCcP/FF6pQ== +eslint-plugin-prettier@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" + integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== dependencies: prettier-linter-helpers "^1.0.0" -eslint-plugin-react-hooks@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz" - integrity sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ== +eslint-plugin-react-hooks@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" + integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== -eslint-plugin-react@^7.23.1: - version "7.23.1" - resolved "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.23.1.tgz" - integrity sha512-MvFGhZjI8Z4HusajmSw0ougGrq3Gs4vT/0WgwksZgf5RrLrRa2oYAw56okU4tZJl8+j7IYNuTM+2RnFEuTSdRQ== +eslint-plugin-react@^7.32.2: + version "7.32.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz#e71f21c7c265ebce01bcbc9d0955170c55571f10" + integrity sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg== dependencies: - array-includes "^3.1.3" - array.prototype.flatmap "^1.2.4" + array-includes "^3.1.6" + array.prototype.flatmap "^1.3.1" + array.prototype.tosorted "^1.1.1" doctrine "^2.1.0" - has "^1.0.3" + estraverse "^5.3.0" jsx-ast-utils "^2.4.1 || ^3.0.0" - minimatch "^3.0.4" - object.entries "^1.1.3" - object.fromentries "^2.0.4" - object.values "^1.1.3" - prop-types "^15.7.2" - resolve "^2.0.0-next.3" - string.prototype.matchall "^4.0.4" - -eslint-scope@^4.0.3: - version "4.0.3" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz" - integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" + minimatch "^3.1.2" + object.entries "^1.1.6" + object.fromentries "^2.0.6" + object.hasown "^1.1.2" + object.values "^1.1.6" + prop-types "^15.8.1" + resolve "^2.0.0-next.4" + semver "^6.3.0" + string.prototype.matchall "^4.0.8" -eslint-scope@^5.0.0, eslint-scope@^5.1.0, eslint-scope@^5.1.1: +eslint-scope@5.1.1, eslint-scope@^5.1.1: version "5.1.1" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== dependencies: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-utils@^1.4.3: - version "1.4.3" - resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz" - integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - -eslint-visitor-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz" - integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== - -eslint@^6.8.0: - version "6.8.0" - resolved "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz" - integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== +eslint-scope@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b" + integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== dependencies: - "@babel/code-frame" "^7.0.0" - ajv "^6.10.0" - chalk "^2.1.0" - cross-spawn "^6.0.5" - debug "^4.0.1" - doctrine "^3.0.0" - eslint-scope "^5.0.0" - eslint-utils "^1.4.3" - eslint-visitor-keys "^1.1.0" - espree "^6.1.2" - esquery "^1.0.1" - esutils "^2.0.2" - file-entry-cache "^5.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.0.0" - globals "^12.1.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - inquirer "^7.0.0" - is-glob "^4.0.0" - js-yaml "^3.13.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.14" - minimatch "^3.0.4" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.3" - progress "^2.0.0" - regexpp "^2.0.1" - semver "^6.1.2" - strip-ansi "^5.2.0" - strip-json-comments "^3.0.1" - table "^5.2.3" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" + esrecurse "^4.3.0" + estraverse "^5.2.0" -eslint@^7.23.0: - version "7.23.0" - resolved "https://registry.npmjs.org/eslint/-/eslint-7.23.0.tgz" - integrity sha512-kqvNVbdkjzpFy0XOszNwjkKzZ+6TcwCQ/h+ozlcIWwaimBBuhlQ4nN6kbiM2L+OjDcznkTJxzYfRFH92sx4a0Q== - dependencies: - "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.0" +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994" + integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== + +eslint@^8.0.1: + version "8.43.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.43.0.tgz#3e8c6066a57097adfd9d390b8fc93075f257a094" + integrity sha512-aaCpf2JqqKesMFGgmRPessmVKjcGXqdlAYLLC3THM8t5nBRZRQ+st5WM/hoJXkdioEXLLbXgclUpM0TXo5HX5Q== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.4.0" + "@eslint/eslintrc" "^2.0.3" + "@eslint/js" "8.43.0" + "@humanwhocodes/config-array" "^0.11.10" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" - debug "^4.0.1" + debug "^4.3.2" doctrine "^3.0.0" - enquirer "^2.3.5" - eslint-scope "^5.1.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^2.0.0" - espree "^7.3.1" - esquery "^1.4.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.2.0" + eslint-visitor-keys "^3.4.1" + espree "^9.5.2" + esquery "^1.4.2" esutils "^2.0.2" + fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.0.0" - globals "^13.6.0" - ignore "^4.0.6" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" - js-yaml "^3.13.1" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" - lodash "^4.17.21" - minimatch "^3.0.4" + lodash.merge "^4.6.2" + minimatch "^3.1.2" natural-compare "^1.4.0" optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" + strip-ansi "^6.0.1" strip-json-comments "^3.1.0" - table "^6.0.4" text-table "^0.2.0" - v8-compile-cache "^2.0.3" -espree@^6.1.2: - version "6.2.1" - resolved "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz" - integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw== - dependencies: - acorn "^7.1.1" - acorn-jsx "^5.2.0" - eslint-visitor-keys "^1.1.0" - -espree@^7.3.0, espree@^7.3.1: - version "7.3.1" - resolved "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== +espree@^9.5.2: + version "9.5.2" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.5.2.tgz#e994e7dc33a082a7a82dceaf12883a829353215b" + integrity sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw== dependencies: - acorn "^7.4.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" -esprima@^4.0.0: +esprima@~4.0.0: version "4.0.1" - resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.0.1, esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== +esquery@^1.4.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== dependencies: estraverse "^5.1.0" -esrecurse@^4.1.0, esrecurse@^4.3.0: +esrecurse@^4.3.0: version "4.3.0" - resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: estraverse "^5.2.0" estraverse@^4.1.1: version "4.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz" - integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== +estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== -esutils@^2.0.2: +esutils@^2.0.2, esutils@^2.0.3: version "2.0.3" - resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== etag@~1.8.1: @@ -4924,34 +5606,24 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + eventemitter3@^4.0.0: version "4.0.7" - resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== -events@^3.0.0: +events@^3.2.0, events@^3.3.0: version "3.3.0" - resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== -eventsource@^1.0.7: - version "1.1.0" - resolved "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz" - integrity sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg== - dependencies: - original "^1.0.0" - -evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz" - integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - execa@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== dependencies: cross-spawn "^6.0.0" @@ -4962,54 +5634,61 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -execa@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz" - integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" is-stream "^2.0.0" merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - signal-exit "^3.0.2" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" strip-final-newline "^2.0.0" -execall@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz" - integrity sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow== - dependencies: - clone-regexp "^2.1.0" - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= +execa@^7.0.0, execa@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-7.1.1.tgz#3eb3c83d239488e7b409d48e8813b76bb55c9c43" + integrity sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q== dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" + cross-spawn "^7.0.3" + get-stream "^6.0.1" + human-signals "^4.3.0" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^3.0.7" + strip-final-newline "^3.0.0" expand-template@^2.0.3: version "2.0.3" - resolved "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz" + resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== expand-tilde@^2.0.0, expand-tilde@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz" - integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= + resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + integrity sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw== dependencies: homedir-polyfill "^1.0.1" -express@^4.17.1: +exponential-backoff@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" + integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== + +express-ws@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/express-ws/-/express-ws-5.0.2.tgz#5b02d41b937d05199c6c266d7cc931c823bda8eb" + integrity sha512-0uvmuk61O9HXgLhGl3QhNSEtRsQevtmbL94/eILaliEADZBHZOQUAiHFrGPrgsjikohyrmSG5g+sCfASTt0lkQ== + dependencies: + ws "^7.4.6" + +express@^4.17.1, express@^4.17.3: version "4.18.2" resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== @@ -5046,181 +5725,154 @@ express@^4.17.1: utils-merge "1.0.1" vary "~1.1.2" -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - extend@^3.0.0: version "3.0.2" - resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== external-editor@^3.0.3: version "3.1.0" - resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== dependencies: chardet "^0.7.0" iconv-lite "^0.4.24" tmp "^0.0.33" -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extract-zip@^1.0.3: - version "1.7.0" - resolved "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz" - integrity sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA== +extract-zip@^2.0.0, extract-zip@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" + integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== dependencies: - concat-stream "^1.6.2" - debug "^2.6.9" - mkdirp "^0.5.4" + debug "^4.1.1" + get-stream "^5.1.0" yauzl "^2.10.0" + optionalDependencies: + "@types/yauzl" "^2.9.1" -extsprintf@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" - integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== - -fast-deep-equal@^3.1.1: +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" - resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-diff@^1.1.2: - version "1.2.0" - resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz" - integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== +fast-diff@^1.1.2, fast-diff@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" + integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== -fast-glob@^3.1.1, fast-glob@^3.2.5: - version "3.2.5" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz" - integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== +fast-glob@^3.2.11, fast-glob@^3.2.12, fast-glob@^3.2.7, fast-glob@^3.2.9: + version "3.2.12" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.0" + glob-parent "^5.1.2" merge2 "^1.3.0" - micromatch "^4.0.2" - picomatch "^2.2.1" + micromatch "^4.0.4" fast-json-stable-stringify@^2.0.0: version "2.1.0" - resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: +fast-levenshtein@^2.0.6: version "2.0.6" - resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== -fastest-levenshtein@^1.0.12: - version "1.0.12" - resolved "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz" - integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== +fastest-levenshtein@^1.0.12, fastest-levenshtein@^1.0.16: + version "1.0.16" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" + integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== fastq@^1.6.0: - version "1.11.0" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz" - integrity sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g== + version "1.15.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== dependencies: reusify "^1.0.4" faye-websocket@^0.11.3: - version "0.11.3" - resolved "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz" - integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== + version "0.11.4" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" + integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== dependencies: websocket-driver ">=0.5.1" fd-slicer@~1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz" - integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== dependencies: pend "~1.2.0" -figgy-pudding@^3.5.1: - version "3.5.2" - resolved "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz" - integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== +fetch-blob@^3.1.2, fetch-blob@^3.1.4: + version "3.2.0" + resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" + integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== + dependencies: + node-domexception "^1.0.0" + web-streams-polyfill "^3.0.3" + +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA== + dependencies: + escape-string-regexp "^1.0.5" -figures@^3.0.0, figures@^3.2.0: +figures@^3.0.0: version "3.2.0" - resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== dependencies: escape-string-regexp "^1.0.5" -file-entry-cache@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz" - integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== +figures@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-5.0.0.tgz#126cd055052dea699f8a54e8c9450e6ecfc44d5f" + integrity sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg== dependencies: - flat-cache "^2.0.1" + escape-string-regexp "^5.0.0" + is-unicode-supported "^1.2.0" file-entry-cache@^6.0.1: version "6.0.1" - resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== dependencies: flat-cache "^3.0.4" -file-loader@^6.0.0: - version "6.2.0" - resolved "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz" - integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - file-uri-to-path@1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== -filelist@^1.0.1: +filelist@^1.0.4: version "1.0.4" - resolved "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== dependencies: minimatch "^5.0.1" -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= +filename-reserved-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz#abf73dfab735d045440abfea2d91f389ebbfa229" + integrity sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ== + +filenamify@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-4.3.0.tgz#62391cb58f02b09971c9d4f9d63b3cf9aba03106" + integrity sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg== dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" + filename-reserved-regex "^2.0.0" + strip-outer "^1.0.1" + trim-repeated "^1.0.0" fill-range@^7.0.1: version "7.0.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: to-regex-range "^5.0.1" @@ -5238,310 +5890,502 @@ finalhandler@1.2.0: statuses "2.0.1" unpipe "~1.0.0" -find-cache-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz" - integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== - dependencies: - commondir "^1.0.1" - make-dir "^2.0.0" - pkg-dir "^3.0.0" - -find-cache-dir@^3.3.1: - version "3.3.1" - resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz" - integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== +find-cache-dir@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" + integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== dependencies: commondir "^1.0.1" make-dir "^3.0.2" pkg-dir "^4.1.0" +find-node-modules@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/find-node-modules/-/find-node-modules-2.1.3.tgz#3c976cff2ca29ee94b4f9eafc613987fc4c0ee44" + integrity sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg== + dependencies: + findup-sync "^4.0.0" + merge "^2.1.1" + +find-root@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" + integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== + +find-up@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== + dependencies: + locate-path "^2.0.0" + find-up@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== dependencies: - locate-path "^3.0.0" + locate-path "^3.0.0" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +find-up@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-6.3.0.tgz#2abab3d3280b2dc7ac10199ef324c4e002c8c790" + integrity sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw== + dependencies: + locate-path "^7.1.0" + path-exists "^5.0.0" -find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== +find-versions@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-5.1.0.tgz#973f6739ce20f5e439a27eba8542a4b236c8e685" + integrity sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg== dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" + semver-regex "^4.0.5" -findup-sync@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz" - integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== +findup-sync@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-4.0.0.tgz#956c9cdde804052b881b428512905c4a5f2cdef0" + integrity sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ== dependencies: detect-file "^1.0.0" is-glob "^4.0.0" - micromatch "^3.0.4" + micromatch "^4.0.2" resolve-dir "^1.0.1" -flat-cache@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz" - integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== - dependencies: - flatted "^2.0.0" - rimraf "2.6.3" - write "1.0.3" - flat-cache@^3.0.4: version "3.0.4" - resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== dependencies: flatted "^3.1.0" rimraf "^3.0.2" -flatted@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/flatted/-/flatted-2.0.0.tgz" - integrity sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg== - flatted@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz" - integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== + version "3.2.7" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" + integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== -flush-write-stream@^1.0.0: - version "1.1.1" - resolved "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz" - integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== +flora-colossus@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/flora-colossus/-/flora-colossus-1.0.1.tgz#aba198425a8185341e64f9d2a6a96fd9a3cbdb93" + integrity sha512-d+9na7t9FyH8gBJoNDSi28mE4NgQVGGvxQ4aHtFRetjyh5SXjuus+V5EZaxFmFdXVemSOrx0lsgEl/ZMjnOWJA== dependencies: - inherits "^2.0.3" - readable-stream "^2.3.6" + debug "^4.1.1" + fs-extra "^7.0.0" -follow-redirects@^1.0.0: - version "1.13.3" - resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.3.tgz" - integrity sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA== +fmix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/fmix/-/fmix-0.1.0.tgz#c7bbf124dec42c9d191cfb947d0a9778dd986c0c" + integrity sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w== + dependencies: + imul "^1.0.0" -follow-redirects@^1.15.0: +follow-redirects@^1.0.0, follow-redirects@^1.15.0: version "1.15.2" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +foreground-child@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + +fork-ts-checker-webpack-plugin@^7.2.13: + version "7.3.0" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-7.3.0.tgz#a9c984a018493962360d7c7e77a67b44a2d5f3aa" + integrity sha512-IN+XTzusCjR5VgntYFgxbxVx3WraPRnKehBFrf00cMSrtUuW9MsG9dhL6MWpY6MkjC3wVwoujfCDgZZCQwbswA== + dependencies: + "@babel/code-frame" "^7.16.7" + chalk "^4.1.2" + chokidar "^3.5.3" + cosmiconfig "^7.0.1" + deepmerge "^4.2.2" + fs-extra "^10.0.0" + memfs "^3.4.1" + minimatch "^3.0.4" + node-abort-controller "^3.0.1" + schema-utils "^3.1.1" + semver "^7.3.5" + tapable "^2.2.1" form-data@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" mime-types "^2.1.12" +formdata-polyfill@^4.0.10: + version "4.0.10" + resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" + integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== + dependencies: + fetch-blob "^3.1.2" + forwarded@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= - dependencies: - map-cache "^0.2.2" - fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== -from2@^2.1.0: +from2@^2.3.0: version "2.3.0" - resolved "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz" - integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g== dependencies: inherits "^2.0.1" readable-stream "^2.0.0" -fromentries@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/fromentries/-/fromentries-1.3.2.tgz#e4bca6808816bf8f93b52750f1127f5a6fd86e3a" - integrity sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg== - fs-constants@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== +fs-extra@9.1.0, fs-extra@^9.0.0, fs-extra@^9.0.1: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs-extra@^10.0.0, fs-extra@^10.1.0: version "10.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== dependencies: graceful-fs "^4.2.0" jsonfile "^6.0.1" universalify "^2.0.0" -fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== +fs-extra@^11.0.0: + version "11.1.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.1.tgz#da69f7c39f3b002378b0954bb6ae7efdc0876e2d" + integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ== dependencies: graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" + integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== + dependencies: + graceful-fs "^4.1.2" jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^9.0.0, fs-extra@^9.0.1: - version "9.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== +fs-extra@^7.0.0, fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== dependencies: - at-least-node "^1.0.0" graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" + jsonfile "^4.0.0" + universalify "^0.1.0" fs-minipass@^2.0.0: version "2.1.0" - resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== dependencies: minipass "^3.0.0" -fs-readdir-recursive@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz" - integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== +fs-minipass@^3.0.0, fs-minipass@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.2.tgz#5b383858efa8c1eb8c33b39e994f7e8555b8b3a3" + integrity sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g== + dependencies: + minipass "^5.0.0" + +fs-monkey@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.4.tgz#ee8c1b53d3fe8bb7e5d2c5c5dfc0168afdd2f747" + integrity sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ== -fs-write-stream-atomic@^1.0.8: - version "1.0.10" - resolved "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz" - integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= +fs-temp@^1.0.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/fs-temp/-/fs-temp-1.2.1.tgz#ffd136ef468177accc3c267d4510f6ce3b2b9697" + integrity sha512-okTwLB7/Qsq82G6iN5zZJFsOfZtx2/pqrA7Hk/9fvy+c+eJS9CvgGXT2uNxwnI14BDY9L/jQPkaBgSvlKfSW9w== dependencies: - graceful-fs "^4.1.2" - iferr "^0.1.5" - imurmurhash "^0.1.4" - readable-stream "1 || 2" + random-path "^0.1.0" + +fs-xattr@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/fs-xattr/-/fs-xattr-0.3.1.tgz#a23d88571031f6c56f26d59e0bab7d2e12f49f77" + integrity sha512-UVqkrEW0GfDabw4C3HOrFlxKfx0eeigfRne69FxSBdHIP8Qt5Sq6Pu3RM9KmMlkygtC4pPKkj5CiPO5USnj2GA== fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@^1.2.7: - version "1.2.13" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" - integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== - dependencies: - bindings "^1.5.0" - nan "^2.12.1" - -fsevents@~2.3.1: +fsevents@2.3.2, fsevents@~2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== -function-bind@^1.0.2, function-bind@^1.1.1: +function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= +function.prototype.name@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + functions-have-names "^1.2.2" + +functions-have-names@^1.2.2, functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +galactus@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/galactus/-/galactus-0.2.1.tgz#cbed2d20a40c1f5679a35908e2b9415733e78db9" + integrity sha512-mDc8EQJKtxjp9PMYS3PbpjjbX3oXhBTxoGaPahw620XZBIHJ4+nvw5KN/tRtmmSDR9dypstGNvqQ3C29QGoGHQ== + dependencies: + debug "^3.1.0" + flora-colossus "^1.0.0" + fs-extra "^4.0.0" + +gauge@^4.0.3: + version "4.0.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" + integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.3" + console-control-strings "^1.1.0" + has-unicode "^2.0.1" + signal-exit "^3.0.7" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.5" + +gauge@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-5.0.1.tgz#1efc801b8ff076b86ef3e9a7a280a975df572112" + integrity sha512-CmykPMJGuNan/3S4kZOpvvPYSNqSHANiWnh9XcMU2pSjtBfF0XzZ2p1bFAxTbnFxyBuPxQYHhzwaoOmUdqzvxQ== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.3" + console-control-strings "^1.1.0" + has-unicode "^2.0.1" + signal-exit "^4.0.1" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.5" + +generate-function@^2.0.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f" + integrity sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ== + dependencies: + is-property "^1.0.2" + +generate-object-property@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" + integrity sha512-TuOwZWgJ2VAMEGJvAyPWvpqxSANF0LDpmyHauMjFYzaACvn+QTT/AZomvPCzVBV7yDN3OmwHQ5OvHaeLKre3JQ== + dependencies: + is-property "^1.0.0" gensync@^1.0.0-beta.2: version "1.0.0-beta.2" - resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-caller-file@^2.0.1, get-caller-file@^2.0.5: +get-caller-file@^2.0.5: version "2.0.5" - resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" - integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== +get-func-name@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" + integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== + +get-installed-path@^2.0.3: + version "2.1.1" + resolved "https://registry.yarnpkg.com/get-installed-path/-/get-installed-path-2.1.1.tgz#a1f33dc6b8af542c9331084e8edbe37fe2634152" + integrity sha512-Qkn9eq6tW5/q9BDVdMpB8tOHljX9OSP0jRC5TRNVA4qRc839t4g8KQaR8t0Uv0EFVL0MlyG7m/ofjEgAROtYsA== dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.3" + global-modules "1.0.0" -get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz" - integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" + integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== dependencies: function-bind "^1.1.1" has "^1.0.3" - has-symbols "^1.0.1" - -get-own-enumerable-property-symbols@^3.0.0: - version "3.0.2" - resolved "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz" - integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== + has-proto "^1.0.1" + has-symbols "^1.0.3" -get-stdin@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz" - integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg== +get-package-info@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-package-info/-/get-package-info-1.0.0.tgz#6432796563e28113cd9474dbbd00052985a4999c" + integrity sha512-SCbprXGAPdIhKAXiG+Mk6yeoFH61JlYunqdFQFHDtLjJlDjFf6x07dsS8acO+xWt52jpdVo49AlVDnUVK1sDNw== + dependencies: + bluebird "^3.1.1" + debug "^2.2.0" + lodash.get "^4.0.0" + read-pkg-up "^2.0.0" -get-stream@^4.0.0, get-stream@^4.1.0: +get-stream@^4.0.0: version "4.1.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== dependencies: pump "^3.0.0" -get-stream@^5.0.0, get-stream@^5.1.0: +get-stream@^5.1.0: version "5.2.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== dependencies: pump "^3.0.0" -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= +get-stream@^6.0.0, get-stream@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-stream@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-7.0.0.tgz#f5695721f481f5581beb9d11cb90c41ddfceea18" + integrity sha512-ql6FW5b8tgMYvI4UaoxG3EQN3VyZ6VeQpxNBGg5BZ4xD4u+HJeprzhMMA4OCBEGQgSR+m87pstWMpiVW64W8Fw== + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +get-tsconfig@^4.5.0: + version "4.6.2" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.6.2.tgz#831879a5e6c2aa24fe79b60340e2233a1e0f472e" + integrity sha512-E5XrT4CbbXcXWy+1jChlZmrmCwd5KGx502kDCXJJ7y898TtWW9FwoG5HfOLVRKmlmDGkWN2HM9Ho+/Y8F0sJDg== + dependencies: + resolve-pkg-maps "^1.0.0" + +git-log-parser@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/git-log-parser/-/git-log-parser-1.2.0.tgz#2e6a4c1b13fc00028207ba795a7ac31667b9fd4a" + integrity sha512-rnCVNfkTL8tdNryFuaY0fYiBWEBcgF748O6ZI61rslBvr2o7U65c2/6npCRqH40vuAhtgtDiqLTJjBVdrejCzA== + dependencies: + argv-formatter "~1.0.0" + spawn-error-forwarder "~1.0.0" + split2 "~1.0.0" + stream-combiner2 "~1.1.1" + through2 "~2.0.0" + traverse "~0.6.6" github-from-package@0.0.0: version "0.0.0" - resolved "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz" + resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz" - integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= +github-url-to-object@^4.0.4: + version "4.0.6" + resolved "https://registry.yarnpkg.com/github-url-to-object/-/github-url-to-object-4.0.6.tgz#5ea8701dc8c336b8d582dc3fa5bf964165c3b365" + integrity sha512-NaqbYHMUAlPcmWFdrAB7bcxrNIiiJWJe8s/2+iOc9vlcHlwHqSGrPk+Yi3nu6ebTwgsZEa7igz+NH2vEq3gYwQ== dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" + is-url "^1.1.0" -glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0: +glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" -glob@^7.0.0, glob@^7.0.3, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: - version "7.1.6" - resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== +glob-parent@^6.0.1, glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + +glob@7.2.3, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.0.4" + minimatch "^3.1.1" once "^1.3.0" path-is-absolute "^1.0.0" +glob@^10.2.2, glob@^10.2.7: + version "10.3.1" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.1.tgz#9789cb1b994515bedb811a6deca735b5c37d2bf4" + integrity sha512-9BKYcEeIs7QwlCYs+Y3GBvqAMISufUS0i2ELd11zpZjxI5V9iyRj0HgzB5/cLf2NY4vcYBTYzJ7GIui7j/4DOw== + dependencies: + foreground-child "^3.1.0" + jackspeak "^2.0.3" + minimatch "^9.0.1" + minipass "^5.0.0 || ^6.0.2" + path-scurry "^1.10.0" + global-agent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/global-agent/-/global-agent-3.0.0.tgz#ae7cd31bd3583b93c5a16437a1afe27cc33a1ab6" @@ -5554,26 +6398,26 @@ global-agent@^3.0.0: semver "^7.3.2" serialize-error "^7.0.1" -global-modules@^1.0.0: +global-dirs@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" + integrity sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg== + dependencies: + ini "^1.3.4" + +global-modules@1.0.0, global-modules@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== dependencies: global-prefix "^1.0.1" is-windows "^1.0.1" resolve-dir "^1.0.0" -global-modules@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz" - integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== - dependencies: - global-prefix "^3.0.0" - global-prefix@^1.0.1: version "1.0.2" - resolved "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz" - integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + integrity sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg== dependencies: expand-tilde "^2.0.2" homedir-polyfill "^1.0.1" @@ -5581,178 +6425,157 @@ global-prefix@^1.0.1: is-windows "^1.0.1" which "^1.2.14" -global-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz" - integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== - dependencies: - ini "^1.3.5" - kind-of "^6.0.2" - which "^1.3.1" - -global-tunnel-ng@^2.7.1: - version "2.7.1" - resolved "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz" - integrity sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg== - dependencies: - encodeurl "^1.0.2" - lodash "^4.17.10" - npm-conf "^1.1.3" - tunnel "^0.0.6" - globals@^11.1.0: version "11.12.0" - resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^12.1.0: - version "12.4.0" - resolved "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz" - integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== - dependencies: - type-fest "^0.8.1" - -globals@^13.6.0: - version "13.7.0" - resolved "https://registry.npmjs.org/globals/-/globals-13.7.0.tgz" - integrity sha512-Aipsz6ZKRxa/xQkZhNg0qIWXT6x6rD46f6x/PCnBomlttdIyAPak4YD9jTmKpZ72uROSMU87qJtcgpgHaVchiA== +globals@^13.19.0: + version "13.20.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" + integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== dependencies: type-fest "^0.20.2" -globalthis@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.2.tgz" - integrity sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ== +globalthis@^1.0.1, globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== dependencies: define-properties "^1.1.3" -globby@^11.0.2: - version "11.0.3" - resolved "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz" - integrity sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg== +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: array-union "^2.1.0" dir-glob "^3.0.1" - fast-glob "^3.1.1" - ignore "^5.1.4" - merge2 "^1.3.0" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" slash "^3.0.0" -globby@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz" - integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= +globby@^13.1.1, globby@^13.1.3, globby@^13.1.4: + version "13.2.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-13.2.0.tgz#7dd5678d765c4680c2e6d106230d86cb727cb1af" + integrity sha512-jWsQfayf13NvqKUIL3Ta+CIqMnvlaIDFveWE/dpOZ9+3AMEJozsxDvKA02zync9UuvOM8rOXzsD5GqKP4OnWPQ== dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" + dir-glob "^3.0.1" + fast-glob "^3.2.11" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^4.0.0" -globjoin@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz" - integrity sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM= +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +got@^11.7.0, got@^11.8.5: + version "11.8.6" + resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" + integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== + dependencies: + "@sindresorhus/is" "^4.0.0" + "@szmarczak/http-timer" "^4.0.5" + "@types/cacheable-request" "^6.0.1" + "@types/responselike" "^1.0.0" + cacheable-lookup "^5.0.3" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + http2-wrapper "^1.0.0-beta.5.2" + lowercase-keys "^2.0.0" + p-cancelable "^2.0.0" + responselike "^2.0.0" -gonzales-pe@^4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz" - integrity sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ== - dependencies: - minimist "^1.2.5" +graceful-fs@4.2.10: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== -got@^9.6.0: - version "9.6.0" - resolved "https://registry.npmjs.org/got/-/got-9.6.0.tgz" - integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== - dependencies: - "@sindresorhus/is" "^0.14.0" - "@szmarczak/http-timer" "^1.1.2" - cacheable-request "^6.0.0" - decompress-response "^3.3.0" - duplexer3 "^0.1.4" - get-stream "^4.1.0" - lowercase-keys "^1.0.1" - mimic-response "^1.0.1" - p-cancelable "^1.0.0" - to-readable-stream "^1.0.0" - url-parse-lax "^3.0.0" - -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2: - version "4.2.6" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz" - integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== - -"graceful-readlink@>= 1.0.0": - version "1.0.1" - resolved "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz" - integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU= +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== handle-thing@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== +handlebars@^4.7.7: + version "4.7.7" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" + integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== + dependencies: + minimist "^1.2.5" + neo-async "^2.6.0" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" + hard-rejection@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== -has-bigints@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz" - integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== has-flag@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-symbols@^1.0.1, has-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz" - integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== -has-symbols@^1.0.3: +has-symbols@^1.0.2, has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: +has-tostringtag@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + has-symbols "^1.0.2" -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" +has-unicode@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== has@^1.0.3: version "1.0.3" @@ -5761,23 +6584,6 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -hash-base@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz" - integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== - dependencies: - inherits "^2.0.4" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.7" - resolved "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - hast-util-whitespace@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz#0ec64e257e6fc216c7d14c8a1b74d27d650b4557" @@ -5785,47 +6591,31 @@ hast-util-whitespace@^2.0.0: he@^1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/he/-/he-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== -history@^4.9.0: - version "4.10.1" - resolved "https://registry.npmjs.org/history/-/history-4.10.1.tgz" - integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== - dependencies: - "@babel/runtime" "^7.1.2" - loose-envify "^1.2.0" - resolve-pathname "^3.0.0" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" - value-equal "^1.0.1" - -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz" - integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -hoist-non-react-statics@^3.0.0, hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: +hoist-non-react-statics@^3.0.0, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2: version "3.3.2" - resolved "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== dependencies: react-is "^16.7.0" homedir-polyfill@^1.0.1: version "1.0.3" - resolved "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== dependencies: parse-passwd "^1.0.0" +hook-std@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/hook-std/-/hook-std-3.0.0.tgz#47038a01981e07ce9d83a6a3b2eb98cad0f7bd58" + integrity sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw== + hosted-git-info@^2.1.4: version "2.8.9" - resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== hosted-git-info@^4.0.1, hosted-git-info@^4.1.0: @@ -5835,114 +6625,78 @@ hosted-git-info@^4.0.1, hosted-git-info@^4.1.0: dependencies: lru-cache "^6.0.0" +hosted-git-info@^6.0.0, hosted-git-info@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-6.1.1.tgz#629442c7889a69c05de604d52996b74fe6f26d58" + integrity sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w== + dependencies: + lru-cache "^7.5.1" + hpack.js@^2.1.6: version "2.1.6" - resolved "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz" - integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ== dependencies: inherits "^2.0.1" obuf "^1.0.0" readable-stream "^2.0.1" wbuf "^1.1.0" -html-entities@^1.3.1: - version "1.4.0" - resolved "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz" - integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== - -html-loader@^1.1.0: - version "1.3.2" - resolved "https://registry.npmjs.org/html-loader/-/html-loader-1.3.2.tgz" - integrity sha512-DEkUwSd0sijK5PF3kRWspYi56XP7bTNkyg5YWSzBdjaSDmvCufep5c4Vpb3PBf6lUL0YPtLwBfy9fL0t5hBAGA== - dependencies: - html-minifier-terser "^5.1.1" - htmlparser2 "^4.1.0" - loader-utils "^2.0.0" - schema-utils "^3.0.0" +html-entities@^2.3.2: + version "2.4.0" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.4.0.tgz#edd0cee70402584c8c76cc2c0556db09d1f45061" + integrity sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ== -html-minifier-terser@^5.0.1, html-minifier-terser@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz" - integrity sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg== +html-minifier-terser@^6.0.2: + version "6.1.0" + resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" + integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== dependencies: - camel-case "^4.1.1" - clean-css "^4.2.3" - commander "^4.1.1" + camel-case "^4.1.2" + clean-css "^5.2.2" + commander "^8.3.0" he "^1.2.0" - param-case "^3.0.3" + param-case "^3.0.4" relateurl "^0.2.7" - terser "^4.6.3" - -html-parse-stringify2@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/html-parse-stringify2/-/html-parse-stringify2-2.0.1.tgz" - integrity sha1-3FZwtyksoVi3vJFsmmc1rIhyg0o= - dependencies: - void-elements "^2.0.1" - -html-tags@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz" - integrity sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg== + terser "^5.10.0" -html-webpack-plugin@^4.0.4: - version "4.5.2" - resolved "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz" - integrity sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A== - dependencies: - "@types/html-minifier-terser" "^5.0.0" - "@types/tapable" "^1.0.5" - "@types/webpack" "^4.41.8" - html-minifier-terser "^5.0.1" - loader-utils "^1.2.3" - lodash "^4.17.20" - pretty-error "^2.1.1" - tapable "^1.1.3" - util.promisify "1.0.0" - -htmlparser2@^3.10.0: - version "3.10.0" - resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.0.tgz" - integrity sha512-J1nEUGv+MkXS0weHNWVKJJ+UrLfePxRWpN3C9bEi9fLxL2+ggW94DQvgYVXsaT30PGwYRIZKNZXuyMhp3Di4bQ== - dependencies: - domelementtype "^1.3.0" - domhandler "^2.3.0" - domutils "^1.5.1" - entities "^1.1.1" - inherits "^2.0.1" - readable-stream "^3.0.6" +html-parse-stringify@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz#dfc1017347ce9f77c8141a507f233040c59c55d2" + integrity sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg== + dependencies: + void-elements "3.1.0" -htmlparser2@^3.10.1: - version "3.10.1" - resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz" - integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== +html-webpack-plugin@^5.3.1, html-webpack-plugin@^5.5.1: + version "5.5.3" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.3.tgz#72270f4a78e222b5825b296e5e3e1328ad525a3e" + integrity sha512-6YrDKTuqaP/TquFH7h4srYWsZx+x6k6+FbsTm0ziCwGHDP78Unr1r9F/H4+sGmMbX08GQcJ+K64x55b+7VM/jg== dependencies: - domelementtype "^1.3.1" - domhandler "^2.3.0" - domutils "^1.5.1" - entities "^1.1.1" - inherits "^2.0.1" - readable-stream "^3.1.1" + "@types/html-minifier-terser" "^6.0.0" + html-minifier-terser "^6.0.2" + lodash "^4.17.21" + pretty-error "^4.0.0" + tapable "^2.0.0" -htmlparser2@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz" - integrity sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q== +htmlparser2@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== dependencies: domelementtype "^2.0.1" - domhandler "^3.0.0" - domutils "^2.0.0" + domhandler "^4.0.0" + domutils "^2.5.2" entities "^2.0.0" -http-cache-semantics@^4.0.0: +http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== http-deceiver@^1.2.7: version "1.2.7" - resolved "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz" - integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== http-errors@2.0.0: version "2.0.0" @@ -5957,8 +6711,8 @@ http-errors@2.0.0: http-errors@~1.6.2: version "1.6.3" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" - integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== dependencies: depd "~1.1.2" inherits "2.0.3" @@ -5966,80 +6720,92 @@ http-errors@~1.6.2: statuses ">= 1.4.0 < 2" http-parser-js@>=0.5.1: - version "0.5.3" - resolved "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz" - integrity sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg== + version "0.5.8" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" + integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== http-proxy-agent@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== dependencies: "@tootallnate/once" "2" agent-base "6" debug "4" -http-proxy-middleware@0.19.1: - version "0.19.1" - resolved "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz" - integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== +http-proxy-agent@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz#e9096c5afd071a3fce56e6252bb321583c124673" + integrity sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ== dependencies: - http-proxy "^1.17.0" - is-glob "^4.0.0" - lodash "^4.17.11" - micromatch "^3.1.10" + agent-base "^7.1.0" + debug "^4.3.4" + +http-proxy-middleware@^2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz#e1a4dd6979572c7ab5a4e4b55095d1f32a74963f" + integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== + dependencies: + "@types/http-proxy" "^1.17.8" + http-proxy "^1.18.1" + is-glob "^4.0.1" + is-plain-obj "^3.0.0" + micromatch "^4.0.2" -http-proxy@^1.17.0: +http-proxy@^1.18.1: version "1.18.1" - resolved "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== dependencies: eventemitter3 "^4.0.0" follow-redirects "^1.0.0" requires-port "^1.0.0" -https-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz" - integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= +http2-wrapper@^1.0.0-beta.5.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" + integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.0.0" -https-proxy-agent@^5.0.0: +https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== dependencies: agent-base "6" debug "4" -human-signals@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz" - integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== +https-proxy-agent@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.0.tgz#75cb70d04811685667183b31ab158d006750418a" + integrity sha512-0euwPCRyAPSgGdzD1IVN9nJYHtBhJwb6XPfbpQcYbPCwrBidX6GzxmchnaF4sfF/jPb74Ojx5g4yTg3sixlyPw== + dependencies: + agent-base "^7.0.2" + debug "4" -husky@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/husky/-/husky-5.2.0.tgz" - integrity sha512-AM8T/auHXRBxlrfPVLKP6jt49GCM2Zz47m8G3FOMsLmTv8Dj/fKVWE0Rh2d4Qrvmy131xEsdQnb3OXRib67PGg== +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -i18next-electron-language-detector@^0.0.10: - version "0.0.10" - resolved "https://registry.npmjs.org/i18next-electron-language-detector/-/i18next-electron-language-detector-0.0.10.tgz" - integrity sha512-l/CdtK5i6BB7h5OGKadUK+Q0q4e4EYXZSDV+Hetxjdv4C8RoYPNbqfTIpcc4RpIO3Dty05Xt8TxV+HyFd6opeA== +human-signals@^4.3.0: + version "4.3.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" + integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== -i18next@^19.9.2: - version "19.9.2" - resolved "https://registry.npmjs.org/i18next/-/i18next-19.9.2.tgz" - integrity sha512-0i6cuo6ER6usEOtKajUUDj92zlG+KArFia0857xxiEHAQcUwh/RtOQocui1LPJwunSYT574Pk64aNva1kwtxZg== +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== dependencies: - "@babel/runtime" "^7.12.0" + ms "^2.0.0" -iconv-corefoundation@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz#31065e6ab2c9272154c8b0821151e2c88f1b002a" - integrity sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ== - dependencies: - cli-truncate "^2.1.0" - node-addon-api "^1.6.3" +husky@^8.0.3: + version "8.0.3" + resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.3.tgz#4936d7212e46d1dea28fef29bb3a108872cd9184" + integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg== iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" @@ -6050,37 +6816,37 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24: iconv-lite@^0.6.2: version "0.6.3" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== dependencies: safer-buffer ">= 2.1.2 < 3.0.0" -icss-utils@^4.0.0, icss-utils@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz" - integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== - dependencies: - postcss "^7.0.14" +icss-utils@^5.0.0, icss-utils@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" + integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== -ieee754@^1.1.13, ieee754@^1.1.4: +ieee754@^1.1.13, ieee754@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -iferr@^0.1.5: - version "0.1.5" - resolved "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz" - integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= +ignore-walk@^6.0.0: + version "6.0.3" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-6.0.3.tgz#0fcdb6decaccda35e308a7b0948645dd9523b7bb" + integrity sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA== + dependencies: + minimatch "^9.0.0" -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== +ignore@^5.2.0: + version "5.2.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== -ignore@^5.1.4, ignore@^5.1.8: - version "5.1.8" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== +image-size@^0.7.4: + version "0.7.5" + resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.7.5.tgz#269f357cf5797cb44683dfa99790e54c705ead04" + integrity sha512-Hiyv+mXHfFEP7LzUL/llg9RwFxxY+o9N3JVLIeG5E7iFIFAalxvRU9UZthBdYDEVnzHMgjnKJPPpay5BWf1g9g== immediate@~3.0.5: version "3.0.6" @@ -6089,395 +6855,340 @@ immediate@~3.0.5: import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" - resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== dependencies: parent-module "^1.0.0" resolve-from "^4.0.0" -import-lazy@^4.0.0: +import-from@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz" - integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== + resolved "https://registry.yarnpkg.com/import-from/-/import-from-4.0.0.tgz#2710b8d66817d232e16f4166e319248d3d5492e2" + integrity sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ== -import-local@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz" - integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== +import-local@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== dependencies: - pkg-dir "^3.0.0" - resolve-cwd "^2.0.0" + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +imul@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/imul/-/imul-1.0.1.tgz#9d5867161e8b3de96c2c38d5dc7cb102f35e2ac9" + integrity sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA== imurmurhash@^0.1.4: version "0.1.4" - resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== indent-string@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== -indexes-of@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz" - integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= - -infer-owner@^1.0.3, infer-owner@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== +indent-string@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-5.0.0.tgz#4fd2980fccaf8622d14c64d694f4cf33c81951a5" + integrity sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg== inflight@^1.0.4: version "1.0.6" - resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -inherits@2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" - integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= - inherits@2.0.3: version "2.0.3" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== -ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: +ini@^1.3.4, ini@~1.3.0: version "1.3.8" - resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== +ini@^4.1.0, ini@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ini/-/ini-4.1.1.tgz#d95b3d843b1e906e56d6747d5447904ff50ce7a1" + integrity sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g== + +init-package-json@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-5.0.0.tgz#030cf0ea9c84cfc1b0dc2e898b45d171393e4b40" + integrity sha512-kBhlSheBfYmq3e0L1ii+VKe3zBTLL5lDCDWR+f9dLmEGSB3MqLlMlsolubSsyI88Bg6EA+BIMlomAnQ1SwgQBw== + dependencies: + npm-package-arg "^10.0.0" + promzard "^1.0.0" + read "^2.0.0" + read-package-json "^6.0.0" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + validate-npm-package-name "^5.0.0" + inline-style-parser@0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== -inquirer@^7.0.0: - version "7.3.3" - resolved "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz" - integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== +inquirer@8.2.5: + version "8.2.5" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.5.tgz#d8654a7542c35a9b9e069d27e2df4858784d54f8" + integrity sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ== dependencies: ansi-escapes "^4.2.1" - chalk "^4.1.0" + chalk "^4.1.1" cli-cursor "^3.1.0" cli-width "^3.0.0" external-editor "^3.0.3" figures "^3.0.0" - lodash "^4.17.19" + lodash "^4.17.21" mute-stream "0.0.8" + ora "^5.4.1" run-async "^2.4.0" - rxjs "^6.6.0" + rxjs "^7.5.5" string-width "^4.1.0" strip-ansi "^6.0.0" through "^2.3.6" + wrap-ansi "^7.0.0" -internal-ip@^4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz" - integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== - dependencies: - default-gateway "^4.2.0" - ipaddr.js "^1.9.0" - -internal-slot@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz" - integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== +internal-slot@^1.0.3, internal-slot@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" + integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== dependencies: - get-intrinsic "^1.1.0" + get-intrinsic "^1.2.0" has "^1.0.3" side-channel "^1.0.4" -interpret@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== +interpret@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4" + integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ== + +into-stream@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-7.0.0.tgz#d1a211e146be8acfdb84dabcbf00fe8205e72936" + integrity sha512-2dYz766i9HprMBasCMvHMuazJ7u4WzhJwo5kb3iPSiW/iRYV6uPari3zHoqZlnuaR7V1bEiNMxikhp37rdBXbw== + dependencies: + from2 "^2.3.0" + p-is-promise "^3.0.0" invariant@^2.2.4: version "2.2.4" - resolved "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== dependencies: loose-envify "^1.0.0" -ip-regex@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz" - integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= +ip-regex@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5" + integrity sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q== -ip@^1.1.0, ip@^1.1.5: - version "1.1.5" - resolved "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz" - integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= +ip@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" + integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== -ipaddr.js@1.9.1, ipaddr.js@^1.9.0: +ipaddr.js@1.9.1: version "1.9.1" - resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== -is-absolute-url@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz" - integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" - -is-alphabetical@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.2.tgz" - integrity sha512-V0xN4BYezDHcBSKb1QHUFMlR4as/XEuCZBzMJUU4n7+Cbt33SmUnSol+pnXFvLxSHNq2CemUXNdaXV6Flg7+xg== +ipaddr.js@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.1.0.tgz#2119bc447ff8c257753b196fc5f1ce08a4cdf39f" + integrity sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ== -is-alphanumerical@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.2.tgz" - integrity sha512-pyfU/0kHdISIgslFfZN9nfY1Gk3MquQgUm1mJTjdkEPpkAKNWuBTSqFwewOpR7N351VkErCiyV71zX7mlQQqsg== +is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" + integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== dependencies: - is-alphabetical "^1.0.0" - is-decimal "^1.0.0" - -is-arguments@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz" - integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + is-typed-array "^1.1.10" is-arrayish@^0.2.1: version "0.2.1" - resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-bigint@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.1.tgz" - integrity sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg== - -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz" - integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== dependencies: - binary-extensions "^1.0.0" + has-bigints "^1.0.1" is-binary-path@~2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: binary-extensions "^2.0.0" is-boolean-object@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz" - integrity sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA== + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== dependencies: - call-bind "^1.0.0" - -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + call-bind "^1.0.2" + has-tostringtag "^1.0.0" is-buffer@^2.0.0: - version "2.0.3" - resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz" - integrity sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw== + version "2.0.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== -is-callable@^1.1.4, is-callable@^1.2.3: - version "1.2.3" - resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz" - integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== is-ci@^3.0.0: version "3.0.1" - resolved "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== dependencies: ci-info "^3.2.0" -is-core-module@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz" - integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== - dependencies: - has "^1.0.3" - -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= +is-cidr@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-4.0.2.tgz#94c7585e4c6c77ceabf920f8cde51b8c0fda8814" + integrity sha512-z4a1ENUajDbEl/Q6/pVBpTR1nBjjEE1X7qb7bmWYanNnPoKAvUCPFKeXV6Fe4mgTkWKBqiHIcwsI3SndiO5FeA== dependencies: - kind-of "^3.0.2" + cidr-regex "^3.1.1" -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== +is-core-module@^2.11.0, is-core-module@^2.5.0, is-core-module@^2.8.1, is-core-module@^2.9.0: + version "2.12.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" + integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== dependencies: - kind-of "^6.0.0" + has "^1.0.3" is-date-object@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz" - integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== - -is-decimal@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.2.tgz" - integrity sha512-TRzl7mOCchnhchN+f3ICUCzYvL9ul7R+TYOsZ8xia++knyZAJfv/uA1FvQXsAnYIl1T3B2X5E/J7Wb1QXiIBXg== - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" + has-tostringtag "^1.0.0" -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" +is-docker@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" + integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== -is-extglob@^2.1.0, is-extglob@^2.1.1: +is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz" - integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: - is-extglob "^2.1.0" + is-extglob "^2.1.1" -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== +is-inside-container@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" + integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== dependencies: - is-extglob "^2.1.1" + is-docker "^3.0.0" -is-hexadecimal@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.2.tgz" - integrity sha512-but/G3sapV3MNyqiDBLrOi4x8uCIw0RY3o/Vb5GT0sMFHrVV7731wFSVy41T5FO1og7G0gXLJh0MkgPRouko/A== +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== -is-negative-zero@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz" - integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== -is-number-object@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz" - integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw== +is-my-ip-valid@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.1.tgz#f7220d1146257c98672e6fba097a9f3f2d348442" + integrity sha512-jxc8cBcOWbNK2i2aTkCZP6i7wkHF1bqKFrwEHuN5Jtg5BSaZHUZQ/JTOJwoV41YvHnOaRyWWh72T/KvfNz9DJg== + +is-my-json-valid@^2.20.0: + version "2.20.6" + resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.20.6.tgz#a9d89e56a36493c77bda1440d69ae0dc46a08387" + integrity sha512-1JQwulVNjx8UqkPE/bqDaxtH4PXCe/2VRh/y3p99heOV87HG4Id5/VfDswd+YiAfHcRTfDlWgISycnHuhZq1aw== + dependencies: + generate-function "^2.0.0" + generate-object-property "^1.1.0" + is-my-ip-valid "^1.0.0" + jsonpointer "^5.0.0" + xtend "^4.0.0" -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== dependencies: - kind-of "^3.0.2" + has-tostringtag "^1.0.0" is-number@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz" - integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= - is-obj@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== -is-path-cwd@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz" - integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== - -is-path-in-cwd@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz" - integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== - dependencies: - is-path-inside "^2.1.0" - -is-path-inside@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz" - integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== - dependencies: - path-is-inside "^1.0.2" +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== -is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: +is-plain-obj@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz" - integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== -is-plain-obj@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz" - integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== +is-plain-obj@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" + integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== is-plain-obj@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== -is-plain-object@^2.0.3, is-plain-object@^2.0.4: +is-plain-object@^2.0.4: version "2.0.4" - resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: isobject "^3.0.1" @@ -6487,23 +7198,25 @@ is-plain-object@^5.0.0: resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== -is-regex@^1.0.4, is-regex@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz" - integrity sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg== +is-property@^1.0.0, is-property@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" + integrity sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g== + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== dependencies: call-bind "^1.0.2" - has-symbols "^1.0.1" - -is-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz" - integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= + has-tostringtag "^1.0.0" -is-regexp@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz" - integrity sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA== +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" is-stream@^1.1.0: version "1.1.0" @@ -6511,219 +7224,284 @@ is-stream@^1.1.0: integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== is-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz" - integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-string@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz" - integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== +is-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" + integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz" - integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== dependencies: - has-symbols "^1.0.1" + has-symbols "^1.0.2" -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= +is-text-path@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" + integrity sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w== + dependencies: + text-extensions "^1.0.0" + +is-typed-array@^1.1.10, is-typed-array@^1.1.9: + version "1.1.10" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" + integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" is-unicode-supported@^0.1.0: version "0.1.0" - resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== -is-windows@^1.0.1, is-windows@^1.0.2: +is-unicode-supported@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz#d824984b616c292a2e198207d4a609983842f714" + integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ== + +is-url@^1.1.0, is-url@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" + integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== + +is-utf8@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q== + +is-weakref@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" -is-wsl@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz" - integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= +is-windows@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" - integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: +isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== -isbinaryfile@^3.0.2: - version "3.0.3" - resolved "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz" - integrity sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw== - dependencies: - buffer-alloc "^1.2.0" - -isbinaryfile@^4.0.10: +isbinaryfile@^4.0.8: version "4.0.10" resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.10.tgz#0c5b5e30c2557a2f06febd37b7322946aaee42b3" integrity sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw== +isbinaryfile@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-5.0.0.tgz#034b7e54989dab8986598cbcea41f66663c65234" + integrity sha512-UDdnyGvMajJUWCkib7Cei/dvyJrrvo4FIrsvSFWdPpXSUorzXrDJ0S+X5Q4ZlasfPjca4yqCNNsjbCeiy8FFeg== + isexe@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= +isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +issue-parser@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/issue-parser/-/issue-parser-6.0.0.tgz#b1edd06315d4f2044a9755daf85fdafde9b4014a" + integrity sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA== dependencies: - isarray "1.0.0" + lodash.capitalize "^4.2.1" + lodash.escaperegexp "^4.1.2" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.uniqby "^4.7.0" -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= +jackspeak@^2.0.3: + version "2.2.1" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.2.1.tgz#655e8cf025d872c9c03d3eb63e8f0c024fef16a6" + integrity sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" jake@^10.8.5: - version "10.8.5" - resolved "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz" - integrity sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw== + version "10.8.7" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f" + integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w== dependencies: async "^3.2.3" chalk "^4.0.2" - filelist "^1.0.1" - minimatch "^3.0.4" + filelist "^1.0.4" + minimatch "^3.1.2" + +java-properties@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/java-properties/-/java-properties-1.0.2.tgz#ccd1fa73907438a5b5c38982269d0e771fe78211" + integrity sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ== -jest-worker@^25.4.0: - version "25.5.0" - resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-25.5.0.tgz" - integrity sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw== +jest-worker@^27.4.5: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== dependencies: + "@types/node" "*" merge-stream "^2.0.0" - supports-color "^7.0.0" + supports-color "^8.0.0" + +js-string-escape@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef" + integrity sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg== "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - js-yaml@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" jsesc@^2.5.1: version "2.5.2" - resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== jsesc@~0.5.0: version "0.5.0" - resolved "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== -json-buffer@3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz" - integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== -json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: +json-parse-better-errors@^1.0.1: version "1.0.2" - resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== -json-parse-even-better-errors@^2.3.0: +json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: version "2.3.1" - resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== +json-parse-even-better-errors@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz#2cb2ee33069a78870a0c7e3da560026b89669cf7" + integrity sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA== + json-schema-traverse@^0.4.1: version "0.4.1" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-schema-traverse@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== json-schema-typed@^7.0.3: version "7.0.3" - resolved "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-7.0.3.tgz" + resolved "https://registry.yarnpkg.com/json-schema-typed/-/json-schema-typed-7.0.3.tgz#23ff481b8b4eebcd2ca123b4fa0409e66469a2d9" integrity sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A== json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json-stringify-nice@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz#2c937962b80181d3f317dd39aa323e14f5a60a67" + integrity sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw== json-stringify-safe@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== -json3@^3.3.3: - version "3.3.3" - resolved "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz" - integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== - -json5@^1.0.1: +json5@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== dependencies: minimist "^1.2.0" -json5@^2.1.0, json5@^2.1.2, json5@^2.2.0, json5@^2.2.1: +json5@^2.1.2, json5@^2.2.0, json5@^2.2.2: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== +jsonc-parser@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" + integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== + jsonfile@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== optionalDependencies: graceful-fs "^4.1.6" jsonfile@^6.0.1: version "6.1.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== dependencies: universalify "^2.0.0" optionalDependencies: graceful-fs "^4.1.6" -jsonwebtoken@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz#d0faf9ba1cc3a56255fe49c0961a67e520c1926d" - integrity sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw== - dependencies: - jws "^3.2.2" - lodash "^4.17.21" - ms "^2.1.1" - semver "^7.3.8" +jsonparse@^1.2.0, jsonparse@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== -"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.1.0: - version "3.2.0" - resolved "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz" - integrity sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q== +jsonpointer@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-5.0.1.tgz#2110e0af0900fd37467b5907ecd13a7884a1b559" + integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ== + +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.3: + version "3.3.4" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.4.tgz#b896535fed5b867650acce5a9bd4135ffc7b3bf9" + integrity sha512-fX2TVdCViod6HwKEtSWGHs57oFhVfCMwieb9PuRDgjDPh5XeqJiHFFFJCHxU5cnTc3Bu/GRL+kPiFmw8XWOfKw== dependencies: - array-includes "^3.1.2" - object.assign "^4.1.2" + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + object.assign "^4.1.4" + object.values "^1.1.6" jszip@^3.1.0: version "3.10.1" @@ -6735,57 +7513,31 @@ jszip@^3.1.0: readable-stream "~2.3.6" setimmediate "^1.0.5" -jwa@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" - integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== - dependencies: - buffer-equal-constant-time "1.0.1" - ecdsa-sig-formatter "1.0.11" - safe-buffer "^5.0.1" - -jws@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" - integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== - dependencies: - jwa "^1.4.1" - safe-buffer "^5.0.1" - -keyv@^3.0.0: +junk@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz" - integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== - dependencies: - json-buffer "3.0.0" + resolved "https://registry.yarnpkg.com/junk/-/junk-3.1.0.tgz#31499098d902b7e98c5d9b9c80f43457a88abfa1" + integrity sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ== -killable@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz" - integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== +just-diff-apply@^5.2.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-5.5.0.tgz#771c2ca9fa69f3d2b54e7c3f5c1dfcbcc47f9f0f" + integrity sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw== -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= - dependencies: - is-buffer "^1.1.5" +just-diff@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-6.0.2.tgz#03b65908543ac0521caf6d8eb85035f7d27ea285" + integrity sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA== -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= +keyv@^4.0.0: + version "4.5.2" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.2.tgz#0e310ce73bf7851ec702f2eaf46ec4e3805cce56" + integrity sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g== dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + json-buffer "3.0.1" -kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3: +kind-of@^6.0.2, kind-of@^6.0.3: version "6.0.3" - resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== kleur@^4.0.3: @@ -6793,44 +7545,152 @@ kleur@^4.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== -known-css-properties@^0.21.0: - version "0.21.0" - resolved "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.21.0.tgz" - integrity sha512-sZLUnTqimCkvkgRS+kbPlYW5o8q5w1cu+uIisKpEWkj31I8mx8kNG162DwRav8Zirkva6N5uoFsm9kzK4mUXjw== - language-subtag-registry@~0.3.2: - version "0.3.21" - resolved "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz" - integrity sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg== + version "0.3.22" + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" + integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== -language-tags@^1.0.5: +language-tags@=1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz" - integrity sha1-0yHbxNowuovzAk4ED6XBRmH5GTo= + resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" + integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ== dependencies: language-subtag-registry "~0.3.2" +launch-editor@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.6.0.tgz#4c0c1a6ac126c572bd9ff9a30da1d2cae66defd7" + integrity sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ== + dependencies: + picocolors "^1.0.0" + shell-quote "^1.7.3" + lazy-val@^1.0.4, lazy-val@^1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz" + resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.5.tgz#6cf3b9f5bc31cee7ee3e369c0832b7583dcd923d" integrity sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q== -levn@^0.3.0, levn@~0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - levn@^0.4.1: version "0.4.1" - resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== dependencies: prelude-ls "^1.2.1" type-check "~0.4.0" +libnpmaccess@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-7.0.2.tgz#7f056c8c933dd9c8ba771fa6493556b53c5aac52" + integrity sha512-vHBVMw1JFMTgEk15zRsJuSAg7QtGGHpUSEfnbcRL1/gTBag9iEfJbyjpDmdJmwMhvpoLoNBtdAUCdGnaP32hhw== + dependencies: + npm-package-arg "^10.1.0" + npm-registry-fetch "^14.0.3" + +libnpmdiff@^5.0.18: + version "5.0.18" + resolved "https://registry.yarnpkg.com/libnpmdiff/-/libnpmdiff-5.0.18.tgz#58dae566f30f4ebcd1de8834530a3da739555623" + integrity sha512-KJeZxdI+tvsJMjFvyDOqg4lkcewRU8njf7N97uJXhW6IWr0w2nvICnHq5jt7gcmo2I9p9Tq6cu+6q+/2DrK9qg== + dependencies: + "@npmcli/arborist" "^6.2.10" + "@npmcli/disparity-colors" "^3.0.0" + "@npmcli/installed-package-contents" "^2.0.2" + binary-extensions "^2.2.0" + diff "^5.1.0" + minimatch "^9.0.0" + npm-package-arg "^10.1.0" + pacote "^15.0.8" + tar "^6.1.13" + +libnpmexec@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/libnpmexec/-/libnpmexec-6.0.1.tgz#187aac7f49b5ad4be1c0c446716f74a9adaeae02" + integrity sha512-4CLWMjGSthYC/UED6Z2rNN6oR/5kHqddmfArP4L6mdGefLU3aA7SnjLIGsFmc92Bkj4ktnqj3OwD5mYI81nOkw== + dependencies: + "@npmcli/arborist" "^6.2.10" + "@npmcli/run-script" "^6.0.0" + ci-info "^3.7.1" + npm-package-arg "^10.1.0" + npmlog "^7.0.1" + pacote "^15.0.8" + proc-log "^3.0.0" + read "^2.0.0" + read-package-json-fast "^3.0.2" + semver "^7.3.7" + walk-up-path "^3.0.1" + +libnpmfund@^4.0.18: + version "4.0.18" + resolved "https://registry.yarnpkg.com/libnpmfund/-/libnpmfund-4.0.18.tgz#30593edfaa4becc51a1df2b7a715a295aa1da327" + integrity sha512-pJaWkHal9/qncuVQWoqzFvZ7vSBz9YvoBO+q/R+Sq4WYZMsB1qrVCzbYCYhLqfVlSUNV/6DH0BF3AUckHHOhIQ== + dependencies: + "@npmcli/arborist" "^6.2.10" + +libnpmhook@^9.0.3: + version "9.0.3" + resolved "https://registry.yarnpkg.com/libnpmhook/-/libnpmhook-9.0.3.tgz#5dbd6a146feb7e11993d36a26f750ae2347bb1d9" + integrity sha512-wMZe58sI7KLhg0+nUWZW5KdMfjNNcOIIbkoP19BDHYoUF9El7eeUWkGNxUGzpHkPKiGoQ1z/v6CYin4deebeuw== + dependencies: + aproba "^2.0.0" + npm-registry-fetch "^14.0.3" + +libnpmorg@^5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/libnpmorg/-/libnpmorg-5.0.4.tgz#94eec2b84fbef736457eb27894c972ae6f5cac82" + integrity sha512-YqYXLMAN0Y1eJH4w3hUFN9648xfSdvJANMsdeZTOWJOW4Pqp8qapJFzQdqCfUkg+tEuQmnaFQQKXvkMZC51+Mw== + dependencies: + aproba "^2.0.0" + npm-registry-fetch "^14.0.3" + +libnpmpack@^5.0.18: + version "5.0.18" + resolved "https://registry.yarnpkg.com/libnpmpack/-/libnpmpack-5.0.18.tgz#bdabd7798a98a0241a5078df2902cd17049789c0" + integrity sha512-Xvb8FkULAY9VXqMCh+S9bl7bb6l/j+xDXRsfyP0nSezW8QklFA4VWLgZgm9PdGupZWC759CYaIPaaXTkIUPYag== + dependencies: + "@npmcli/arborist" "^6.2.10" + "@npmcli/run-script" "^6.0.0" + npm-package-arg "^10.1.0" + pacote "^15.0.8" + +libnpmpublish@^7.4.0: + version "7.4.0" + resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-7.4.0.tgz#c396e0a56adc1511105cd4d4dec8798b3a5c2680" + integrity sha512-DoMMLif02eWBRDhKMov2TKFEexYaUD24L4QPfbteND2CdgrxCTRM4o8sj0XKcylcwcRxcp8i/IKeWTq0lPP53g== + dependencies: + ci-info "^3.6.1" + normalize-package-data "^5.0.0" + npm-package-arg "^10.1.0" + npm-registry-fetch "^14.0.3" + proc-log "^3.0.0" + semver "^7.3.7" + sigstore "^1.4.0" + ssri "^10.0.1" + +libnpmsearch@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/libnpmsearch/-/libnpmsearch-6.0.2.tgz#b6a531a312855dd3bf84dd273b1033dd09b4cbec" + integrity sha512-p+5BF19AvnVg8mcIQhy6yWhI6jHQRVMYaIaKeITEfYAffWsqbottA/WZdMtHL76hViC6SFM1WdclM1w5eAIa1g== + dependencies: + npm-registry-fetch "^14.0.3" + +libnpmteam@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/libnpmteam/-/libnpmteam-5.0.3.tgz#196657e9d87c0cc914c44fee588ad2b838074a3c" + integrity sha512-7XOGhi45s+ml6TyrhJUTyrErcoDMKGKfEtiTEco4ofU7BGGAUOalVztKMVLLJgJOOXdIAIlzCHqkTXEuSiyCiA== + dependencies: + aproba "^2.0.0" + npm-registry-fetch "^14.0.3" + +libnpmversion@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/libnpmversion/-/libnpmversion-4.0.2.tgz#cad9cd1b287fcf9576a64edfe71491b49a65d06f" + integrity sha512-n1X70mFHv8Piy4yos+MFWUARSkTbyV5cdsHScaIkuwYvRAF/s2VtYScDzWB4Oe8uNEuGNdjiRR1E/Dh1tMvv6g== + dependencies: + "@npmcli/git" "^4.0.1" + "@npmcli/run-script" "^6.0.0" + json-parse-even-better-errors "^3.0.0" + proc-log "^3.0.0" + semver "^7.3.7" + lie@~3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" @@ -6839,87 +7699,84 @@ lie@~3.3.0: immediate "~3.0.5" lines-and-columns@^1.1.6: - version "1.1.6" - resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz" - integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -lint-staged@^10.5.4: - version "10.5.4" - resolved "https://registry.npmjs.org/lint-staged/-/lint-staged-10.5.4.tgz" - integrity sha512-EechC3DdFic/TdOPgj/RB3FicqE6932LTHCUm0Y2fsD9KGlLB+RwJl2q1IYBIvEsKzDOgn0D4gll+YxG5RsrKg== - dependencies: - chalk "^4.1.0" - cli-truncate "^2.1.0" - commander "^6.2.0" - cosmiconfig "^7.0.0" - debug "^4.2.0" - dedent "^0.7.0" - enquirer "^2.3.6" - execa "^4.1.0" - listr2 "^3.2.2" - log-symbols "^4.0.0" - micromatch "^4.0.2" - normalize-path "^3.0.0" - please-upgrade-node "^3.2.0" - string-argv "0.3.1" - stringify-object "^3.3.0" +lines-and-columns@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-2.0.3.tgz#b2f0badedb556b747020ab8ea7f0373e22efac1b" + integrity sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w== -listr2@^3.2.2: - version "3.4.3" - resolved "https://registry.npmjs.org/listr2/-/listr2-3.4.3.tgz" - integrity sha512-wZmkzNiuinOfwrGqAwTCcPw6aKQGTAMGXwG5xeU1WpDjJNeBA35jGBeWxR3OF+R6Yl5Y3dRG+3vE8t6PDcSNHA== +listr2@^5.0.3: + version "5.0.8" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-5.0.8.tgz#a9379ffeb4bd83a68931a65fb223a11510d6ba23" + integrity sha512-mC73LitKHj9w6v30nLNGPetZIlfpUniNSsxxrbaPcWOjDb92SHPzJPi/t+v1YC/lxKz/AJ9egOjww0qUuFxBpA== dependencies: - chalk "^4.1.0" cli-truncate "^2.1.0" - figures "^3.2.0" - indent-string "^4.0.0" + colorette "^2.0.19" log-update "^4.0.0" p-map "^4.0.0" - rxjs "^6.6.6" + rfdc "^1.3.0" + rxjs "^7.8.0" through "^2.3.8" wrap-ansi "^7.0.0" +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + integrity sha512-3p6ZOGNbiX4CdvEd1VcE6yi78UrGNpjHO33noGwHCnT/o2fyllJDepsm8+mFFv/DvtwFHht5HIHSyOy5a+ChVQ== + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + load-json-file@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz" - integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== dependencies: graceful-fs "^4.1.2" parse-json "^4.0.0" pify "^3.0.0" strip-bom "^3.0.0" -loader-runner@^2.4.0: - version "2.4.0" - resolved "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz" - integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== - -loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: - version "1.4.2" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.2.tgz#29a957f3a63973883eb684f10ffd3d151fec01a3" - integrity sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^1.0.1" +loader-runner@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" + integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== loader-utils@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz" - integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== + version "2.0.4" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" + integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== dependencies: big.js "^5.2.2" emojis-list "^3.0.0" json5 "^2.1.2" +local-pkg@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.4.3.tgz#0ff361ab3ae7f1c19113d9bb97b98b905dbc4963" + integrity sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g== + localized-strings@^0.2.0: version "0.2.4" - resolved "https://registry.npmjs.org/localized-strings/-/localized-strings-0.2.4.tgz" + resolved "https://registry.yarnpkg.com/localized-strings/-/localized-strings-0.2.4.tgz#9d61c06b60cc7b5edf7c46e6c7f2d1ecb84aeb2c" integrity sha512-TKDhqFPkIIN/if2FSvVVZTaM/GP9TzfgdQ2uY65mr32xgFu5nqkKXprXbzy5rfx32DF5LDvS/y1UqYF/mAscYA== +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + locate-path@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== dependencies: p-locate "^3.0.0" @@ -6927,39 +7784,118 @@ locate-path@^3.0.0: locate-path@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== dependencies: p-locate "^4.1.0" -lodash-es@^4.17.15: +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +locate-path@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-7.2.0.tgz#69cb1779bd90b35ab1e771e1f2f89a202c2a8a8a" + integrity sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA== + dependencies: + p-locate "^6.0.0" + +lodash-es@^4.17.15, lodash-es@^4.17.21: version "4.17.21" - resolved "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== +lodash._reinterpolate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" + integrity sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA== + +lodash.capitalize@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz#f826c9b4e2a8511d84e3aca29db05e1a4f3b72a9" + integrity sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw== + lodash.debounce@^4.0.8: version "4.0.8" - resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== lodash.escaperegexp@^4.1.2: version "4.1.2" - resolved "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz" + resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" integrity sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw== -lodash.isequal@^4.5.0: +lodash.get@^4.0.0: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ== + +lodash.ismatch@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz#756cb5150ca3ba6f11085a78849645f188f85f37" + integrity sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g== + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== + +lodash.map@^4.5.1: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" + integrity sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.mergewith@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz#617121f89ac55f59047c7aec1ccd6654c6590f55" + integrity sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ== + +lodash.template@^4.2.2: version "4.5.0" - resolved "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz" - integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== + resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" + integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== + dependencies: + lodash._reinterpolate "^3.0.0" + lodash.templatesettings "^4.0.0" + +lodash.templatesettings@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" + integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== + dependencies: + lodash._reinterpolate "^3.0.0" -lodash@^4.0.1, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.5, lodash@^4.2.0: +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== + +lodash.uniqby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz#d99c07a669e9e6d24e1362dfe266c67616af1302" + integrity sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww== + +lodash@4.17.21, lodash@^4.0.1, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4: version "4.17.21" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -log-symbols@^4.0.0: +log-symbols@^4.0.0, log-symbols@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== dependencies: chalk "^4.1.0" @@ -6967,7 +7903,7 @@ log-symbols@^4.0.0: log-update@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== dependencies: ansi-escapes "^4.3.0" @@ -6975,116 +7911,160 @@ log-update@^4.0.0: slice-ansi "^4.0.0" wrap-ansi "^6.2.0" -loglevel@^1.6.8: - version "1.7.1" - resolved "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz" - integrity sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw== - -longest-streak@^2.0.0: - version "2.0.4" - resolved "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz" - integrity sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg== +longest@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/longest/-/longest-2.0.1.tgz#781e183296aa94f6d4d916dc335d0d17aefa23f8" + integrity sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q== -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" - resolved "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== dependencies: js-tokens "^3.0.0 || ^4.0.0" +loupe@^2.3.1, loupe@^2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.6.tgz#76e4af498103c532d1ecc9be102036a21f787b53" + integrity sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA== + dependencies: + get-func-name "^2.0.0" + lower-case@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== dependencies: tslib "^2.0.3" -lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - lowercase-keys@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== lru-cache@^5.1.1: version "5.1.1" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== dependencies: yallist "^3.0.2" lru-cache@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: yallist "^4.0.0" -make-dir@^2.0.0, make-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== +lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: + version "7.18.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" + integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== + +"lru-cache@^9.1.1 || ^10.0.0": + version "10.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.0.tgz#b9e2a6a72a129d81ab317202d93c7691df727e61" + integrity sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw== + +macos-alias@~0.2.5: + version "0.2.11" + resolved "https://registry.yarnpkg.com/macos-alias/-/macos-alias-0.2.11.tgz#feeea6c13ba119814a43fc43c470b31e59ef718a" + integrity sha512-zIUs3+qpml+w3wiRuADutd7XIO8UABqksot10Utl/tji4UxZzLG4fWDC+yJZoO8/Ehg5RqsvSRE/6TS5AEOeWw== + dependencies: + nan "^2.4.0" + +magic-string@^0.30.0: + version "0.30.0" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.0.tgz#fd58a4748c5c4547338a424e90fa5dd17f4de529" + integrity sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ== dependencies: - pify "^4.0.1" - semver "^5.6.0" + "@jridgewell/sourcemap-codec" "^1.4.13" -make-dir@^3.0.2, make-dir@^3.1.0: +make-dir@^3.0.2: version "3.1.0" - resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== dependencies: semver "^6.0.0" -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +make-fetch-happen@^11.0.0, make-fetch-happen@^11.0.1, make-fetch-happen@^11.0.3, make-fetch-happen@^11.1.1: + version "11.1.1" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz#85ceb98079584a9523d4bf71d32996e7e208549f" + integrity sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w== + dependencies: + agentkeepalive "^4.2.1" + cacache "^17.0.0" + http-cache-semantics "^4.1.1" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^7.7.1" + minipass "^5.0.0" + minipass-fetch "^3.0.0" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^0.6.3" + promise-retry "^2.0.1" + socks-proxy-agent "^7.0.0" + ssri "^10.0.0" + +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" map-obj@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz" - integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== map-obj@^4.0.0: - version "4.2.0" - resolved "https://registry.npmjs.org/map-obj/-/map-obj-4.2.0.tgz" - integrity sha512-NAq0fCmZYGz9UFEQyndp7sisrow4GroyGeKluyKC/chuITZsPyOyC1UJZPJlVFImhXdROIP5xqouRLThT3BbpQ== + version "4.3.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" + integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= +marked-terminal@^5.1.1: + version "5.2.0" + resolved "https://registry.yarnpkg.com/marked-terminal/-/marked-terminal-5.2.0.tgz#c5370ec2bae24fb2b34e147b731c94fa933559d3" + integrity sha512-Piv6yNwAQXGFjZSaiNljyNFw7jKDdGrw70FSbtxEyldLsyeuV5ZHm/1wW++kWbrOF1VPnUgYOhB2oLL0ZpnekA== dependencies: - object-visit "^1.0.0" + ansi-escapes "^6.2.0" + cardinal "^2.1.1" + chalk "^5.2.0" + cli-table3 "^0.6.3" + node-emoji "^1.11.0" + supports-hyperlinks "^2.3.0" + +marked@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/marked/-/marked-5.1.0.tgz#cf51f03ba04dfb3469774029fd0106d258658767" + integrity sha512-z3/nBe7aTI8JDszlYLk7dDVNpngjw0o1ZJtrA9kIfkkHcIF+xH7mO23aISl4WxP83elU+MFROgahqdpd05lMEQ== matcher@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/matcher/-/matcher-3.0.0.tgz#bd9060f4c5b70aa8041ccc6f80368760994f30ca" integrity sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng== dependencies: escape-string-regexp "^4.0.0" material-colors@^1.2.1: version "1.2.6" - resolved "https://registry.npmjs.org/material-colors/-/material-colors-1.2.6.tgz" + resolved "https://registry.yarnpkg.com/material-colors/-/material-colors-1.2.6.tgz#6d1958871126992ceecc72f4bcc4d8f010865f46" integrity sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg== -mathml-tag-names@^2.1.3: - version "2.1.3" - resolved "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz" - integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg== - -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== +md5-hex@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/md5-hex/-/md5-hex-3.0.1.tgz#be3741b510591434b2784d79e556eefc2c9a8e5c" + integrity sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw== dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" + blueimp-md5 "^2.10.0" mdast-util-definitions@^5.0.0: version "5.1.2" @@ -7095,17 +8075,6 @@ mdast-util-definitions@^5.0.0: "@types/unist" "^2.0.0" unist-util-visit "^4.0.0" -mdast-util-from-markdown@^0.8.0: - version "0.8.5" - resolved "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz" - integrity sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ== - dependencies: - "@types/mdast" "^3.0.0" - mdast-util-to-string "^2.0.0" - micromark "~2.11.0" - parse-entities "^2.0.0" - unist-util-stringify-position "^2.0.0" - mdast-util-from-markdown@^1.0.0: version "1.3.1" resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz#9421a5a247f10d31d2faed2a30df5ec89ceafcf0" @@ -7138,23 +8107,6 @@ mdast-util-to-hast@^12.1.0: unist-util-position "^4.0.0" unist-util-visit "^4.0.0" -mdast-util-to-markdown@^0.6.0: - version "0.6.5" - resolved "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz" - integrity sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ== - dependencies: - "@types/unist" "^2.0.0" - longest-streak "^2.0.0" - mdast-util-to-string "^2.0.0" - parse-entities "^2.0.0" - repeat-string "^1.0.0" - zwitch "^1.0.0" - -mdast-util-to-string@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz" - integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w== - mdast-util-to-string@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz#66f7bb6324756741c5f47a53557f0cbf16b6f789" @@ -7162,50 +8114,39 @@ mdast-util-to-string@^3.1.0: dependencies: "@types/mdast" "^3.0.0" -mdn-data@2.0.14: - version "2.0.14" - resolved "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz" - integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== - media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== -memoize-one@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/memoize-one/-/memoize-one-5.1.1.tgz" - integrity sha512-HKeeBpWvqiVJD57ZUAsJNm71eHTykffzcLZVYWiVfQeI1rJtuEaS7hQiEpWfVVk18donPwJEcFKIkCmPJNOhHA== - -memory-fs@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz" - integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= +mem@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" + integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" -memory-fs@^0.5.0: - version "0.5.0" - resolved "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz" - integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== +memfs@^3.4.1, memfs@^3.4.3: + version "3.6.0" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.6.0.tgz#d7a2110f86f79dd950a8b6df6d57bc984aa185f6" + integrity sha512-EGowvkkgbMcIChjMTMkESFDbZeSh8xZ7kNSF0hAiAN4Jh6jgHCRS0Ga/+C8y6Au+oqpezRHCfPsmJ2+DwAgiwQ== dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" + fs-monkey "^1.0.4" -memorystream@^0.3.1: - version "0.3.1" - resolved "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz" - integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI= +memoize-one@^5.1.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e" + integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q== -meow@^9.0.0: - version "9.0.0" - resolved "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz" - integrity sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ== +meow@^8.1.2: + version "8.1.2" + resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" + integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== dependencies: "@types/minimist" "^1.2.0" camelcase-keys "^6.2.2" - decamelize "^1.2.0" decamelize-keys "^1.1.0" hard-rejection "^2.1.0" minimist-options "4.1.0" @@ -7223,14 +8164,19 @@ merge-descriptors@1.0.1: merge-stream@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -merge2@^1.3.0: +merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" - resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== +merge@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/merge/-/merge-2.1.1.tgz#59ef4bf7e0b3e879186436e8481c06a6c162ca98" + integrity sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w== + methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" @@ -7430,67 +8376,20 @@ micromark@^3.0.0: micromark-util-types "^1.0.1" uvu "^0.5.0" -micromark@~2.11.0: - version "2.11.4" - resolved "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz" - integrity sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA== - dependencies: - debug "^4.0.0" - parse-entities "^2.0.0" - -micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -micromatch@^4.0.2: - version "4.0.2" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz" - integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== - dependencies: - braces "^3.0.1" - picomatch "^2.0.5" - -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz" - integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== +micromatch@^4.0.0, micromatch@^4.0.2, micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" + braces "^3.0.2" + picomatch "^2.3.1" -mime-db@1.46.0, "mime-db@>= 1.43.0 < 2": - version "1.46.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz" - integrity sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ== - -mime-db@1.52.0: +mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": version "1.52.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.17: - version "2.1.29" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz" - integrity sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ== - dependencies: - mime-db "1.46.0" - -mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== @@ -7502,124 +8401,142 @@ mime@1.6.0: resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== -mime@^2.4.4, mime@^2.5.2: - version "2.5.2" - resolved "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz" - integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== +mime@^2.5.2: + version "2.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" + integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== + +mime@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7" + integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== -mimic-fn@^2.1.0: +mimic-fn@^2.0.0, mimic-fn@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== mimic-fn@^3.0.0: version "3.1.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-3.1.0.tgz#65755145bbf3e36954b949c16450427451d5ca74" integrity sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ== -mimic-response@^1.0.0, mimic-response@^1.0.1: +mimic-fn@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" + integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== + +mimic-response@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== mimic-response@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== min-indent@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== -mini-create-react-context@^0.4.0: - version "0.4.1" - resolved "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz" - integrity sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ== - dependencies: - "@babel/runtime" "^7.12.1" - tiny-warning "^1.0.3" - -mini-css-extract-plugin@^0.9.0: - version "0.9.0" - resolved "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz" - integrity sha512-lp3GeY7ygcgAmVIcRPBVhIkf8Us7FZjA+ILpal44qLdSu11wmjKQ3d9k15lfD7pO4esu9eUIAW7qiYIBppv40A== - dependencies: - loader-utils "^1.1.0" - normalize-url "1.9.1" - schema-utils "^1.0.0" - webpack-sources "^1.1.0" - -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: +minimalistic-assert@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== -minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz" - integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= - -minimatch@3.0.4, minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^3.1.2: +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" -minimatch@^5.0.1: - version "5.1.0" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz" - integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== +minimatch@^5.0.1, minimatch@^5.1.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^9.0.0, minimatch@^9.0.1: + version "9.0.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.2.tgz#397e387fff22f6795844d00badc903a3d5de7057" + integrity sha512-PZOT9g5v2ojiTL7r1xF6plNHLtOeTpSlDI007As2NlA2aYBMfVom17yqa6QzhmDP8QOhn7LjHTg7DFCVSSa6yg== dependencies: brace-expansion "^2.0.1" minimist-options@4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== dependencies: arrify "^1.0.1" is-plain-obj "^1.1.0" kind-of "^6.0.3" -minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5: +minimist@1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" + integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== + +minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@^1.2.6: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== minipass-collect@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== dependencies: minipass "^3.0.0" +minipass-fetch@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.3.tgz#d9df70085609864331b533c960fd4ffaa78d15ce" + integrity sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ== + dependencies: + minipass "^5.0.0" + minipass-sized "^1.0.3" + minizlib "^2.1.2" + optionalDependencies: + encoding "^0.1.13" + minipass-flush@^1.0.5: version "1.0.5" - resolved "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== dependencies: minipass "^3.0.0" -minipass-pipeline@^1.2.2: +minipass-json-stream@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz#7edbb92588fbfc2ff1db2fc10397acb7b6b44aa7" + integrity sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg== + dependencies: + jsonparse "^1.3.1" + minipass "^3.0.0" + +minipass-pipeline@^1.2.4: version "1.2.4" - resolved "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== dependencies: minipass "^3.0.0" -minipass@^3.0.0, minipass@^3.1.1: - version "3.1.3" - resolved "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz" - integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0: + version "3.3.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== dependencies: yallist "^4.0.0" @@ -7628,7 +8545,12 @@ minipass@^5.0.0: resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== -minizlib@^2.1.1: +"minipass@^5.0.0 || ^6.0.2": + version "6.0.2" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-6.0.2.tgz#542844b6c4ce95b202c0995b0a471f1229de4c81" + integrity sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w== + +minizlib@^2.1.1, minizlib@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== @@ -7636,58 +8558,37 @@ minizlib@^2.1.1: minipass "^3.0.0" yallist "^4.0.0" -mississippi@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz" - integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== - dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^3.0.0" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: version "0.5.3" - resolved "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz" + resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== -mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.4, mkdirp@^0.5.5: - version "0.5.5" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== +mkdirp@^0.5.1: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== dependencies: - minimist "^1.2.5" + minimist "^1.2.6" mkdirp@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -move-concurrently@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz" - integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= +mlly@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.4.0.tgz#830c10d63f1f97bd8785377b24dc2a15d972832b" + integrity sha512-ua8PAThnTwpprIaU47EPeZ/bPUVp2QYBbWMphUQpVdBI3Lgqzm5KZQ45Agm3YJedHXaIHl6pBGabaLSUPPSptg== dependencies: - aproba "^1.1.1" - copy-concurrently "^1.0.0" - fs-write-stream-atomic "^1.0.8" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.3" + acorn "^8.9.0" + pathe "^1.1.1" + pkg-types "^1.0.3" + ufo "^1.1.2" + +modify-values@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" + integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== mri@^1.1.0: version "1.2.0" @@ -7699,170 +8600,209 @@ ms@2.0.0: resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== -ms@2.1.2, ms@^2.1.1: +ms@2.1.2: version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@2.1.3: +ms@2.1.3, ms@^2.0.0, ms@^2.1.1, ms@^2.1.2: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -multicast-dns-service-types@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz" - integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= - -multicast-dns@^6.0.1: - version "6.2.3" - resolved "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz" - integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== +multicast-dns@^7.2.5: + version "7.2.5" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced" + integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== dependencies: - dns-packet "^1.3.1" + dns-packet "^5.2.2" thunky "^1.0.2" +"murmur-32@^0.1.0 || ^0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/murmur-32/-/murmur-32-0.2.0.tgz#bf42b7567880db13cd92ca0c2c72eeea884f44c7" + integrity sha512-ZkcWZudylwF+ir3Ld1n7gL6bI2mQAzXvSobPwVtu8aYi2sbXeipeSkdcanRLzIofLcM5F53lGaKm2dk7orBi7Q== + dependencies: + encode-utf8 "^1.0.3" + fmix "^0.1.0" + imul "^1.0.0" + mute-stream@0.0.8: version "0.0.8" - resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -nan@^2.12.1: - version "2.16.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.16.0.tgz#664f43e45460fb98faf00edca0bb0d7b8dce7916" - integrity sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA== - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" +mute-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" + integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== + +nan@^2.4.0: + version "2.17.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.17.0.tgz#c0150a2368a182f033e9aa5195ec76ea41a199cb" + integrity sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ== + +nanoid@^3.3.6: + version "3.3.6" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" + integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== napi-build-utils@^1.0.1: version "1.0.2" - resolved "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== +natural-compare-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== + natural-compare@^1.4.0: version "1.4.0" - resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -negotiator@0.6.3: +negotiator@0.6.3, negotiator@^0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== -neo-async@^2.5.0, neo-async@^2.6.1: +neo-async@^2.6.0, neo-async@^2.6.2: version "2.6.2" - resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== +nerf-dart@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/nerf-dart/-/nerf-dart-1.0.0.tgz#e6dab7febf5ad816ea81cf5c629c5a0ebde72c1a" + integrity sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g== + nice-try@^1.0.4: version "1.0.5" - resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== no-case@^3.0.4: version "3.0.4" - resolved "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== dependencies: lower-case "^2.0.2" tslib "^2.0.3" -node-abi@^3.3.0: - version "3.22.0" - resolved "https://registry.npmjs.org/node-abi/-/node-abi-3.22.0.tgz" - integrity sha512-u4uAs/4Zzmp/jjsD9cyFYDXeISfUWaAVWshPmDZOFOv4Xl4SbzTXm53I04C2uRueYJ+0t5PEtLH/owbn2Npf/w== +node-abi@^3.0.0, node-abi@^3.3.0: + version "3.45.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.45.0.tgz#f568f163a3bfca5aacfce1fbeee1fa2cc98441f5" + integrity sha512-iwXuFrMAcFVi/ZoZiqq8BzAdsLw9kxDfTC0HMyjXfSL/6CSDAGD5UmR7azrAgWV1zKYq7dUUMj4owusBWKLsiQ== dependencies: semver "^7.3.5" -node-addon-api@^1.6.3: - version "1.7.2" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-1.7.2.tgz#3df30b95720b53c24e59948b49532b662444f54d" - integrity sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg== - -node-addon-api@^4.2.0: - version "4.3.0" - resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz" - integrity sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ== +node-abort-controller@^3.0.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/node-abort-controller/-/node-abort-controller-3.1.1.tgz#a94377e964a9a37ac3976d848cb5c765833b8548" + integrity sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ== node-addon-api@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-5.1.0.tgz#49da1ca055e109a23d537e9de43c09cca21eb762" integrity sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA== -node-fetch@^2.6.7: - version "2.6.11" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.11.tgz#cde7fc71deef3131ef80a738919f999e6edfff25" - integrity sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w== +node-addon-api@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-6.1.0.tgz#ac8470034e58e67d0c6f1204a18ae6995d9c0d76" + integrity sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA== + +node-api-version@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/node-api-version/-/node-api-version-0.1.4.tgz#1ed46a485e462d55d66b5aa1fe2821720dedf080" + integrity sha512-KGXihXdUChwJAOHO53bv9/vXcLmdUsZ6jIptbvYvkpKfth+r7jw44JkVxQFA3kX5nQjzjmGu1uAu/xNNLNlI5g== + dependencies: + semver "^7.3.5" + +node-domexception@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" + integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== + +node-emoji@^1.11.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" + integrity sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A== + dependencies: + lodash "^4.17.21" + +node-fetch@^2.6.7: + version "2.6.12" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.12.tgz#02eb8e22074018e3d5a83016649d04df0e348fba" + integrity sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g== + dependencies: + whatwg-url "^5.0.0" + +node-fetch@^3.2.5: + version "3.3.1" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.1.tgz#b3eea7b54b3a48020e46f4f88b9c5a7430d20b2e" + integrity sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow== + dependencies: + data-uri-to-buffer "^4.0.0" + fetch-blob "^3.1.4" + formdata-polyfill "^4.0.10" + +node-forge@^1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" + integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== + +node-gyp-build@4.x.x, node-gyp-build@^4.3.0, node-gyp-build@^4.5.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.0.tgz#0c52e4cbf54bbd28b709820ef7b6a3c2d6209055" + integrity sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ== + +node-gyp@^9.0.0, node-gyp@^9.4.0: + version "9.4.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.4.0.tgz#2a7a91c7cba4eccfd95e949369f27c9ba704f369" + integrity sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg== + dependencies: + env-paths "^2.2.0" + exponential-backoff "^3.1.1" + glob "^7.1.4" + graceful-fs "^4.2.6" + make-fetch-happen "^11.0.3" + nopt "^6.0.0" + npmlog "^6.0.0" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.2" + which "^2.0.2" + +node-loader@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/node-loader/-/node-loader-2.0.0.tgz#9109a6d828703fd3e0aa03c1baec12a798071562" + integrity sha512-I5VN34NO4/5UYJaUBtkrODPWxbobrE4hgDqPrjB25yPkonFhCmZ146vTH+Zg417E9Iwoh1l/MbRs1apc5J295Q== dependencies: - whatwg-url "^5.0.0" - -node-forge@^0.10.0: - version "0.10.0" - resolved "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz" - integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== + loader-utils "^2.0.0" -node-gyp-build@4.x.x, node-gyp-build@^4.3.0: - version "4.4.0" - resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz" - integrity sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ== +node-releases@^2.0.12: + version "2.0.12" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.12.tgz#35627cc224a23bfb06fb3380f2b3afaaa7eb1039" + integrity sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ== -node-libs-browser@^2.2.1: - version "2.2.1" - resolved "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz" - integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== - dependencies: - assert "^1.1.1" - browserify-zlib "^0.2.0" - buffer "^4.3.0" - console-browserify "^1.1.0" - constants-browserify "^1.0.0" - crypto-browserify "^3.11.0" - domain-browser "^1.1.1" - events "^3.0.0" - https-browserify "^1.0.0" - os-browserify "^0.3.0" - path-browserify "0.0.1" - process "^0.11.10" - punycode "^1.2.4" - querystring-es3 "^0.2.0" - readable-stream "^2.3.3" - stream-browserify "^2.0.1" - stream-http "^2.7.2" - string_decoder "^1.0.0" - timers-browserify "^2.0.4" - tty-browserify "0.0.0" - url "^0.11.0" - util "^0.11.0" - vm-browserify "^1.0.1" - -node-loader@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/node-loader/-/node-loader-0.6.0.tgz" - integrity sha1-x5fvUQle1YWZArFX9jhPY2HgWug= +nopt@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d" + integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g== + dependencies: + abbrev "^1.0.0" -node-releases@^2.0.5: - version "2.0.5" - resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz" - integrity sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q== +nopt@^7.0.0, nopt@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-7.2.0.tgz#067378c68116f602f552876194fd11f1292503d7" + integrity sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA== + dependencies: + abbrev "^2.0.0" normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: version "2.5.0" - resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== dependencies: hosted-git-info "^2.1.4" @@ -7870,225 +8810,303 @@ normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-package-data@^3.0.0: - version "3.0.2" - resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.2.tgz" - integrity sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg== +normalize-package-data@^3.0.0, normalize-package-data@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" + integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== dependencies: hosted-git-info "^4.0.1" - resolve "^1.20.0" + is-core-module "^2.5.0" semver "^7.3.4" validate-npm-package-license "^3.0.1" -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= +normalize-package-data@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-5.0.0.tgz#abcb8d7e724c40d88462b84982f7cbf6859b4588" + integrity sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q== dependencies: - remove-trailing-separator "^1.0.1" + hosted-git-info "^6.0.0" + is-core-module "^2.8.1" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz" - integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== -normalize-selector@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz" - integrity sha1-0LFF62kRicY6eNIB3E/bEpPvDAM= +normalize-url@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.0.0.tgz#593dbd284f743e8dcf6a5ddf8fadff149c82701a" + integrity sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw== -normalize-url@1.9.1, normalize-url@^1.9.1: - version "1.9.1" - resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz" - integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= +npm-audit-report@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/npm-audit-report/-/npm-audit-report-5.0.0.tgz#83ac14aeff249484bde81eff53c3771d5048cf95" + integrity sha512-EkXrzat7zERmUhHaoren1YhTxFwsOu5jypE84k6632SXTHcQE1z8V51GC6GVZt8LxkC+tbBcKMUBZAgk8SUSbw== + +npm-bundled@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-3.0.0.tgz#7e8e2f8bb26b794265028491be60321a25a39db7" + integrity sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ== dependencies: - object-assign "^4.0.1" - prepend-http "^1.0.0" - query-string "^4.1.0" - sort-keys "^1.0.0" + npm-normalize-package-bin "^3.0.0" -normalize-url@^4.1.0: - version "4.5.1" - resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz" - integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== +npm-install-checks@^6.0.0, npm-install-checks@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-6.1.1.tgz#b459b621634d06546664207fde16810815808db1" + integrity sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw== + dependencies: + semver "^7.1.1" -npm-conf@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz" - integrity sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw== +npm-normalize-package-bin@^3.0.0, npm-normalize-package-bin@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz#25447e32a9a7de1f51362c61a559233b89947832" + integrity sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ== + +npm-package-arg@^10.0.0, npm-package-arg@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-10.1.0.tgz#827d1260a683806685d17193073cc152d3c7e9b1" + integrity sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA== dependencies: - config-chain "^1.1.11" - pify "^3.0.0" + hosted-git-info "^6.0.0" + proc-log "^3.0.0" + semver "^7.3.5" + validate-npm-package-name "^5.0.0" -npm-run-all@^4.1.5: - version "4.1.5" - resolved "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz" - integrity sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ== +npm-packlist@^7.0.0: + version "7.0.4" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-7.0.4.tgz#033bf74110eb74daf2910dc75144411999c5ff32" + integrity sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q== dependencies: - ansi-styles "^3.2.1" - chalk "^2.4.1" - cross-spawn "^6.0.5" - memorystream "^0.3.1" - minimatch "^3.0.4" - pidtree "^0.3.0" - read-pkg "^3.0.0" - shell-quote "^1.6.1" - string.prototype.padend "^3.0.0" + ignore-walk "^6.0.0" + +npm-pick-manifest@^8.0.0, npm-pick-manifest@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz#c6acd97d1ad4c5dbb80eac7b386b03ffeb289e5f" + integrity sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA== + dependencies: + npm-install-checks "^6.0.0" + npm-normalize-package-bin "^3.0.0" + npm-package-arg "^10.0.0" + semver "^7.3.5" + +npm-profile@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/npm-profile/-/npm-profile-7.0.1.tgz#a37dae08b22e662ece2c6e08946f9fcd9fdef663" + integrity sha512-VReArOY/fCx5dWL66cbJ2OMogTQAVVQA//8jjmjkarboki3V7UJ0XbGFW+khRwiAJFQjuH0Bqr/yF7Y5RZdkMQ== + dependencies: + npm-registry-fetch "^14.0.0" + proc-log "^3.0.0" + +npm-registry-fetch@^14.0.0, npm-registry-fetch@^14.0.3, npm-registry-fetch@^14.0.5: + version "14.0.5" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz#fe7169957ba4986a4853a650278ee02e568d115d" + integrity sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA== + dependencies: + make-fetch-happen "^11.0.0" + minipass "^5.0.0" + minipass-fetch "^3.0.0" + minipass-json-stream "^1.0.1" + minizlib "^2.1.2" + npm-package-arg "^10.0.0" + proc-log "^3.0.0" npm-run-path@^2.0.0: version "2.0.2" - resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== dependencies: path-key "^2.0.0" -npm-run-path@^4.0.0: +npm-run-path@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: path-key "^3.0.0" -nth-check@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== +npm-run-path@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" + integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== + dependencies: + path-key "^4.0.0" + +npm-user-validate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-2.0.0.tgz#7b69bbbff6f7992a1d9a8968d52fd6b6db5431b6" + integrity sha512-sSWeqAYJ2dUPStJB+AEj0DyLRltr/f6YNcvCA7phkB8/RMLMnVsQ41GMwHo/ERZLYNDsyB2wPm7pZo1mqPOl7Q== + +npm@^9.5.0: + version "9.7.2" + resolved "https://registry.yarnpkg.com/npm/-/npm-9.7.2.tgz#95fdbba1b3b8e918f253cac1a45b38655f324ed5" + integrity sha512-LLoOudiSURxzRxfGj+vsD+hKKv2EfxyshDOznxruIkZMouvbaF5sFm4yAwHqxS8aVaOdRl03pRmGpcrFMqMt3g== + dependencies: + "@isaacs/string-locale-compare" "^1.1.0" + "@npmcli/arborist" "^6.2.10" + "@npmcli/config" "^6.2.1" + "@npmcli/map-workspaces" "^3.0.4" + "@npmcli/package-json" "^3.1.1" + "@npmcli/run-script" "^6.0.2" + abbrev "^2.0.0" + archy "~1.0.0" + cacache "^17.1.3" + chalk "^5.2.0" + ci-info "^3.8.0" + cli-columns "^4.0.0" + cli-table3 "^0.6.3" + columnify "^1.6.0" + fastest-levenshtein "^1.0.16" + fs-minipass "^3.0.2" + glob "^10.2.7" + graceful-fs "^4.2.11" + hosted-git-info "^6.1.1" + ini "^4.1.1" + init-package-json "^5.0.0" + is-cidr "^4.0.2" + json-parse-even-better-errors "^3.0.0" + libnpmaccess "^7.0.2" + libnpmdiff "^5.0.18" + libnpmexec "^6.0.1" + libnpmfund "^4.0.18" + libnpmhook "^9.0.3" + libnpmorg "^5.0.4" + libnpmpack "^5.0.18" + libnpmpublish "^7.4.0" + libnpmsearch "^6.0.2" + libnpmteam "^5.0.3" + libnpmversion "^4.0.2" + make-fetch-happen "^11.1.1" + minimatch "^9.0.0" + minipass "^5.0.0" + minipass-pipeline "^1.2.4" + ms "^2.1.2" + node-gyp "^9.4.0" + nopt "^7.2.0" + npm-audit-report "^5.0.0" + npm-install-checks "^6.1.1" + npm-package-arg "^10.1.0" + npm-pick-manifest "^8.0.1" + npm-profile "^7.0.1" + npm-registry-fetch "^14.0.5" + npm-user-validate "^2.0.0" + npmlog "^7.0.1" + p-map "^4.0.0" + pacote "^15.2.0" + parse-conflict-json "^3.0.1" + proc-log "^3.0.0" + qrcode-terminal "^0.12.0" + read "^2.1.0" + semver "^7.5.2" + sigstore "^1.6.0" + ssri "^10.0.4" + supports-color "^9.3.1" + tar "^6.1.15" + text-table "~0.2.0" + tiny-relative-date "^1.3.0" + treeverse "^3.0.0" + validate-npm-package-name "^5.0.0" + which "^3.0.1" + write-file-atomic "^5.0.1" + +npmlog@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" + integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== + dependencies: + are-we-there-yet "^3.0.0" + console-control-strings "^1.1.0" + gauge "^4.0.3" + set-blocking "^2.0.0" + +npmlog@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-7.0.1.tgz#7372151a01ccb095c47d8bf1d0771a4ff1f53ac8" + integrity sha512-uJ0YFk/mCQpLBt+bxN88AKd+gyqZvZDbtiNxk6Waqcj2aPRyfVx8ITawkyQynxUagInjdYT1+qj4NfA5KJJUxg== dependencies: - boolbase "~1.0.0" + are-we-there-yet "^4.0.0" + console-control-strings "^1.1.0" + gauge "^5.0.0" + set-blocking "^2.0.0" nth-check@^2.0.1: version "2.1.1" - resolved "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== dependencies: boolbase "^1.0.0" -num2fraction@^1.2.2: - version "1.2.2" - resolved "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz" - integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= - -object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@^4.1.1: version "4.1.1" - resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-hash@^2.0.3: - version "2.1.1" - resolved "https://registry.npmjs.org/object-hash/-/object-hash-2.1.1.tgz" - integrity sha512-VOJmgmS+7wvXf8CjbQmimtCnEx3IAoLxI3fp2fbWehxrWBcAQFbk+vcwb6vzR0VZv/eNCJ/27j151ZTwqW/JeQ== - -object-inspect@^1.9.0: - version "1.12.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" - integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-is@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/object-is/-/object-is-1.0.2.tgz" - integrity sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ== +object-inspect@^1.12.3, object-inspect@^1.9.0: + version "1.12.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== -object-keys@^1.0.12, object-keys@^1.1.1: +object-keys@^1.1.1: version "1.1.1" - resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= - dependencies: - isobject "^3.0.0" - -object.assign@^4.1.0, object.assign@^4.1.2: - version "4.1.2" - resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz" - integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== +object.assign@^4.1.2, object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" object-keys "^1.1.1" -object.entries@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/object.entries/-/object.entries-1.1.3.tgz" - integrity sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - has "^1.0.3" - -object.fromentries@^2.0.4: - version "2.0.4" - resolved "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz" - integrity sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ== +object.entries@^1.1.5, object.entries@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.6.tgz#9737d0e5b8291edd340a3e3264bb8a3b00d5fa23" + integrity sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - has "^1.0.3" + define-properties "^1.1.4" + es-abstract "^1.20.4" -object.getownpropertydescriptors@^2.0.3: - version "2.1.2" - resolved "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz" - integrity sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ== +object.fromentries@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.6.tgz#cdb04da08c539cffa912dcd368b886e0904bfa73" + integrity sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= +object.hasown@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.2.tgz#f919e21fad4eb38a57bc6345b3afd496515c3f92" + integrity sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw== dependencies: - isobject "^3.0.1" + define-properties "^1.1.4" + es-abstract "^1.20.4" -object.values@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz" - integrity sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw== +object.values@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" + integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - has "^1.0.3" + define-properties "^1.1.4" + es-abstract "^1.20.4" obuf@^1.0.0, obuf@^1.1.2: version "1.1.2" - resolved "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== -octokit@^2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/octokit/-/octokit-2.0.14.tgz#e2057097a6c9cac3e7724a4365b450b7c694a6a4" - integrity sha512-z6cgZBFxirpFEQ1La8Lg83GCs5hOV2EPpkYYdjsGNbfQMv8qUGjq294MiRBCbZqLufviakGsPUxaNKe3JrPmsA== - dependencies: - "@octokit/app" "^13.1.1" - "@octokit/core" "^4.0.4" - "@octokit/oauth-app" "^4.0.6" - "@octokit/plugin-paginate-rest" "^6.0.0" - "@octokit/plugin-rest-endpoint-methods" "^7.0.0" - "@octokit/plugin-retry" "^4.0.3" - "@octokit/plugin-throttling" "^5.0.0" - "@octokit/types" "^9.0.0" - on-finished@2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" @@ -8098,13 +9116,13 @@ on-finished@2.4.1: on-headers@~1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" @@ -8115,133 +9133,238 @@ onetime@^5.1.0, onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -opn@^5.5.0: - version "5.5.0" - resolved "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz" - integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== +onetime@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" + integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== + dependencies: + mimic-fn "^4.0.0" + +open@^8.0.9: + version "8.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== dependencies: - is-wsl "^1.1.0" + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" -optionator@^0.8.3: - version "0.8.3" - resolved "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== +open@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/open/-/open-9.1.0.tgz#684934359c90ad25742f5a26151970ff8c6c80b6" + integrity sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg== dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" + default-browser "^4.0.0" + define-lazy-prop "^3.0.0" + is-inside-container "^1.0.0" + is-wsl "^2.2.0" optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + version "0.9.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" + integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== dependencies: + "@aashutoshrathi/word-wrap" "^1.2.3" deep-is "^0.1.3" fast-levenshtein "^2.0.6" levn "^0.4.1" prelude-ls "^1.2.1" type-check "^0.4.0" - word-wrap "^1.2.3" -original@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/original/-/original-1.0.2.tgz" - integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== +ora@^5.1.0, ora@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== dependencies: - url-parse "^1.4.3" - -os-browserify@^0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz" - integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + bl "^4.1.0" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + is-unicode-supported "^0.1.0" + log-symbols "^4.1.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" os-tmpdir@~1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== -p-cancelable@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz" - integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== +p-cancelable@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" + integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== + +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw== + +p-each-series@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-3.0.0.tgz#d1aed5e96ef29864c897367a7d2a628fdc960806" + integrity sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw== + +p-filter@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-filter/-/p-filter-3.0.0.tgz#ce50e03b24b23930e11679ab8694bd09a2d7ed35" + integrity sha512-QtoWLjXAW++uTX67HZQz1dbTpqBfiidsB6VtQUC9iR85S120+s0T5sO6s+B5MLzFcZkrEd/DGMmCjR+f2Qpxwg== + dependencies: + p-map "^5.1.0" p-finally@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== + +p-is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== + +p-is-promise@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-3.0.0.tgz#58e78c7dfe2e163cf2a04ff869e7c1dba64a5971" + integrity sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ== + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" -p-limit@^2.0.0, p-limit@^2.2.0, p-limit@^2.3.0: +p-limit@^2.0.0, p-limit@^2.2.0: version "2.3.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-limit@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" + integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== + dependencies: + yocto-queue "^1.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== + dependencies: + p-limit "^1.1.0" + p-locate@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== dependencies: p-limit "^2.0.0" p-locate@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== dependencies: p-limit "^2.2.0" -p-map@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz" - integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" -p-map@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz" - integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== +p-locate@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-6.0.0.tgz#3da9a49d4934b901089dca3302fa65dc5a05c04f" + integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw== dependencies: - aggregate-error "^3.0.0" + p-limit "^4.0.0" p-map@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== dependencies: aggregate-error "^3.0.0" -p-retry@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz" - integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== +p-map@^5.1.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-5.5.0.tgz#054ca8ca778dfa4cf3f8db6638ccb5b937266715" + integrity sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg== dependencies: - retry "^0.12.0" + aggregate-error "^4.0.0" + +p-reduce@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-2.1.0.tgz#09408da49507c6c274faa31f28df334bc712b64a" + integrity sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw== + +p-reduce@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-3.0.0.tgz#f11773794792974bd1f7a14c72934248abff4160" + integrity sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q== + +p-retry@^4.5.0: + version "4.6.2" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" + integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== + dependencies: + "@types/retry" "0.12.0" + retry "^0.13.1" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== p-try@^2.0.0: version "2.2.0" - resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -pako@~1.0.2, pako@~1.0.5: +pacote@^15.0.0, pacote@^15.0.8, pacote@^15.2.0: + version "15.2.0" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-15.2.0.tgz#0f0dfcc3e60c7b39121b2ac612bf8596e95344d3" + integrity sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA== + dependencies: + "@npmcli/git" "^4.0.0" + "@npmcli/installed-package-contents" "^2.0.1" + "@npmcli/promise-spawn" "^6.0.1" + "@npmcli/run-script" "^6.0.0" + cacache "^17.0.0" + fs-minipass "^3.0.0" + minipass "^5.0.0" + npm-package-arg "^10.0.0" + npm-packlist "^7.0.0" + npm-pick-manifest "^8.0.0" + npm-registry-fetch "^14.0.0" + proc-log "^3.0.0" + promise-retry "^2.0.1" + read-package-json "^6.0.0" + read-package-json-fast "^3.0.0" + sigstore "^1.3.0" + ssri "^10.0.0" + tar "^6.1.11" + +pako@~1.0.2: version "1.0.11" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== -parallel-transform@^1.1.0: - version "1.2.0" - resolved "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz" - integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== - dependencies: - cyclist "^1.0.1" - inherits "^2.0.3" - readable-stream "^2.1.5" - -param-case@^3.0.3: +param-case@^3.0.4: version "3.0.4" - resolved "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== dependencies: dot-case "^3.0.4" @@ -8249,45 +9372,52 @@ param-case@^3.0.3: parent-module@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: callsites "^3.0.0" -parse-asn1@^5.0.0, parse-asn1@^5.1.5: - version "5.1.6" - resolved "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz" - integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== +parse-author@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/parse-author/-/parse-author-2.0.0.tgz#d3460bf1ddd0dfaeed42da754242e65fb684a81f" + integrity sha512-yx5DfvkN8JsHL2xk2Os9oTia467qnvRgey4ahSm2X8epehBLx/gWLcy5KI+Y36ful5DzGbCS6RazqZGgy1gHNw== dependencies: - asn1.js "^5.2.0" - browserify-aes "^1.0.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - safe-buffer "^5.1.1" + author-regex "^1.0.0" -parse-entities@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz" - integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ== +parse-color@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-color/-/parse-color-1.0.0.tgz#7b748b95a83f03f16a94f535e52d7f3d94658619" + integrity sha512-fuDHYgFHJGbpGMgw9skY/bj3HL/Jrn4l/5rSspy00DoT4RyLnDcRvPxdZ+r6OFwIsgAuhDh4I09tAId4mI12bw== + dependencies: + color-convert "~0.5.0" + +parse-conflict-json@^3.0.0, parse-conflict-json@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/parse-conflict-json/-/parse-conflict-json-3.0.1.tgz#67dc55312781e62aa2ddb91452c7606d1969960c" + integrity sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw== dependencies: - character-entities "^1.0.0" - character-entities-legacy "^1.0.0" - character-reference-invalid "^1.0.0" - is-alphanumerical "^1.0.0" - is-decimal "^1.0.0" - is-hexadecimal "^1.0.0" + json-parse-even-better-errors "^3.0.0" + just-diff "^6.0.0" + just-diff-apply "^5.2.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ== + dependencies: + error-ex "^1.2.0" parse-json@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz" - integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== dependencies: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" -parse-json@^5.0.0: +parse-json@^5.0.0, parse-json@^5.2.0: version "5.2.0" - resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== dependencies: "@babel/code-frame" "^7.0.0" @@ -8295,10 +9425,21 @@ parse-json@^5.0.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" +parse-json@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-7.0.0.tgz#51c0713f233b804eb5adee3ef1e75d3243e0ff06" + integrity sha512-kP+TQYAzAiVnzOlWOe0diD6L35s9bJh0SCn95PIbZFKrOYuIRQsQkeWEYxzVDuHTt9V9YqvYCJ2Qo4z9wdfZPw== + dependencies: + "@babel/code-frame" "^7.21.4" + error-ex "^1.3.2" + json-parse-even-better-errors "^3.0.0" + lines-and-columns "^2.0.3" + type-fest "^3.8.0" + parse-passwd@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz" - integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= + resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q== parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" @@ -8307,305 +9448,209 @@ parseurl@~1.3.2, parseurl@~1.3.3: pascal-case@^3.1.2: version "3.1.2" - resolved "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== dependencies: no-case "^3.0.4" tslib "^2.0.3" -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= - -path-browserify@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz" - integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== - -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz" - integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= - path-exists@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== path-exists@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== +path-exists@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7" + integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== + path-is-absolute@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-is-inside@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz" - integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== +path-key@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" + integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-scurry@^1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.0.tgz#0ffbd4c1f7de9600f98a1405507d9f9acb438ab3" + integrity sha512-tZFEaRQbMLjwrsmidsGJ6wDMv0iazJWk6SfIKnY4Xru8auXgmJkOBa5DUbYFcFD2Rzk2+KDlIiF0GVXNCbgC7g== + dependencies: + lru-cache "^9.1.1 || ^10.0.0" + minipass "^5.0.0 || ^6.0.2" path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== -path-to-regexp@^1.7.0: - version "1.8.0" - resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz" - integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== - dependencies: - isarray "0.0.1" - -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz" - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha512-dUnb5dXUf+kzhC/W/F4e5/SkluXIFf5VUHolW1Eg1irn1hGWjPGdsRcvYJ1nD6lhk8Ir7VM0bHJKsYTx8Jx9OQ== dependencies: - pify "^3.0.0" + pify "^2.0.0" path-type@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -pbkdf2@^3.0.3: - version "3.1.1" - resolved "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz" - integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" +pathe@^1.1.0, pathe@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.1.tgz#1dd31d382b974ba69809adc9a7a347e65d84829a" + integrity sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q== + +pathval@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" + integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== pend@~1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz" - integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== picocolors@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1, picomatch@^2.3.0: +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -pidtree@^0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/pidtree/-/pidtree-0.3.0.tgz" - integrity sha512-9CT4NFlDcosssyg8KVFltgokyKZIFjoBxw8CTGy+5F38Y1eQWrt8tRayiUOXE+zVKQnYu5BR8JjCtvK3BcnBhg== - pify@^2.0.0: version "2.3.0" - resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== pify@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= - -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" - integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" - integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz" - integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== +pkg-conf@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-2.1.0.tgz#2126514ca6f2abfebd168596df18ba57867f0058" + integrity sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g== dependencies: - find-up "^3.0.0" + find-up "^2.0.0" + load-json-file "^4.0.0" -pkg-dir@^4.1.0: +pkg-dir@^4.1.0, pkg-dir@^4.2.0: version "4.2.0" - resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: find-up "^4.0.0" +pkg-types@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.0.3.tgz#988b42ab19254c01614d13f4f65a2cfc7880f868" + integrity sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A== + dependencies: + jsonc-parser "^3.2.0" + mlly "^1.2.0" + pathe "^1.1.0" + pkg-up@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== dependencies: find-up "^3.0.0" -please-upgrade-node@^3.2.0: - version "3.2.0" - resolved "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz" - integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg== - dependencies: - semver-compare "^1.0.0" +playwright-core@1.36.0: + version "1.36.0" + resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.36.0.tgz#35d1ed5f364a31e58bc8f06688ab02d538b96eb6" + integrity sha512-7RTr8P6YJPAqB+8j5ATGHqD6LvLLM39sYVNsslh78g8QeLcBs5750c6+msjrHUwwGt+kEbczBj1XB22WMwn+WA== -plist@^3.0.1, plist@^3.0.4: - version "3.0.5" - resolved "https://registry.npmjs.org/plist/-/plist-3.0.5.tgz" - integrity sha512-83vX4eYdQp3vP9SxuYgEM/G/pJQqLUz/V/xzPrzruLs7fz7jxGQ1msZ/mg1nwZxUSuOp4sb+/bEIbRrbzZRxDA== +plist@^3.0.0, plist@^3.0.4, plist@^3.0.5: + version "3.0.6" + resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.6.tgz#7cfb68a856a7834bca6dbfe3218eb9c7740145d3" + integrity sha512-WiIVYyrp8TD4w8yCvyeIr+lkmrGRd5u0VbRnU+tP/aRLxP/YadJUYOMZJ/6hIa3oUyVCsycXvtNRgd5XBJIbiA== dependencies: base64-js "^1.5.1" - xmlbuilder "^9.0.7" - -portfinder@^1.0.26: - version "1.0.28" - resolved "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz" - integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== - dependencies: - async "^2.6.2" - debug "^3.1.1" - mkdirp "^0.5.5" - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= - -postcss-html@^0.36.0: - version "0.36.0" - resolved "https://registry.npmjs.org/postcss-html/-/postcss-html-0.36.0.tgz" - integrity sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw== - dependencies: - htmlparser2 "^3.10.0" - -postcss-less@^3.1.4: - version "3.1.4" - resolved "https://registry.npmjs.org/postcss-less/-/postcss-less-3.1.4.tgz" - integrity sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA== - dependencies: - postcss "^7.0.14" - -postcss-media-query-parser@^0.2.3: - version "0.2.3" - resolved "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz" - integrity sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ= + xmlbuilder "^15.1.1" -postcss-modules-extract-imports@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz" - integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== - dependencies: - postcss "^7.0.5" +postcss-modules-extract-imports@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" + integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== -postcss-modules-local-by-default@^3.0.2: - version "3.0.3" - resolved "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz" - integrity sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw== +postcss-modules-local-by-default@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz#b08eb4f083050708998ba2c6061b50c2870ca524" + integrity sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA== dependencies: - icss-utils "^4.1.1" - postcss "^7.0.32" + icss-utils "^5.0.0" postcss-selector-parser "^6.0.2" postcss-value-parser "^4.1.0" -postcss-modules-scope@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz" - integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== - dependencies: - postcss "^7.0.6" - postcss-selector-parser "^6.0.0" - -postcss-modules-values@^3.0.0: +postcss-modules-scope@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz" - integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg== + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" + integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== dependencies: - icss-utils "^4.0.0" - postcss "^7.0.6" - -postcss-resolve-nested-selector@^0.1.1: - version "0.1.1" - resolved "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz" - integrity sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4= - -postcss-safe-parser@^4.0.2: - version "4.0.2" - resolved "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz" - integrity sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g== - dependencies: - postcss "^7.0.26" - -postcss-sass@^0.4.4: - version "0.4.4" - resolved "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.4.4.tgz" - integrity sha512-BYxnVYx4mQooOhr+zer0qWbSPYnarAy8ZT7hAQtbxtgVf8gy+LSLT/hHGe35h14/pZDTw1DsxdbrwxBN++H+fg== - dependencies: - gonzales-pe "^4.3.0" - postcss "^7.0.21" + postcss-selector-parser "^6.0.4" -postcss-scss@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/postcss-scss/-/postcss-scss-2.1.1.tgz" - integrity sha512-jQmGnj0hSGLd9RscFw9LyuSVAa5Bl1/KBPqG1NQw9w8ND55nY4ZEsdlVuYJvLPpV+y0nwTV5v/4rHPzZRihQbA== +postcss-modules-values@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" + integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== dependencies: - postcss "^7.0.6" + icss-utils "^5.0.0" -postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: - version "6.0.4" - resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz" - integrity sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw== +postcss-selector-parser@^6.0.10, postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: + version "6.0.13" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b" + integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== dependencies: cssesc "^3.0.0" - indexes-of "^1.0.1" - uniq "^1.0.1" util-deprecate "^1.0.2" -postcss-syntax@^0.36.2: - version "0.36.2" - resolved "https://registry.npmjs.org/postcss-syntax/-/postcss-syntax-0.36.2.tgz" - integrity sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w== - -postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz" - integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== +postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== -postcss@^7.0.14, postcss@^7.0.2, postcss@^7.0.21, postcss@^7.0.26, postcss@^7.0.32, postcss@^7.0.35, postcss@^7.0.5, postcss@^7.0.6: - version "7.0.36" - resolved "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz" - integrity sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw== +postcss@^8.4.21, postcss@^8.4.23: + version "8.4.24" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.24.tgz#f714dba9b2284be3cc07dbd2fc57ee4dc972d2df" + integrity sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg== dependencies: - chalk "^2.4.2" - source-map "^0.6.1" - supports-color "^6.1.0" + nanoid "^3.3.6" + picocolors "^1.0.0" + source-map-js "^1.0.2" prebuild-install@^7.1.1: version "7.1.1" - resolved "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.1.tgz#de97d5b34a70a0c81334fd24641f2a1702352e45" integrity sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw== dependencies: detect-libc "^2.0.0" @@ -8623,43 +9668,42 @@ prebuild-install@^7.1.1: prelude-ls@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= - -prepend-http@^1.0.0: - version "1.0.4" - resolved "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz" - integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= - -prepend-http@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz" - integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= - prettier-linter-helpers@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== dependencies: fast-diff "^1.1.2" -prettier@^2.2.1: - version "2.2.1" - resolved "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz" - integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== +prettier@^2.8.8: + version "2.8.8" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== -pretty-error@^2.1.1: - version "2.1.2" - resolved "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz" - integrity sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw== +pretty-error@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" + integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== dependencies: lodash "^4.17.20" - renderkid "^2.0.4" + renderkid "^3.0.0" + +pretty-format@^27.5.1: + version "27.5.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" + integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== + dependencies: + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^17.0.1" + +proc-log@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-3.0.0.tgz#fb05ef83ccd64fd7b20bbe9c8c1070fc08338dd8" + integrity sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A== process-nextick-args@~2.0.0: version "2.0.1" @@ -8668,28 +9712,53 @@ process-nextick-args@~2.0.0: process@^0.11.10: version "0.11.10" - resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz" - integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== -progress@^2.0.0, progress@^2.0.3: +progress@^2.0.3: version "2.0.3" - resolved "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== +promise-all-reject-late@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz#f8ebf13483e5ca91ad809ccc2fcf25f26f8643c2" + integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== + +promise-call-limit@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/promise-call-limit/-/promise-call-limit-1.0.2.tgz#f64b8dd9ef7693c9c7613e7dfe8d6d24de3031ea" + integrity sha512-1vTUnfI2hzui8AEIixbdAJlFY4LFDXqQswy/2eOlThAscXCY4It8FdVuI0fMJGAB2aWGbdQf/gv0skKYXmdrHA== + promise-inflight@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" - integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== + +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + +promzard@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/promzard/-/promzard-1.0.0.tgz#3246f8e6c9895a77c0549cefb65828ac0f6c006b" + integrity sha512-KQVDEubSUHGSt5xLakaToDFrSoZhStB8dXLzk2xvwR67gJktrHFvpR63oZgHyK19WKbHFLXJqCPXdVR3aBP8Ig== + dependencies: + read "^2.0.0" prop-types-extra@^1.1.0: version "1.1.1" - resolved "https://registry.npmjs.org/prop-types-extra/-/prop-types-extra-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/prop-types-extra/-/prop-types-extra-1.1.1.tgz#58c3b74cbfbb95d304625975aa2f0848329a010b" integrity sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew== dependencies: react-is "^16.3.2" warning "^4.0.0" -prop-types@^15.0.0: +prop-types@^15.0.0, prop-types@^15.5.10, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -8698,15 +9767,6 @@ prop-types@^15.0.0: object-assign "^4.1.1" react-is "^16.13.1" -prop-types@^15.5.10, prop-types@^15.6.2, prop-types@^15.7.2: - version "15.7.2" - resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz" - integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.8.1" - property-information@^6.0.0: version "6.2.0" resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.2.0.tgz#b74f522c31c097b5149e3c3cb8d7f3defd986a1d" @@ -8714,8 +9774,8 @@ property-information@^6.0.0: proto-list@~1.2.1: version "1.2.4" - resolved "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz" - integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= + resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== proxy-addr@~2.0.7: version "2.0.7" @@ -8730,62 +9790,23 @@ proxy-from-env@^1.1.0: resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz" - integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= - -public-encrypt@^4.0.0: - version "4.0.3" - resolved "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz" - integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - safe-buffer "^5.1.2" - -pump@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz" - integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - pump@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== dependencies: end-of-stream "^1.1.0" once "^1.3.1" -pumpify@^1.3.3: - version "1.5.1" - resolved "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz" - integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== - dependencies: - duplexify "^3.6.0" - inherits "^2.0.3" - pump "^2.0.0" - -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz" - integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= - -punycode@^1.2.4: - version "1.4.1" - resolved "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= - punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + version "2.3.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + +qrcode-terminal@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz#bb5b699ef7f9f0505092a3748be4464fe71b5819" + integrity sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ== qs@6.11.0: version "6.11.0" @@ -8794,57 +9815,39 @@ qs@6.11.0: dependencies: side-channel "^1.0.4" -query-string@^4.1.0: - version "4.3.4" - resolved "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz" - integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= - dependencies: - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" - -querystring-es3@^0.2.0: - version "0.2.1" - resolved "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz" - integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= - -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz" - integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= - -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - queue-microtask@^1.2.2: version "1.2.3" - resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== quick-lru@^4.0.1: version "4.0.1" - resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + raf-schd@^4.0.2: - version "4.0.2" - resolved "https://registry.npmjs.org/raf-schd/-/raf-schd-4.0.2.tgz" - integrity sha512-VhlMZmGy6A6hrkJWHLNTGl5gtgMUm+xfGza6wbwnE914yeQ5Ybm18vgM734RZhMgfw4tacUrWseGZlpUrrakEQ== + version "4.0.3" + resolved "https://registry.yarnpkg.com/raf-schd/-/raf-schd-4.0.3.tgz#5d6c34ef46f8b2a0e880a8fcdb743efc5bfdbc1a" + integrity sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ== -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== +random-path@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/random-path/-/random-path-0.1.2.tgz#78b7f1570e2a09f66a4e2e0113a98ed588e85da9" + integrity sha512-4jY0yoEaQ5v9StCl5kZbNIQlg1QheIDBrdkDn53EynpPb9FgO6//p3X/tgMnrC45XN6QZCzU1Xz/+pSSsJBpRw== dependencies: - safe-buffer "^5.1.0" + base32-encode "^0.1.0 || ^1.0.0" + murmur-32 "^0.1.0 || ^0.2.0" -randomfill@^1.0.3: - version "1.0.4" - resolved "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz" - integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== dependencies: - randombytes "^2.0.5" safe-buffer "^5.1.0" range-parser@^1.2.1, range-parser@~1.2.1: @@ -8862,9 +9865,9 @@ raw-body@2.5.1: iconv-lite "0.4.24" unpipe "1.0.0" -rc@^1.2.7: +rc@^1.2.7, rc@^1.2.8: version "1.2.8" - resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== dependencies: deep-extend "^0.6.0" @@ -8872,10 +9875,17 @@ rc@^1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-beautiful-dnd@^13.1.0: - version "13.1.0" - resolved "https://registry.npmjs.org/react-beautiful-dnd/-/react-beautiful-dnd-13.1.0.tgz" - integrity sha512-aGvblPZTJowOWUNiwd6tNfEpgkX5OxmpqxHKNW/4VmvZTNTbeiq7bA3bn5T+QSF2uibXB0D1DmJsb1aC/+3cUA== +rcedit@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/rcedit/-/rcedit-3.0.1.tgz#ae21b43e49c075f4d84df1929832a12c302f3c90" + integrity sha512-XM0Jv40/y4hVAqj/MO70o/IWs4uOsaSoo2mLyk3klFDW+SStLnCtzuQu+1OBTIMGlM8CvaK9ftlYCp6DJ+cMsw== + dependencies: + cross-spawn-windows-exe "^1.1.0" + +react-beautiful-dnd@^13.1.1: + version "13.1.1" + resolved "https://registry.yarnpkg.com/react-beautiful-dnd/-/react-beautiful-dnd-13.1.1.tgz#b0f3087a5840920abf8bb2325f1ffa46d8c4d0a2" + integrity sha512-0Lvs4tq2VcrEjEgDXHjT98r+63drkKEgqyxdA7qD3mvKwga6a5SscbdLPO2IExotU1jW8L0Ksdl0Cj2AF67nPQ== dependencies: "@babel/runtime" "^7.9.2" css-box-model "^1.2.0" @@ -8885,32 +9895,33 @@ react-beautiful-dnd@^13.1.0: redux "^4.0.4" use-memo-one "^1.1.1" -react-bootstrap@^1.5.2: - version "1.6.5" - resolved "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-1.6.5.tgz" - integrity sha512-l2rm5LtDI7JMtdGrzaxNl4OJwH0fMIJDlvwQ2TMvs9h9d0E4ELLpG3J45Pox6xUkpuFfXdWUiGazZXyIuv/OKA== +react-bootstrap@1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/react-bootstrap/-/react-bootstrap-1.5.2.tgz#07dabec53d10491a520c49f102170b440fa89008" + integrity sha512-mGKPY5+lLd7Vtkx2VFivoRkPT4xAHazuFfIhJLTEgHlDfIUSePn7qrmpZe5gXH9zvHV0RsBaQ9cLfXjxnZrOpA== dependencies: - "@babel/runtime" "^7.14.0" + "@babel/runtime" "^7.13.8" "@restart/context" "^2.1.4" - "@restart/hooks" "^0.4.7" + "@restart/hooks" "^0.3.26" + "@types/classnames" "^2.2.10" "@types/invariant" "^2.2.33" "@types/prop-types" "^15.7.3" - "@types/react" ">=16.14.8" + "@types/react" ">=16.9.35" "@types/react-transition-group" "^4.4.1" "@types/warning" "^3.0.0" - classnames "^2.3.1" - dom-helpers "^5.2.1" + classnames "^2.2.6" + dom-helpers "^5.1.2" invariant "^2.2.4" prop-types "^15.7.2" prop-types-extra "^1.1.0" - react-overlays "^5.1.2" + react-overlays "^5.0.0" react-transition-group "^4.4.1" uncontrollable "^7.2.1" warning "^4.0.3" react-color@^2.19.3: version "2.19.3" - resolved "https://registry.npmjs.org/react-color/-/react-color-2.19.3.tgz" + resolved "https://registry.yarnpkg.com/react-color/-/react-color-2.19.3.tgz#ec6c6b4568312a3c6a18420ab0472e146aa5683d" integrity sha512-LEeGE/ZzNLIsFWa1TMe8y5VYqr7bibneWmvJwm1pCn/eNmrabWDh659JSPn9BuaMpEfU83WTOJfnCcjDZwNQTA== dependencies: "@icons/material" "^0.2.4" @@ -8921,36 +9932,35 @@ react-color@^2.19.3: reactcss "^1.2.0" tinycolor2 "^1.4.1" -react-dom@^17.0.0: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" - integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== +react-dom@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" + integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" - scheduler "^0.20.2" + scheduler "^0.23.0" -react-i18next@^11.8.12: - version "11.8.12" - resolved "https://registry.npmjs.org/react-i18next/-/react-i18next-11.8.12.tgz" - integrity sha512-M2PSVP9MzT/7yofXfCOF5gAVotinrM4BXWiguk8uFSznJsfFzTjrp3K9CBWcXitpoCBVZGZJ2AnbaWGSNkJqfw== +react-i18next@^12.3.1: + version "12.3.1" + resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-12.3.1.tgz#30134a41a2a71c61dc69c6383504929aed1c99e7" + integrity sha512-5v8E2XjZDFzK7K87eSwC7AJcAkcLt5xYZ4+yTPDAW1i7C93oOY1dnr4BaQM7un4Hm+GmghuiPvevWwlca5PwDA== dependencies: - "@babel/runtime" "^7.13.6" - html-parse-stringify2 "^2.0.1" + "@babel/runtime" "^7.20.6" + html-parse-stringify "^3.0.1" -react-icons@^4.2.0: - version "4.4.0" - resolved "https://registry.npmjs.org/react-icons/-/react-icons-4.4.0.tgz" - integrity sha512-fSbvHeVYo/B5/L4VhB7sBA1i2tS8MkT0Hb9t2H1AVPkwGfVHLJCqyr2Py9dKMxsyM63Eng1GkdZfbWj+Fmv8Rg== +react-icons@^4.9.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-4.10.1.tgz#3f3b5eec1f63c1796f6a26174a1091ca6437a500" + integrity sha512-/ngzDP/77tlCfqthiiGNZeYFACw85fUjZtLbedmJ5DTlNDIwETxhwBzdOJ21zj4iJdvc0J3y7yOsX3PpxAJzrw== -react-is@^16.13.1, react-is@^16.3.2, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1: +react-is@^16.13.1, react-is@^16.3.2, react-is@^16.7.0: version "16.13.1" - resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -react-is@^17.0.0, react-is@^17.0.2: +react-is@^17.0.1, react-is@^17.0.2: version "17.0.2" - resolved "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== react-is@^18.0.0: @@ -8960,10 +9970,10 @@ react-is@^18.0.0: react-lifecycles-compat@^3.0.4: version "3.0.4" - resolved "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz" + resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== -react-localization@^1.0.17: +react-localization@^1.0.19: version "1.0.19" resolved "https://registry.yarnpkg.com/react-localization/-/react-localization-1.0.19.tgz#b65a7fa58096cff6aa38bc3a0c4817ec97469ef0" integrity sha512-f4E6T8xRis19K8qMOnnhjGV2quy1YH2lrSsnAiytvgt7uOSp6WgDhrZH6XZEaEFqupTOCFSf8uagIoIAkjl4JA== @@ -8991,13 +10001,13 @@ react-markdown@^8.0.7: unist-util-visit "^4.0.0" vfile "^5.0.0" -react-overlays@^5.1.2: - version "5.2.0" - resolved "https://registry.npmjs.org/react-overlays/-/react-overlays-5.2.0.tgz" - integrity sha512-dKZR/w6qeAsW0z0aIlwq/5H/M6o5T4RSlPnqIKqYVJ++rjoPSFcVggPhDWno8awZQsuMMtkjuksTbE8vOY0s9g== +react-overlays@^5.0.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/react-overlays/-/react-overlays-5.2.1.tgz#49dc007321adb6784e1f212403f0fb37a74ab86b" + integrity sha512-GLLSOLWr21CqtJn8geSwQfoJufdt3mfdsnIiQswouuQ2MMPns+ihZklxvsTDKD3cR2tF8ELbi5xUsvqVhR6WvA== dependencies: "@babel/runtime" "^7.13.8" - "@popperjs/core" "^2.8.6" + "@popperjs/core" "^2.11.6" "@restart/hooks" "^0.4.7" "@types/warning" "^3.0.0" dom-helpers "^5.2.0" @@ -9005,15 +10015,10 @@ react-overlays@^5.1.2: uncontrollable "^7.2.1" warning "^4.0.3" -react-range@^1.8.12: - version "1.8.13" - resolved "https://registry.npmjs.org/react-range/-/react-range-1.8.13.tgz" - integrity sha512-Hp7JhEm5hdmBTkbAZLzFet93RgHtEWyba0LQzavZstJDp6kUAIy3c/9PGuICTRq+tUEFN442eeqGbHqZlq4KeA== - react-redux@^7.2.0: - version "7.2.8" - resolved "https://registry.npmjs.org/react-redux/-/react-redux-7.2.8.tgz" - integrity sha512-6+uDjhs3PSIclqoCk0kd6iX74gzrGc3W5zcAjbrFgEdIjRSQObdIwfx80unTkVUYvbQ95Y8Av3OvFHq1w5EOUw== + version "7.2.9" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.9.tgz#09488fbb9416a4efe3735b7235055442b042481d" + integrity sha512-Gx4L3uM182jEEayZfRbI/G11ZpYdNAnBs70lFVMNdHJI76XYtR+7m0MN+eAs7UHBPhWXcnFPaS+9owSCJQHNpQ== dependencies: "@babel/runtime" "^7.15.4" "@types/react-redux" "^7.1.20" @@ -9022,113 +10027,125 @@ react-redux@^7.2.0: prop-types "^15.7.2" react-is "^17.0.2" -react-router-dom@^5.2.0: - version "5.3.3" - resolved "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.3.tgz" - integrity sha512-Ov0tGPMBgqmbu5CDmN++tv2HQ9HlWDuWIIqn4b88gjlAN5IHI+4ZUZRcpz9Hl0azFIwihbLDYw1OiHGRo7ZIng== +react-router-dom@^6.11.2: + version "6.14.0" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-6.14.0.tgz#7ce6c3f73549e4d40216ba150253d3bf30812b33" + integrity sha512-YEwlApKwzMMMbGbhh+Q7MsloTldcwMgHxUY/1g0uA62+B1hZo2jsybCWIDCL8zvIDB1FA0pBKY9chHbZHt+2dQ== dependencies: - "@babel/runtime" "^7.12.13" - history "^4.9.0" - loose-envify "^1.3.1" - prop-types "^15.6.2" - react-router "5.3.3" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" + "@remix-run/router" "1.7.0" + react-router "6.14.0" -react-router@5.3.3: - version "5.3.3" - resolved "https://registry.npmjs.org/react-router/-/react-router-5.3.3.tgz" - integrity sha512-mzQGUvS3bM84TnbtMYR8ZjKnuPJ71IjSzR+DE6UkUqvN4czWIqEs17yLL8xkAycv4ev0AiN+IGrWu88vJs/p2w== - dependencies: - "@babel/runtime" "^7.12.13" - history "^4.9.0" - hoist-non-react-statics "^3.1.0" - loose-envify "^1.3.1" - mini-create-react-context "^0.4.0" - path-to-regexp "^1.7.0" - prop-types "^15.6.2" - react-is "^16.6.0" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" +react-router@6.14.0: + version "6.14.0" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-6.14.0.tgz#1c3e8e922d934d43a253fd862c72c82167c0a7f1" + integrity sha512-OD+vkrcGbvlwkspUFDgMzsu1RXwdjNh83YgG/28lBnDzgslhCgxIqoExLlxsfTpIygp7fc+Hd3esloNwzkm2xA== + dependencies: + "@remix-run/router" "1.7.0" -react-toastify@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/react-toastify/-/react-toastify-8.2.0.tgz#ef7d56bdfdc6272ca6b228368ab564721c3a3244" - integrity sha512-Pg2Ju7NngAamarFvLwqrFomJ57u/Ay6i6zfLurt/qPynWkAkOthu6vxfqYpJCyNhHRhR4hu7+bySSeWWJu6PAg== +react-toastify@^9.1.3: + version "9.1.3" + resolved "https://registry.yarnpkg.com/react-toastify/-/react-toastify-9.1.3.tgz#1e798d260d606f50e0fab5ee31daaae1d628c5ff" + integrity sha512-fPfb8ghtn/XMxw3LkxQBk3IyagNpF/LIKjOBflbexr2AWxAH1MJgvnESwEwBn9liLFXgTKWgBSdZpw9m4OTHTg== dependencies: clsx "^1.1.1" react-transition-group@^4.4.1: - version "4.4.2" - resolved "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz" - integrity sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg== + version "4.4.5" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-4.4.5.tgz#e53d4e3f3344da8521489fbef8f2581d42becdd1" + integrity sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g== dependencies: "@babel/runtime" "^7.5.5" dom-helpers "^5.0.1" loose-envify "^1.4.0" prop-types "^15.6.2" -react@^17.0.0: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" - integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== +react@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" + integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" reactcss@^1.2.0: version "1.2.3" - resolved "https://registry.npmjs.org/reactcss/-/reactcss-1.2.3.tgz" + resolved "https://registry.yarnpkg.com/reactcss/-/reactcss-1.2.3.tgz#c00013875e557b1cf0dfd9a368a1c3dab3b548dd" integrity sha512-KiwVUcFu1RErkI97ywr8nvx8dNOpT03rbnma0SSalTYjkrPYaEajR4a/MRt6DZ46K6arDRbWMNHF+xH7G7n/8A== dependencies: lodash "^4.0.1" -read-config-file@6.2.0: - version "6.2.0" - resolved "https://registry.npmjs.org/read-config-file/-/read-config-file-6.2.0.tgz" - integrity sha512-gx7Pgr5I56JtYz+WuqEbQHj/xWo+5Vwua2jhb1VwM4Wid5PqYmZ4i00ZB0YEGIfkVBsCv9UrjgyqCiQfS/Oosg== +read-cmd-shim@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz#640a08b473a49043e394ae0c7a34dd822c73b9bb" + integrity sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q== + +read-config-file@6.3.2: + version "6.3.2" + resolved "https://registry.yarnpkg.com/read-config-file/-/read-config-file-6.3.2.tgz#556891aa6ffabced916ed57457cb192e61880411" + integrity sha512-M80lpCjnE6Wt6zb98DoW8WHR09nzMSpu8XHtPkiTHrJ5Az9CybfeQhTJ8D7saeBHpGhLPIVyA8lcL6ZmdKwY6Q== dependencies: + config-file-ts "^0.2.4" dotenv "^9.0.2" dotenv-expand "^5.1.0" js-yaml "^4.1.0" json5 "^2.2.0" lazy-val "^1.0.4" -read-config-file@~4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/read-config-file/-/read-config-file-4.0.1.tgz" - integrity sha512-5caED3uo2IAZMPcbh/9hx/O29s2430RLxtnFDdzxpH/epEpawOrQnGBHueotIXUrGPPIgdNQN+S/CIp2WmiSfw== +read-package-json-fast@^3.0.0, read-package-json-fast@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz#394908a9725dc7a5f14e70c8e7556dff1d2b1049" + integrity sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw== dependencies: - ajv "^6.10.1" - ajv-keywords "^3.4.1" - dotenv "^8.0.0" - dotenv-expand "^5.1.0" - fs-extra "^8.1.0" - js-yaml "^3.13.1" - json5 "^2.1.0" - lazy-val "^1.0.4" + json-parse-even-better-errors "^3.0.0" + npm-normalize-package-bin "^3.0.0" + +read-package-json@^6.0.0: + version "6.0.4" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-6.0.4.tgz#90318824ec456c287437ea79595f4c2854708836" + integrity sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw== + dependencies: + glob "^10.2.2" + json-parse-even-better-errors "^3.0.0" + normalize-package-data "^5.0.0" + npm-normalize-package-bin "^3.0.0" + +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha512-1orxQfbWGUiTn9XsPlChs6rLie/AV9jwZTGmu2NZw/CUDJQchXJFYE0Fq5j7+n558T1JhDWLdhyd1Zj+wLY//w== + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" read-pkg-up@^7.0.1: version "7.0.1" - resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== dependencies: find-up "^4.1.0" read-pkg "^5.2.0" type-fest "^0.8.1" -read-pkg@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz" - integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= +read-pkg-up@^9.0.0, read-pkg-up@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-9.1.0.tgz#38ca48e0bc6c6b260464b14aad9bcd4e5b1fbdc3" + integrity sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg== dependencies: - load-json-file "^4.0.0" + find-up "^6.3.0" + read-pkg "^7.1.0" + type-fest "^2.5.0" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha512-eFIBOPW7FGjzBuk3hdXEuNSiTZS/xEMlH49HxMyzb0hyPfu4EhVjT2DH32K1hSSmVq4sebAWnZuuY5auISUTGA== + dependencies: + load-json-file "^2.0.0" normalize-package-data "^2.3.2" - path-type "^3.0.0" + path-type "^2.0.0" read-pkg@^5.2.0: version "5.2.0" - resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== dependencies: "@types/normalize-package-data" "^2.4.0" @@ -9136,10 +10153,37 @@ read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== +read-pkg@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-7.1.0.tgz#438b4caed1ad656ba359b3e00fd094f3c427a43e" + integrity sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg== + dependencies: + "@types/normalize-package-data" "^2.4.1" + normalize-package-data "^3.0.2" + parse-json "^5.2.0" + type-fest "^2.0.0" + +read-pkg@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-8.0.0.tgz#78b93774c15a3f151b56d5790d5127a5cb9fc507" + integrity sha512-Ajb9oSjxXBw0YyOiwtQ2dKbAA/vMnUPnY63XcCk+mXo0BwIdQEMgZLZiMWGttQHcUhUgbK0mH85ethMPKXxziw== + dependencies: + "@types/normalize-package-data" "^2.4.1" + normalize-package-data "^5.0.0" + parse-json "^7.0.0" + type-fest "^3.8.0" + +read@^2.0.0, read@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/read/-/read-2.1.0.tgz#69409372c54fe3381092bc363a00650b6ac37218" + integrity sha512-bvxi1QLJHcaywCAEsAk4DG3nVoqiY2Csps3qzWalhj5hFqRn1d/OixkFXtLO1PrgHUcAP0FNaSY/5GYNfENFFQ== + dependencies: + mute-stream "~1.0.0" + +readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@~2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -9149,125 +10193,124 @@ read-pkg@^5.2.0: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== +readable-stream@^3.0.0, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" string_decoder "^1.1.1" util-deprecate "^1.0.1" -readdirp@^2.2.1: - version "2.2.1" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz" - integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== +readable-stream@^4.1.0: + version "4.4.1" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.4.1.tgz#fa0f0878c3bc0c12b6a82e4e58c5dc160e1faaa2" + integrity sha512-llAHX9QC25bz5RPIoTeJxPaA/hgryaldValRhVZ2fK9bzbmFiscpz8fw6iBTvJfAk1w4FC1KXQme/nO7fbKyKg== dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" + abort-controller "^3.0.0" + buffer "^6.0.3" + events "^3.3.0" + process "^0.11.10" -readdirp@~3.5.0: - version "3.5.0" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz" - integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" +rechoir@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22" + integrity sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ== + dependencies: + resolve "^1.20.0" + redent@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== dependencies: indent-string "^4.0.0" strip-indent "^3.0.0" +redeyed@~2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/redeyed/-/redeyed-2.1.1.tgz#8984b5815d99cb220469c99eeeffe38913e6cc0b" + integrity sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ== + dependencies: + esprima "~4.0.0" + redux@^4.0.0, redux@^4.0.4: - version "4.0.5" - resolved "https://registry.npmjs.org/redux/-/redux-4.0.5.tgz" - integrity sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w== + version "4.2.1" + resolved "https://registry.yarnpkg.com/redux/-/redux-4.2.1.tgz#c08f4306826c49b5e9dc901dee0452ea8fce6197" + integrity sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w== dependencies: - loose-envify "^1.4.0" - symbol-observable "^1.2.0" + "@babel/runtime" "^7.9.2" -regenerate-unicode-properties@^10.0.1: - version "10.0.1" - resolved "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz" - integrity sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw== +regenerate-unicode-properties@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" + integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ== dependencies: regenerate "^1.4.2" regenerate@^1.4.2: version "1.4.2" - resolved "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== -regenerator-runtime@^0.13.4: - version "0.13.7" - resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz" - integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== +regenerator-runtime@^0.13.11: + version "0.13.11" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== -regenerator-transform@^0.15.0: - version "0.15.0" - resolved "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz" - integrity sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg== +regenerator-transform@^0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.1.tgz#f6c4e99fc1b4591f780db2586328e4d9a9d8dc56" + integrity sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg== dependencies: "@babel/runtime" "^7.8.4" -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.1: - version "1.3.1" - resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz" - integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== +regexp.prototype.flags@^1.4.3: + version "1.5.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb" + integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - -regexpp@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz" - integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== + define-properties "^1.2.0" + functions-have-names "^1.2.3" -regexpp@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz" - integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== - -regexpu-core@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz" - integrity sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw== +regexpu-core@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" + integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== dependencies: + "@babel/regjsgen" "^0.8.0" regenerate "^1.4.2" - regenerate-unicode-properties "^10.0.1" - regjsgen "^0.6.0" - regjsparser "^0.8.2" + regenerate-unicode-properties "^10.1.0" + regjsparser "^0.9.1" unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.1.0" -regjsgen@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz" - integrity sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA== +registry-auth-token@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-5.0.2.tgz#8b026cc507c8552ebbe06724136267e63302f756" + integrity sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ== + dependencies: + "@pnpm/npm-conf" "^2.1.0" -regjsparser@^0.8.2: - version "0.8.4" - resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz" - integrity sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA== +regjsparser@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" + integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== dependencies: jsesc "~0.5.0" relateurl@^0.2.7: version "0.2.7" - resolved "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz" - integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== remark-parse@^10.0.0: version "10.0.2" @@ -9278,13 +10321,6 @@ remark-parse@^10.0.0: mdast-util-from-markdown "^1.0.0" unified "^10.0.0" -remark-parse@^9.0.0: - version "9.0.0" - resolved "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz" - integrity sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw== - dependencies: - mdast-util-from-markdown "^0.8.0" - remark-rehype@^10.0.0: version "10.1.0" resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-10.1.0.tgz#32dc99d2034c27ecaf2e0150d22a6dcccd9a6279" @@ -9295,63 +10331,32 @@ remark-rehype@^10.0.0: mdast-util-to-hast "^12.1.0" unified "^10.0.0" -remark-stringify@^9.0.0: - version "9.0.1" - resolved "https://registry.npmjs.org/remark-stringify/-/remark-stringify-9.0.1.tgz" - integrity sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg== - dependencies: - mdast-util-to-markdown "^0.6.0" - -remark@^13.0.0: - version "13.0.0" - resolved "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz" - integrity sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA== - dependencies: - remark-parse "^9.0.0" - remark-stringify "^9.0.0" - unified "^9.1.0" - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= - -renderkid@^2.0.4: - version "2.0.5" - resolved "https://registry.npmjs.org/renderkid/-/renderkid-2.0.5.tgz" - integrity sha512-ccqoLg+HLOHq1vdfYNm4TBeaCDIi1FLt3wGojTDSvdewUv65oTmI3cnT2E4hRjl1gzKZIPK+KZrXzlUYKnR+vQ== +renderkid@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" + integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== dependencies: - css-select "^2.0.2" - dom-converter "^0.2" - htmlparser2 "^3.10.1" - lodash "^4.17.20" - strip-ansi "^3.0.0" - -repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz" - integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + css-select "^4.1.3" + dom-converter "^0.2.0" + htmlparser2 "^6.1.0" + lodash "^4.17.21" + strip-ansi "^6.0.1" -repeat-string@^1.0.0, repeat-string@^1.6.1: +repeat-string@^1.5.4: version "1.6.1" - resolved "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== require-directory@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== require-from-string@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - requires-port@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" @@ -9362,124 +10367,125 @@ resize-observer-polyfill@^1.5.1: resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== -resolve-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz" - integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= +resolve-alpn@^1.0.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" + integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== dependencies: - resolve-from "^3.0.0" + resolve-from "^5.0.0" resolve-dir@^1.0.0, resolve-dir@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz" - integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= + resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + integrity sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg== dependencies: expand-tilde "^2.0.0" global-modules "^1.0.0" -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= - resolve-from@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== resolve-from@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve-pathname@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz" - integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== +resolve-global@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/resolve-global/-/resolve-global-1.0.0.tgz#a2a79df4af2ca3f49bf77ef9ddacd322dad19255" + integrity sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw== + dependencies: + global-dirs "^0.1.1" -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= +resolve-package@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-package/-/resolve-package-1.0.1.tgz#686f70b188bd7d675f5bbc4282ccda060abb9d27" + integrity sha512-rzB7NnQpOkPHBWFPP3prUMqOP6yg3HkRGgcvR+lDyvyHoY3fZLFLYDkPXh78SPVBAE6VTCk/V+j8we4djg6o4g== + dependencies: + get-installed-path "^2.0.3" + +resolve-pkg-maps@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" + integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== -resolve@^1.10.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.20.0: - version "1.20.0" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz" - integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.1: + version "1.22.2" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" + integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" + is-core-module "^2.11.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" -resolve@^2.0.0-next.3: - version "2.0.0-next.3" - resolved "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz" - integrity sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q== +resolve@^2.0.0-next.4: + version "2.0.0-next.4" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.4.tgz#3d37a113d6429f496ec4752d2a2e58efb1fd4660" + integrity sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ== dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" -responselike@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz" - integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= +responselike@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" + integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== dependencies: - lowercase-keys "^1.0.0" + lowercase-keys "^2.0.0" restore-cursor@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== dependencies: onetime "^5.1.0" signal-exit "^3.0.2" -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - retry@^0.12.0: version "0.12.0" - resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" - integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + +retry@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== reusify@^1.0.4: version "1.0.4" - resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@2.6.3: - version "2.6.3" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - -rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.3, rimraf@^2.7.1: - version "2.7.1" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" +rfdc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" + integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz" - integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== +rimraf@~2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" + glob "^7.1.3" roarr@^2.15.3: version "2.15.4" - resolved "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz" + resolved "https://registry.yarnpkg.com/roarr/-/roarr-2.15.4.tgz#f5fe795b7b838ccfe35dc608e0282b9eba2e7afd" integrity sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A== dependencies: boolean "^3.0.1" @@ -9489,31 +10495,38 @@ roarr@^2.15.3: semver-compare "^1.0.0" sprintf-js "^1.1.2" +rollup@^3.21.0: + version "3.26.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-3.26.0.tgz#9f2e0316a4ca641911cefd8515c562a9124e6130" + integrity sha512-YzJH0eunH2hr3knvF3i6IkLO/jTjAEwU4HoMUbQl4//Tnl3ou0e7P5SjxdDr8HQJdeUJShlbEHXrrnEHy1l7Yg== + optionalDependencies: + fsevents "~2.3.2" + +run-applescript@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-5.0.0.tgz#e11e1c932e055d5c6b40d98374e0268d9b11899c" + integrity sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg== + dependencies: + execa "^5.0.0" + run-async@^2.4.0: version "2.4.1" - resolved "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== run-parallel@^1.1.9: version "1.2.0" - resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== dependencies: queue-microtask "^1.2.2" -run-queue@^1.0.0, run-queue@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz" - integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= - dependencies: - aproba "^1.1.1" - -rxjs@^6.6.0, rxjs@^6.6.6: - version "6.6.6" - resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.6.tgz" - integrity sha512-/oTwee4N4iWzAMAL9xdGKjkEHmIwupR3oXbQjCKywF1BeFohswF3vZdogbmEF6pZkOsXTzWkrZszrWpQTByYVg== +rxjs@^7.5.5, rxjs@^7.8.0: + version "7.8.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== dependencies: - tslib "^1.9.0" + tslib "^2.1.0" sade@^1.7.3: version "1.8.1" @@ -9527,125 +10540,140 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0: +safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0: version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== dependencies: - ret "~0.1.10" + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.1.0: +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" - resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== sanitize-filename@^1.6.3: version "1.6.3" - resolved "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz" + resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.3.tgz#755ebd752045931977e30b2025d340d7c9090378" integrity sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg== dependencies: truncate-utf8-bytes "^1.0.0" sax@^1.2.4: version "1.2.4" - resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -scheduler@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" - integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== +scheduler@^0.23.0: + version "0.23.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" + integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" -schema-utils@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz" - integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== - dependencies: - ajv "^6.1.0" - ajv-errors "^1.0.0" - ajv-keywords "^3.1.0" - -schema-utils@^2.6.5, schema-utils@^2.6.6, schema-utils@^2.7.0: - version "2.7.1" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz" - integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== +schema-utils@^3.1.1, schema-utils@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" + integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== dependencies: - "@types/json-schema" "^7.0.5" - ajv "^6.12.4" + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" ajv-keywords "^3.5.2" -schema-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz" - integrity sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA== +schema-utils@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.2.0.tgz#70d7c93e153a273a805801882ebd3bff20d89c8b" + integrity sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw== dependencies: - "@types/json-schema" "^7.0.6" - ajv "^6.12.5" - ajv-keywords "^3.5.2" + "@types/json-schema" "^7.0.9" + ajv "^8.9.0" + ajv-formats "^2.1.1" + ajv-keywords "^5.1.0" select-hose@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz" - integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== + +selfsigned@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.1.1.tgz#18a7613d714c0cd3385c48af0075abf3f266af61" + integrity sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ== + dependencies: + node-forge "^1" + +semantic-release@^21.0.5: + version "21.0.6" + resolved "https://registry.yarnpkg.com/semantic-release/-/semantic-release-21.0.6.tgz#096fd47630716461f4f634d13c9d7dfea92fe5a1" + integrity sha512-NDyosObAwUNzPpdf+mpL49Xy+5iYHjdWM34LBNdbdYv9vBLbw+eCCDihxcqPh+f9m4ZzlBrYCkHUaZv2vPGW9A== + dependencies: + "@semantic-release/commit-analyzer" "^10.0.0" + "@semantic-release/error" "^4.0.0" + "@semantic-release/github" "^9.0.0" + "@semantic-release/npm" "^10.0.2" + "@semantic-release/release-notes-generator" "^11.0.0" + aggregate-error "^4.0.1" + cosmiconfig "^8.0.0" + debug "^4.0.0" + env-ci "^9.0.0" + execa "^7.0.0" + figures "^5.0.0" + find-versions "^5.1.0" + get-stream "^6.0.0" + git-log-parser "^1.2.0" + hook-std "^3.0.0" + hosted-git-info "^6.0.0" + lodash-es "^4.17.21" + marked "^5.0.0" + marked-terminal "^5.1.1" + micromatch "^4.0.2" + p-each-series "^3.0.0" + p-reduce "^3.0.0" + read-pkg-up "^9.1.0" + resolve-from "^5.0.0" + semver "^7.3.2" + semver-diff "^4.0.0" + signale "^1.2.1" + yargs "^17.5.1" + +semver-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" + integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow== -selfsigned@^1.10.8: - version "1.10.8" - resolved "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.8.tgz" - integrity sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w== +semver-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-4.0.0.tgz#3afcf5ed6d62259f5c72d0d5d50dffbdc9680df5" + integrity sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA== dependencies: - node-forge "^0.10.0" + semver "^7.3.5" -semver-compare@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz" - integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= +semver-regex@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-4.0.5.tgz#fbfa36c7ba70461311f5debcb3928821eb4f9180" + integrity sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw== -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.6.0: +"semver@2 || 3 || 4 || 5", semver@^5.5.0: version "5.7.1" - resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@7.0.0, semver@~7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== - semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: version "6.3.0" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.1.3, semver@^7.3.2, semver@^7.3.4: - version "7.3.5" - resolved "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== - dependencies: - lru-cache "^6.0.0" - -semver@^7.2.1: - version "7.3.2" - resolved "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz" - integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== - -semver@^7.3.5: - version "7.3.7" - resolved "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" - integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== - dependencies: - lru-cache "^6.0.0" - -semver@^7.3.7, semver@^7.3.8, semver@^7.5.1: - version "7.5.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.1.tgz#c90c4d631cf74720e46b21c1d37ea07edfab91ec" - integrity sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw== +semver@^7.0.0, semver@^7.1.1, semver@^7.1.2, semver@^7.1.3, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.2: + version "7.5.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e" + integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== dependencies: lru-cache "^6.0.0" @@ -9670,19 +10698,19 @@ send@0.18.0: serialize-error@^7.0.1: version "7.0.1" - resolved "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz" + resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-7.0.1.tgz#f1360b0447f61ffb483ec4157c737fab7d778e18" integrity sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw== dependencies: type-fest "^0.13.1" -serialize-javascript@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz" - integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== +serialize-javascript@^6.0.0, serialize-javascript@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" + integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== dependencies: randombytes "^2.1.0" -serialport@^10.4.0: +serialport@^10.0.0: version "10.5.0" resolved "https://registry.yarnpkg.com/serialport/-/serialport-10.5.0.tgz#b85f614def6e8914e5865c798b0555330903a0f8" integrity sha512-7OYLDsu5i6bbv3lU81pGy076xe0JwpK6b49G6RjNvGibstUqQkI+I3/X491yBGtf4gaqUdOgoU1/5KZ/XxL4dw== @@ -9704,8 +10732,8 @@ serialport@^10.4.0: serve-index@^1.9.1: version "1.9.1" - resolved "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz" - integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== dependencies: accepts "~1.3.4" batch "0.6.1" @@ -9727,27 +10755,17 @@ serve-static@1.15.0: set-blocking@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= - -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== -setimmediate@^1.0.4, setimmediate@^1.0.5: +setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== setprototypeof@1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== setprototypeof@1.2.0: @@ -9755,47 +10773,46 @@ setprototypeof@1.2.0: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== -sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.11" - resolved "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" + kind-of "^6.0.2" shallowequal@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== shebang-command@^1.2.0: version "1.2.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== dependencies: shebang-regex "^1.0.0" shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -shell-quote@^1.6.1: - version "1.7.3" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123" - integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw== +shell-quote@^1.7.3: + version "1.8.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" + integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== side-channel@^1.0.4: version "1.0.4" @@ -9806,54 +10823,67 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.3" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== +siginfo@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30" + integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g== + +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +signal-exit@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.0.2.tgz#ff55bb1d9ff2114c13b400688fa544ac63c36967" + integrity sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q== + +signale@^1.2.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/signale/-/signale-1.4.0.tgz#c4be58302fb0262ac00fc3d886a7c113759042f1" + integrity sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w== + dependencies: + chalk "^2.3.2" + figures "^2.0.0" + pkg-conf "^2.1.0" + +sigstore@^1.3.0, sigstore@^1.4.0, sigstore@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/sigstore/-/sigstore-1.6.0.tgz#887a4007c6ee83f3ef3fd844be1a0840e849c301" + integrity sha512-QODKff/qW/TXOZI6V/Clqu74xnInAS6it05mufj4/fSewexLtfEntgLZZcBtUK44CDQyUE5TUXYy1ARYzlfG9g== + dependencies: + "@sigstore/protobuf-specs" "^0.1.0" + "@sigstore/tuf" "^1.0.0" + make-fetch-happen "^11.0.1" + tuf-js "^1.1.3" simple-concat@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== simple-get@^4.0.0: version "4.0.1" - resolved "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== dependencies: decompress-response "^6.0.0" once "^1.3.1" simple-concat "^1.0.0" -simple-update-notifier@^1.0.7: - version "1.1.0" - resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz#67694c121de354af592b347cdba798463ed49c82" - integrity sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg== - dependencies: - semver "~7.0.0" - -slash@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz" - integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== - slash@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" +slash@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" + integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== slice-ansi@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== dependencies: ansi-styles "^4.0.0" @@ -9862,93 +10892,50 @@ slice-ansi@^3.0.0: slice-ansi@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== dependencies: ansi-styles "^4.0.0" astral-regex "^2.0.0" is-fullwidth-code-point "^3.0.0" -smart-buffer@^4.0.2: +smart-buffer@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -sockjs-client@^1.5.0: - version "1.5.1" - resolved "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.1.tgz" - integrity sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ== - dependencies: - debug "^3.2.6" - eventsource "^1.0.7" - faye-websocket "^0.11.3" - inherits "^2.0.4" - json3 "^3.3.3" - url-parse "^1.5.1" - -sockjs@^0.3.21: - version "0.3.21" - resolved "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz" - integrity sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw== +sockjs@^0.3.24: + version "0.3.24" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" + integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== dependencies: faye-websocket "^0.11.3" - uuid "^3.4.0" + uuid "^8.3.2" websocket-driver "^0.7.4" -sort-keys@^1.0.0: - version "1.1.2" - resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz" - integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= +socks-proxy-agent@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6" + integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww== dependencies: - is-plain-obj "^1.0.0" - -source-list-map@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz" - integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + agent-base "^6.0.2" + debug "^4.3.3" + socks "^2.6.2" -source-map-resolve@^0.5.0: - version "0.5.3" - resolved "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== +socks@^2.6.2: + version "2.7.1" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" + integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" + ip "^2.0.0" + smart-buffer "^4.2.0" -source-map-support@^0.5.16, source-map-support@^0.5.19, source-map-support@~0.5.12, source-map-support@~0.5.20: +source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +source-map-support@^0.5.13, source-map-support@^0.5.19, source-map-support@~0.5.20: version "0.5.21" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== @@ -9956,60 +10943,50 @@ source-map-support@^0.5.16, source-map-support@^0.5.19, source-map-support@~0.5. buffer-from "^1.0.0" source-map "^0.6.0" -source-map-url@^0.4.0: - version "0.4.1" - resolved "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz" - integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== - -source-map@^0.5.0, source-map@^0.5.6: - version "0.5.7" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0: version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.7.3: - version "0.7.3" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== - space-separated-tokens@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f" integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q== +spawn-error-forwarder@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz#1afd94738e999b0346d7b9fc373be55e07577029" + integrity sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g== + spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + version "3.2.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" + integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== dependencies: spdx-expression-parse "^3.0.0" spdx-license-ids "^3.0.0" spdx-exceptions@^2.1.0: version "2.3.0" - resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== spdx-expression-parse@^3.0.0: version "3.0.1" - resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== dependencies: spdx-exceptions "^2.1.0" spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.7" - resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz" - integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== + version "3.0.13" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz#7189a474c46f8d47c7b0da4b987bb45e908bd2d5" + integrity sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w== spdy-transport@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== dependencies: debug "^4.1.0" @@ -10021,7 +10998,7 @@ spdy-transport@^3.0.0: spdy@^4.0.2: version "4.0.2" - resolved "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== dependencies: debug "^4.1.0" @@ -10030,61 +11007,49 @@ spdy@^4.0.2: select-hose "^2.0.0" spdy-transport "^3.0.0" -specificity@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz" - integrity sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg== +split2@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" + integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== + dependencies: + readable-stream "^3.0.0" -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== +split2@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/split2/-/split2-1.0.0.tgz#52e2e221d88c75f9a73f90556e263ff96772b314" + integrity sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg== + dependencies: + through2 "~2.0.0" + +split@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" + integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== dependencies: - extend-shallow "^3.0.0" + through "2" sprintf-js@^1.1.2: version "1.1.2" - resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -ssri@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz" - integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== - dependencies: - figgy-pudding "^3.5.1" - -ssri@^7.0.0: - version "7.1.1" - resolved "https://registry.npmjs.org/ssri/-/ssri-7.1.1.tgz" - integrity sha512-w+daCzXN89PseTL99MkA+fxJEcU3wfaE/ah0i0lnOlpG1CYLJ2ZjzEry68YBKfLs4JfoTShrTEsJkAZuNZ/stw== +ssri@^10.0.0, ssri@^10.0.1, ssri@^10.0.4: + version "10.0.4" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.4.tgz#5a20af378be586df139ddb2dfb3bf992cf0daba6" + integrity sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ== dependencies: - figgy-pudding "^3.5.1" - minipass "^3.1.1" + minipass "^5.0.0" -stable@^0.1.8: - version "0.1.8" - resolved "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz" - integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== +stackback@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b" + integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== stat-mode@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/stat-mode/-/stat-mode-1.0.0.tgz#68b55cb61ea639ff57136f36b216a291800d1465" integrity sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg== -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - statuses@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" @@ -10092,204 +11057,174 @@ statuses@2.0.1: "statuses@>= 1.4.0 < 2": version "1.5.0" - resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= - -stream-browserify@^2.0.1: - version "2.0.2" - resolved "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz" - integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== - dependencies: - inherits "~2.0.1" - readable-stream "^2.0.2" - -stream-each@^1.1.0: - version "1.2.3" - resolved "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz" - integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== - dependencies: - end-of-stream "^1.1.0" - stream-shift "^1.0.0" - -stream-http@^2.7.2: - version "2.8.3" - resolved "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz" - integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== - dependencies: - builtin-status-codes "^3.0.0" - inherits "^2.0.1" - readable-stream "^2.3.6" - to-arraybuffer "^1.0.0" - xtend "^4.0.0" - -stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz" - integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== - -strict-uri-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz" - integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== -string-argv@0.3.1: - version "0.3.1" - resolved "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz" - integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== +std-env@^3.3.2: + version "3.3.3" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.3.3.tgz#a54f06eb245fdcfef53d56f3c0251f1d5c3d01fe" + integrity sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg== -string-width@^3.0.0, string-width@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" +stream-buffers@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4" + integrity sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg== -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2: - version "4.2.2" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz" - integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== +stream-combiner2@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" + integrity sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw== dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" + duplexer2 "~0.1.0" + readable-stream "^2.0.2" -string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string.prototype.matchall@^4.0.4: - version "4.0.4" - resolved "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.4.tgz" - integrity sha512-pknFIWVachNcyqRfaQSeu/FUfpvJTe4uskUSZ9Wc1RijsPuzbZ8TyYT8WCNnntCjUEqQ3vUHMAfVj2+wLAisPQ== +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string.prototype.matchall@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz#3bf85722021816dcd1bf38bb714915887ca79fd3" + integrity sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - has-symbols "^1.0.1" + define-properties "^1.1.4" + es-abstract "^1.20.4" + get-intrinsic "^1.1.3" + has-symbols "^1.0.3" internal-slot "^1.0.3" - regexp.prototype.flags "^1.3.1" + regexp.prototype.flags "^1.4.3" side-channel "^1.0.4" -string.prototype.padend@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz" - integrity sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA= +string.prototype.trim@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" + integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== dependencies: - define-properties "^1.1.2" - es-abstract "^1.4.3" - function-bind "^1.0.2" + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" -string.prototype.trimend@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz" - integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== +string.prototype.trimend@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" + integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" + define-properties "^1.1.4" + es-abstract "^1.20.4" -string.prototype.trimstart@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz" - integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== +string.prototype.trimstart@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" + integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" -string_decoder@^1.0.0, string_decoder@^1.1.1, string_decoder@~1.1.1: +string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== dependencies: safe-buffer "~5.1.0" -stringify-object@^3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz" - integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: - get-own-enumerable-property-symbols "^3.0.0" - is-obj "^1.0.1" - is-regexp "^1.0.0" + ansi-regex "^5.0.1" -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= +strip-ansi@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== dependencies: - ansi-regex "^2.0.0" + ansi-regex "^6.0.1" -strip-ansi@^4.0.0: +strip-bom@4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== strip-bom@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== strip-eof@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== strip-final-newline@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== +strip-final-newline@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" + integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== + strip-indent@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== dependencies: min-indent "^1.0.0" -strip-json-comments@^3.0.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== strip-json-comments@~2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== -style-loader@^1.1.3: - version "1.3.0" - resolved "https://registry.npmjs.org/style-loader/-/style-loader-1.3.0.tgz" - integrity sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q== +strip-literal@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-literal/-/strip-literal-1.0.1.tgz#0115a332710c849b4e46497891fb8d585e404bd2" + integrity sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q== dependencies: - loader-utils "^2.0.0" - schema-utils "^2.7.0" + acorn "^8.8.2" -style-search@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz" - integrity sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI= +strip-outer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631" + integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg== + dependencies: + escape-string-regexp "^1.0.2" + +style-loader@^3.0.0: + version "3.3.3" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-3.3.3.tgz#bba8daac19930169c0c9c96706749a597ae3acff" + integrity sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw== style-to-object@^0.4.0: version "0.4.1" @@ -10298,7 +11233,7 @@ style-to-object@^0.4.0: dependencies: inline-style-parser "0.1.1" -styled-components@^5.3.11: +styled-components@5.3.11: version "5.3.11" resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-5.3.11.tgz#9fda7bf1108e39bf3f3e612fcc18170dedcd57a8" integrity sha512-uuzIIfnVkagcVHv9nE0VPlHPSCmXIUGKfJ42LNjxCCTDTL5sgnJ8Z7GZBq0EnLYGln77tPpEpExt2+qa+cZqSw== @@ -10314,168 +11249,73 @@ styled-components@^5.3.11: shallowequal "^1.1.0" supports-color "^5.5.0" -stylelint-config-recommended@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-4.0.0.tgz" - integrity sha512-sgna89Ng+25Hr9kmmaIxpGWt2LStVm1xf1807PdcWasiPDaOTkOHRL61sINw0twky7QMzafCGToGDnHT/kTHtQ== - -stylelint-config-standard@^21.0.0: - version "21.0.0" - resolved "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-21.0.0.tgz" - integrity sha512-Yf6mx5oYEbQQJxWuW7X3t1gcxqbUx52qC9SMS3saC2ruOVYEyqmr5zSW6k3wXflDjjFrPhar3kp68ugRopmlzg== - dependencies: - stylelint-config-recommended "^4.0.0" - -stylelint@^13.12.0: - version "13.12.0" - resolved "https://registry.npmjs.org/stylelint/-/stylelint-13.12.0.tgz" - integrity sha512-P8O1xDy41B7O7iXaSlW+UuFbE5+ZWQDb61ndGDxKIt36fMH50DtlQTbwLpFLf8DikceTAb3r6nPrRv30wBlzXw== - dependencies: - "@stylelint/postcss-css-in-js" "^0.37.2" - "@stylelint/postcss-markdown" "^0.36.2" - autoprefixer "^9.8.6" - balanced-match "^1.0.0" - chalk "^4.1.0" - cosmiconfig "^7.0.0" - debug "^4.3.1" - execall "^2.0.0" - fast-glob "^3.2.5" - fastest-levenshtein "^1.0.12" - file-entry-cache "^6.0.1" - get-stdin "^8.0.0" - global-modules "^2.0.0" - globby "^11.0.2" - globjoin "^0.1.4" - html-tags "^3.1.0" - ignore "^5.1.8" - import-lazy "^4.0.0" - imurmurhash "^0.1.4" - known-css-properties "^0.21.0" - lodash "^4.17.21" - log-symbols "^4.0.0" - mathml-tag-names "^2.1.3" - meow "^9.0.0" - micromatch "^4.0.2" - normalize-selector "^0.2.0" - postcss "^7.0.35" - postcss-html "^0.36.0" - postcss-less "^3.1.4" - postcss-media-query-parser "^0.2.3" - postcss-resolve-nested-selector "^0.1.1" - postcss-safe-parser "^4.0.2" - postcss-sass "^0.4.4" - postcss-scss "^2.1.1" - postcss-selector-parser "^6.0.4" - postcss-syntax "^0.36.2" - postcss-value-parser "^4.1.0" - resolve-from "^5.0.0" - slash "^3.0.0" - specificity "^0.4.1" - string-width "^4.2.2" - strip-ansi "^6.0.0" - style-search "^0.1.0" - sugarss "^2.0.0" - svg-tags "^1.0.0" - table "^6.0.7" - v8-compile-cache "^2.2.0" - write-file-atomic "^3.0.3" - -sudo-prompt@^9.2.1: +sudo-prompt@^9.1.1, sudo-prompt@^9.2.1: version "9.2.1" - resolved "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.2.1.tgz" + resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-9.2.1.tgz#77efb84309c9ca489527a4e749f287e6bdd52afd" integrity sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw== -sugarss@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/sugarss/-/sugarss-2.0.0.tgz" - integrity sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ== - dependencies: - postcss "^7.0.2" - sumchecker@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-3.0.1.tgz#6377e996795abb0b6d348e9b3e1dfb24345a8e42" integrity sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg== dependencies: debug "^4.1.0" supports-color@^5.3.0, supports-color@^5.5.0: version "5.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" -supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== - dependencies: - has-flag "^3.0.0" - supports-color@^7.0.0, supports-color@^7.1.0: version "7.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" -svg-parser@^2.0.2: - version "2.0.4" - resolved "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz" - integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== - -svg-tags@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz" - integrity sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q= - -svgo@^2.5.0: - version "2.8.0" - resolved "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz" - integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== dependencies: - "@trysound/sax" "0.2.0" - commander "^7.2.0" - css-select "^4.1.3" - css-tree "^1.1.3" - csso "^4.2.0" - picocolors "^1.0.0" - stable "^0.1.8" + has-flag "^4.0.0" -symbol-observable@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz" - integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== +supports-color@^9.3.1: + version "9.4.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-9.4.0.tgz#17bfcf686288f531db3dea3215510621ccb55954" + integrity sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw== -table@^5.2.3: - version "5.3.3" - resolved "https://registry.npmjs.org/table/-/table-5.3.3.tgz" - integrity sha512-3wUNCgdWX6PNpOe3amTTPWPuF6VGvgzjKCaO1snFj0z7Y3mUPWf5+zDtxUVGispJkDECPmR29wbzh6bVMOHbcw== +supports-hyperlinks@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz#3943544347c1ff90b15effb03fc14ae45ec10624" + integrity sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA== dependencies: - ajv "^6.9.1" - lodash "^4.17.11" - slice-ansi "^2.1.0" - string-width "^3.0.0" + has-flag "^4.0.0" + supports-color "^7.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -table@^6.0.4, table@^6.0.7: - version "6.0.7" - resolved "https://registry.npmjs.org/table/-/table-6.0.7.tgz" - integrity sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g== +synckit@^0.8.5: + version "0.8.5" + resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.5.tgz#b7f4358f9bb559437f9f167eb6bc46b3c9818fa3" + integrity sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q== dependencies: - ajv "^7.0.2" - lodash "^4.17.20" - slice-ansi "^4.0.0" - string-width "^4.2.0" + "@pkgr/utils" "^2.3.1" + tslib "^2.5.0" -tapable@^1.0.0, tapable@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz" - integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== +tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0, tapable@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== tar-fs@^2.0.0: version "2.1.1" - resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== dependencies: chownr "^1.1.1" @@ -10485,7 +11325,7 @@ tar-fs@^2.0.0: tar-stream@^2.1.4: version "2.2.0" - resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== dependencies: bl "^4.0.3" @@ -10494,7 +11334,7 @@ tar-stream@^2.1.4: inherits "^2.0.3" readable-stream "^3.1.1" -tar@^6.1.11: +tar@^6.0.5, tar@^6.1.11, tar@^6.1.12, tar@^6.1.13, tar@^6.1.15, tar@^6.1.2: version "6.1.15" resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.15.tgz#c9738b0b98845a3b344d334b8fa3041aaba53a69" integrity sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A== @@ -10506,176 +11346,171 @@ tar@^6.1.11: mkdirp "^1.0.3" yallist "^4.0.0" +temp-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" + integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== + temp-file@^3.4.0: version "3.4.0" - resolved "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz" + resolved "https://registry.yarnpkg.com/temp-file/-/temp-file-3.4.0.tgz#766ea28911c683996c248ef1a20eea04d51652c7" integrity sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg== dependencies: async-exit-hook "^2.0.1" fs-extra "^10.0.0" -terser-webpack-plugin@^1.4.3: - version "1.4.5" - resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz" - integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw== - dependencies: - cacache "^12.0.2" - find-cache-dir "^2.1.0" - is-wsl "^1.1.0" - schema-utils "^1.0.0" - serialize-javascript "^4.0.0" - source-map "^0.6.1" - terser "^4.1.2" - webpack-sources "^1.4.0" - worker-farm "^1.7.0" - -terser-webpack-plugin@^2.3.5: - version "2.3.8" - resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-2.3.8.tgz" - integrity sha512-/fKw3R+hWyHfYx7Bv6oPqmk4HGQcrWLtV3X6ggvPuwPNHSnzvVV51z6OaaCOus4YLjutYGOz3pEpbhe6Up2s1w== - dependencies: - cacache "^13.0.1" - find-cache-dir "^3.3.1" - jest-worker "^25.4.0" - p-limit "^2.3.0" - schema-utils "^2.6.6" - serialize-javascript "^4.0.0" - source-map "^0.6.1" - terser "^4.6.12" - webpack-sources "^1.4.3" - -terser@^4.1.2, terser@^4.6.12, terser@^4.6.3: - version "4.8.0" - resolved "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz" - integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== +temp@^0.9.0: + version "0.9.4" + resolved "https://registry.yarnpkg.com/temp/-/temp-0.9.4.tgz#cd20a8580cb63635d0e4e9d4bd989d44286e7620" + integrity sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA== dependencies: - commander "^2.20.0" - source-map "~0.6.1" - source-map-support "~0.5.12" + mkdirp "^0.5.1" + rimraf "~2.6.2" -terser@^5.14.2: - version "5.14.2" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.14.2.tgz#9ac9f22b06994d736174f4091aa368db896f1c10" - integrity sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA== - dependencies: - "@jridgewell/source-map" "^0.3.2" - acorn "^8.5.0" +tempy@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/tempy/-/tempy-3.0.0.tgz#a6c0a15f5534a820e92c3e1369f1c1e87ebd6b68" + integrity sha512-B2I9X7+o2wOaW4r/CWMkpOO9mdiTRCxXNgob6iGvPmfPWgH/KyUD6Uy5crtWBxIBe3YrNZKR2lSzv1JJKWD4vA== + dependencies: + is-stream "^3.0.0" + temp-dir "^2.0.0" + type-fest "^2.12.2" + unique-string "^3.0.0" + +terser-webpack-plugin@^5.3.7: + version "5.3.9" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz#832536999c51b46d468067f9e37662a3b96adfe1" + integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA== + dependencies: + "@jridgewell/trace-mapping" "^0.3.17" + jest-worker "^27.4.5" + schema-utils "^3.1.1" + serialize-javascript "^6.0.1" + terser "^5.16.8" + +terser@^5.10.0, terser@^5.16.8: + version "5.18.2" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.18.2.tgz#ff3072a0faf21ffd38f99acc9a0ddf7b5f07b948" + integrity sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w== + dependencies: + "@jridgewell/source-map" "^0.3.3" + acorn "^8.8.2" commander "^2.20.0" source-map-support "~0.5.20" -text-table@^0.2.0: +text-extensions@^1.0.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" + integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== + +text-table@^0.2.0, text-table@~0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== -through2@^2.0.0: +through2@~2.0.0: version "2.0.5" - resolved "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== dependencies: readable-stream "~2.3.6" xtend "~4.0.1" -through@^2.3.6, through@^2.3.8: +through@2, "through@>=2.2.7 <3", through@^2.3.6, through@^2.3.8: version "2.3.8" - resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== thunky@^1.0.2: version "1.1.0" - resolved "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== -timers-browserify@^2.0.4: - version "2.0.12" - resolved "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz" - integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== - dependencies: - setimmediate "^1.0.4" +time-zone@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/time-zone/-/time-zone-1.0.0.tgz#99c5bf55958966af6d06d83bdf3800dc82faec5d" + integrity sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA== -tiny-invariant@^1.0.2, tiny-invariant@^1.0.6: - version "1.1.0" - resolved "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz" - integrity sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw== +tiny-invariant@^1.0.6: + version "1.3.1" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.1.tgz#8560808c916ef02ecfd55e66090df23a4b7aa642" + integrity sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw== -tiny-warning@^1.0.0, tiny-warning@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz" - integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== +tiny-relative-date@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz#fa08aad501ed730f31cc043181d995c39a935e07" + integrity sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A== + +tinybench@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.5.0.tgz#4711c99bbf6f3e986f67eb722fed9cddb3a68ba5" + integrity sha512-kRwSG8Zx4tjF9ZiyH4bhaebu+EDz1BOx9hOigYHlUW4xxI/wKIUQUqo018UlU4ar6ATPBsaMrdbKZ+tmPdohFA== tinycolor2@^1.4.1: - version "1.4.2" - resolved "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz" - integrity sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA== + version "1.6.0" + resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.6.0.tgz#f98007460169b0263b97072c5ae92484ce02d09e" + integrity sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw== + +tinypool@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-0.5.0.tgz#3861c3069bf71e4f1f5aa2d2e6b3aaacc278961e" + integrity sha512-paHQtnrlS1QZYKF/GnLoOM/DN9fqaGOFbCbxzAhwniySnzl9Ebk8w73/dd34DAhe/obUbPAOldTyYXQZxnPBPQ== + +tinyspy@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-2.1.1.tgz#9e6371b00c259e5c5b301917ca18c01d40ae558c" + integrity sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w== + +titleize@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/titleize/-/titleize-3.0.0.tgz#71c12eb7fdd2558aa8a44b0be83b8a76694acd53" + integrity sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ== tmp-promise@^3.0.2: version "3.0.3" - resolved "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz" + resolved "https://registry.yarnpkg.com/tmp-promise/-/tmp-promise-3.0.3.tgz#60a1a1cc98c988674fcbfd23b6e3367bdeac4ce7" integrity sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ== dependencies: tmp "^0.2.0" tmp@^0.0.33: version "0.0.33" - resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== dependencies: os-tmpdir "~1.0.2" tmp@^0.2.0: version "0.2.1" - resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== dependencies: rimraf "^3.0.0" -to-arraybuffer@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz" - integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= +tn1150@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/tn1150/-/tn1150-0.1.0.tgz#673503d24d56b87de8b8c77fee3fc0853d59a18d" + integrity sha512-DbplOfQFkqG5IHcDyyrs/lkvSr3mPUVsFf/RbDppOshs22yTPnSJWEe6FkYd1txAwU/zcnR905ar2fi4kwF29w== dependencies: - kind-of "^3.0.2" - -to-readable-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz" - integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + unorm "^1.4.1" -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" +to-data-view@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/to-data-view/-/to-data-view-1.1.0.tgz#08d6492b0b8deb9b29bdf1f61c23eadfa8994d00" + integrity sha512-1eAdufMg6mwgmlojAx3QeMnzB/BTVp7Tbndi3U7ftcT2zCZadjxkkmLmd97zmaxWi+sgGcgWrokmpEoy0Dn0vQ== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - toidentifier@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" @@ -10686,6 +11521,16 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== +traverse@~0.6.6: + version "0.6.7" + resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.7.tgz#46961cd2d57dd8706c36664acde06a248f1173fe" + integrity sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg== + +treeverse@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/treeverse/-/treeverse-3.0.0.tgz#dd82de9eb602115c6ebd77a574aae67003cb48c8" + integrity sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ== + trim-lines@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338" @@ -10693,13 +11538,15 @@ trim-lines@^3.0.0: trim-newlines@^3.0.0: version "3.0.1" - resolved "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== -trough@^1.0.0: - version "1.0.3" - resolved "https://registry.npmjs.org/trough/-/trough-1.0.3.tgz" - integrity sha512-fwkLWH+DimvA4YCy+/nvJd61nWQQ2liO/nF/RjkTpiOGi+zxZzVkhb1mvbHIIW4b/8nDsYI8uTmAlc0nNkRMOw== +trim-repeated@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21" + integrity sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg== + dependencies: + escape-string-regexp "^1.0.2" trough@^2.0.0: version "2.1.0" @@ -10708,87 +11555,140 @@ trough@^2.0.0: truncate-utf8-bytes@^1.0.0: version "1.0.2" - resolved "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b" integrity sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ== dependencies: utf8-byte-length "^1.0.1" -tslib@^1.9.0: +ts-loader@^9.2.2: + version "9.4.4" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.4.4.tgz#6ceaf4d58dcc6979f84125335904920884b7cee4" + integrity sha512-MLukxDHBl8OJ5Dk3y69IsKVFRA/6MwzEqBgh+OXMPB/OD01KQuWPFd1WAQP8a5PeSCAxfnkhiuWqfmFJzJQt9w== + dependencies: + chalk "^4.1.0" + enhanced-resolve "^5.0.0" + micromatch "^4.0.0" + semver "^7.3.4" + +ts-node@^10.0.0, ts-node@^10.8.1: + version "10.9.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + +tsconfig-paths@^3.14.1: + version "3.14.2" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088" + integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^1.8.1: version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.3: - version "2.1.0" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz" - integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== +tslib@^2.0.3, tslib@^2.1.0, tslib@^2.5.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3" + integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA== -tty-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz" - integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +tuf-js@^1.1.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/tuf-js/-/tuf-js-1.1.7.tgz#21b7ae92a9373015be77dfe0cb282a80ec3bbe43" + integrity sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg== + dependencies: + "@tufjs/models" "1.0.4" + debug "^4.3.4" + make-fetch-happen "^11.1.1" tunnel-agent@^0.6.0: version "0.6.0" - resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== dependencies: safe-buffer "^5.0.1" -tunnel@^0.0.6: - version "0.0.6" - resolved "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz" - integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg== - type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" - resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== dependencies: prelude-ls "^1.2.1" -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= - dependencies: - prelude-ls "~1.1.2" +type-detect@^4.0.0, type-detect@^4.0.5: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== type-fest@^0.13.1: version "0.13.1" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== type-fest@^0.18.0: version "0.18.1" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== type-fest@^0.20.2: version "0.20.2" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== type-fest@^0.21.3: version "0.21.3" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== type-fest@^0.6.0: version "0.6.0" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== type-fest@^0.8.1: version "0.8.1" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -type-fest@^2.17.0: +type-fest@^1.0.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" + integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== + +type-fest@^2.0.0, type-fest@^2.12.2, type-fest@^2.17.0, type-fest@^2.5.0: version "2.19.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== +type-fest@^3.0.0, type-fest@^3.8.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-3.12.0.tgz#4ce26edc1ccc59fc171e495887ef391fe1f5280e" + integrity sha512-qj9wWsnFvVEMUDbESiilKeXeHL7FwwiFcogfhfyjmvT968RXSvnl23f1JOClTHYItsi7o501C/7qVllscUP3oA== + type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -10797,43 +11697,60 @@ type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" -typedarray-to-buffer@^3.1.5: - 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== +typed-array-length@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== dependencies: - is-typedarray "^1.0.0" + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= +typescript@^4.0.2: + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== -typescript@^4.4.3: - version "4.7.3" - resolved "https://registry.npmjs.org/typescript/-/typescript-4.7.3.tgz" - integrity sha512-WOkT3XYvrpXx4vMMqlD+8R8R37fZkjyLGlxavMc4iB8lrl8L0DeTcHbYgw/v0N/z9wAFsgBhcsF0ruoySS22mA== +"typescript@^4.6.4 || ^5.0.0": + version "5.1.6" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.6.tgz#02f8ac202b6dad2c0dd5e0913745b47a37998274" + integrity sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA== -uiohook-napi@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/uiohook-napi/-/uiohook-napi-1.2.0.tgz#2c40e6c4b2948f808374029b301e9c0885e0cf77" - integrity sha512-v38nuM356VZkdtlzLsBjCQTy22BeJ173url2ZjjwdiD+pq976YU4GGUxyxR1Gg8VuZvZDMfuNOnhnXUQ88VZLg== +typescript@~4.5.4: + version "4.5.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.5.tgz#d8c953832d28924a9e3d37c73d729c846c5896f3" + integrity sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA== + +ufo@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.1.2.tgz#d0d9e0fa09dece0c31ffd57bd363f030a35cfe76" + integrity sha512-TrY6DsjTQQgyS3E3dBaOXf0TpPD8u9FVrVYmKVegJuFw51n/YB9XPt+U6ydzFG5ZIN7+DIjPbNmXoBj9esYhgQ== + +uglify-js@^3.1.4: + version "3.17.4" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" + integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== + +uiohook-napi@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/uiohook-napi/-/uiohook-napi-1.5.2.tgz#88c14fd95276b8f547329ccd5a4a6937fdf077c7" + integrity sha512-XmxEQpgWZerYwrhRk5oBbHSO9pjeEKF7cMG6e+Ak1j5MW7xQUvl/P+qaPAYDfbJ1JsT/E6ontbClBBSy5Z3C0g== dependencies: node-gyp-build "4.x.x" -unbox-primitive@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz" - integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== dependencies: - function-bind "^1.1.1" - has-bigints "^1.0.1" - has-symbols "^1.0.2" + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" uncontrollable@^7.2.1: version "7.2.1" - resolved "https://registry.npmjs.org/uncontrollable/-/uncontrollable-7.2.1.tgz" + resolved "https://registry.yarnpkg.com/uncontrollable/-/uncontrollable-7.2.1.tgz#1fa70ba0c57a14d5f78905d533cf63916dc75738" integrity sha512-svtcfoTADIB0nT9nltgjujTi7BzVmwjZClOmskKu/E8FW9BXzg9os8OLr4f8Dlnk0rYWJIWr4wv9eKUXiQvQwQ== dependencies: "@babel/runtime" "^7.6.3" @@ -10843,26 +11760,26 @@ uncontrollable@^7.2.1: unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== unicode-match-property-ecmascript@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== dependencies: unicode-canonical-property-names-ecmascript "^2.0.0" unicode-property-aliases-ecmascript "^2.0.0" -unicode-match-property-value-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz" - integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== +unicode-match-property-value-ecmascript@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" + integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== unicode-property-aliases-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz" - integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" + integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== unified@^10.0.0: version "10.1.2" @@ -10877,64 +11794,32 @@ unified@^10.0.0: trough "^2.0.0" vfile "^5.0.0" -unified@^9.1.0: - version "9.2.1" - resolved "https://registry.npmjs.org/unified/-/unified-9.2.1.tgz" - integrity sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA== - dependencies: - bail "^1.0.0" - extend "^3.0.0" - is-buffer "^2.0.0" - is-plain-obj "^2.0.0" - trough "^1.0.0" - vfile "^4.0.0" - -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" - -uniq@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz" - integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= - -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== +unique-filename@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea" + integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g== dependencies: - unique-slug "^2.0.0" + unique-slug "^4.0.0" -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== +unique-slug@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3" + integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ== dependencies: imurmurhash "^0.1.4" -unist-util-find-all-after@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-3.0.2.tgz" - integrity sha512-xaTC/AGZ0rIM2gM28YVRAFPIZpzbpDtU3dRmp7EXlNVA8ziQc4hY3H7BHXM1J49nEmiqc3svnqMReW+PGqbZKQ== +unique-string@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-3.0.0.tgz#84a1c377aff5fd7a8bc6b55d8244b2bd90d75b9a" + integrity sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ== dependencies: - unist-util-is "^4.0.0" + crypto-random-string "^4.0.0" unist-util-generated@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-2.0.1.tgz#e37c50af35d3ed185ac6ceacb6ca0afb28a85cae" integrity sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A== -unist-util-is@^4.0.0: - version "4.1.0" - resolved "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz" - integrity sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg== - unist-util-is@^5.0.0: version "5.2.1" resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-5.2.1.tgz#b74960e145c18dcb6226bc57933597f5486deae9" @@ -10949,13 +11834,6 @@ unist-util-position@^4.0.0: dependencies: "@types/unist" "^2.0.0" -unist-util-stringify-position@^2.0.0: - version "2.0.3" - resolved "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz" - integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g== - dependencies: - "@types/unist" "^2.0.2" - unist-util-stringify-position@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz#03ad3348210c2d930772d64b489580c13a7db39d" @@ -10980,14 +11858,6 @@ unist-util-visit@^4.0.0: unist-util-is "^5.0.0" unist-util-visit-parents "^5.1.1" -universal-github-app-jwt@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/universal-github-app-jwt/-/universal-github-app-jwt-1.1.1.tgz#d57cee49020662a95ca750a057e758a1a7190e6e" - integrity sha512-G33RTLrIBMFmlDV4u4CBF7dh71eWwykck4XgaxaIVeZKOYZRAAxvcGMRFTUclVY6xoUPQvO4Ne5wKGxYm/Yy9w== - dependencies: - "@types/jsonwebtoken" "^9.0.0" - jsonwebtoken "^9.0.0" - universal-user-agent@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" @@ -10995,93 +11865,76 @@ universal-user-agent@^6.0.0: universalify@^0.1.0: version "0.1.2" - resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== universalify@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== +unorm@^1.4.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/unorm/-/unorm-1.6.0.tgz#029b289661fba714f1a9af439eb51d9b16c205af" + integrity sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA== + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" +untildify@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" + integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== unzip-crx-3@^0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/unzip-crx-3/-/unzip-crx-3-0.2.0.tgz" + resolved "https://registry.yarnpkg.com/unzip-crx-3/-/unzip-crx-3-0.2.0.tgz#d5324147b104a8aed9ae8639c95521f6f7cda292" integrity sha512-0+JiUq/z7faJ6oifVB5nSwt589v1KCduqIJupNVDoWSXZtWDmjDGO3RAEOvwJ07w90aoXoP4enKsR7ecMrJtWQ== dependencies: jszip "^3.1.0" mkdirp "^0.5.1" yaku "^0.16.6" -upath@^1.1.1: - version "1.2.0" - resolved "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz" - integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== +update-browserslist-db@^1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" + integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +update-electron-app@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/update-electron-app/-/update-electron-app-2.0.1.tgz#229dbeb4534f51ec949e6a46ae1ac32f68a17eed" + integrity sha512-e4xEner89UZZaBGYJbYlMdL1uUrC0VjOsTAL2N4opPjzFtn+j7mdsJJsnyXZzUVeLY+8tuCX4XEsUM98oBHmZg== + dependencies: + electron-is-dev "^0.3.0" + github-url-to-object "^4.0.4" + is-url "^1.2.4" + ms "^2.1.1" uri-js@^4.2.2: version "4.4.1" - resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= - -url-loader@^4.0.0: - version "4.1.1" - resolved "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz" - integrity sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA== - dependencies: - loader-utils "^2.0.0" - mime-types "^2.1.27" - schema-utils "^3.0.0" - -url-parse-lax@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz" - integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= - dependencies: - prepend-http "^2.0.0" - -url-parse@^1.4.3, url-parse@^1.5.1: - version "1.5.10" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" - integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - -url@^0.11.0: - version "0.11.0" - resolved "https://registry.npmjs.org/url/-/url-0.11.0.tgz" - integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= - dependencies: - punycode "1.3.2" - querystring "0.2.0" +url-join@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/url-join/-/url-join-5.0.0.tgz#c2f1e5cbd95fa91082a93b58a1f42fecb4bdbcf1" + integrity sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA== -usb@^2.3.1: - version "2.4.2" - resolved "https://registry.npmjs.org/usb/-/usb-2.4.2.tgz" - integrity sha512-GzxxhFbH0TnjutDXRb7HhjNUCfcg3L6rC0Ya6oveiGeNbs0saQbCZh0G71xd8TKOyI9KKWzcZprsqnDoTFZRTw== +usb@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/usb/-/usb-2.9.0.tgz#8ae3b175f93bee559400bff33491eee63406b6a2" + integrity sha512-G0I/fPgfHUzWH8xo2KkDxTTFruUWfppgSFJ+bQxz/kVY2x15EQ/XDB7dqD1G432G4gBG4jYQuF3U7j/orSs5nw== dependencies: - "@types/w3c-web-usb" "1.0.6" - node-addon-api "^4.2.0" - node-gyp-build "^4.3.0" + "@types/w3c-web-usb" "^1.0.6" + node-addon-api "^6.0.0" + node-gyp-build "^4.5.0" use-isomorphic-layout-effect@^1.1.2: version "1.1.2" @@ -11089,23 +11942,26 @@ use-isomorphic-layout-effect@^1.1.2: integrity sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA== use-memo-one@^1.1.1: - version "1.1.2" - resolved "https://registry.npmjs.org/use-memo-one/-/use-memo-one-1.1.2.tgz" - integrity sha512-u2qFKtxLsia/r8qG0ZKkbytbztzRb317XCkT7yP8wxL0tZ/CzK2G+WWie5vWvpyeP7+YoPIwbJoIHJ4Ba4k0oQ== + version "1.1.3" + resolved "https://registry.yarnpkg.com/use-memo-one/-/use-memo-one-1.1.3.tgz#2fd2e43a2169eabc7496960ace8c79efef975e99" + integrity sha512-g66/K7ZQGYrI6dy8GLpVcMsBp4s17xNkYJVSMvTEevGy3nDxHOfE6z8BVE22+5G5x7t3+bhzrlTDB7ObrEE0cQ== use-sync-external-store@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== -use@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/use/-/use-3.1.1.tgz" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== +username@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/username/-/username-5.1.0.tgz#a7f9325adce2d0166448cdd55d4985b1360f2508" + integrity sha512-PCKbdWw85JsYMvmCv5GH3kXmM66rCd9m1hBEDutPNv94b/pqCMT4NtcKyeWYvLFiE8b+ha1Jdl8XAaUdPn5QTg== + dependencies: + execa "^1.0.0" + mem "^4.3.0" utf8-byte-length@^1.0.1: version "1.0.4" - resolved "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61" integrity sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA== util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: @@ -11113,42 +11969,20 @@ util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -util.promisify@1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz" - integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== - dependencies: - define-properties "^1.1.2" - object.getownpropertydescriptors "^2.0.3" - -util@0.10.3: - version "0.10.3" - resolved "https://registry.npmjs.org/util/-/util-0.10.3.tgz" - integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= - dependencies: - inherits "2.0.1" - -util@^0.11.0: - version "0.11.1" - resolved "https://registry.npmjs.org/util/-/util-0.11.1.tgz" - integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== - dependencies: - inherits "2.0.3" - utila@~0.4: version "0.4.0" - resolved "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz" - integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== -uuid@^3.3.2, uuid@^3.4.0: - version "3.4.0" - resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== uvu@^0.5.0: version "0.5.6" @@ -11160,46 +11994,31 @@ uvu@^0.5.0: kleur "^4.0.3" sade "^1.7.3" -v8-compile-cache@^2.0.3, v8-compile-cache@^2.1.1, v8-compile-cache@^2.2.0: - version "2.3.0" - resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== -validate-npm-package-license@^3.0.1: +validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: version "3.0.4" - resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== dependencies: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -value-equal@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz" - integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== +validate-npm-package-name@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz#f16afd48318e6f90a1ec101377fa0384cfc8c713" + integrity sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ== + dependencies: + builtins "^5.0.0" vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== -verror@^1.10.0: - version "1.10.1" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.1.tgz#4bf09eeccf4563b109ed4b3d458380c972b0cdeb" - integrity sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg== - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -vfile-message@^2.0.0: - version "2.0.4" - resolved "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz" - integrity sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ== - dependencies: - "@types/unist" "^2.0.0" - unist-util-stringify-position "^2.0.0" - vfile-message@^3.0.0: version "3.1.4" resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-3.1.4.tgz#15a50816ae7d7c2d1fa87090a7f9f96612b59dea" @@ -11208,16 +12027,6 @@ vfile-message@^3.0.0: "@types/unist" "^2.0.0" unist-util-stringify-position "^3.0.0" -vfile@^4.0.0: - version "4.2.1" - resolved "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz" - integrity sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA== - dependencies: - "@types/unist" "^2.0.0" - is-buffer "^2.0.0" - unist-util-stringify-position "^2.0.0" - vfile-message "^2.0.0" - vfile@^5.0.0: version "5.3.7" resolved "https://registry.yarnpkg.com/vfile/-/vfile-5.3.7.tgz#de0677e6683e3380fafc46544cfe603118826ab7" @@ -11228,175 +12037,221 @@ vfile@^5.0.0: unist-util-stringify-position "^3.0.0" vfile-message "^3.0.0" -vm-browserify@^1.0.1: - version "1.1.2" - resolved "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz" - integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== +vite-node@0.32.2: + version "0.32.2" + resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-0.32.2.tgz#bfccdfeb708b2309ea9e5fe424951c75bb9c0096" + integrity sha512-dTQ1DCLwl2aEseov7cfQ+kDMNJpM1ebpyMMMwWzBvLbis8Nla/6c9WQcqpPssTwS6Rp/+U6KwlIj8Eapw4bLdA== + dependencies: + cac "^6.7.14" + debug "^4.3.4" + mlly "^1.2.0" + pathe "^1.1.0" + picocolors "^1.0.0" + vite "^3.0.0 || ^4.0.0" -void-elements@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz" - integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w= +"vite@^3.0.0 || ^4.0.0", vite@^4.3.9: + version "4.3.9" + resolved "https://registry.yarnpkg.com/vite/-/vite-4.3.9.tgz#db896200c0b1aa13b37cdc35c9e99ee2fdd5f96d" + integrity sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg== + dependencies: + esbuild "^0.17.5" + postcss "^8.4.23" + rollup "^3.21.0" + optionalDependencies: + fsevents "~2.3.2" + +vitest@^0.32.2: + version "0.32.2" + resolved "https://registry.yarnpkg.com/vitest/-/vitest-0.32.2.tgz#758ce2220f609e240ac054eca7ad11a5140679ab" + integrity sha512-hU8GNNuQfwuQmqTLfiKcqEhZY72Zxb7nnN07koCUNmntNxbKQnVbeIS6sqUgR3eXSlbOpit8+/gr1KpqoMgWCQ== + dependencies: + "@types/chai" "^4.3.5" + "@types/chai-subset" "^1.3.3" + "@types/node" "*" + "@vitest/expect" "0.32.2" + "@vitest/runner" "0.32.2" + "@vitest/snapshot" "0.32.2" + "@vitest/spy" "0.32.2" + "@vitest/utils" "0.32.2" + acorn "^8.8.2" + acorn-walk "^8.2.0" + cac "^6.7.14" + chai "^4.3.7" + concordance "^5.0.4" + debug "^4.3.4" + local-pkg "^0.4.3" + magic-string "^0.30.0" + pathe "^1.1.0" + picocolors "^1.0.0" + std-env "^3.3.2" + strip-literal "^1.0.1" + tinybench "^2.5.0" + tinypool "^0.5.0" + vite "^3.0.0 || ^4.0.0" + vite-node "0.32.2" + why-is-node-running "^2.2.2" + +void-elements@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" + integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== + +walk-up-path@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/walk-up-path/-/walk-up-path-3.0.1.tgz#c8d78d5375b4966c717eb17ada73dbd41490e886" + integrity sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA== warning@^4.0.0, warning@^4.0.3: version "4.0.3" - resolved "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz" + resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== dependencies: loose-envify "^1.0.0" -watchpack-chokidar2@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz" - integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== - dependencies: - chokidar "^2.1.8" - -watchpack@^1.7.4: - version "1.7.5" - resolved "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz" - integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== +watchpack@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" + integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== dependencies: + glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" - neo-async "^2.5.0" - optionalDependencies: - chokidar "^3.4.1" - watchpack-chokidar2 "^2.0.1" wbuf@^1.1.0, wbuf@^1.7.3: version "1.7.3" - resolved "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== dependencies: minimalistic-assert "^1.0.0" +wcwidth@^1.0.0, wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== + dependencies: + defaults "^1.0.3" + +web-streams-polyfill@^3.0.3: + version "3.2.1" + resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6" + integrity sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q== + webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== -webpack-cli@^3.3.11: - version "3.3.12" - resolved "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.12.tgz" - integrity sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag== - dependencies: - chalk "^2.4.2" - cross-spawn "^6.0.5" - enhanced-resolve "^4.1.1" - findup-sync "^3.0.0" - global-modules "^2.0.0" - import-local "^2.0.0" - interpret "^1.4.0" - loader-utils "^1.4.0" - supports-color "^6.1.0" - v8-compile-cache "^2.1.1" - yargs "^13.3.2" - -webpack-dev-middleware@^3.7.2: - version "3.7.3" - resolved "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz" - integrity sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ== - dependencies: - memory-fs "^0.4.1" - mime "^2.4.4" - mkdirp "^0.5.1" - range-parser "^1.2.1" - webpack-log "^2.0.0" +webpack-cli@^5.1.3: + version "5.1.4" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.1.4.tgz#c8e046ba7eaae4911d7e71e2b25b776fcc35759b" + integrity sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg== + dependencies: + "@discoveryjs/json-ext" "^0.5.0" + "@webpack-cli/configtest" "^2.1.1" + "@webpack-cli/info" "^2.0.2" + "@webpack-cli/serve" "^2.0.5" + colorette "^2.0.14" + commander "^10.0.1" + cross-spawn "^7.0.3" + envinfo "^7.7.3" + fastest-levenshtein "^1.0.12" + import-local "^3.0.2" + interpret "^3.1.1" + rechoir "^0.8.0" + webpack-merge "^5.7.3" -webpack-dev-server@^3.10.3: - version "3.11.2" - resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.2.tgz" - integrity sha512-A80BkuHRQfCiNtGBS1EMf2ChTUs0x+B3wGDFmOeT4rmJOHhHTCH2naNxIHhmkr0/UillP4U3yeIyv1pNp+QDLQ== +webpack-dev-middleware@^5.3.1: + version "5.3.3" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz#efae67c2793908e7311f1d9b06f2a08dcc97e51f" + integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== dependencies: - ansi-html "0.0.7" - bonjour "^3.5.0" - chokidar "^2.1.8" + colorette "^2.0.10" + memfs "^3.4.3" + mime-types "^2.1.31" + range-parser "^1.2.1" + schema-utils "^4.0.0" + +webpack-dev-server@^4.0.0: + version "4.15.1" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz#8944b29c12760b3a45bdaa70799b17cb91b03df7" + integrity sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA== + dependencies: + "@types/bonjour" "^3.5.9" + "@types/connect-history-api-fallback" "^1.3.5" + "@types/express" "^4.17.13" + "@types/serve-index" "^1.9.1" + "@types/serve-static" "^1.13.10" + "@types/sockjs" "^0.3.33" + "@types/ws" "^8.5.5" + ansi-html-community "^0.0.8" + bonjour-service "^1.0.11" + chokidar "^3.5.3" + colorette "^2.0.10" compression "^1.7.4" - connect-history-api-fallback "^1.6.0" - debug "^4.1.1" - del "^4.1.1" - express "^4.17.1" - html-entities "^1.3.1" - http-proxy-middleware "0.19.1" - import-local "^2.0.0" - internal-ip "^4.3.0" - ip "^1.1.5" - is-absolute-url "^3.0.3" - killable "^1.0.1" - loglevel "^1.6.8" - opn "^5.5.0" - p-retry "^3.0.1" - portfinder "^1.0.26" - schema-utils "^1.0.0" - selfsigned "^1.10.8" - semver "^6.3.0" + connect-history-api-fallback "^2.0.0" + default-gateway "^6.0.3" + express "^4.17.3" + graceful-fs "^4.2.6" + html-entities "^2.3.2" + http-proxy-middleware "^2.0.3" + ipaddr.js "^2.0.1" + launch-editor "^2.6.0" + open "^8.0.9" + p-retry "^4.5.0" + rimraf "^3.0.2" + schema-utils "^4.0.0" + selfsigned "^2.1.1" serve-index "^1.9.1" - sockjs "^0.3.21" - sockjs-client "^1.5.0" + sockjs "^0.3.24" spdy "^4.0.2" - strip-ansi "^3.0.1" - supports-color "^6.1.0" - url "^0.11.0" - webpack-dev-middleware "^3.7.2" - webpack-log "^2.0.0" - ws "^6.2.1" - yargs "^13.3.2" - -webpack-log@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz" - integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== - dependencies: - ansi-colors "^3.0.0" - uuid "^3.3.2" - -webpack-merge@^4.2.2: - version "4.2.2" - resolved "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz" - integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g== - dependencies: - lodash "^4.17.15" - -webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: - version "1.4.3" - resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz" - integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== - dependencies: - source-list-map "^2.0.0" - source-map "~0.6.1" - -webpack@^4.44.2: - version "4.46.0" - resolved "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz" - integrity sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-module-context" "1.9.0" - "@webassemblyjs/wasm-edit" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - acorn "^6.4.1" - ajv "^6.10.2" - ajv-keywords "^3.4.1" + webpack-dev-middleware "^5.3.1" + ws "^8.13.0" + +webpack-merge@^5.7.3: + version "5.9.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.9.0.tgz#dc160a1c4cf512ceca515cc231669e9ddb133826" + integrity sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg== + dependencies: + clone-deep "^4.0.1" + wildcard "^2.0.0" + +webpack-sources@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" + integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== + +webpack@^5.69.1: + version "5.88.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.88.1.tgz#21eba01e81bd5edff1968aea726e2fbfd557d3f8" + integrity sha512-FROX3TxQnC/ox4N+3xQoWZzvGXSuscxR32rbzjpXgEzWudJFEJBpdlkkob2ylrv5yzzufD1zph1OoFsLtm6stQ== + dependencies: + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^1.0.0" + "@webassemblyjs/ast" "^1.11.5" + "@webassemblyjs/wasm-edit" "^1.11.5" + "@webassemblyjs/wasm-parser" "^1.11.5" + acorn "^8.7.1" + acorn-import-assertions "^1.9.0" + browserslist "^4.14.5" chrome-trace-event "^1.0.2" - enhanced-resolve "^4.5.0" - eslint-scope "^4.0.3" - json-parse-better-errors "^1.0.2" - loader-runner "^2.4.0" - loader-utils "^1.2.3" - memory-fs "^0.4.1" - micromatch "^3.1.10" - mkdirp "^0.5.3" - neo-async "^2.6.1" - node-libs-browser "^2.2.1" - schema-utils "^1.0.0" - tapable "^1.1.3" - terser-webpack-plugin "^1.4.3" - watchpack "^1.7.4" - webpack-sources "^1.4.1" + enhanced-resolve "^5.15.0" + es-module-lexer "^1.2.1" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.9" + json-parse-even-better-errors "^2.3.1" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.2.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.3.7" + watchpack "^2.4.0" + webpack-sources "^3.2.3" websocket-driver@>=0.5.1, websocket-driver@^0.7.4: version "0.7.4" - resolved "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== dependencies: http-parser-js ">=0.5.1" @@ -11405,9 +12260,14 @@ websocket-driver@>=0.5.1, websocket-driver@^0.7.4: websocket-extensions@>=0.1.1: version "0.1.4" - resolved "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== +well-known-symbols@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/well-known-symbols/-/well-known-symbols-2.0.0.tgz#e9c7c07dbd132b7b84212c8174391ec1f9871ba5" + integrity sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q== + whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" @@ -11418,7 +12278,7 @@ whatwg-url@^5.0.0: which-boxed-primitive@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== dependencies: is-bigint "^1.0.1" @@ -11427,208 +12287,198 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= +which-typed-array@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" + integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + is-typed-array "^1.1.10" -which@^1.2.14, which@^1.2.9, which@^1.3.1: +which@^1.2.14, which@^1.2.9: version "1.3.1" - resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" -which@^2.0.1: +which@^2.0.1, which@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" -word-wrap@^1.2.3, word-wrap@~1.2.3: - version "1.2.3" - resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== +which@^3.0.0, which@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/which/-/which-3.0.1.tgz#89f1cd0c23f629a8105ffe69b8172791c87b4be1" + integrity sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg== + dependencies: + isexe "^2.0.0" -worker-farm@^1.7.0: - version "1.7.0" - resolved "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz" - integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== +why-is-node-running@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/why-is-node-running/-/why-is-node-running-2.2.2.tgz#4185b2b4699117819e7154594271e7e344c9973e" + integrity sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA== dependencies: - errno "~0.1.7" + siginfo "^2.0.0" + stackback "0.0.2" -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== +wide-align@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" + string-width "^1.0.2 || 2 || 3 || 4" -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== +wildcard@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" + integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== + +word-wrap@^1.0.3, word-wrap@^1.2.3: + version "1.2.4" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.4.tgz#cb4b50ec9aca570abd1f52f33cd45b6c61739a9f" + integrity sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA== + +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== dependencies: ansi-styles "^4.0.0" string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== dependencies: ansi-styles "^4.0.0" string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + wrappy@1: version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -write-file-atomic@^3.0.3: - 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== +write-file-atomic@^5.0.0, write-file-atomic@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-5.0.1.tgz#68df4717c55c6fa4281a7860b4c2ba0a6d2b11e7" + integrity sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw== dependencies: imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" + signal-exit "^4.0.1" -write@1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/write/-/write-1.0.3.tgz" - integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== - dependencies: - mkdirp "^0.5.1" +ws@^7.4.6: + version "7.5.9" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== -ws@^6.2.1: - version "6.2.1" - resolved "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz" - integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== - dependencies: - async-limiter "~1.0.0" +ws@^8.13.0: + version "8.13.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" + integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== -xmlbuilder@>=11.0.1: +xmlbuilder@^15.1.1: version "15.1.1" resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-15.1.1.tgz#9dcdce49eea66d8d10b42cae94a79c3c8d0c2ec5" integrity sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg== -xmlbuilder@^9.0.7: - version "9.0.7" - resolved "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz" - integrity sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ== - -xpipe@*: - version "1.0.5" - resolved "https://registry.npmjs.org/xpipe/-/xpipe-1.0.5.tgz" - integrity sha1-jdi/Rfw/f1Xw4FS4ePQ6YmFNr98= - xstate@^4.37.2: - version "4.37.2" - resolved "https://registry.yarnpkg.com/xstate/-/xstate-4.37.2.tgz#c5f4c1d8062784238b91e2dfddca05f821cb4eac" - integrity sha512-Qm337O49CRTZ3PRyRuK6b+kvI+D3JGxXIZCTul+xEsyFCVkTFDt5jixaL1nBWcUBcaTQ9um/5CRGVItPi7fveg== + version "4.38.0" + resolved "https://registry.yarnpkg.com/xstate/-/xstate-4.38.0.tgz#94c4316bea8e9e7a2974c7c501e5306f6e17ac19" + integrity sha512-oFjw2YZPyu6HeO0JWCSqfhAALsjFPURsrD2FUFN3u213dWwYU68RFuLtSHco+cEUhpQFW+hRG3PNYgq8HatudQ== xtend@^4.0.0, xtend@~4.0.1: version "4.0.2" - resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== -y18n@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz" - integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== +xterm-addon-fit@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/xterm-addon-fit/-/xterm-addon-fit-0.5.0.tgz#2d51b983b786a97dcd6cde805e700c7f913bc596" + integrity sha512-DsS9fqhXHacEmsPxBJZvfj2la30Iz9xk+UKjhQgnYNkrUIN5CYLbw7WEfz117c7+S86S/tpHPfvNxJsF5/G8wQ== + +xterm-addon-search@^0.8.0: + version "0.8.2" + resolved "https://registry.yarnpkg.com/xterm-addon-search/-/xterm-addon-search-0.8.2.tgz#be7aa74d5ff12c901707c6ff674229f214318032" + integrity sha512-I1863mjn8P6uVrqm/X+btalVsqjAKLhnhpbP7SavAOpEkI1jJhbHU2UTp7NjeRtcKTks6UWk/ycgds5snDSejg== + +xterm@^4.9.0: + version "4.19.0" + resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.19.0.tgz#c0f9d09cd61de1d658f43ca75f992197add9ef6d" + integrity sha512-c3Cp4eOVsYY5Q839dR5IejghRPpxciGmLWWaP9g+ppfMeBChMeLa1DCA+pmX/jyDZ+zxFOmlJL/82qVdayVoGQ== y18n@^5.0.5: - version "5.0.5" - resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz" - integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg== + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== yaku@^0.16.6: version "0.16.7" - resolved "https://registry.npmjs.org/yaku/-/yaku-0.16.7.tgz" - integrity sha1-HRlceKqbW/hHnIlblQT9TwhHmE4= + resolved "https://registry.yarnpkg.com/yaku/-/yaku-0.16.7.tgz#1d195c78aa9b5bf8479c895b9504fd4f0847984e" + integrity sha512-Syu3IB3rZvKvYk7yTiyl1bo/jiEFaaStrgv1V2TIJTqYPStSMQVO8EQjg/z+DRzLq/4LIIharNT3iH1hylEIRw== yallist@^3.0.2: version "3.1.1" - resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yallist@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yaml@^1.10.0: version "1.10.2" - resolved "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== -yargs-parser@^13.1.2: - version "13.1.2" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz" - integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^18.1.2: - version "18.1.3" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz" - integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^20.2.3: - version "20.2.7" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz" - integrity sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw== +yargs-parser@^20.2.2, yargs-parser@^20.2.3: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== yargs-parser@^21.1.1: version "21.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs@^13.3.2: - version "13.3.2" - resolved "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz" - integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== +yargs@^16.0.2: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.2" - -yargs@^15.3.1: - version "15.4.1" - resolved "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz" - integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== - dependencies: - cliui "^6.0.0" - decamelize "^1.2.0" - find-up "^4.1.0" - get-caller-file "^2.0.1" + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" string-width "^4.2.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^18.1.2" + y18n "^5.0.5" + yargs-parser "^20.2.2" -yargs@^17.5.1: +yargs@^17.0.1, yargs@^17.5.1: version "17.7.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== @@ -11641,20 +12491,33 @@ yargs@^17.5.1: y18n "^5.0.5" yargs-parser "^21.1.1" -yarn@^1.22.0: - version "1.22.10" - resolved "https://registry.npmjs.org/yarn/-/yarn-1.22.10.tgz" - integrity sha512-IanQGI9RRPAN87VGTF7zs2uxkSyQSrSPsju0COgbsKQOOXr5LtcVPeyXWgwVa0ywG3d8dg6kSYKGBuYK021qeA== +yarn-or-npm@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/yarn-or-npm/-/yarn-or-npm-3.0.1.tgz#6336eea4dff7e23e226acc98c1a8ada17a1b8666" + integrity sha512-fTiQP6WbDAh5QZAVdbMQkecZoahnbOjClTQhzv74WX5h2Uaidj1isf9FDes11TKtsZ0/ZVfZsqZ+O3x6aLERHQ== + dependencies: + cross-spawn "^6.0.5" + pkg-dir "^4.2.0" yauzl@^2.10.0: version "2.10.0" - resolved "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz" - integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== dependencies: buffer-crc32 "~0.2.3" fd-slicer "~1.1.0" -zwitch@^1.0.0: - version "1.0.5" - resolved "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz" - integrity sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw== +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +yocto-queue@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251" + integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==