diff --git a/.dockerignore b/.dockerignore index 86dd99838646..b336b08e34a8 100644 --- a/.dockerignore +++ b/.dockerignore @@ -3,5 +3,7 @@ node_modules/ npm-debug.log # Build files -icons/*.js /index.js +/icons.js +/icons.mjs +/icons.d.ts diff --git a/.gitattributes b/.gitattributes index 2714ea0c1a33..8f884e86ec78 100644 --- a/.gitattributes +++ b/.gitattributes @@ -4,7 +4,6 @@ *.svg text # Don't diff machine generated files -package-lock.json -diff slugs.md -diff # Don't export/archive these files diff --git a/.github/ISSUE_TEMPLATE/documentation.md b/.github/ISSUE_TEMPLATE/documentation.md deleted file mode 100644 index 4ef6382507dc..000000000000 --- a/.github/ISSUE_TEMPLATE/documentation.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -name: Documentation -about: Report problems and suggest ideas for the documentation -labels: docs ---- - - - - -### Kind of issue - - [ ] Improvement - - [ ] Mistake - - [ ] Other, namely: - -### Description - - - diff --git a/.github/ISSUE_TEMPLATE/documentation.yml b/.github/ISSUE_TEMPLATE/documentation.yml new file mode 100644 index 000000000000..790d0ed49dc6 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/documentation.yml @@ -0,0 +1,47 @@ +name: Documentation +description: Report problems and suggest ideas for the documentation +labels: [docs] + +body: + - type: markdown + attributes: + value: >- + Before opening a new issue, make sure it isn't covered by an existing issue. + Please search for [issues with the `docs` label][docs-issues] (including + closed issues) before you continue. + + + [docs-issues]: https://github.com/simple-icons/simple-icons/issues?q=is%3Aissue+label%3Adocs + + - type: dropdown + attributes: + label: Kind of Issue + description: >- + If your issue type is not here, select "other" and explain in the + "Description" field below. + options: [Improvement, Mistake, Other] + validations: + required: true + + - type: textarea + attributes: + label: Description + description: | + Include as much detail as possible, for example: + - A (perma)link to the docs in question + - Suggestions for how to change the docs + placeholder: "Example: The documentation doesn't cover my use case of the NPM package..." + validations: + required: true + + - type: dropdown + attributes: + label: Contributing + description: >- + This is an open source project and we welcome contributions. Do you want to + work on this issue? + options: + - 'Yes' + - 'No' + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/icon_removal.yml b/.github/ISSUE_TEMPLATE/icon_removal.yml new file mode 100644 index 000000000000..d798cb4ec390 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/icon_removal.yml @@ -0,0 +1,34 @@ +name: Icon removal +description: Report an icon for removal +labels: [removal request] + +body: + - type: markdown + attributes: + value: >- + Before opening a new issue, make sure it isn't covered by an existing issue. + Please search for [issues with the `removal request` or `breaking change` label][removal-issues] + (including closed issues) before you continue. If you find one for the brand + you're reporting then leave a comment on it or add a reaction. + + + [removal-issues]: https://github.com/simple-icons/simple-icons/issues?q=is%3Aissue+label%3A%22removal+request%22%2C%22breaking+change%22 + + - type: input + attributes: + label: Brand Name + placeholder: 'Example: Simple Icons' + validations: + required: true + + - type: textarea + attributes: + label: Reason for Removal + description: | + - If the brand no longer exists, include a link supporting that claim. + - If the brand should be removed for another reason, explain why. + placeholder: >- + Example: [this blogpost](https://example.com) announced the brand has been + discontinued... + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/icon_request.md b/.github/ISSUE_TEMPLATE/icon_request.md deleted file mode 100644 index dbef385eddeb..000000000000 --- a/.github/ISSUE_TEMPLATE/icon_request.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -name: Icon request -about: Request a new icon for Simple Icons -labels: new icon ---- - - -**Brand Name:** -**Website:** -**Alexa rank:** - - -**Official resources for icon and color:** - - - diff --git a/.github/ISSUE_TEMPLATE/icon_request.yml b/.github/ISSUE_TEMPLATE/icon_request.yml new file mode 100644 index 000000000000..df29ded6e133 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/icon_request.yml @@ -0,0 +1,90 @@ +name: Icon request +description: Request a new icon for Simple Icons +labels: [new icon] + +body: + - type: markdown + attributes: + value: >- + We won't add non-brand icons or anything related to illegal services. If in + doubt, open an issue and we'll have a look. For more details see the + [Contributing Guidelines]. + + + Before opening a new issue, make sure it isn't covered by an existing issue. + Please search for [issues with the `new icon` label][new-icon-issues] + (including closed issues) before you continue. If you find one for the brand + you're requesting then leave a comment on it or add a reaction. + + + [contributing guidelines]: https://github.com/simple-icons/simple-icons/blob/develop/CONTRIBUTING.md + + [new-icon-issues]: https://github.com/simple-icons/simple-icons/issues?q=is%3Aissue+label%3A%22new+icon%22 + + - type: input + attributes: + label: Brand Name + placeholder: 'Example: Simple Icons' + validations: + required: true + + - type: input + attributes: + label: Website + description: >- + For non-web brands you can add a relevant link. You can put "None" if you don't + think there's a website. + placeholder: 'Example: https://simpleicons.org' + validations: + required: true + + - type: textarea + attributes: + label: Popularity Metric + description: >- + Provide either a [Similarweb rank], which must range from 0-500,000 to qualify + or the number of GitHub stars, which must be above 5,000 to qualify. If + Similarweb does not have a rank for your brand or these numbers do not meet + our requirements, you can still open the issue. In this case, please provide + any information regarding the brand's popularity you think is relevant. + + + [Similarweb rank]: https://www.similarweb.com + placeholder: 'Example: The Similarweb rank is 261,758. See https://www.similarweb.com/website/simpleicons.org' + validations: + required: true + + - type: textarea + attributes: + label: Official Resources for Icon and Color + description: >- + Media kits, brand guidelines, SVG files, etc. You can set + this to "None" if you are unable to find any resources. + placeholder: | + Example: + svg: https://github.com/simple-icons/simple-icons/blob/develop/icons/simpleicons.svg + color: `#111111`, from the website header + validations: + required: true + + - type: textarea + attributes: + label: Additional Comments + description: | + Is there anything else we should know about the brand? Remember that not everyone knows the brand as well as you do. For example: + - Are there multiple options for the logo and/or color? + - Is the icon released under a license? + - If you think the brand might not be accepted, why do you think it should be considered? + placeholder: 'Example: There are two variants of this icon...' + + - type: dropdown + attributes: + label: Contributing + description: >- + This is an open source project and we welcome contributions. Do you want to + add this icon? + options: + - 'Yes' + - 'No' + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/icon_update.md b/.github/ISSUE_TEMPLATE/icon_update.md deleted file mode 100644 index 938efff4888b..000000000000 --- a/.github/ISSUE_TEMPLATE/icon_update.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -name: Icon update -about: Help us improve by reporting outdated icons -labels: icon outdated ---- - - - - - -**Brand Name:** -**Official resources for icon and color:** - diff --git a/.github/ISSUE_TEMPLATE/icon_update.yml b/.github/ISSUE_TEMPLATE/icon_update.yml new file mode 100644 index 000000000000..f0a4885595c8 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/icon_update.yml @@ -0,0 +1,56 @@ +name: Icon update +description: Help us improve by reporting outdated icons +labels: [icon outdated] + +body: + - type: markdown + attributes: + value: >- + Before opening a new issue, make sure it isn't covered by an existing issue. + Please search for [issues with the `icon outdated` label][icon-outdated-issues] + (including closed issues) before you continue. If you find one for the brand + you're reporting then leave a comment on it or add a reaction. + + + [icon-outdated-issues]: https://github.com/simple-icons/simple-icons/issues?q=is%3Aissue+label%3A%22icon+outdated%22 + + - type: input + attributes: + label: Brand Name + placeholder: 'Example: Simple Icons' + validations: + required: true + + - type: textarea + attributes: + label: Official Resources for Icon and Color + description: >- + Media kits, brand guidelines, SVG files, etc. You can set + this to "None" if you are unable to find any resources. + placeholder: | + Example: + svg: https://github.com/simple-icons/simple-icons/blob/develop/icons/simpleicons.svg + color: `#111111`, from the website header + validations: + required: true + + - type: textarea + attributes: + label: Additional Comments + description: | + Is there anything else we should know about the brand? Remember that not everyone knows the brand as well as you do. For example: + - Are there multiple options for the logo and/or color? + - Is the icon released under a license? + placeholder: 'Example: There are two variants of this icon...' + + - type: dropdown + attributes: + label: Contributing + description: >- + This is an open source project and we welcome contributions. Do you want to + update this icon? + options: + - 'Yes' + - 'No' + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/package.md b/.github/ISSUE_TEMPLATE/package.md deleted file mode 100644 index 927ad7102410..000000000000 --- a/.github/ISSUE_TEMPLATE/package.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -name: Packages -about: Report problems and suggest ideas for the packages -labels: package ---- - - - - -### Kind of issue - - [ ] Improvement - - [ ] Bug - - [ ] Other, namely: - -### This issue concerns - - [ ] The NPM Package - - [ ] The Packagist Package - -### Description - - - diff --git a/.github/ISSUE_TEMPLATE/package.yml b/.github/ISSUE_TEMPLATE/package.yml new file mode 100644 index 000000000000..1127ed314526 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/package.yml @@ -0,0 +1,64 @@ +name: Packages +description: Report problems and suggest ideas for the packages +labels: [package] + +body: + - type: markdown + attributes: + value: >- + Before opening a new issue, make sure it isn't covered by an existing issue. + Please search for [issues with the `package` label][package-issues] (including + closed issues) before you continue. + + + [package-issues]: https://github.com/simple-icons/simple-icons/issues?q=is%3Aissue+label%3Apackage + + - type: dropdown + attributes: + label: Kind of Issue + description: >- + If your issue type is not here, select "other" and explain in the + "Description" field below. + options: [Bug, Feature, Performance, Other] + validations: + required: true + + - type: dropdown + attributes: + label: This issue concerns the... + options: [NPM package, Packagist package] + multiple: true + validations: + required: true + + - type: input + attributes: + label: Package Version + placeholder: 'Example: 5.11.0' + validations: + required: true + + - type: textarea + attributes: + label: Other Software + description: >- + The software that you are using the package with (Node.js & NPM, PHP & Packagist, + Browser(s), other) and their versions. You can put "None" if you are unsure. + placeholder: | + Example: + Node.js v16 + Chrome 92.0.4515.159 (Official Build) (64-bit) + validations: + required: true + + - type: textarea + attributes: + label: Description + description: | + Anything relevant, for example: + - For bugs: "Steps to reproduce" and "Expected behavior" + - For feature requests: An example of a use case + - For performance: An example where performance is poor + placeholder: 'Example: The NPM package does not work for my use case...' + validations: + required: true diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index b42ce3bb1394..10a31e3065e8 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -6,9 +6,10 @@ Consider adding a preview image of your submission using: https://petershaggynoble.github.io/SI-Sandbox/preview/ --> -**Issue:** -**Alexa rank:** - diff --git a/.github/renovate.json5 b/.github/renovate.json5 index 577c6f3c5d6e..97fefba592c0 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -1,30 +1,23 @@ { extends: [ - "config:base", + 'config:base', // Make sure we get a single PR combining all updates - "group:all", + 'group:all', ], - lockFileMaintenance: { - extends: [ - // Make sure we get a single PR combining all updates - "group:all", - ], - - // Explicitly enable lockfile maintenance - enabled: true, - - // This schedule should be the same as the general schedule! - schedule: "on the 2nd and 4th day instance on sunday after 11pm", - }, + // Disable dependency dashboard + dependencyDashboard: false, // Use our labelling system - labels: ["dependencies"], + labels: ['dependencies'], // Schedule the PRs to interleave with our release schedule - schedule: "on the 2nd and 4th day instance on sunday after 11pm", + schedule: 'on the 2nd and 4th day instance on sunday after 11pm', // We generally always want the major version separateMajorMinor: false, + + // We manually update digest dependencies (eg. hashes in Github actions) + digest: { enabled: false }, } diff --git a/.github/workflows/add-labels-priority.yml b/.github/workflows/add-labels-priority.yml new file mode 100644 index 000000000000..bc34ec72ee0c --- /dev/null +++ b/.github/workflows/add-labels-priority.yml @@ -0,0 +1,95 @@ +name: Add Pull Request Labels and Assign to Project +on: + pull_request_target: + types: [opened, closed] + +jobs: + triage: + runs-on: ubuntu-latest + if: github.event.action == 'opened' + steps: + - uses: ericcornelissen/labeler@label-based-on-status + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + + assign-to-project: + runs-on: ubuntu-latest + name: Assign to Project + if: github.event.action == 'opened' + needs: triage + env: + MY_GITHUB_TOKEN: ${{ secrets.AUTO_ASSIGN_WORKFLOW_TOKEN }} + steps: + - id: get-labels + name: Get labels + run: | + labels="$(curl --retry 5 -s https://api.github.com/repos/simple-icons/simple-icons/pulls/${{ github.event.pull_request.number }} | jq '.labels[].name' | tr '\n' ',' | sed -e 's/"//g' -e 's/,$//')" + echo "::set-output name=labels::$labels" + + - id: get-si-members + name: Get simple-icons members + run: | + members="$(curl --retry 5 -s https://api.github.com/orgs/simple-icons/members | jq .[].login | tr '\n' ',' | sed -e 's/"//g' -e 's/,$//')" + echo "::set-output name=members::$members" + + - id: get-linked-issues + name: Get linked issue numbers + uses: mondeja/pr-linked-issues-action@v2 + with: + # Lazy linked issues. If one of the lines of the pull request body + # matches one of the next contents, the matching issue number will + # be added to `issues` output: + add_links_by_content: | + **Issue:** #{issue_number} + **Issue**: #{issue_number} + **Close:** #{issue_number} + **Close**: #{issue_number} + **Closes:** #{issue_number} + **Closes**: #{issue_number} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - id: priority-1 + name: Assign `icon outdated` pull requests to "Priority 1" + uses: srggrs/assign-one-project-github-action@1.3.1 + if: contains(steps.get-labels.outputs.labels, 'icon outdated') + with: + project: https://github.com/orgs/simple-icons/projects/2 + column_name: Priority 1 + + - id: priority-2 + name: Assign `new icon` pull requests to "Priority 2" + uses: srggrs/assign-one-project-github-action@1.3.1 + # the PR has the `new icon` label along with a linked issue and + # the opener is not a member of simple-icons organization + if: | + contains(steps.get-labels.outputs.labels, 'new icon') && + join(steps.get-linked-issues.outputs.issues) != '' && + contains(steps.get-si-members.outputs.members, github.event.actor.login) == false + with: + project: https://github.com/orgs/simple-icons/projects/2 + column_name: Priority 2 + + - name: Assign pull requests to "Unprioritised" + uses: srggrs/assign-one-project-github-action@1.3.1 + if: | + steps.priority-1.conclusion == 'skipped' && + steps.priority-2.conclusion == 'skipped' + with: + project: https://github.com/orgs/simple-icons/projects/2 + column_name: Unprioritised + + unassign-from-project: + runs-on: ubuntu-latest + name: Unassign from Project + if: | + github.event.action != 'opened' && + github.event.pull_request.merged == false + env: + MY_GITHUB_TOKEN: ${{ secrets.AUTO_ASSIGN_WORKFLOW_TOKEN }} + steps: + - name: Assign closed pull requests to "Completed or Abandoned" + uses: srggrs/assign-one-project-github-action@1.3.1 + with: + project: https://github.com/orgs/simple-icons/projects/2 + column_name: Completed or Abandoned diff --git a/.github/workflows/add-labels.yml b/.github/workflows/add-labels.yml deleted file mode 100644 index 4a2fc7434fb5..000000000000 --- a/.github/workflows/add-labels.yml +++ /dev/null @@ -1,12 +0,0 @@ -name: Add Pull Request Labels -on: - pull_request_target: - types: [opened] - -jobs: - triage: - runs-on: ubuntu-latest - steps: - - uses: ericcornelissen/labeler@label-based-on-status - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/create-release.yml b/.github/workflows/create-release.yml index 0788b6f48f68..47721297d252 100644 --- a/.github/workflows/create-release.yml +++ b/.github/workflows/create-release.yml @@ -1,9 +1,11 @@ name: Create Release Pull Request on: + # THIS WORKFLOW SHOULD NEVER BE TRIGGERED ON A PUSH EVENT. IF TRIGGERED ON A + # PUSH EVENT IT MAY CREATE AN ENDLESS STREAM OF 'version bump' COMMITS. workflow_dispatch: schedule: # "At 00:00 on Sunday" (https://crontab.guru/once-a-week) - - cron: "0 0 * * 0" + - cron: '0 0 * * 0' # This Workflow can be triggered manually through the GitHub UI or API. For the # API use the following request: @@ -16,34 +18,41 @@ on: jobs: release-pr: runs-on: ubuntu-latest + if: github.event_name != 'push' outputs: did-create-pr: ${{ steps.release.outputs.did-create-pr }} new-version: ${{ steps.release.outputs.new-version }} steps: - - uses: simple-icons/release-action@master + - uses: simple-icons/release-action@5edfadcb9d0fcced712defd84c26d8fd3913beb9 id: release with: repo-token: ${{ secrets.GITHUB_TOKEN }} version-bump: runs-on: ubuntu-latest needs: release-pr - if: needs.release-pr.outputs.did-create-pr == 'true' + if: | + github.event_name != 'push' && + needs.release-pr.outputs.did-create-pr == 'true' steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: + # Ensure the commit can be pushed regardless of branch protections (must belong to an admin of this repo) + token: ${{ secrets.RELEASE_TOKEN }} # Ensure we are checked out on the develop branch ref: develop - name: Bump version run: node ./scripts/release/bump-version.js "${{ needs.release-pr.outputs.new-version }}" - name: Update major version in CDN URLs run: node ./scripts/release/update-cdn-urls.js + - name: Update SVGs count milestone + run: node ./scripts/release/update-svgs-count.js - name: Update slugs table run: node ./scripts/release/update-slugs-table.js - name: Commit version bump - uses: stefanzweifel/git-auto-commit-action@v4.11.0 + uses: stefanzweifel/git-auto-commit-action@v4.14.1 with: commit_message: version bump - commit_user_name: "github-actions[bot]" - commit_user_email: "github-actions[bot]@users.noreply.github.com" - commit_author: "github-actions[bot] " + commit_user_name: 'github-actions[bot]' + commit_user_email: 'github-actions[bot]@users.noreply.github.com' + commit_author: 'github-actions[bot] ' diff --git a/.github/workflows/merge-release.yml b/.github/workflows/merge-release.yml index 29e654f975b5..cf7db3b53232 100644 --- a/.github/workflows/merge-release.yml +++ b/.github/workflows/merge-release.yml @@ -8,6 +8,6 @@ jobs: runs-on: ubuntu-latest if: contains(github.event.pull_request.labels.*.name, 'release') steps: - - uses: simple-icons/release-action@master + - uses: simple-icons/release-action@v1 with: repo-token: ${{ secrets.RELEASE_TOKEN }} diff --git a/.github/workflows/potential-duplicates.yml b/.github/workflows/potential-duplicates.yml new file mode 100644 index 000000000000..544cc0ddd1b2 --- /dev/null +++ b/.github/workflows/potential-duplicates.yml @@ -0,0 +1,37 @@ +name: Potential Duplicates +on: + issues: + types: [opened, edited] + +jobs: + run: + runs-on: ubuntu-latest + steps: + - uses: wow-actions/potential-duplicates@v1 + with: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + label: potential duplicate + exclude: | + adding + add + creating + create + icons + icon + logos + logo + missing + miss + needing + need + please + requesting + request + project + state: all + threshold: 0.7 + comment: | + This issue is potentially a duplicate of one of the following issues: + {{#issues}} + - #{{ number }} ({{ accuracy }}%) + {{/issues}} diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index c241fb324f4a..b17c0024d621 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -10,32 +10,24 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 - - name: Use Node.js 12.x - uses: actions/setup-node@v2 + uses: actions/checkout@v3 + - name: Use Node.js 16.x + uses: actions/setup-node@v3 with: - node-version: 12.x + node-version: 16.x - name: Cache dependencies - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: ~/.npm - key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} + key: ${{ runner.os }}-node-${{ hashFiles('**/package.json') }} restore-keys: | ${{ runner.os }}-node- - - name: Cache Jest - uses: actions/cache@v2 - with: - path: .cache/jest - key: ${{ runner.os }}-jest-${{ hashFiles('package-lock.json') }}-${{ github.run_number }} - restore-keys: | - ${{ runner.os }}-jest-${{ hashFiles('package-lock.json') }}- - ${{ runner.os }}-jest- - name: Install dependencies - run: npm ci - - name: Build NodeJS package - run: npm run build + run: npm i - name: Run linters run: npm run lint + - name: Build NodeJS package + run: npm run build - name: Run tests run: npm run test npm: @@ -44,20 +36,25 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 - - name: Use Node.js 12.x - uses: actions/setup-node@v2 + uses: actions/checkout@v3 + - name: Use Node.js 16.x + uses: actions/setup-node@v3 with: - node-version: 12.x + node-version: 16.x - name: Cache dependencies - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: ~/.npm - key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} + key: ${{ runner.os }}-node-${{ hashFiles('**/package.json') }} restore-keys: | ${{ runner.os }}-node- + - name: Remove dark theme images from README + uses: mondeja/strip-gh-theme-links@v3 + with: + files: README.md + strict: true - name: Install dependencies - run: npm ci + run: npm i - name: Deploy to NPM uses: JS-DevTools/npm-publish@v1 with: @@ -68,38 +65,43 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Get commit message (for release title and body) id: commit uses: kceb/git-message-action@v1 - - name: Get release title and body - id: release - run: | - RELEASE_TITLE=$(echo "${{ steps.commit.outputs.git-message }}" | head -n 1) - echo "::set-output name=title::$RELEASE_TITLE" - RELEASE_BODY=$(echo "${{ steps.commit.outputs.git-message }}" | tail -n $(expr $(echo "${{ steps.commit.outputs.git-message }}" | wc -l) - 1)) - RELEASE_BODY="${RELEASE_BODY//'%'/'%25'}" - RELEASE_BODY="${RELEASE_BODY//$'\n'/'%0A'}" - RELEASE_BODY="${RELEASE_BODY//$'\r'/'%0D'}" - echo "::set-output name=body::$RELEASE_BODY" - name: Get release version id: get-version run: | export PACKAGE_VERSION=$(cat package.json | grep 'version' | sed 's/[ \",:]//g' | sed 's/version//') echo "::set-output name=version::$PACKAGE_VERSION" - - name: Create and push git tag - uses: actions-ecosystem/action-push-tag@v1 + - name: Remove dark theme images from README + uses: mondeja/strip-gh-theme-links@v3 with: - tag: ${{ steps.get-version.outputs.version }} - message: ${{ steps.commit.outputs.git-message }} + files: README.md + strict: true + - name: Configure GIT credentials + run: | + git config user.name "${GITHUB_ACTOR}" + git config user.email "${GITHUB_ACTOR}@users.noreply.github.com" + # Commit that will only be included in the tag + - name: Commit dark theme images strip + run: | + git add README.md + git commit -m 'Strip README dark theme image links' + - name: Create and push git tag + run: | + set -e + tag="${{ steps.get-version.outputs.version }}" + git tag -a "${tag}" -m "${{ steps.commit.outputs.git-message }}" + git push origin "${tag}" - name: Create release uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: ${{ steps.get-version.outputs.version }} - release_name: ${{ steps.release.outputs.title }} - body: ${{ steps.release.outputs.body }} + release_name: ${{ steps.commit.outputs.title }} + body: ${{ steps.commit.outputs.body }} font: name: Trigger simple-icons-font release needs: npm diff --git a/.github/workflows/remove-labels.yml b/.github/workflows/remove-labels.yml index d1b8bdf18463..2b265b86a206 100644 --- a/.github/workflows/remove-labels.yml +++ b/.github/workflows/remove-labels.yml @@ -13,7 +13,7 @@ jobs: if: github.event.pull_request.merged runs-on: ubuntu-latest steps: - - uses: mondeja/remove-labels-gh-action@v1.0.0 + - uses: mondeja/remove-labels-gh-action@v1 with: token: ${{ secrets.GITHUB_TOKEN }} labels: | @@ -30,7 +30,7 @@ jobs: if: github.event_name == 'pull_request_target' && (! github.event.pull_request.merged) runs-on: ubuntu-latest steps: - - uses: mondeja/remove-labels-gh-action@v1.0.0 + - uses: mondeja/remove-labels-gh-action@v1 with: token: ${{ secrets.GITHUB_TOKEN }} labels: | @@ -41,10 +41,11 @@ jobs: if: github.event.issue.state == 'closed' runs-on: ubuntu-latest steps: - - uses: mondeja/remove-labels-gh-action@v1.0.0 + - uses: mondeja/remove-labels-gh-action@v1 with: token: ${{ secrets.GITHUB_TOKEN }} labels: | in discussion pending tracking + help wanted diff --git a/.github/workflows/verify.yml b/.github/workflows/verify.yml index dfc600cee984..2ebe97c4b0dc 100644 --- a/.github/workflows/verify.yml +++ b/.github/workflows/verify.yml @@ -7,20 +7,20 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 - - name: Use Node.js 12.x - uses: actions/setup-node@v2 + uses: actions/checkout@v3 + - name: Use Node.js 16.x + uses: actions/setup-node@v3 with: - node-version: 12.x + node-version: 16.x - name: Cache dependencies - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: ~/.npm - key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} + key: ${{ runner.os }}-node-${{ hashFiles('**/package.json') }} restore-keys: | ${{ runner.os }}-node- - name: Install dependencies - run: npm ci + run: npm i - name: Build NodeJS package run: npm run build lint: @@ -28,48 +28,58 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 - - name: Use Node.js 12.x - uses: actions/setup-node@v2 + uses: actions/checkout@v3 + - name: Use Node.js 16.x + uses: actions/setup-node@v3 with: - node-version: 12.x + node-version: 16.x - name: Cache dependencies - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: ~/.npm - key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} + key: ${{ runner.os }}-node-${{ hashFiles('**/package.json') }} restore-keys: | ${{ runner.os }}-node- - name: Install dependencies - run: npm ci + run: npm i - name: Run linter run: npm run lint + - name: Verify file permissions + run: | + CHECK_DIRS="icons/ _data/" + echo "Searching the following directories for executable files:" + echo "${CHECK_DIRS}" + echo "" + EXE_FILES=$(find ${CHECK_DIRS} -type f -executable) + if test -n "${EXE_FILES-}" + then + echo "Some files were detected to have their executable bit set." + echo "To fix this, you can use 'chmod -x PATH/TO/FILE' on the following files:" + echo "" + echo "${EXE_FILES}" + exit 1 + else + echo "All clear." + exit 0 + fi test: name: Test package runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 - - name: Use Node.js 12.x - uses: actions/setup-node@v2 + uses: actions/checkout@v3 + - name: Use Node.js 16.x + uses: actions/setup-node@v3 with: - node-version: 12.x + node-version: 16.x - name: Cache dependencies - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: ~/.npm - key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} + key: ${{ runner.os }}-node-${{ hashFiles('**/package.json') }} restore-keys: | ${{ runner.os }}-node- - - name: Cache Jest - uses: actions/cache@v2 - with: - path: .cache/jest - key: ${{ runner.os }}-jest-${{ hashFiles('package-lock.json') }}-${{ github.run_number }} - restore-keys: | - ${{ runner.os }}-jest-${{ hashFiles('package-lock.json') }}- - ${{ runner.os }}-jest- - name: Install dependencies - run: npm ci + run: npm i - name: Run tests run: npm run test diff --git a/.gitignore b/.gitignore index 90b510e0db05..c2287035c54a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,15 +1,14 @@ # Files generated by build script /index.js +/icons.js +/icons.mjs +/icons.d.ts # Ignore all files in the icons folder icons/* # Except SVG files !icons/*.svg -# Caches -.cache/ - - ### NodeJS ### # Logs logs @@ -18,6 +17,7 @@ npm-debug.log* yarn-debug.log* yarn-error.log* lerna-debug.log* +yarn.lock # Dependency directories node_modules/ diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100755 index 000000000000..77a5cc0e3d6c --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,7 @@ +#!/bin/sh +. "$(dirname $0)/_/husky.sh" + +git stash -q --keep-index +npm run format +git add . +git stash pop -q diff --git a/.jsonschema.json b/.jsonschema.json index e70bd219524f..e6134f20950f 100644 --- a/.jsonschema.json +++ b/.jsonschema.json @@ -55,22 +55,6 @@ "license": { "description": "The license for the icon", "oneOf": [ - { - "type": "object", - "required": ["type", "url"], - "properties": { - "type": { - "description": "The license name or 'custom'", - "type": "string", - "enum": ["custom"] - }, - "url": { - "description": "The URL to the license text by the brand", - "$ref": "#/definitions/url" - } - }, - "additionalProperties": false - }, { "type": "object", "required": ["type"], @@ -166,6 +150,22 @@ } }, "additionalProperties": false + }, + { + "type": "object", + "required": ["type", "url"], + "properties": { + "type": { + "description": "The license name or 'custom'", + "type": "string", + "enum": ["custom"] + }, + "url": { + "description": "The URL to the license text by the brand", + "$ref": "#/definitions/url" + } + }, + "additionalProperties": false } ] } @@ -235,7 +235,6 @@ "pattern": "^https?://[^\\s]+$" } }, - "type": "object", "properties": { "icons": { @@ -243,5 +242,7 @@ "type": "array", "items": { "$ref": "#/definitions/brand" } } - } + }, + "additionalProperties": false, + "required": ["icons"] } diff --git a/.npmignore b/.npmignore index c267f88e0ff8..122b9f89e2a9 100644 --- a/.npmignore +++ b/.npmignore @@ -7,4 +7,9 @@ !DISCLAIMER.md !README.md !LICENSE.md +!VERSIONING.md !index.js +!index.d.ts +!icons.js +!icons.mjs +!icons.d.ts diff --git a/.npmrc b/.npmrc new file mode 100644 index 000000000000..43c97e719a5a --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +package-lock=false diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 000000000000..ace5b4f18541 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,16 @@ +# We prefer our own custom formatting for MarkDown files. +# See the following thread for the discussion: +# https://github.com/simple-icons/simple-icons-font/pull/73 +*.md + +# We use our own formatting for the data files. +_data/simple-icons.json + +# JavaScript templates are invalid JavaScript so cannot be formatted. +scripts/build/templates/*.js + +# Generated JavaScript files don't need to be formatted +index.js +icons.js +icons.mjs +icons.d.ts diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 000000000000..6e778b4fb9c5 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,4 @@ +{ + "trailingComma": "all", + "singleQuote": true +} diff --git a/.svglint-ignored.json b/.svglint-ignored.json index 21ce081a41a9..1a8e3c3ec006 100644 --- a/.svglint-ignored.json +++ b/.svglint-ignored.json @@ -1,34 +1,11 @@ { "icon-centered": { - "M.8 0H23v6H1V0zm0 9H18v6H.7V9zm0 9H23v6H1v-6z": "Koding", "M22.915 8.321c-.642-.997-1.542-1.879-2.672-2.624-2.185-1.436-5.056-2.227-8.084-2.227-1.012 0-2.009.088-2.976.262a9.84 9.84 0 0 0-2.046-1.509C4.378.848 1.947 1.361.719 1.802a.59.59 0 0 0-.229.964c.866.894 2.299 2.66 1.946 4.267C1.067 8.431.324 10.117.324 11.872c0 1.789.742 3.475 2.112 4.873.352 1.607-1.081 3.374-1.947 4.268a.589.589 0 0 0 .229.963c1.228.442 3.659.955 6.418-.421a9.892 9.892 0 0 0 2.046-1.509c.968.174 1.964.262 2.976.262 3.029 0 5.9-.79 8.084-2.226 1.131-.744 2.031-1.626 2.672-2.624.715-1.11 1.077-2.306 1.077-3.552.001-1.279-.361-2.473-1.076-3.585zm-10.881 9.916c-1.309 0-2.558-.169-3.696-.474l-.832.8A7.609 7.609 0 0 1 5.972 19.7a6.033 6.033 0 0 1-2.17.613c.041-.073.078-.147.117-.221.833-1.531 1.059-2.907.674-4.128-1.363-1.071-2.181-2.442-2.181-3.935 0-3.427 4.308-6.206 9.621-6.206 5.313 0 9.622 2.779 9.622 6.206.001 3.429-4.307 6.208-9.621 6.208zM8.85 12.01c0 .777-.635 1.407-1.418 1.407-.783 0-1.418-.63-1.418-1.407s.635-1.407 1.418-1.407c.783 0 1.418.63 1.418 1.407zm4.563 0c0 .777-.635 1.407-1.418 1.407-.783 0-1.418-.63-1.418-1.407s.635-1.407 1.418-1.407c.783 0 1.418.63 1.418 1.407zm4.565 0c0 .777-.635 1.407-1.418 1.407-.783 0-1.418-.63-1.418-1.407s.635-1.407 1.418-1.407c.783 0 1.418.63 1.418 1.407z": "Rocket.Chat" }, - "icon-precision": { - "M 7.401726,2.3422378 C 5.1778223,3.3264335 3.7866995,4.9257515 3.0012356,6.0897522 2.1495278,7.3578505 1.8183081,8.4082905 1.8183081,8.4177535 v 0.01893 c -0.2460489,0.700293 -0.473171,1.7980495 -0.473171,1.8075135 -0.2649758,1.343805 -0.1419513,2.592977 -0.1419513,2.611904 0.00946,0.08517 0.018927,0.170341 0.02839,0.246049 0.02839,-0.33122 0.066244,-0.671903 0.1324879,-1.012586 0.018927,-0.132488 0.3690734,-2.015709 1.6939522,-3.5109295 0.1419513,-0.217658 1.6750254,-2.2333668 4.4951247,-2.2333668 0.6056589,0 1.239708,0.094634 1.8737572,0.2839026 h 0.018927 c 0.037854,0.00946 0.8706352,0.3122929 1.1734642,0.4637076 0.283903,0.1419513 0.785464,0.3596099 0.794927,0.3596099 h 0.01893 c 2.716002,1.3248787 5.06293,1.7507327 5.081857,1.7601967 0.671903,0.113561 1.277562,0.170341 1.816977,0.170341 1.078829,0 1.85483,-0.236585 2.261757,-0.69083 C 20.924954,8.3231195 20.8871,7.9161923 20.8871,7.9161923 V 7.8783387 C 20.906027,6.894143 20.101636,5.8342399 19.42027,5.1244834 18.663196,4.3295561 17.887196,3.7806777 17.877732,3.7806777 15.833634,2.2665305 13.647583,1.4999934 11.357436,1.4999934 9.0105075,1.5094568 7.4206529,2.3327744 7.401726,2.3422378 Z m 7.419322,2.6592211 c 0.283902,0 0.511024,0.2271221 0.511024,0.5110247 0,0.2839026 -0.227122,0.5110247 -0.511024,0.5110247 -0.283903,0 -0.511025,-0.2271221 -0.511025,-0.5110247 0,-0.2839026 0.227122,-0.5110247 0.511025,-0.5110247 z M 8.2155802,3.0614578 c 0.075707,0 0.1230244,0.018927 0.1419513,0.018927 L 11.584558,4.0835071 11.461533,4.3390195 9.9189959,3.8563851 8.2818241,3.3453604 c -0.00946,0 -0.00946,0 -0.018927,-0.00946 -0.00946,0 -0.02839,-0.00946 -0.047317,-0.00946 -0.018927,0 -0.047317,0 -0.066244,0.00946 -0.293366,0.075707 -1.0977567,0.35961 -1.3343422,0.7854639 -0.066244,0.1230245 -0.075707,0.2460489 -0.037854,0.3785368 0,0.00946 0.1703416,0.539415 0.5961955,1.0882934 L 9.5120688,5.4840933 10.941045,5.4178494 10.799094,5.7112154 7.2503113,5.881557 C 6.7203598,5.2380444 6.5121645,4.5945318 6.5121645,4.5945318 6.1809448,3.5535556 8.0830923,3.0709212 8.0830923,3.0709212 c 0.037854,0 0.094634,-0.00946 0.1324879,-0.00946 z M 19.439197,18.808589 c 2.176586,-0.946342 3.104002,-2.583514 3.104002,-2.583514 2.034635,-2.772782 1.343805,-5.696979 1.343805,-5.696979 -1.296488,2.8201 -2.479416,3.5961 -2.479416,3.5961 3.189173,-4.8547345 0.01893,-7.7883948 0.01893,-7.7883948 1.296489,2.7633183 -0.425854,6.1322968 -0.425854,6.1322968 -1.447903,3.047221 -3.501465,4.135514 -3.501465,4.135514 2.290147,0.425854 3.974636,-1.116683 3.974636,-1.116683 -3.283807,3.548782 -6.842053,3.378441 -6.842053,3.378441 1.495221,1.675025 3.738051,1.533074 3.738051,1.533074 -2.93366,0.690829 -5.687515,-0.283903 -7.949273,-2.167124 -0.4258537,-0.350146 -0.8327808,-0.728683 -1.2113177,-1.13561 0,0 -0.3406831,-0.35961 -0.4069271,-0.454244 l -0.00946,-0.0095 c -0.047317,1.750733 1.7791228,3.378441 1.7791228,3.378441 -2.2901475,-0.946342 -3.3405871,-2.999904 -3.3405871,-2.999904 0,0 -1.5425375,-2.630831 -0.4258539,-5.630735 1.1072201,-2.9620505 4.409953,-3.6244898 4.495124,-3.6434166 0.01893,0.00946 0.02839,0.018927 0.04732,0.018927 -0.01893,-0.00946 -0.02839,-0.018927 -0.04732,-0.02839 0,0 -0.511024,-0.2176586 -0.80439,-0.3596099 C 10.202899,7.2253627 9.3511906,6.9130698 9.3511906,6.9130698 8.707678,6.7238014 8.1020191,6.6386306 7.5531408,6.6386306 c -2.791709,0 -4.277466,2.1103429 -4.277466,2.1103429 -1.3154154,1.4762935 -1.6277083,3.3879045 -1.6277083,3.3879045 -0.3690734,1.82644 0.02839,3.747514 0.02839,3.747514 0,0 0.037854,0.151415 0.047317,0.217659 0.3028294,0.71922 0.6908297,1.428976 1.1450738,2.100879 2.4604893,3.671807 6.4540526,4.939906 6.4540526,4.939906 5.9146381,2.006245 9.9555191,-0.946342 9.9555191,-0.946342 3.719124,-2.555124 4.466734,-5.507711 4.466734,-5.507711 -3.009368,2.337465 -4.305856,2.119806 -4.305856,2.119806 z M 1.5060152,15.534246 Z M 1.3072834,14.947514 c 0,0 -0.2365855,-0.71922 -0.35960995,-1.816977 v 0.03785 c 0,-0.01893 0,-0.03785 -0.009463,-0.06624 -0.009463,-0.07571 -0.0189268,-0.160878 -0.0283903,-0.236586 0,0 -0.13248788,-1.287025 0.15141475,-2.697075 0,0 0.00946,-0.03785 0.018927,-0.09463 0.037854,-0.1798055 0.075707,-0.3690735 0.1230245,-0.5488785 0,-0.0095 0,-0.01893 0.00946,-0.02839 0.085171,-0.369073 0.2081952,-0.813854 0.3312197,-1.173464 0,0 1.305952,-4.2869294 5.7253693,-6.2458574 0,0 1.5236106,-0.8043907 3.8232216,-0.8611712 0,0 -0.312293,-0.30282945 -0.511025,-0.43531735 C 9.5026054,0.06155355 7.8938239,-0.17503195 6.9190916,0.83755405 6.6257256,1.1403834 6.3796767,1.4716032 6.1052375,1.7744326 5.7929446,2.1151157 5.4144078,2.3990183 4.9790905,2.5598965 4.6005536,2.7018478 4.2220168,2.6734575 3.8340166,2.7397015 3.436553,2.8059454 3.0296259,2.9478967 2.7078696,3.2034091 2.357723,3.4873117 2.2157717,3.8658485 2.1779181,4.3011658 2.1400644,4.6418489 2.1495278,4.9919955 2.130601,5.3326786 2.0832839,6.3358012 1.7615276,6.6197038 1.0423076,7.1780456 0.7394782,7.4051676 0.48396585,7.7079971 0.29469744,8.0297534 c -0.56780521,1.0031221 0.34068313,2.0440986 0.38800023,3.0566846 0.009463,0.208195 -0.009463,0.416391 -0.0851708,0.615122 -0.0757074,0.217659 -0.22712208,0.35961 -0.35014655,0.539415 -0.17034156,0.236586 -0.2839026,0.520489 -0.2365855,0.813855 0.0473171,0.293366 0.19873182,0.567805 0.34068313,0.823317 0.27443918,0.454244 0.61512232,0.861171 0.97473225,1.249172 0.018927,0.01893 0.037854,0.03785 0.056781,0.06624 0,-0.0095 -0.00946,-0.01893 -0.00946,-0.02839 l 0.02839,0.08517 c -0.02839,-0.104098 -0.05678,-0.198732 -0.094634,-0.302829 z M 0.90035634,11.550146 Z m 0.17034156,2.422635 c 0,0.01893 0.00946,0.03785 0.00946,0.04732 0,0.0095 0,0.01893 0.00946,0.03785 -0.00946,-0.02839 -0.00946,-0.05678 -0.018927,-0.08517 z": "ReactiveX" - }, "icon-size": { - "M20.7 15.404l-1.894-4.967h1.411l1.39 3.582 1.379-3.582h.96l-1.92 4.967zM16.298 9.6V8.48h1.34V9.6zm0 5.808v-4.971h1.34v4.967zm-6.965-.003l2.146-3.3L9.43 8.707h1.627l1.364 2.254L13.9 8.707h1.12l-2.046 3.156 2.126 3.537h-1.622l-1.45-2.4-1.557 2.4H9.333zm-3.346 0v-4.968h1.338v.937c.344-.7.875-1.051 1.585-1.051a1.401 1.401 0 01.248.026v1.194a1.6 1.6 0 00-.53-.102c-.537 0-.968.267-1.303.8v3.164zm-3.028-.536q-.664.65-1.437.65a1.473 1.473 0 01-1.06-.398 1.376 1.376 0 01-.406-1.03 1.45 1.45 0 01.659-1.271q.657-.447 1.884-.448h.355v-.453q0-.772-.88-.772a3.305 3.305 0 00-1.587.443v-.922a5.016 5.016 0 011.808-.345q1.953 0 1.951 1.55v2.206c0 .39.123.58.376.58a.8.8 0 00.174-.02l.032.751a2.745 2.745 0 01-.751.13c-.552 0-.902-.216-1.06-.65h-.054zm0-.72v-1.01h-.32c-.866 0-1.297.274-1.297.815a.64.64 0 00.64.648c.329.004.647-.15.977-.453z": "arXiv", "M22.915 8.321c-.642-.997-1.542-1.879-2.672-2.624-2.185-1.436-5.056-2.227-8.084-2.227-1.012 0-2.009.088-2.976.262a9.84 9.84 0 0 0-2.046-1.509C4.378.848 1.947 1.361.719 1.802a.59.59 0 0 0-.229.964c.866.894 2.299 2.66 1.946 4.267C1.067 8.431.324 10.117.324 11.872c0 1.789.742 3.475 2.112 4.873.352 1.607-1.081 3.374-1.947 4.268a.589.589 0 0 0 .229.963c1.228.442 3.659.955 6.418-.421a9.892 9.892 0 0 0 2.046-1.509c.968.174 1.964.262 2.976.262 3.029 0 5.9-.79 8.084-2.226 1.131-.744 2.031-1.626 2.672-2.624.715-1.11 1.077-2.306 1.077-3.552.001-1.279-.361-2.473-1.076-3.585zm-10.881 9.916c-1.309 0-2.558-.169-3.696-.474l-.832.8A7.609 7.609 0 0 1 5.972 19.7a6.033 6.033 0 0 1-2.17.613c.041-.073.078-.147.117-.221.833-1.531 1.059-2.907.674-4.128-1.363-1.071-2.181-2.442-2.181-3.935 0-3.427 4.308-6.206 9.621-6.206 5.313 0 9.622 2.779 9.622 6.206.001 3.429-4.307 6.208-9.621 6.208zM8.85 12.01c0 .777-.635 1.407-1.418 1.407-.783 0-1.418-.63-1.418-1.407s.635-1.407 1.418-1.407c.783 0 1.418.63 1.418 1.407zm4.563 0c0 .777-.635 1.407-1.418 1.407-.783 0-1.418-.63-1.418-1.407s.635-1.407 1.418-1.407c.783 0 1.418.63 1.418 1.407zm4.565 0c0 .777-.635 1.407-1.418 1.407-.783 0-1.418-.63-1.418-1.407s.635-1.407 1.418-1.407c.783 0 1.418.63 1.418 1.407z": "Rocket.Chat" }, "ineffective-segments": { - "M16.433 12.329A16.188 16.188 0 0 1 22.118.009L17.684 0a16.2 16.2 0 0 0-4.776 11.374V24h3.525zm-8.869 0A16.174 16.174 0 0 0 1.882.009L6.319 0a16.238 16.238 0 0 1 4.773 11.374V24H7.564zm0 0Z": "Guangzhou Metro", - "M5.66 9.553V5.2542a6.7943 6.7943 0 00-4.0537 11.0861C3.9847 15.1881 5.648 12.5846 5.66 9.553zm1.1323 4.1148c-.4231 1.7523-1.6874 3.2496-3.2626 4.2448a6.7603 6.7603 0 003.2616.8332 6.7723 6.7723 0 003.2626-.8332c-1.5753-.9952-2.8386-2.4935-3.2616-4.2448zm5.185-6.1031a6.7903 6.7903 0 00-4.0528-2.3105V9.52c0 3.0446 1.6663 5.663 4.0517 6.8183a6.7673 6.7673 0 01-1.6073-4.3868 6.7553 6.7553 0 011.6083-4.3868zm0 0c1.0031 1.1832 1.6552 2.7145 1.6552 4.3878 0 1.6733-.652 3.2026-1.6553 4.3878l-.001-.001.001.001c2.3785-1.1512 4.0878-3.7557 4.0998-6.7873V5.2542a6.9013 6.9013 0 00-4.0998 2.3105zM18.3413 9.52c0 3.0456 1.6663 5.663 4.0528 6.8193a6.7933 6.7933 0 00-4.0528-11.084zm-1.1322 4.1478c-.423 1.7523-1.6873 3.2496-3.2626 4.2448a6.7603 6.7603 0 003.2616.8332 6.7723 6.7723 0 003.2626-.8332c-1.5743-.9952-2.8385-2.4935-3.2616-4.2448z": "Renren", - "M11.3437.0066c-.292.01-.586.028-.881.06-10.092 1.088-6.4994 16.6226-5.9704 18.1375-3.9647-8.4243-1.6329-13.7038.118-15.4917.049-.05-.004-.136-.05-.095C.6046 5.8241.2506 9.4498.2506 9.4498c-.684 3.9517 3.1578 7.8334 4.2457 8.7653C1.5295 16.2152.6556 14.7794.1146 12.7985c-.016-.06-.118-.08-.113 0 .081 1.064.185 2.4898 1.005 4.1737.7519.9729 2.8147 1.2469 3.4897 1.2459h.003l-.003-.006C5.3792 14.9634 7.17 9.2928 9.9908 5.473 12.7185 1.9356 14.8204.8237 15.3933.5687c.048-.023.025-.077-.03-.114-.128-.082-1.9788-.513-4.0196-.448zM4.4983 18.2191c.7149 1.2099 2.9297 4.5456 6.9754 5.6995 1.3818.277 5.6175-.02 8.6012-3.0108.054-.053.007-.175-.106-.099-1.9698 1.344-8.1393 2.6818-15.4706-2.5897zm0 0l-.003.002c-1.053.447-2.2199.28-2.7298.044-.065-.031-.125-.02-.09.044.748 1.2639 1.1659 1.6998 2.1098 2.5448.051.053.104.04.08-.064-.01-.046-.189-1.342.63-2.5648-.105.822-.206 3.1047.6919 3.7107 1.0579.7219 2.1468 1.4138 4.0836 1.8288.076.018.145-.071.071-.11-3.1657-1.5458-3.9116-3.4737-4.8445-5.4325zM17.612 1.3985c-.226.026-.462.215-1.0159.552C9.9728 6.36 5.0582 17.0342 4.4982 18.215c0 0 11.0691-2.3898 17.8545-9.2892 1.06-1.085 1.138-.85.64-2.0538-.239-.597-.866-1.8129-1.9499-3.0358-.8539-.9549-1.9698-1.7028-2.4658-2.0098-.52-.316-.7379-.454-.9649-.428zM4.4983 18.2151c1.3628.78 16.1146 7.0634 18.9573-2.7248.665-2.2838.576-4.6746.468-4.9636-.022-.062-.073-.034-.076-.014-.35.516-1.8279 2.4198-5.7795 4.4947C13.8265 17.1182 7.84 17.913 4.4993 18.215z": "Sat.1", - "M12 1.25l6.75 6.637V2L12 1.25zm0 0l-6.05 7h12.1l-6.05-7zm0 0L5.25 2v5.887L12 1.25zM5.25 2L0 9l4.416-.68L5.25 2zM0 9l11.959 13.703.008-.014L4.443 9H0zm18.75-7l.834 6.32L24 9l-5.25-7zM24 9h-4.506l-7.523 13.69.029.06L24 9zM12 22.75l-.031-.057-.008.012.039.045zM5.436 9l6.533 13.686L18.564 9H5.436Z": "Sketch", - "M7.66 11.398v.742c0 .105-.11.105-.11.105h-.847s-.11 0-.11.11v4.03c0 .11-.105.11-.105.11h-.855c-.106 0-.106-.11-.106-.11v-4.03s0-.11-.109-.11h-.844c-.105 0-.105-.105-.105-.105v-.742c0-.106.105-.106.105-.106H7.66v.106m15.458-7.52H12.301c-.68 0-.836.16-.836.816v2.414c0 .493 0 .493-.492.493H.813C.137 7.6 0 7.737 0 8.425v5.41c0 1.754 0 3.508.023 5.266 0 .922.102 1.02 1.04 1.02H9.89c.664 0 1.32.01 1.984-.01.48-.006.669-.202.669-.682v-2.56c0-.468 0-.468.469-.468h10.195c.633 0 .793-.152.793-.78V4.736c0-.7-.164-.86-.883-.86zm-11.64 14.625c0 .5-.013.5-.525.5-3.148 0-6.293 0-9.445.008-.32 0-.43-.078-.43-.418.016-3.16.008-6.324 0-9.48-.008-.34.086-.446.442-.446 3.187.012 6.363.008 9.55.008.117 0 .23.015.4.023 0 .18 0 .32.01.442-.003 3.113-.003 6.242-.003 9.363zm7.69-5.844c0 .102-.104.102-.104.102h-2.57c-.106 0-.106-.102-.106-.102v-.72c0-.1.105-.1.105-.1h.617s.102 0 .102-.102V8.659s0-.101-.102-.101h-.515c-.102 0-.102-.102-.102-.102v-.82c0-.106.102-.106.102-.106h2.367c.102 0 .102.106.102.106v.715c0 .105-.102.105-.102.105h-.516s-.101 0-.101.102v3.074s0 .105.1.105h.618c.106 0 .106.102.106.102zm0 0": "TuneIn" - }, - "collinear-segments": { - "M4.35 7.79s-.247-.4-.537-.228c-.14.084-.374.318-.653.658l.257.484a6.28 6.28 0 0 1 .517-.653c-.079.09-.246.298-.484.662.334-.023.666-.064.996-.123.099-.549-.096-.8-.096-.8zm-.386.228l.022-.024-.022.024zM.91 14.02a45.295 45.295 0 0 0-.774 2.33.198.198 0 0 1-.136.132c.23-.76.458-1.476.687-2.124-.143-.033-.346.007-.594.11.17-.13.339-.242.5-.252-.051-.011-.183-.057-.36-.22.169.063.316.094.422.072-.022-.282-.174-.57-.374-.86-.001-.002.28.161.383.33l.002-.023c.017-.22.048-.438.093-.654v-.002c.034-.174.076-.348.127-.522l.066-.223c.028-.087.06-.176.093-.27.11-.301.235-.596.375-.884l.036-.072c.128-.257.264-.511.408-.76.076-.133.154-.262.231-.39.007-.007.011-.017.017-.026L2.11 9.71l.008-.013c.236-.38.488-.75.754-1.108a8.36 8.36 0 0 1 .229-.296l.058-.072.256.482a10.46 10.46 0 0 0-.268.404c-.172.276-.335.559-.487.846l-.217.414-.222-.439.22.44-.007.015c-.044.09-.09.18-.133.27a6.9 6.9 0 0 0-.077.16l-.206.444a42.824 42.824 0 0 0-.57 1.344l-.18.457a6.523 6.523 0 0 1-.04.103c-.044.121-.091.239-.134.357v.004l-.033.088-.141.381-.01.029zm3.235-4.623a4.98 4.98 0 0 1-.334.562c-.106.149-.216.25-.457.363l.022-.004c.002-.002.003-.002.006-.002.125-.023.28-.074.37-.127a.184.184 0 0 0 .036-.024.846.846 0 0 1-.02.089c-.006.025-.016.054-.026.085l-.012.033-.036.092a2.985 2.985 0 0 1-.102.226c-.008.019-.018.038-.028.057l-.024.039a.85.85 0 0 1-.084.116l-.04.044a1.2 1.2 0 0 1-.113.101 1.231 1.231 0 0 1-.27.151l.017-.002.064-.011c.129-.031.251-.085.361-.16-.138.275-.326.497-.628.612l.052-.007.05-.011a.998.998 0 0 0 .254-.087 6.74 6.74 0 0 1-.18.492c-.071.174-.145.33-.225.47a2.577 2.577 0 0 1-.35.487c-.276.298-.705.54-1.027.58l.016.003c.366.076.745-.047.996-.324a2.685 2.685 0 0 1-.106.187c-.148.24-.318.386-.654.537.23.013.35-.041.448-.165a1.414 1.414 0 0 1-.052.1c-.215.356-.634.478-1.117.456a.54.54 0 0 1 .174.37c-.074-.134-.152-.251-.251-.297l.116-.334a.523.523 0 0 1 .02-.054v-.006l.132-.37a.837.837 0 0 0 .026-.07l.003-.01.17-.454.007-.022.168-.435c.061-.159.124-.312.184-.46.123-.301.25-.6.382-.897.052-.116.101-.228.152-.336l.05-.108.097-.205c.028-.063.059-.122.088-.183l.027-.058c.002-.002.003-.006.002-.011l.006-.001c.074-.15.143-.291.213-.423.15-.29.309-.576.474-.857l.013-.023c.088-.148.171-.28.246-.396.333-.023.665-.064.995-.12-.011.052-.022.107-.038.165a2.966 2.966 0 0 1-.075.225 4.142 4.142 0 0 1-.187.413h-.001zm2.351.674v4.596c0 .28-.041.527-.125.732a1.337 1.337 0 0 1-.35.512 1.37 1.37 0 0 1-.531.3c-.203.063-.43.095-.674.095a2.728 2.728 0 0 1-.659-.074.063.063 0 0 1-.046-.06v-.842a.063.063 0 0 1 .076-.062c.077.018.162.033.25.045.162.024.376.03.54-.01a.48.48 0 0 0 .332-.29.826.826 0 0 0 .052-.313v-4.63c0-.035.027-.063.062-.063h1.01c.036 0 .063.028.063.063zm8.588 1.44a1.352 1.352 0 0 0-.518-.334 1.887 1.887 0 0 0-.675-.114c-.254 0-.49.041-.702.125-.208.082-.395.21-.545.377a1.75 1.75 0 0 0-.35.619 2.704 2.704 0 0 0-.123.859c0 .32.044.606.135.848.092.24.222.443.386.603.164.157.364.276.59.355a2.3 2.3 0 0 0 .742.118c.143 0 .267-.005.377-.015a2.33 2.33 0 0 0 .61-.13c.095-.033.187-.074.273-.12a.06.06 0 0 0 .033-.055v-.77a.063.063 0 0 0-.09-.055 2.505 2.505 0 0 1-.827.265c-.102.01-.204.015-.307.014a.907.907 0 0 1-.332-.055.703.703 0 0 1-.243-.162.797.797 0 0 1-.155-.263 1.168 1.168 0 0 1-.058-.295h2.157a.063.063 0 0 0 .063-.062v-.483a2.126 2.126 0 0 0-.114-.725 1.462 1.462 0 0 0-.327-.544zm-1.758 1.029c.022-.216.081-.377.176-.478a.518.518 0 0 1 .395-.167.55.55 0 0 1 .246.052c.07.033.13.083.176.144a.647.647 0 0 1 .105.22c.02.071.033.148.038.229h-1.136zm10.673-1.387v.934a.062.062 0 0 1-.077.06.727.727 0 0 0-.254-.027l-.08-.004c-.121 0-.233.016-.337.047a.636.636 0 0 0-.253.145.672.672 0 0 0-.163.264c-.039.11-.059.248-.059.411v1.856a.063.063 0 0 1-.063.063h-.994a.063.063 0 0 1-.063-.063v-3.645c0-.035.028-.063.063-.063h.753c.028 0 .053.02.06.046l.124.462c.04-.067.085-.13.133-.191a.932.932 0 0 1 .487-.338 1.14 1.14 0 0 1 .434-.044c.033 0 .065 0 .096.006a.76.76 0 0 1 .084.011.279.279 0 0 1 .066.011.061.061 0 0 1 .044.059h-.001zm-5.956 2.794a.06.06 0 0 1 .027.05v.741a.06.06 0 0 1-.033.055 1.524 1.524 0 0 1-.364.125c-.304.068-.62.066-.924-.008a.91.91 0 0 1-.381-.207 1.036 1.036 0 0 1-.256-.397 1.819 1.819 0 0 1-.088-.608V12h-.414a.063.063 0 0 1-.062-.062v-.42a.06.06 0 0 1 .03-.053l.529-.323.28-.75a.062.062 0 0 1 .058-.04h.636c.035 0 .062.028.062.063v.714h.825c.034 0 .063.028.063.062v.747a.063.063 0 0 1-.063.063h-.825v1.695c0 .124.029.214.085.268a.315.315 0 0 0 .231.084c.094 0 .181-.011.263-.03.089-.022.177-.05.264-.08a.062.062 0 0 1 .057.007v.001zm-6.105-3.876v4.77a.063.063 0 0 1-.062.061h-.943a.063.063 0 0 1-.063-.063v-2.45l.014-.473.01-.242.008-.187-1.018 3.37a.062.062 0 0 1-.06.044h-.93a.063.063 0 0 1-.06-.044l-.929-3.32a24.947 24.947 0 0 1 .033.88c.003.074.005.142.005.204v2.218a.063.063 0 0 1-.063.063h-.903a.063.063 0 0 1-.063-.063V10.07c0-.034.027-.063.062-.063h1.376c.03 0 .053.02.061.047l.981 3.473 1.046-3.474a.063.063 0 0 1 .06-.044h1.376c.034 0 .062.027.062.061zm9.135 1.44a1.351 1.351 0 0 0-.517-.334 1.886 1.886 0 0 0-.676-.114c-.253 0-.49.041-.701.125-.208.082-.395.21-.545.377a1.75 1.75 0 0 0-.35.619c-.087.278-.13.568-.124.859 0 .32.046.606.135.848.093.24.223.443.387.603.164.157.364.276.59.355a2.3 2.3 0 0 0 .742.118c.143 0 .266-.005.376-.015a2.306 2.306 0 0 0 .884-.25.06.06 0 0 0 .033-.055v-.77a.063.063 0 0 0-.09-.055 2.5 2.5 0 0 1-.828.265c-.101.01-.204.015-.306.014a.905.905 0 0 1-.332-.055.7.7 0 0 1-.242-.162.799.799 0 0 1-.157-.263 1.165 1.165 0 0 1-.057-.295h2.157a.063.063 0 0 0 .063-.062v-.483a2.126 2.126 0 0 0-.114-.725 1.464 1.464 0 0 0-.328-.544zm-.765.58a.65.65 0 0 1 .106.22c.02.071.033.148.038.229h-1.137c.022-.216.082-.377.177-.478a.518.518 0 0 1 .395-.167.55.55 0 0 1 .246.052.48.48 0 0 1 .175.144zM6.26 7.63h-.137L5.41 9.336h.179l.218-.534h.769l.22.534h.18l-.714-1.708H6.26zm-.419 1.04l.352-.844.341.844h-.693zm1.483.035h.555c.292 0 .489-.262.489-.54 0-.265-.211-.536-.503-.536h-.708v1.708h.166v-.632zm0-.926h.532c.187 0 .346.172.346.386 0 .207-.13.392-.332.392h-.546v-.778zm1.129 1.558l.218-.534h.767l.22.534h.184l-.714-1.708H8.99l-.715 1.708h.177zm.606-1.51l.342.843H8.71l.352-.844H9.06zm.778.643c0-.41.297-.85.81-.85a.672.672 0 0 1 .631.372l-.135.081a.538.538 0 0 0-.504-.303c-.408 0-.632.365-.632.709 0 .376.276.718.639.718a.58.58 0 0 0 .526-.318l.14.073c-.111.256-.414.397-.676.397-.468 0-.799-.447-.799-.88zm1.875.867h-.165V7.629h.165v.76h1.011v-.76h.169v1.708h-.169v-.799h-1.01v.799zm2.71 0h-1.145V7.629h1.124v.15h-.959v.616h.836v.142h-.837v.65h.982v.15z": "Apache JMeter", - "M10.365 0h.002zc-.007.004-.002.066.018.143.19.787.395 1.67.395 1.7 0 .023-.242.247-.538.5-.296.253-.628.552-.735.663l-.175.182h-.247c-1.53-.004-3.06.014-4.588-.01-.578-.01-.855.407-.855.85.007 6.384.007 12.766.007 19.15 0 .542.283.822.828.822h15.06c.542 0 .825-.28.825-.825V4.025c0-.56-.276-.838-.83-.838-1.632 0-3.264.002-4.896-.006h-.208l-.546-.532c-.94-.915-1.62-1.455-2.762-2.18A17.17 17.17 0 0 0 10.366 0zm.955 1.35c.03-.004.232.125.47.3a16.989 16.989 0 0 1 2.497 2.31h.002c.465.52.903 1.057 1.268 1.6.357.53.935 1.546.935 1.64 0 .03.017.052.037.052.02 0 .083-.168.14-.374.127-.45.126-.448.388.403.38 1.238.51 2.106.51 3.38 0 .992-.047 1.402-.23 2.12-.053.205-.066.318-.035.318.026 0 .184-.038.352-.086.167-.048.31-.08.318-.073.028.027-.394.753-.692 1.19-1.246 1.828-2.718 2.91-4.358 3.206-.917.165-1.763.1-2.61-.198-.45-.158-.813-.348-1.398-.733-1.25-.82-2.206-2.292-2.68-4.12-.214-.82-.378-2.076-.378-2.895V9l.277.415c.403.603.89 1.217.93 1.172.006-.01-.104-.224-.247-.478-.302-.536-.303-.53-.08-1.39.362-1.406 1.112-2.862 2.108-4.098.143-.178.395-.43.614-.663.603-.644 1.29-1.32 1.342-1.27.01.01-.01.126-.045.257-.134.492-.33 1.332-.313 1.348.004.004.126-.216.197-.336.072-.124.096-.15.203-.344.21-.38.39-.7.395-.706.006-.007.132.112.28.264.222.225.27.256.25.167-.014-.06-.123-.522-.245-1.028-.12-.506-.215-.938-.207-.96 0-.002.002-.003.004-.003zm4.08 2.59h3.71c.372 0 .49.114.49.482v13.9c0 .36-.12.457-.558.457H6.42c-.52 0-1.04.002-1.56 0-.33-.003-.453-.126-.453-.448V4.41c0-.343.12-.467.46-.467 1.17-.002 2.342 0 3.513 0 .048 0 .097.005.116.006h.1l-.007.006-.138.165c-.948 1.143-1.77 2.63-2.157 3.912-.053.176-.102.32-.11.32-.006 0-.207-.29-.443-.64-.237-.352-.448-.652-.47-.665-.074-.046-.01 3.277.075 3.897.305 2.222 1.053 3.926 2.292 5.214.62.646 1.705 1.31 2.633 1.612 1.36.444 2.87.33 4.27-.32 1.37-.638 2.723-1.993 3.706-3.713.366-.642.934-1.742.91-1.766-.01-.01-.255.05-.542.132a5.99 5.99 0 0 1-.533.14 1.427 1.427 0 0 1 .033-.292c.09-.534.103-1.682.027-2.396-.134-1.262-.344-2.09-.93-3.663-.467-1.258-.473-1.274-.5-1.274-.014 0-.092.238-.173.528-.082.29-.154.526-.16.526a.831.831 0 0 1-.114-.165 21.09 21.09 0 0 0-.972-1.34l-.174-.21h-.004.047c.083-.005.158-.013.234-.013zm-3.6.71l-.032.234c-.027.2-.205.86-.31 1.157-.048.132.26-.17.433-.426.08-.115.152-.21.165-.21.014 0 .17.147.35.327.18.18.333.32.34.313.03-.03-.21-.515-.377-.76a3.624 3.624 0 0 0-.37-.445zM9.32 6.584l-.132.125c-.178.17-.485.64-.63.96-.15.332-.33.85-.328.94 0 .04.072-.06.158-.222.155-.29.603-.872.67-.872.02 0 .06.053.09.12.06.132.36.552.378.53a1.875 1.875 0 0 0-.045-.32c-.03-.17-.07-.465-.085-.66a6.93 6.93 0 0 0-.053-.476zm5.453.008c-.02 0-.038.113-.04.252 0 .24-.097 1.002-.157 1.242-.026.107-.023.107.088-.02.063-.074.166-.22.23-.33.065-.11.123-.207.132-.217.054-.063.71.816.786 1.052.017.052.04.083.053.07.03-.03-.188-.687-.323-.975-.197-.42-.664-1.074-.768-1.074zm-2.63 1.1h.002zc-.04.006-.274.505-.348.746-.083.27-.182.978-.18 1.296v.307l.108-.41c.095-.368.25-.758.365-.926.035-.05.087-.023.274.145.127.114.267.227.31.25.085.045.11 0 .042-.072-.057-.06-.392-.855-.47-1.117-.035-.12-.08-.217-.1-.22zM9.56 10.917c-.725.02-1.372.593-1.573 1.445-.088.374-.082.66.022 1.062.2.792.655 1.322 1.36 1.59.098.038.3.058.55.05.34-.007.433-.027.65-.138.51-.258.868-.8.965-1.463.043-.298.04-.41-.022-.72-.187-.95-.812-1.636-1.64-1.8-.104-.02-.21-.03-.313-.026zm5.087 0c-.03 0-.06.002-.09.004-.847.058-1.65.858-1.808 1.882-.143.93.33 1.89 1.073 2.183.344.135.928.112 1.277-.05.814-.38 1.355-1.432 1.222-2.373-.12-.854-.656-1.474-1.402-1.62a1.393 1.393 0 0 0-.273-.024zm-.515 2.06c.38.012.612.473.366.792-.096.12-.338.2-.51.16-.51-.11-.456-.88.066-.948a.51.51 0 0 1 .078-.004zm-3.968.01c.2 0 .24.02.354.146.192.215.165.6-.05.714-.19.1-.332.12-.467.065-.33-.14-.424-.52-.192-.78.113-.126.155-.144.356-.144zM8.65 19.543c.25 0 .498.002.746.008.49.01.683.22.683.712v1.162h-.003v1.14c-.003.416-.192.633-.608.646a25.8 25.8 0 0 1-1.622 0c-.416-.015-.603-.228-.608-.648-.005-.775-.006-1.55 0-2.324.004-.466.206-.676.666-.687.25-.005.497-.008.745-.008zm6.23 0c.29.002.577.01.865.026.348.02.53.23.534.58.013.817.016 1.636.004 2.454-.005.39-.21.59-.608.604-.54.02-1.08.02-1.62 0-.428-.015-.606-.23-.61-.666v-1.16h-.003c0-.39-.004-.775 0-1.164.004-.418.166-.636.573-.656.288-.013.576-.02.865-.017zm-2.744.002c.29 0 .583.003.88.003v.632h-1.452c-.31 0-.333.023-.333.34 0 .6.006 1.2-.003 1.8-.003.2.075.275.27.272.424-.007.847 0 1.272 0h.267l.003.603c-.05.007-.098.02-.146.02-.527.002-1.054.005-1.58 0-.516-.005-.716-.21-.716-.722v-2.24c0-.476.197-.692.67-.703.29-.006.577-.007.868-.006zm6.29.006c.358 0 .72.005 1.086.005v.622h-1.794c-.26 0-.286.027-.286.292.006.727-.102.634.64.64.298.003.6-.003.898.003.433.01.632.206.64.633.004.278.005.557-.004.834-.013.383-.193.607-.572.62-.736.023-1.474.006-2.226.006v-.616h.244c.557 0 1.113-.003 1.668.002.186.002.272-.072.264-.26a5.38 5.38 0 0 1 0-.44c.007-.188-.078-.258-.266-.254-.4.01-.804.006-1.206.002-.533-.006-.722-.203-.722-.737 0-.242-.003-.483.004-.724.012-.387.19-.608.568-.62.353-.01.707-.01 1.065-.01zm-12.84.02c.41-.003.82.006 1.237.006v.586c-.08.005-.156.014-.232.014-.438.002-.877.005-1.315 0-.175-.002-.25.072-.25.25.006.638.008 1.274 0 1.91 0 .196.083.257.265.256.438-.005.877-.002 1.316-.002h.223v.608c-.65 0-1.284.02-1.917-.008-.342-.014-.51-.227-.514-.568-.01-.826-.01-1.653 0-2.48.003-.318.157-.544.448-.557.25-.014.51-.01.737-.016zm9.806.607c-.357.007-.715.005-1.072 0-.177 0-.248.08-.246.255.004.643.004 1.285 0 1.927 0 .16.07.23.22.23.38.003.76 0 1.138 0 .17 0 .228-.083.224-.248-.008-.32 0-.642-.005-.963 0-.316-.007-.63 0-.944h.004c.005-.19-.077-.26-.262-.258zm-7.282.003c-.168-.002-.237.076-.235.24.005.322 0 .644 0 .965 0 .32.006.64-.004.962h.002c-.004.17.067.245.23.245H9.22c.158 0 .235-.068.234-.24-.006-.642-.004-1.283 0-1.926 0-.16-.056-.248-.228-.246-.373.005-.745.003-1.117 0z": "Cocos", - "M12.005.001C7.29-.064 2.744 2.962.957 7.317c-.885 1.953-1 4.116-.946 6.225.01 2.666-.02 5.335.015 7.999.113 1.542 1.654 2.614 3.134 2.44 3.257-.02 6.514.044 9.77-.034 4.79-.303 9.155-3.796 10.527-8.39 1.4-4.345.03-9.413-3.39-12.443A11.968 11.967 0 0012.005.001zm3.52 2.842c.406-.01.807.032 1.197.117.557.286.945.826.902 1.383-.058.75-.587 1.247-1.38 1.246a2.95 2.95 0 00-.72-.09c-1.725-.053-3.167 1.61-2.97 3.305.024.796-.044 1.601.033 2.392.333.457.987.18 1.475.256.276 0 .562.007.85.008a.134.134 0 00.042.008 1.29 1.29 0 011.29 1.295 1.29 1.29 0 01-1.298 1.295.14.14 0 00-.06.013c-.777.003-1.553 0-2.33.002-.066 1.616.197 3.276-.31 4.84-.865 2.706-3.97 4.337-6.685 3.62-.537-.284-.91-.79-.868-1.334.062-.796.656-1.308 1.532-1.24.075.006.113.012.168.02.716.14 1.477.034 2.107-.391 1.127-.645 1.502-1.977 1.396-3.193-.02-.687.043-1.384-.033-2.066-.333-.456-.984-.18-1.472-.256h-.8a.137.137 0 00-.066-.015 1.29 1.29 0 01-1.298-1.295c0-.72.574-1.29 1.29-1.295a.136.136 0 00.063-.016h2.316c.06-1.507-.159-3.046.213-4.523.648-2.376 2.952-4.12 5.415-4.086zm.705.052l.13.024zm1.224.28c1.444.543 2.636 1.706 3.25 3.12a81.141 81.136 0 01-2.903-2.592 1.762 1.762 0 00-.346-.527zm.45.935a86.96 86.954 0 002.966 2.596c-.014-.044-.033-.087-.049-.13.166.448.265.918.301 1.402a77.847 77.842 0 01-3.39-2.975l.015-.033c.088-.182.143-.386.16-.606a1.393 1.393 0 000-.197c0-.019-.002-.038-.004-.057zm.02.196c-.058.516-.058.516 0 0zm-.314.894a85.347 85.341 0 003.53 3.06c0 .071.015.14.013.21a4.94 4.94 0 01-.06.814A78.528 78.523 0 0117.011 5.7a1.56 1.56 0 00.6-.5zm.526 1.83c.898.8 1.856 1.623 2.918 2.485a5.215 5.215 0 01-.242.863 74.032 74.027 0 01-2.307-1.963l.002.055c0 .076-.004.152-.01.226.703.612 1.44 1.237 2.24 1.885-.109.26-.234.512-.38.752a73.605 73.6 0 01-2.06-1.752 3.13 3.13 0 00-.16-2.55zm.068 2.758c.644.56 1.32 1.131 2.043 1.72a5.868 5.867 0 01-.5.651 74.24 74.235 0 01-1.99-1.705c.185-.2.332-.425.447-.666zm-.603.816a82.545 82.54 0 002.005 1.71c-.19.2-.392.385-.607.556a75.858 75.853 0 01-2.043-1.77c.203-.108.396-.247.572-.425.027-.022.047-.047.073-.07zm-.86.594a84.37 84.365 0 002.088 1.8c-.23.17-.48.311-.734.444a79.06 79.054 0 01-2.256-2.005c-.024.002-.05.001-.074.003l-.026-.015a3.506 3.506 0 001.002-.227zm-10.046.248l-.02.014h-.013l.004.004a1.573 1.573 0 00-.51.55l-.45-.427a5.38 5.38 0 01.99-.14zm-.994.14l-.127.032.127-.03zm-.27.075l.622.592a1.55 1.55 0 00.008 1.045c-.468-.444-.94-.893-1.432-1.348.26-.118.529-.21.803-.289zm-1.03.4c.72.674 1.425 1.347 2.134 2.03a2.68 2.68 0 00-.826.242c-.64-.61-1.3-1.23-1.998-1.865a5.98 5.98 0 01.69-.406zm12.022.204c.473.42.958.846 1.474 1.285a5.37 5.37 0 01-.908.342l-.617-.498a1.55 1.55 0 00.05-1.13zm-12.901.345a140.01 140.01 0 011.958 1.844 3.158 3.158 0 00-1.527 2.332A98.329 98.323 0 001.777 14.8a5.574 5.573 0 00-.091.22c.777.698 1.522 1.391 2.252 2.087.002.284.042.57.14.848.053.19.13.366.22.533a107.243 107.236 0 00-2.86-2.635c.027-.108.04-.217.074-.323.137-.518.366-.998.65-1.44.69.621 1.35 1.241 2.002 1.86a2.98 2.98 0 01.107-.232 99.457 99.45 0 00-1.986-1.819c.15-.214.31-.42.49-.613A109.76 109.76 0 014.7 15.088c.054-.06.11-.122.168-.178a98.104 98.104 0 00-1.94-1.79 5.82 5.82 0 01.592-.509zm12.719.153l-.027.265zm1.733.754l-.05.023.05-.023zm-1.72.091l.44.354c-.287.06-.582.096-.88.103h-.016a1.56 1.56 0 00.457-.457zM1.386 16.101c1.32 1.189 2.532 2.357 3.78 3.559l.175.166c-.237.107-.44.266-.594.465A125.942 125.935 0 001.3 17.076a5.176 5.176 0 01.086-.976zm-.07 1.29A154.286 154.276 0 014.61 20.5c-.11.2-.18.428-.2.677a1.406 1.406 0 000 .166c-.92-.884-1.856-1.78-2.88-2.71a5.65 5.65 0 01-.215-1.243zm.378 1.714c.943.876 1.852 1.748 2.778 2.64l.02.02c.07.195.186.372.327.532-1.445-.56-2.562-1.767-3.125-3.192zm3.352.264c.179.14.374.26.58.358l-.025.005-.018-.015a3.014 3.014 0 01-.537-.348zm1.047 3.252l.15.025zm.228.04s.09.007.274.025a33.671 33.669 0 00-.274-.026z": "Fedora", - "M15.91 0C12.79 0 9.69 0 6.6.03c0 .05-.06.05-.09.08a10.5 10.5 0 0 0-3.66 2.57c-.84.87-1.52 1.9-2.06 3-.2.38-.38.79-.55 1.2-.02.08-.05.2-.13.25v6.22c.05.08.05.2.08.3a8.66 8.66 0 0 0 3.42 4.83c.03.03.05.09.11.06-.03-.03-.03-.06-.06-.08-.24-.36-.46-.69-.67-1.04a9.1 9.1 0 0 1-1.28-5.57 10.09 10.09 0 0 1 1.71-4.53 23.07 23.07 0 0 1 3.64-4.18A13.05 13.05 0 0 1 10.32.98 8.82 8.82 0 0 1 14.74.2c.7.06 1.39.17 2.07.27L17 .5c.08.03.13.03.21.03-.38-.16-.76-.33-1.14-.44-.05-.02-.1-.02-.16-.08zm-1.66.66c-.43.02-.84.05-1.27.13-.74.14-1.44.36-2.15.58a7.47 7.47 0 0 0-1.44.62c-.02 0-.08 0-.08.06h.05a28.12 28.12 0 0 1 3.05-.33c.51-.03 1.06 0 1.57.08.76.11 1.47.39 2.12.77a10.8 10.8 0 0 1 4.4 4.7 15.14 15.14 0 0 1 1.38 5.43c.06.65.06 1.34.03 2.02l-.08 1.14c-.03.33-.08.66-.14.99a6.1 6.1 0 0 1-.27 1.17 11.7 11.7 0 0 1-1.55 2.73c-.49.66-1.05 1.26-1.6 1.86-.08.08-.13.13-.19.22.06 0 .06-.03.08-.03a16.74 16.74 0 0 0 2.31-1.61 10.87 10.87 0 0 0 3.2-4.45l.17-.41h.03v5.87c0 .02 0-9.17.02-15 0 .02 0 .05-.02.07l-.03-.09a10.75 10.75 0 0 0-1.52-2.73 9.7 9.7 0 0 0-3.12-2.64A9.76 9.76 0 0 0 14.25.66zm9.63 6.54l.01-.02V1.75 7.2zm-13-3.33c-.4-.04-.8.09-1.19.42a2.33 2.33 0 0 0-.62.9c-.33.8-.38 1.58-.22 2.4.11.63.4 1.18.92 1.58.52.44 1.12.5 1.66.2.33-.2.57-.44.76-.77.33-.57.46-1.2.46-1.85 0-.3-.02-.58-.08-.88a2.8 2.8 0 0 0-.62-1.4 1.69 1.69 0 0 0-1.08-.6zM16 5.15a2.38 2.38 0 0 0-1.72.83c-.3.27-.46.63-.65.98a3.04 3.04 0 0 0-.38 1.53c0 .38.05.74.21 1.1.28.65.8 1 1.44 1 .47 0 .85-.16 1.2-.43a3.75 3.75 0 0 0 1.5-2.57c.05-.46 0-.93-.17-1.4-.16-.4-.4-.75-.82-.92a1.61 1.61 0 0 0-.6-.12zM6.38 7.56c-.44.03-.84.2-1.11.6-.36.5-.47 1.07-.5 1.64-.02.6.12 1.15.39 1.67.22.43.51.82.92 1.1.52.34 1.17.34 1.63.02.27-.2.46-.47.6-.77.27-.63.32-1.3.16-1.99a3.3 3.3 0 0 0-1.06-1.86c-.3-.24-.62-.4-1.03-.4zm11.86 2.64a1.84 1.84 0 0 0-.9.2 3.5 3.5 0 0 0-1.81 1.97 2.44 2.44 0 0 0-.11 1.58c.14.5.4.85.9.99.19.05.4.08.6.08.32 0 .54-.03.8-.17.53-.24.93-.6 1.28-1.03a2.9 2.9 0 0 0 .63-2.46 1.3 1.3 0 0 0-1.09-1.12 1.87 1.87 0 0 0-.3-.04zm-7.11 1.65c-.08 0-.22 0-.35.03a3.58 3.58 0 0 0-1.5.4c-.6.34-1.1.77-1.57 1.26a10.07 10.07 0 0 0-1.39 1.83c-.21.38-.35.8-.32 1.23.03.25.03.47.14.68.3.39.7.66 1.19.77.46.08.92.03 1.38-.03.52-.05 1-.1 1.5-.08.78.05 1.5.3 2.12.79.24.2.46.41.73.6.51.36 1.06.52 1.68.38.52-.1.87-.43.98-.95.1-.44.08-.85.02-1.29a9.46 9.46 0 0 0-.37-1.5 9.95 9.95 0 0 0-1-2.26c-.3-.5-.66-.93-1.15-1.26a3.68 3.68 0 0 0-2.09-.6zM.11 14.64v2.13c.1.13.16.3.22.46a12.8 12.8 0 0 0 2.41 4.18 9.6 9.6 0 0 0 3.83 2.56c.03 0 .05.03.08.03h8.01c.03-.03.03-.03.05-.03a8.68 8.68 0 0 0 1.99-.9 11.4 11.4 0 0 0 4.26-4.8c.43-1.01.65-2.08.7-3.2a.4.4 0 0 0 0-.24c-.02.02-.05.05-.05.08l-.22.7a8.29 8.29 0 0 1-1.87 3.2 8.08 8.08 0 0 1-2.85 1.91c-.95.39-1.95.55-2.99.6-.76.03-1.49 0-2.22-.05a24.34 24.34 0 0 1-3.1-.44 15.48 15.48 0 0 1-3.75-1.36 10.15 10.15 0 0 1-3.3-2.76 7.5 7.5 0 0 1-1.2-2.07z": "Furry Network", - "M19.229 4.18l-4.066 2.327V1.826L11.993 0 8.827 1.83v4.677L4.78 4.17 1.606 6v3.664L5.657 12l-4.054 2.343V18l3.165 1.831 4.044-2.338v4.681L11.983 24l3.174-1.831v-4.676l4.052 2.327 3.173-1.829v-3.646L18.339 12l4.058-2.336V6l-3.164-1.82h-.004zm.373 3.429V5.715l1.639.942v1.905l-1.636-.953h-.003zm1.638 9.286l-6.075-3.504 1.65-.945L21.239 15v1.896l.001-.001zm-6.827-3.95L12.763 12l6.452-3.726 1.641.944-6.446 3.727h.003zM3.134 9.219l1.641-.944L11.228 12l-1.639.945-6.455-3.726zm5.69 4.17l-6.075 3.508V15l4.435-2.555 1.641.945v-.001zM2.749 8.564V6.66l1.64-.945v1.898l-1.64.951zm9.627 0V1.55l1.641.937V7.61l-1.641.953v.001zm-2.402-.96V2.493l1.64-.944v7.004l-1.64-.949zm8.866-1.889v1.898l-6.456 3.734V9.442l6.456-3.727zm-7.228 3.724v1.897L5.153 7.609V5.715l6.46 3.721-.001.003zm-2.403 6.513l-4.435 2.555-1.64-.944 6.074-3.508v1.897zm.765-2.343l1.64-.945v7.453l-1.64.959v-7.467zm3.656 8.115l-1.639.954-1.64-.951 1.64-.946 1.639.946v-.003zm.394-.657l-1.648-.95v-7.441l1.648.944v7.458-.011zm6.831-3.504l-1.641.944-4.425-2.555v-1.897l6.075 3.508h-.009z": "Matternet", - "M21.039 0a2.959 2.959 0 00-2.65 4.274l-6.447 6.447a2.96 2.96 0 101.335 1.336l6.447-6.447A2.959 2.959 0 1021.04 0zM10.628 2.745c-.072 0-.143.003-.214.004-.072.002-.143.002-.215.005-.447.018-.893.064-1.335.138l-.03.005-.185.033-.105.02a7.718 7.718 0 00-.289.062l-.032.008a10.69 10.69 0 00-2.55.95l-.155.089c-.063.034-.125.07-.187.105-.046.027-.093.051-.14.079H5.19l-.01.005-.036.02v.002l.111.184 3.15 5.23a4.168 4.168 0 01.38-.202 4.294 4.294 0 011.628-.413c.071-.004.143-.008.214-.008zm.428.01v6.333c.325.034.647.103.96.209l4.66-4.66c-.173-.12-.348-.237-.528-.347l-.026-.015c-.056-.035-.112-.067-.168-.1l-.098-.056-.099-.055a12.735 12.735 0 00-.171-.092l-.027-.014a10.628 10.628 0 00-1.425-.617c-.69-.241-1.403-.41-2.128-.505l-.089-.012-.09-.01a6.56 6.56 0 00-.17-.019l-.049-.004-.204-.017a6.44 6.44 0 00-.255-.015c-.031-.003-.062-.003-.093-.004zM4.782 4.498a9.92 9.92 0 00-1.36 1.062l4.461 4.461.018.018c.049-.04.098-.078.149-.116l-.011-.018zm-1.67 1.36c-.05.05-.098.103-.147.154l-.149.155c-.33.357-.63.73-.902 1.118l-.039.056a10.588 10.588 0 00-.216.326 10.6 10.6 0 00-1.65 5.276l-.006.215-.003.214h6.317c0-.072.007-.143.01-.214.005-.072.006-.144.013-.215.081-.822.399-1.625.952-2.3.045-.055.096-.106.144-.16.048-.052.093-.107.144-.158zm16.255 1.464l-4.663 4.663c.106.312.175.634.21.959h6.332l-.004-.094a11.579 11.579 0 00-.032-.456l-.005-.052a13.044 13.044 0 00-.026-.241v-.009l-.033-.24v-.009a10.618 10.618 0 00-.327-1.493l-.003-.01a15.839 15.839 0 00-.07-.228l-.01-.03a14.111 14.111 0 00-.069-.204l-.02-.055a5.65 5.65 0 00-.153-.405 7.84 7.84 0 00-.093-.227 16.67 16.67 0 00-.063-.144l-.037-.081a13.776 13.776 0 00-.08-.171l-.024-.052-.096-.194-.014-.027a11.2 11.2 0 00-.112-.212l-.004-.008a10.615 10.615 0 00-.604-.98zm-4.43 6.05c0 .071-.006.142-.01.214-.003.072-.005.143-.012.214a4.29 4.29 0 01-.952 2.301c-.045.055-.096.107-.144.16-.048.053-.093.108-.144.159l4.467 4.467c.051-.051.099-.104.148-.155.05-.052.1-.103.148-.155.331-.358.633-.733.905-1.122l.032-.046.098-.144.085-.13.04-.063a10.597 10.597 0 001.647-5.272c.003-.071.004-.143.006-.214.001-.071.004-.143.004-.214zM.01 13.8l.004.093.01.179.005.076.017.206.005.046c.007.076.015.153.024.228l.003.022a9.605 9.605 0 00.033.248c.072.505.182 1.005.327 1.497l.002.006c.022.077.047.154.071.23l.004.014.005.014a15.737 15.737 0 00.153.439l.03.08.059.148a7.702 7.702 0 00.093.228l.062.14.038.084.078.169.027.054a10.677 10.677 0 00.225.441l.025.043 5.408-3.258.02-.012a4.314 4.314 0 01-.395-1.414h-.025zm.505 2.846l-.206.058.002.005zm6.425-1.052l-5.415 3.262c.083.139.17.273.259.406l.008.014.004.005.008.014h.001c.007.012.014.022.022.032l.001.002v.001a10.634 10.634 0 00.298.417l.006.008a9.963 9.963 0 00.29.368l.033.04c.043.052.086.103.13.153l.057.065.112.127.064.069.029.031.083.09.035.035c.049.051.098.103.149.153L7.58 16.42a3.86 3.86 0 01-.285-.321 4.422 4.422 0 01-.356-.505zm6.416 1.111c-.05.04-.1.079-.15.116l.011.018 3.257 5.407c.151-.099.3-.2.446-.307.315-.232.62-.484.914-.756l-4.46-4.46zm-5.457.003l-.015.015-4.46 4.46a8.966 8.966 0 00.195.176c.022.02.043.04.065.058l.152.13a10.622 10.622 0 00.215.174l.023.017.191.148.008.005c.268.2.547.389.834.564l.03.018.164.097.101.057a5.458 5.458 0 00.27.148c.008.004.016.01.025.013.162.085.327.164.493.24l.158-.385 2.243-5.448.009-.02a4.328 4.328 0 01-.701-.467zm4.951.353c-.061.037-.124.07-.187.104a4.318 4.318 0 01-3.271.336c-.069-.02-.135-.047-.203-.071-.067-.024-.136-.044-.202-.072l-2.242 5.444-.088.213-.075.183v.001l.017.007a.137.137 0 00.019.007l.005.003c.052.021.106.04.159.06.067.027.133.053.2.077l.102.04c.702.247 1.43.42 2.168.518l.087.012.09.01.172.019a7.173 7.173 0 00.252.022c.023.001.048.001.071.003l.184.011.112.005a7.06 7.06 0 00.358.007h.05a10.667 10.667 0 001.793-.15l.185-.034.105-.02.109-.023.18-.04.032-.008a10.684 10.684 0 002.55-.95c.052-.028.104-.06.156-.089.063-.034.125-.07.187-.105.043-.024.087-.047.13-.073h.001l.002-.002.002-.001.002-.001.007-.004.042-.025-.11-.183-.11-.184zm3.262 5.414l-.042.025.042-.024zm-.05.029h-.001.002zm-.005.004h-.002z": "OpenAPI Initiative", - "M12.726 0L3.453 3.461v17.425L12.792 24l7.754-1.034-.002-.598V1.183zm-.742.991l-.02 21.948-7.988-2.527L3.95 3.964zm1.349.114l6.4.869v20.189l-6.404.796zm.33.366l.007 21.139 5.748-.727V2.228zm-2.152.263L8.251 2.91v4.924l3.279-.422zm-3.61 1.353L4.264 4.274v4.023l3.66-.408zm2.11.015a.738.738 0 01.51.22c.531.502.583 1.41.44 2.076-.128.596-.537 1.477-1.278 1.411-.132-.012-.395-.079-.469-.207L9.212 6.6l.078-.205c.285.122.546.211.839.04.283-.166.471-.503.578-.803.211-.588.211-1.382-.171-1.9-.465-.63-1.126-.3-1.442.288a3.036 3.036 0 00-.25.937 2.14 2.14 0 00.017.441c.02.168.107.341.086.511-.006.052-.037.085-.095.095-.345-.58-.157-1.508.102-2.081.185-.41.615-.824 1.057-.82zM6.427 4.105l-.394 1.098.397-.213-1.151 2.655-.002-.002.502-1.908-.324.155.446-1.634zm3.416.201a.28.28 0 01.106.018c.424.162.294.884.11 1.167-.097.151-.262.157-.424.157v.003c-.066-.24.238-.404.306-.588.04-.108-.002-.199-.045-.29-.102-.053-.186-.022-.223.083a1.341 1.341 0 01-.26.457 1.078 1.078 0 01.136-.846.376.376 0 01.294-.16zm-.138.148c-.04 0-.073.052-.073.114 0 .063.033.114.073.114.04 0 .072-.052.072-.114 0-.064-.033-.114-.072-.114zm.282 0c-.04 0-.072.052-.072.114 0 .063.033.114.072.114.04 0 .073-.052.073-.114 0-.064-.033-.114-.073-.114zm-.46.264c-.04 0-.072.053-.072.115 0 .063.033.114.073.114.04 0 .072-.053.072-.114 0-.064-.033-.115-.072-.115zm.573.06c-.04 0-.072.053-.072.115 0 .063.033.114.072.114.04 0 .073-.053.073-.114 0-.064-.033-.115-.073-.115zm-.396.339h.002c.01.014.01.028.004.041-.195.44-.387.881-.583 1.324-.018-.008-.029-.008-.035-.014a1.234 1.234 0 01-.161-.271c-.019-.038.002-.075.025-.106l.677-.904a.227.227 0 01.07-.07zm.305.015c-.04 0-.072.053-.072.114 0 .064.033.115.072.115.041 0 .073-.053.073-.115 0-.063-.033-.114-.073-.114zm-.18.223c-.04 0-.073.052-.073.114 0 .064.033.114.073.114.04 0 .072-.052.072-.114 0-.064-.033-.114-.072-.114zm4.285.295l4.992.156.002.401-4.994-.06zm-2.64 2.3l-3.225.4-.006 6.944 3.206.1zm-3.561.434l-3.628.339.025 6.341 3.594.207zm8.936.54c.33.004.648.287.832.782l1.367.008.033 1.279-1.406.06c-.227 1.04-1.36.943-1.618.058l-1.908.064-.004-1.405 1.846-.068c.229-.542.548-.783.858-.778zm.018.41a.64 1.072 0 00-.64 1.07.64 1.072 0 00.64 1.073.64 1.072 0 00.64-1.072.64 1.072 0 00-.64-1.072zm-11.359.332l.368.319 1.617-.058.01.128-1.67.062-.41-.353zm-.246.215a.173.173 0 01.015.346.173.173 0 01-.163-.101l-.467.02-.006-.128.467-.02a.175.175 0 01.154-.117zm4.985.265c.054.108-.002.307.111.333.153.036.174.075.211.218.017.064-.008.095.058.132.072.041.157.029.159.126.002.133-.056.114-.157.114-.037 0-.05.07-.052.097-.008.098.009.118.104.145.122.035.1.068.1.18 0 .056.011.025-.063.04-.118.022-.145.006-.139.14.009.161.277.03.2.26-.032.1-.195.023-.195.11 0 .11-.023.16.111.17.132.01.124.188.008.228-.07.025-.095-.002-.12.082-.024.085-.022.174-.053.26-.126.092-.24-.036-.24.173 0 .056-.012.097-.022.15-.019.104-.046.015-.12.038-.02-.025 0-.163 0-.196 0-.098-.033-.12-.145-.112-.006.12-.004.248-.1.335-.06-.04-.083-.1-.088-.168-.006-.134.004-.138-.134-.171a.865.865 0 00-.03.3c-.108.054-.125-.112-.125-.178 0-.056.023-.118-.047-.139-.07-.018-.095.017-.097.08-.004.127-.01.183-.11.253-.04-.111-.006-.304-.136-.34-.145-.036-.163-.142-.165-.28-.003-.151-.184-.007-.184-.17 0-.016-.013-.101 0-.114.06-.043.12.025.175.002.027-.074.037-.186-.043-.205-.083-.018-.161-.028-.143-.124.023-.118.002-.111.13-.12.098-.006.062-.107.065-.173-.129-.06-.182.016-.182-.154 0-.115-.009-.105.107-.105.1 0 .07-.035.07-.13 0-.106-.19-.013-.198-.158-.004-.062.02-.116.08-.138.106-.042.118-.048.123-.162.006-.165.115-.184.247-.25l-.002-.002c-.002-.106 0-.207.066-.294.124.004.102.2.104.296.212.105.1-.224.21-.317.157-.016-.012.331.143.327.101-.002.08-.05.078-.138-.002-.081.009-.162.079-.213.17.064.016.376.231.326 0-.132-.02-.293.12-.364zm-2.987.13a.172.172 0 01.178.168.172.172 0 01-.168.178.172.172 0 01-.16-.097l-.523.015a.171.171 0 01-.329-.067.172.172 0 01.167-.178v-.002a.175.175 0 01.168.116l.508-.014a.174.174 0 01.159-.118zm-1.206.253l1.475 2.15-.11.068-1.448-2.092-1.322.081-.004-.124zm1.501.157l-.008.186-.136.197a.173.173 0 01-.023.192v-.002a.173.173 0 01-.244.017.171.171 0 01-.016-.242.172.172 0 01.186-.05zM6.858 11a.168.168 0 01.144.073c.041.06.041.135.004.193l.527.786.002.203-.634-.917a.169.169 0 01-.18-.068l-.002.002a.173.173 0 01.043-.24.171.171 0 01.096-.032zm-.856.071a.173.173 0 01.014.346.173.173 0 01-.163-.102l-1.181.06-.006-.128 1.181-.06a.175.175 0 01.155-.116zm.361.683l.393.49a.166.166 0 01.085-.022c.095 0 .173.078.173.173a.175.175 0 01-.173.174.175.175 0 01-.174-.174c0-.016.004-.033.008-.05l-.361-.46-1.626.04-.004-.13zm-1.117.436h.002c.059.001.11.032.138.077l.992.027.39.474a.166.166 0 01.085-.023c.095 0 .174.079.174.174a.175.175 0 01-.174.174.175.175 0 01-.174-.174.21.21 0 01.009-.05l-.36-.445-.919-.027a.164.164 0 01-.159.124.166.166 0 01-.002-.33h-.002zm-.447.205c.06 0 .104.014.15.085.136.213.264.432.394.65.064.107.13.215.196.32.095.153.12.166.302.178.13.009.262.009.394.009.137 0 .133-.114.263-.102.111.106.111.242 0 .348-.124.008-.11-.12-.203-.12H5.9c-.197 0-.256.043-.358-.116l-.694-1.109h-.171V12.4c.048 0 .088-.004.123-.004zm1.5.34a.172.172 0 01.178.167.172.172 0 01-.167.178.172.172 0 01-.161-.097l-.459.01a.172.172 0 01-.328-.066.172.172 0 01.167-.178v-.002a.175.175 0 01.167.116l.444-.01a.174.174 0 01.16-.118zm.965.181a.171.171 0 11-.023.34l-.516.76-.136.001.543-.827a.172.172 0 01.132-.274zm-2.437.013a.166.166 0 010 .331.166.166 0 010-.331zm.364.563c.045 0 .089.017.123.051a.171.171 0 010 .245.17.17 0 01-.244 0 .198.198 0 01-.03-.042l-.147-.006-.163.228-.095-.09.2-.266.192.006a.181.181 0 01.043-.075.168.168 0 01.121-.05zm2.157.136c.06.001.129.013.17.013.006.058.01.11-.03.161-.071.002-.14-.029-.21-.035l-.123.17c.024.053.103.003.117.074-.02.085-.184.01-.24.019-.028-.09.174-.317.226-.39a.204.204 0 01.09-.012zm8.472.317v7.742l-1.452.174-.004-7.838zM4.337 15.563l-.004 2.125 1.692.231.01-2.234zm1.948.128v4.864l2.927.882v-5.554zm3.313.224l.013 5.745.2.062c.15-.515.42-.316.438.14l.386.115c.004-.543.473-.348.395.117l.357.133-.012-6.188-.263-.017c.058.571-.512.565-.421-.027l-.42-.027c.067.549-.508.534-.419-.035zm-4.614.235l.276.607.17-.31.396.897-1.292-.2v.002-.003zm.71.013c.091 0 .163.072.163.163a.162.162 0 01-.163.164.162.162 0 01-.163-.164c0-.09.072-.163.163-.163zm4.103.498l1.402.147v1.382l-1.402-.205zm-2.24.019c.178.012.347.048.484.178.308.294-.238.863.008 1.208.221-.213.217-.478.384-.703.166.213.31.641.283.912-.142.172-.256.27-.597.294.01.076-.037.149-.016.238.182.194.382.163.622.149.033.17-.139.695-.267.821-.26-.118-.394-.37-.539-.602a.64.64 0 00-.132.126c.035.267.372.606.328.842a.636.636 0 01-.365.07c-.128-.018-.18-.088-.21-.225-.069-.303.065-.677-.19-.894-.125.246-.09.518-.123.785-.2-.05-.345-.45-.384-.621.035-.205.142-.356.266-.515.058-.075.077-.15.04-.236-.015-.033-.013-.075-.042-.102-.18.031-.287.17-.41.29-.14-.145-.108-.69.003-.85a.601.601 0 01.467.12c.11-.108.116-.213.019-.325-.075-.085-.304-.184-.345-.271-.033-.13.21-.57.357-.563.161.238.256.507.31.788.056.023.105.044.17.031.032-.32-.04-.626-.141-.926.01-.01.016-.019.02-.019zm-3.23 1.305v2.12l1.708.417.019-2.284zm5.472.245l1.4.225v1.395l-1.4-.3zm-4.6.3l.014 1.398-.337-.432-.301-.066v-.598l.283.041zm.398.095a.08.08 0 01.013.002c.037.085.08.172.105.265.103.393.103.773-.118 1.144l-.002-.002c-.04-.077-.029-.135-.002-.203.064-.168.122-.34.11-.521a1.544 1.544 0 00-.096-.464 4.151 4.151 0 01-.068-.186c.015-.022.03-.037.058-.035zm-.143.145c.02.001.028.014.034.027.043.088.074.177.093.275.02.113.01.225.018.337.006.072-.016.143-.027.211a.267.267 0 01-.134.197v.002h-.002l.002-.002c-.006-.067.019-.127.033-.187.02-.09.052-.182.064-.273.017-.116-.02-.227-.05-.34l-.045-.154c-.008-.033-.014-.064.004-.093h.01zm-.123.162c.011 0 .021.002.033.005a.96.96 0 01.074.424c-.002.056-.023.106-.035.158-.01.039-.037.062-.07.08-.027-.027-.019-.051-.013-.078.017-.077.033-.151.035-.23.005-.12-.033-.232-.06-.35h-.002a.1.1 0 01.038-.009zm4.468.835l1.396.318v1.383l-1.396-.385z": "PCGamingWiki", - "M11.558 1.034C5.174 1.034 0 6.21 0 12.592c0 1.258.201 2.47.574 3.597l.002-.007a12.415 12.415 0 01.53-1.787l.011-.03c.085-.222.179-.442.277-.66l.084-.181c.08-.171.165-.34.253-.507.036-.068.07-.136.108-.203.02-.038.044-.073.064-.11.094-.166.19-.332.29-.493l.075-.114c.125-.195.256-.386.393-.573l.035-.05c.144-.193.295-.38.451-.563l.1-.118c.155-.177.315-.35.481-.517l.099-.097a10.321 10.321 0 01.546-.503c.74-2.48 3.005-4.285 5.686-4.285 1.079 0 2.152.31 3.071.873a6.017 6.017 0 012.211 2.407l.007.015.04.074v.003l.004.002a9.925 9.925 0 011.567 1.198c.04.037.081.071.12.109.002 0 .006.005.007.006l-.002-.006-.001-.004v-.003l.042-.084c.377-2.384 1.43-4.102 2.67-4.102.934 0 1.762.975 2.276 2.476l.005.016.001.002c.145.158.287.331.424.521l.007.01.021.067-.02-.078c-1.542-4.569-5.863-7.857-10.952-7.857zM9.927 5.477C7.586 5.52 5.34 7.132 4.574 9.365l-.012.034a10.14 10.14 0 011.315-.895c2.806-1.656 6.479-1.646 9.278.016-.895-1.653-2.631-2.819-4.5-3.004a5.14 5.14 0 00-.728-.039zm9.834.5a1.36 1.36 0 00-.39.067c-1.265.562-1.719 2.073-2.031 3.303l-.016.072c.365-.62.808-1.215 1.396-1.642.835-.687 2.105-.655 2.916.053.308.326.141.008.031-.22-.342-.75-1.025-1.653-1.906-1.634zM21.67 7.98zm-9.32.335l-1.07 3.27-.002.005-.006.002-4.498 1.112h-.009l4.456 1.087c.105.11.227.205.36.28h.002c.042.024.085.045.129.065l.01.005c.041.018.083.033.126.047l.021.008c.04.013.08.023.12.032l.033.008a1.677 1.677 0 00.318.033 1.546 1.546 0 001.43-.948c.08-.186.123-.39.123-.604v-.011l-.001-.012c-.001-.054-.004-.107-.01-.16l-.001-.002a1.506 1.506 0 00-.026-.153l-.001-.004a1.511 1.511 0 00-.096-.288v-.003a1.521 1.521 0 00-.348-.49v-.003zm3.148.626c.048 1.008.036 2.046-.1 3.057-.17 2.018-1.19 3.798-1.972 5.616l-.03.08-.035.086c1.51-1.522 3.17-3.04 3.969-5.082.383-.636.118-1.342-.115-1.976-.17-.877-1.069-1.278-1.717-1.781zm6.172.572l-.588 2.688a1.764 1.764 0 00-.047.2c-.002.02-.007.04-.01.06a1.76 1.76 0 00-.016.222l-.002.031h.003c0 .628.297 1.136.663 1.137a.41.41 0 00.182-.045l.027-.015a.537.537 0 00.07-.047c.013-.01.024-.022.036-.033a.752.752 0 00.137-.168l.03-.054a1.23 1.23 0 00.052-.108l.017-.04c.02-.053.038-.108.053-.166l.002-.002.001-.003.404-.451-.407-.456v.001l-.02-.063zm-4.381.856c.69 1.716.85 3.707.091 5.43-.49 1.368-1.587 2.463-1.874 3.905.73.115 1.468.176 2.21.186 2.166.029 4.332-.42 6.284-1.365-2.04-2.869-4.121-5.755-6.711-8.156zm-4.948.977a.583.583 0 110 1.166.583.583 0 010-1.166zm9.352.37c.138 0 .249.19.249.426s-.111.426-.249.426c-.137 0-.248-.19-.248-.426 0-.235.11-.426.248-.426zm-4.044.184c-.016.112-.033.209-.05.29l-.006.023c-.01.05-.022.094-.033.128-.48 1.417-1.275 2.52-2.36 3.697-.147.16-.301.32-.459.484a58.883 58.883 0 01-1.196 1.205c-.112.11-.259.261-.425.436-.103.287-.22.61-.318.95-.044-.016-.086-.031-.131-.049-2.108-.815-3.519-1.904-3.519-1.904s1.086 1.414 2.915 2.74c.177.129.351.24.522.339-.075 1.194.452 2.34 2.83 2.682a4.81 4.81 0 001.228.008l-.01-.029a.062.062 0 00-.004-.01s-.167-.133-.379-.377a3.842 3.842 0 01-.584-.897 3.382 3.382 0 01-.266-.862 3.176 3.176 0 01-.006-.972c.017-.12.04-.241.072-.366.093-.374.255-.772.507-1.192l.002-.003.241-.404c1.103-1.86 1.797-3.275 1.506-5.441a8.943 8.943 0 00-.078-.476zm4.668.576l.001.008-.001-.008zm.013.203l.003.036v.01c0 .013-.003.025-.003.038 0-.014.003-.028.003-.043 0-.014-.002-.026-.003-.04zm-.012.275v.001l-.002.01-.002.014.004-.025zm1.353 5.928c-2.553 1.138-5.44 1.44-8.192 1.007-.14 1.108.384 2.218 1.214 2.93l.012.01c2.703-.433 4.975-2.168 6.966-3.946z": "PrestaShop", - "M20.156.083c3.033.525 3.893 2.598 3.829 4.77L24 4.822 22.635 22.71 4.89 23.926h.016C3.433 23.864.15 23.729 0 19.139l1.645-3 2.819 6.586.503 1.172 2.805-9.144-.03.007.016-.03 9.255 2.956-1.396-5.431-.99-3.9 8.82-.569-.615-.51L16.5 2.114 20.159.073l-.003.01zM0 19.089v.026-.029.003zM5.13 5.073c3.561-3.533 8.157-5.621 9.922-3.84 1.762 1.777-.105 6.105-3.673 9.636-3.563 3.532-8.103 5.734-9.864 3.957-1.766-1.777.045-6.217 3.612-9.75l.003-.003z": "Ruby", - "M24 18.185v2.274h-4.89v-2.274H24zm-24-.106h11.505v2.274H0v-2.279.005zm12.89 0h4.89v2.274h-4.89v-2.279.005zm6.221-3.607H24v2.274h-4.89l.001-2.274zM0 14.367h11.505v2.274H0v-2.274zm12.89 0h4.89v2.274h-4.89v-2.274zm6.221-3.346H24v2.273h-4.89l.001-2.273zM0 10.916h11.505v2.271H0v-2.271zm12.89 0h4.89v2.271h-4.89v-2.271zm6.22-3.609H24v2.279h-4.89V7.307zM0 7.206h11.505V9.48H0V7.201v.005zm12.89 0h4.89V9.48h-4.89V7.201v.005zm6.221-3.556H24v2.276h-4.89v-2.28l.001.004zM0 3.541h11.505v2.274H0V3.541zm12.89 0h4.89v2.274h-4.89V3.541z": "Server Fault", - "M24 12V11.66l-.03-.24a5.48 5.48 0 0 0-4.88-4.89l-.24-.01h-.05l-.27-.01a5.45 5.45 0 0 0-3.88 1.6L12.8 9.97l1.35 1.36 1.35-1.35h-.01l.5-.51a3.55 3.55 0 0 1 2.53-1.05h.2l.16.01a3.58 3.58 0 0 1 3.2 3.19V12.35a3.58 3.58 0 0 1-2 2.84l-.03.02-.1.04-.07.03-.06.03-.11.04h-.03a3.58 3.58 0 0 1-3.69-.84l-.5-.5-3.37-3.36-5.38-5.39-1.35 1.35L0 12l1.35 1.35 5.39 5.39 1.34-1.35 3.37-3.37-1.34-1.35-3.37 3.37L2.7 12l4.04-4.04 2.02 2.02 5.39 5.39.5.5a5.46 5.46 0 0 0 5.65 1.3l.05-.01.16-.07.1-.04.11-.04.16-.07.05-.03a5.47 5.47 0 0 0 3.04-4.35v-.01l.02-.24v-.04V12H24z": "Showpad", - "M17.803 5.24a3.161 3.161 0 0 0-1.647.5c-.245.185-.54.52-.518 1.165.022.32.031.294.112.58.232.433.458.622.826.94.06.047.079.06.133.099.275.258.553.556.79.823.207.256.432.54.604.825.229.392.263.369.546.928.287.645.398 1.392.226 2.068a4.62 4.62 0 0 1-.88 1.646l.347 1.137.303-1.115.463.003.298 1.114.34-1.112h.466l-.554 1.662c.3-.39.528-.74.763-1.197l.409.07c.036-.093.079-.155.145-.183.04-.018.063-.032.19-.032.1-.001.216.016.253.095.013.035.028.064.023.183a3.68 3.68 0 0 1-.436.104c-.302.059-.427.105-.521.192a.44.44 0 0 0-.152.355c0 .11.02.184.07.26.079.122.19.197.344.23.1.022.302.018.393-.008a.86.86 0 0 0 .27-.138l.07-.053.056.173h.482l-.015-.03a1.143 1.143 0 0 1-.075-.22c-.012-.054-.014-.132-.015-.548 0-.401-.003-.497-.014-.552-.022-.112-.04-.16-.102-.216a.46.46 0 0 0-.257-.14 1.74 1.74 0 0 0-.494-.025c-.216.018-.42.11-.49.22 0 .002 0 .002-.002.003.734-1.491 1.002-3.19.274-4.696-.42-.92-1.036-1.522-1.751-2.102.71.009 1.367.094 2.033.02.167-.012.3-.02.455-.056a.624.624 0 0 1 .318-.073c.335-.116.376-.214.379-.292-.021-.181-.335-.323-.487-.393l-.96.202c-.057-.04-.835-.292-.83-.595.003-.122.13-.138.16-.433l.001-.263-.058-.298c-.063-.082-.425-.313-.626-.421-.241-.12-.386-.19-.562-.235a3.181 3.181 0 0 0-1.096-.171zm-6.332.657c-1.667-.01-3.283.509-4.457 1.83-.55.579-1.06 1.274-1.458 1.923.396.083.697.186 1.165.32.438.097.78.378 1.082.488l.09-.048c-1.001-.5-.685-.4-.284-.266.723.654 1.823.52 2.545 1.162l.243.14c.113-.04-.322-.275-.248-.282l.063.004c-.022-.001-.862-.533-.795-.53-.085-.145-.267-.225-.358-.308.227.073.587.375.732.428l.074-.063c.033-.029.005.135.141.165l.1-.165c.017-.026.087.146.131.157.03.008.004-.061.074-.111-.123-.079-.14-.075-.26-.138-.154-.029-.183-.042-.459-.238.29-.024.326.09.46.15.44.126.9.28 1.274.562l.033-.04c.017-.02.546.385.51.35l.065-.083c.012-.015.132.172.142.161l.06-.067c.252.226.276.377.528.551.16.075.54.373.79.528.505.45.711.64-.029.077-.166-.093-.617-.525-.528-.161.166.125.671.372.446.387.008.004.039.076.375.265.143.081.447.298.447.298l.014-.025.176.16c-.012-.012-.127-.013-.188-.022-.282-.22-.27-.194-.296-.193-.211.236.208.156.032.3.154.084.302.212.417.327.012.122.13.19.264.317s.285.315.389.41c.846-.389 1.315-.976 1.551-1.524.295-.756.245-1.02.086-1.586-.178-.557-.711-1.153-1.183-1.527-.25-.223-.495-.368-.878-.655-.69-.751-.954-1.401-1.019-1.966-.076-.516.06-.998.168-1.315-.7-.07-1.452-.15-2.065-.145a7.912 7.912 0 0 0-.162-.002zM5.556 9.65c-.08-.014-.157-.028-.229-.03a.338.338 0 0 0-.252.089c.13.015.26.03.398.074zm-.083.133l-.08.126c.219.023.314.015.515.04.19.05.542.15.71.207.016.013.088-.033.05-.054-.39-.174-.815-.208-1.195-.319zm-.08.126h-.169l.14.045zm-.028.045l-.031.065c.216.031.986.29 1.045.297.043.005.063-.048.025-.065-.134-.052-.317-.096-.508-.154a5.804 5.804 0 0 0-.531-.143zm-.031.065c-.21-.043-.326-.098-.578-.169-.258-.106-1.13-.252-.557.03.042.098-.506-.041-.341-.095-.06.002-.98-.273-.721-.092-.392-.14-.308-.129-.365.069-.2-.123-.331-.165-.466-.166-.08 0-.163.015-.262.037-.348-.063-.124-.019-.166.143.114.124.781.278.922.31.322.069 1.115.315 1.085.254-.282-.164.146.009.267.068.144.088.58.079.55.225a.353.353 0 0 1 .21.077c.123-.215.245-.432.422-.69zm-.528-.254c.067.07.14.053.232.078.066-.006.292-.018.336-.013-.017-.004-.23-.063-.568-.065zm-.408.075c.095.002.427.224.194.138-.243-.065-.326-.128-.21-.135a.034.034 0 0 1 .016-.003zm-2.675.011c-.034-.003-.056.08.119.104.054.008-.078-.093-.12-.104zm.22.07c-.03.021.03.068.363.128.274.05-.301-.129-.362-.128zm2.878.03c.04 0 .237.123.165.115-.236-.028-.255-.116-.165-.115zm-2.507.19c.229.144.31.17.052.134.147.097.48.15.348.306.055.027.201-.006.224.047.023.053.016.063-.101.13-.08.05-.49-.063-.683-.09-.22-.057-.376-.06-.594-.09-.468-.046-.003.087-.672.046-.545-.032-.193.11-.244.122-.1.137-.284-.069-.313-.044-.044.057-.01.187-.287.006L0 10.862c.397-.01.522.146.597-.035.17.013.3.096.354.133.054.037-.134.11-.016.095.101-.112.172.067.24.057.044 0 .12-.082.17-.088.021.006.079.098.13.093.043-.004.129-.07.149-.057.389.066.488.097.556.176.252-.012.55.164.963.209.981.336-.904-.193-1.462-.16-.188.017-.872-.13-.538.058.288.127.482.255.624.159.048-.026.894.356.338.019.12.017.227-.01.326.045.303.163.47.058.565.134.277.156.474.111.698.135.126.022.411.06.476.104.114.023.067.014.212.038l.102-.267c-.671-.075-.693-.112-1.543-.368l.014-.056c.209.068.343.1.52.127l.012-.094c.09.022.47.105.489.091-.215-.094-.2-.044-.163-.114.11-.033.557.165.613.139.156-.005.123.003.162.007.154-.415.171-.38.276-.654a2.276 2.276 0 0 1-.245-.109c-.089.042.196.142-.306-.008-.147-.1-.125-.145-.153-.002-.054-.037-.089-.005-.339-.193-.351-.122-1.261-.338-1.507-.336zm2.274 1.301l-.104.268c.212.02.167.005.303-.01.135-.014.471.118.621.191.088.057.095.074.363.167.147.025.574.242.876.316.036-.01.363.114.526.15.102.04.193.093.28.157.147.061.207.087.38.11.164.071-.018.024.201.117.24.123.358.242.442.267.104-.053.34-.12.38-.13-.172-.04-.438-.242-.817-.388-.623-.15-1.137-.55-1.71-.804l-.419-.113c-.038.003-.043.021-.044.05.394.123.534.162.677.235.182.16.322.185.351.221-.325-.097-.295-.085-.59-.174-.237-.078-.274-.133-.58-.227-.158-.049-.356-.166-.536-.233a2.167 2.167 0 0 0-.6-.17zm-.206.535C3.678 13.9 3.315 14.845 1.76 15.86c-.364.229-.778.4-1.21.427v2.467c1.51.002 3.019.001 4.528.006-.276-2.279 1.124-4.583 3.202-5.505-.38-.288-.39-.202-.451-.172-.248-.181-1.15-.677-1.16-.688-.1-.011-.36-.125-.398-.075-.025.055.13.072.187.084.225.041 1.242.664 1.32.792-.448.025-.81-.41-1.181-.505l.008-.118c-.236-.12-.415-.122-.481-.166-.08.146-1.016-.346-1.17-.341-.23.033-.213-.036-.572-.089zm.938-1.331c-.017 0-.007.01.056.041.053.019.515.205.256.143-.168.117.425.013.244.116-.398-.111.547.306.308.07-.093-.147-.131-.088-.193-.12-.183-.093-.297-.127-.414-.178-.03-.009-.216-.07-.257-.072zm.257.072l-.016-.006.016.006zm-4.575-.052c.13 0 .266.01.313.014.366-.045.425.12.107.088-.03-.002-.108-.073-.233.049-.074-.009-.126-.086-.212-.104.071.1.293.142-.131.088-.258-.114-.06-.137.156-.135zm.741.033c.05-.002.111.017.128.077-.257-.015-.21-.074-.128-.077zm8.753.28l-.003.001c-.122.08.05.232.385.348-.099-.138-.042-.143-.195-.193.067.172-.15-.155-.187-.156zm-5.734.12c-.23.14.486.301.387.255-.042-.173.399.174.217-.043-.26-.058-.11-.103-.203-.096-.158.066-.295-.098-.401-.115zm-2.067.017c.005 0 .01.002.016.005.023.014.052.05.093.072.01.037-.029.04-.069.029-.04-.01-.081-.033-.078-.045.011-.047.023-.062.038-.062zm.845.09c.016 0 .048.025.095.102-.097-.004-.126-.1-.095-.101zm7.412.046c-.084.073.188.295.27.145-.136-.126.054.123-.27-.145zm-3.99.003c-.277.065-.275.007.053.197.3.138-.003.095-.126.012.004.03.25.217.22.19.118.083.454.215.32.042.12-.15-.193-.162-.194-.184a.867.867 0 0 1-.28-.183c-.185.014.119-.06.007-.074zm-.007.074h.004c-.004-.002-.005-.002-.004 0zm.28.183c.028.007.048.003.055-.017-.04.007-.055.013-.055.017zm.28 2.852v.485h-.192v.242h.192l.008 1.018c.008.224.129.388.334.447.17.028.32.013.478-.028l-.004-.264a.733.733 0 0 1-.245.058c-.17-.01-.23-.035-.275-.203l-.005-1.03.53.002v-.242h-.527v-.485zm4.614.436a.7.7 0 0 0-.459.179l-.056.045v-.175h-.293v1.689h.293v-1.259l.064-.047a.9.9 0 0 1 .258-.136.571.571 0 0 1 .236 0c.06.017.11.058.138.113.047.092.05.125.054.754l.004.575h.292l-.003-.625c-.003-.606-.004-.628-.022-.7-.05-.205-.167-.34-.344-.393a.725.725 0 0 0-.162-.02zm11.251.002a.751.751 0 0 0-.306.068.896.896 0 0 0-.228.168l-.034.039v-.237h-.444v1.715h.477l-.003-.893c-.01-.438.226-.504.398-.511.195.006.274.14.28.332-.002.358.001.715.004 1.072H24l-.003-.65c-.003-.591-.005-.656-.018-.71a.462.462 0 0 0-.286-.337.778.778 0 0 0-.313-.056zm-13.111 0a.901.901 0 0 0-.198.02c-.3.082-.498.337-.54.699-.016.131-.006.355.02.468.04.173.1.284.214.399a.524.524 0 0 0 .147.114.794.794 0 0 0 .234.077c.08.013.265.004.345-.015a.678.678 0 0 0 .44-.35c.076-.15.097-.247.103-.475a1.144 1.144 0 0 0-.048-.432.694.694 0 0 0-.717-.505zm3.394.001a.67.67 0 0 0-.477.196.688.688 0 0 0-.176.266c-.073.18-.093.425-.053.662.05.3.21.497.444.56a.845.845 0 0 0 .446-.02c.091-.04.154-.093.225-.148l-.002.135a1.05 1.05 0 0 1-.018.182c-.027.11-.072.184-.163.23a.537.537 0 0 1-.297.055c-.196-.004-.364-.073-.488-.116l-.004.307c.1.024.21.047.295.057.185.023.381.012.514-.03.256-.06.425-.299.448-.67v-1.62h-.266l-.014.07-.077-.042c-.156-.074-.264-.073-.337-.074zm-7.03.003a.79.79 0 0 0-.213.025c-.193.057-.337.192-.38.357a.647.647 0 0 0-.013.137c0 .15.038.247.13.333.09.085.186.118.471.177.202.042.28.078.313.177.02.175.002.215-.107.283a.726.726 0 0 1-.242.042c-.15.014-.372-.071-.554-.218H6.02v.32c.11.056.23.098.355.128.1.026.382.015.452-.008.149-.048.3-.15.358-.261a.453.453 0 0 0 .06-.254c-.001-.257-.122-.39-.418-.459l-.216-.05a.583.583 0 0 1-.23-.095c-.045-.041-.069-.136-.052-.206.015-.06.05-.098.108-.133.177-.108.498-.048.722.13h.023v-.308a1.34 1.34 0 0 0-.337-.105 2.395 2.395 0 0 0-.21-.012zm2.676.042a.678.678 0 0 0-.395.175l-.093.08.001-.253H8.54l.004 1.686.285.002-.004-1.199a.915.915 0 0 1 .251-.162c.148-.053.195-.04.363-.023v-.305h-.13zm.965.204c.051 0 .103.007.154.022.14.044.237.162.283.343.025.1.032.37.013.482-.038.219-.14.361-.296.413a.447.447 0 0 1-.43-.08c-.113-.106-.163-.247-.171-.486-.01-.277.04-.463.155-.578a.421.421 0 0 1 .292-.116zm3.42.008h.042a.802.802 0 0 1 .336.098v.918l-.05.035a.803.803 0 0 1-.24.11.619.619 0 0 1-.28 0c-.118-.038-.19-.122-.232-.276a1.28 1.28 0 0 1-.03-.335c.016-.214.066-.34.174-.442a.374.374 0 0 1 .28-.108zm3.96.105c-1.014.897-1.887 1.096-2.407 1.228.247.696.34 1.51.289 2.245 1.596-.265 3.04-.904 4.076-2.083l-.43-.001-.31-1.098-.299 1.098-.46.001zm3.78.58c.007.002.007.028.004.129-.005.156-.019.204-.078.27a.455.455 0 0 1-.2.114c-.111.028-.212.005-.283-.065-.112-.112-.073-.274.079-.33.045-.017.08-.026.329-.083a3.467 3.467 0 0 0 .149-.035z": "strongSwan" + "M12 1.25l6.75 6.637V2L12 1.25zm0 0l-6.05 7h12.1l-6.05-7zm0 0L5.25 2v5.887L12 1.25zM5.25 2L0 9l4.416-.68L5.25 2zM0 9l11.959 13.703.008-.014L4.443 9H0zm18.75-7l.834 6.32L24 9l-5.25-7zM24 9h-4.506l-7.523 13.69.029.06L24 9zM12 22.75l-.031-.057-.008.012.039.045zM5.436 9l6.533 13.686L18.564 9H5.436Z": "Sketch" } } diff --git a/.svglintrc.js b/.svglintrc.js deleted file mode 100644 index 6d5651447d56..000000000000 --- a/.svglintrc.js +++ /dev/null @@ -1,575 +0,0 @@ -const fs = require('fs'); - -const data = require("./_data/simple-icons.json"); -const { htmlFriendlyToTitle } = require("./scripts/utils.js"); -const svgpath = require("svgpath"); -const svgPathBbox = require("svg-path-bbox"); -const parsePath = require("svg-path-segments"); - -const svgRegexp = /^.*<\/title><path d=".*"\/><\/svg>\r?\n?$/; -const negativeZerosRegexp = /-0(?=[^\.]|[\s\d\w]|$)/g; - -const iconSize = 24; -const iconFloatPrecision = 3; -const iconMaxFloatPrecision = 5; -const iconTolerance = 0.001; - -// set env SI_UPDATE_IGNORE to recreate the ignore file -const updateIgnoreFile = process.env.SI_UPDATE_IGNORE === 'true'; -const ignoreFile = "./.svglint-ignored.json"; -const iconIgnored = !updateIgnoreFile ? require(ignoreFile) : {}; - -function sortObjectByKey(obj) { - return Object - .keys(obj) - .sort() - .reduce((r, k) => Object.assign(r, { [k]: obj[k] }), {}); -} - -function sortObjectByValue(obj) { - return Object - .keys(obj) - .sort((a, b) => ('' + obj[a]).localeCompare(obj[b])) - .reduce((r, k) => Object.assign(r, { [k]: obj[k] }), {}); -} - -function removeLeadingZeros(number) { - // convert 0.03 to '.03' - return number.toString().replace(/^(-?)(0)(\.?.+)/, '$1$3'); -} - -/** - * Given three points, returns if the middle one (x2, y2) is collinear - * to the line formed by the two limit points. - **/ -function collinear(x1, y1, x2, y2, x3, y3) { - return (x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2)) === 0; -} - -/** - * Returns the number of digits after the decimal point. - * @param num The number of interest. - */ -function countDecimals(num) { - if (num && num % 1) { - let [base, op, trail] = num.toExponential().split(/e([+-])/); - let elen = parseInt(trail, 10); - let idx = base.indexOf('.'); - return idx == -1 ? elen : base.length - idx - 1 + (op === '+' ? -elen : elen); - } - return 0; -}; - -/** - * Get the index at which the first path value of an SVG starts. - * @param svgFileContent The raw SVG as text. - */ -function getPathDIndex(svgFileContent) { - const pathDStart = '<path d="'; - return svgFileContent.indexOf(pathDStart) + pathDStart.length; -} - -if (updateIgnoreFile) { - process.on('exit', () => { - // ensure object output order is consistent due to async svglint processing - const sorted = sortObjectByKey(iconIgnored) - for (const linterName in sorted) { - sorted[linterName] = sortObjectByValue(sorted[linterName]) - } - - fs.writeFileSync( - ignoreFile, - JSON.stringify(sorted, null, 2) + '\n', - {flag: 'w'} - ); - }); -} - -function isIgnored(linterName, path) { - return iconIgnored[linterName] && iconIgnored[linterName].hasOwnProperty(path); -} - -function ignoreIcon(linterName, path, $) { - if (!iconIgnored[linterName]) { - iconIgnored[linterName] = {}; - } - - const title = $.find("title").text(); - const iconName = htmlFriendlyToTitle(title); - - iconIgnored[linterName][path] = iconName; -} - -module.exports = { - rules: { - elm: { - "svg": 1, - "svg > title": 1, - "svg > path": 1, - "*": false, - }, - attr: [ - { // ensure that the SVG elm has the appropriate attrs - "role": "img", - "viewBox": `0 0 ${iconSize} ${iconSize}`, - "xmlns": "http://www.w3.org/2000/svg", - "rule::selector": "svg", - "rule::whitelist": true, - }, - { // ensure that the title elm has the appropriate attr - "rule::selector": "svg > title", - "rule::whitelist": true, - }, - { // ensure that the path element only has the 'd' attr (no style, opacity, etc.) - "d": /^[,a-zA-Z0-9\. -]+$/, - "rule::selector": "svg > path", - "rule::whitelist": true, - } - ], - custom: [ - function(reporter, $, ast) { - reporter.name = "icon-title"; - - const iconTitleText = $.find("title").text(); - const iconName = htmlFriendlyToTitle(iconTitleText); - const iconExists = data.icons.some(icon => icon.title === iconName); - if (!iconExists) { - reporter.error(`No icon with title "${iconName}" found in simple-icons.json`); - } - }, - function(reporter, $, ast) { - reporter.name = "icon-size"; - - const iconPath = $.find("path").attr("d"); - if (!updateIgnoreFile && isIgnored(reporter.name, iconPath)) { - return; - } - - const [minX, minY, maxX, maxY] = svgPathBbox(iconPath); - const width = +(maxX - minX).toFixed(iconFloatPrecision); - const height = +(maxY - minY).toFixed(iconFloatPrecision); - - if (width === 0 && height === 0) { - reporter.error("Path bounds were reported as 0 x 0; check if the path is valid"); - if (updateIgnoreFile) { - ignoreIcon(reporter.name, iconPath, $); - } - } else if (width !== iconSize && height !== iconSize) { - reporter.error(`Size of <path> must be exactly ${iconSize} in one dimension; the size is currently ${width} x ${height}`); - if (updateIgnoreFile) { - ignoreIcon(reporter.name, iconPath, $); - } - } - }, - function(reporter, $, ast) { - reporter.name = "icon-precision"; - - const iconPath = $.find("path").attr("d"); - if (!updateIgnoreFile && isIgnored(reporter.name, iconPath)) { - return; - } - - const segments = parsePath(iconPath), - svgFileContent = $.html(); - - segments.forEach((segment) => { - const precisionMax = Math.max(...segment.params.slice(1).map(countDecimals)); - if (precisionMax > iconMaxFloatPrecision) { - let errorMsg = `found ${precisionMax} decimals in segment "${iconPath.substring(segment.start, segment.end)}"`; - if (segment.chained) { - let readableChain = iconPath.substring(segment.chainStart, segment.chainEnd); - if (readableChain.length > 20) { - readableChain = `${readableChain.substring(0, 20)}...`; - } - errorMsg += ` of chain "${readableChain}"` - } - errorMsg += ` at index ${segment.start + getPathDIndex(svgFileContent)}`; - reporter.error(`Maximum precision should not be greater than ${iconMaxFloatPrecision}; ${errorMsg}`); - if (updateIgnoreFile) { - ignoreIcon(reporter.name, iconPath, $); - } - } - }) - }, - function(reporter, $, ast) { - reporter.name = "ineffective-segments"; - - const iconPath = $.find("path").attr("d"); - if (!updateIgnoreFile && isIgnored(reporter.name, iconPath)) { - return; - } - - const segments = parsePath(iconPath); - const absSegments = svgpath(iconPath).abs().unshort().segments; - - const lowerMovementCommands = ['m', 'l']; - const lowerDirectionCommands = ['h', 'v']; - const lowerCurveCommand = 'c'; - const lowerShorthandCurveCommand = 's'; - const lowerCurveCommands = [lowerCurveCommand, lowerShorthandCurveCommand]; - const upperMovementCommands = ['M', 'L']; - const upperHorDirectionCommand = 'H'; - const upperVerDirectionCommand = 'V'; - const upperDirectionCommands = [upperHorDirectionCommand, upperVerDirectionCommand]; - const upperCurveCommand = 'C'; - const upperShorthandCurveCommand = 'S'; - const upperCurveCommands = [upperCurveCommand, upperShorthandCurveCommand]; - const curveCommands = [...lowerCurveCommands, ...upperCurveCommands]; - const commands = [...lowerMovementCommands, ...lowerDirectionCommands, ...upperMovementCommands, ...upperDirectionCommands, ...curveCommands]; - const isInvalidSegment = ([command, x1Coord, y1Coord, ...rest], index) => { - if (commands.includes(command)) { - // Relative directions (h or v) having a length of 0 - if (lowerDirectionCommands.includes(command) && x1Coord === 0) { - return true; - } - // Relative movement (m or l) having a distance of 0 - if (index > 0 && lowerMovementCommands.includes(command) && x1Coord === 0 && y1Coord === 0) { - return true; - } - if (lowerCurveCommands.includes(command) && x1Coord === 0 && y1Coord === 0) { - const [x2Coord, y2Coord] = rest; - if ( - // Relative shorthand curve (s) having a control point of 0 - command === lowerShorthandCurveCommand || - // Relative bézier curve (c) having control points of 0 - (command === lowerCurveCommand && x2Coord === 0 && y2Coord === 0) - ) { - return true; - } - } - if (index > 0) { - let [yPrevCoord, xPrevCoord] = [...absSegments[index - 1]].reverse(); - // If the previous command was a direction one, we need to iterate back until we find the missing coordinates - if (upperDirectionCommands.includes(xPrevCoord)) { - xPrevCoord = undefined; - yPrevCoord = undefined; - let idx = index; - while (--idx > 0 && (xPrevCoord === undefined || yPrevCoord === undefined)) { - let [yPrevCoordDeep, xPrevCoordDeep] = [...absSegments[idx]].reverse(); - // If the previous command was a horizontal movement, we need to consider the single coordinate as x - if (upperHorDirectionCommand === xPrevCoordDeep) { - xPrevCoordDeep = yPrevCoordDeep; - yPrevCoordDeep = undefined; - } - // If the previous command was a vertical movement, we need to consider the single coordinate as y - if (upperVerDirectionCommand === xPrevCoordDeep) { - xPrevCoordDeep = undefined; - } - if (xPrevCoord === undefined && xPrevCoordDeep !== undefined) { - xPrevCoord = xPrevCoordDeep; - } - if (yPrevCoord === undefined && yPrevCoordDeep !== undefined) { - yPrevCoord = yPrevCoordDeep; - } - } - } - - if (upperCurveCommands.includes(command)) { - const [x2Coord, y2Coord, xCoord, yCoord] = rest; - // Absolute shorthand curve (S) having the same coordinate as the previous segment and a control point equal to the ending point - if (upperShorthandCurveCommand === command && x1Coord === xPrevCoord && y1Coord === yPrevCoord && x1Coord === x2Coord && y1Coord === y2Coord) { - return true; - } - // Absolute bézier curve (C) having the same coordinate as the previous segment and last control point equal to the ending point - if (upperCurveCommand === command && x1Coord === xPrevCoord && y1Coord === yPrevCoord && x2Coord === xCoord && y2Coord === yCoord) { - return true; - } - } - - return ( - // Absolute horizontal direction (H) having the same x coordinate as the previous segment - (upperHorDirectionCommand === command && x1Coord === xPrevCoord) || - // Absolute vertical direction (V) having the same y coordinate as the previous segment - (upperVerDirectionCommand === command && x1Coord === yPrevCoord) || - // Absolute movement (M or L) having the same coordinate as the previous segment - (upperMovementCommands.includes(command) && x1Coord === xPrevCoord && y1Coord === yPrevCoord) - ); - } - } - }; - - const svgFileContent = $.html(); - - segments.forEach((segment, index) => { - if (isInvalidSegment(segment.params, index)) { - const [command, x1, y1, ...rest] = segment.params; - - let errorMsg = `Innefective segment "${iconPath.substring(segment.start, segment.end)}" found`, - resolutionTip = 'should be removed'; - - if (curveCommands.includes(command)) { - const [x2, y2, x, y] = rest; - - if (command === lowerShorthandCurveCommand && (x2 !== 0 || y2 !== 0)) { - resolutionTip = `should be "l${removeLeadingZeros(x2)} ${removeLeadingZeros(y2)}" or removed`; - } - if (command === upperShorthandCurveCommand) { - resolutionTip = `should be "L${removeLeadingZeros(x2)} ${removeLeadingZeros(y2)}" or removed`; - } - if (command === lowerCurveCommand && (x !== 0 || y !== 0)) { - resolutionTip = `should be "l${removeLeadingZeros(x)} ${removeLeadingZeros(y)}" or removed`; - } - if (command === upperCurveCommand) { - resolutionTip = `should be "L${removeLeadingZeros(x)} ${removeLeadingZeros(y)}" or removed`; - } - }; - - if (segment.chained) { - let readableChain = iconPath.substring(segment.chainStart, segment.chainEnd); - if (readableChain.length > 20) { - readableChain = `${chain.substring(0, 20)}...` - } - errorMsg += ` in chain "${readableChain}"` - } - errorMsg += ` at index ${segment.start + getPathDIndex(svgFileContent)}`; - - reporter.error(`${errorMsg} (${resolutionTip})`); - - if (updateIgnoreFile) { - ignoreIcon(reporter.name, iconPath, $); - } - } - }) - }, - function(reporter, $, ast) { - reporter.name = "collinear-segments"; - - const iconPath = $.find("path").attr("d"); - if (!updateIgnoreFile && isIgnored(reporter.name, iconPath)) { - return; - } - - /** - * Extracts collinear coordinates from SVG path straight lines - * (does not extracts collinear coordinates from curves). - **/ - const getCollinearSegments = (iconPath) => { - const segments = parsePath(iconPath), - collinearSegments = [], - straightLineCommands = 'HhVvLlMm', - zCommands = 'Zz'; - - let currLine = [], - currAbsCoord = [undefined, undefined], - startPoint, - _inStraightLine = false, - _nextInStraightLine = false, - _resetStartPoint = false; - - for (let s = 0; s < segments.length; s++) { - let seg = segments[s].params, - cmd = seg[0], - nextCmd = s + 1 < segments.length ? segments[s + 1][0] : null; - - if (cmd === 'L') { - currAbsCoord[0] = seg[1]; - currAbsCoord[1] = seg[2]; - } else if (cmd === 'l') { - currAbsCoord[0] = (!currAbsCoord[0] ? 0 : currAbsCoord[0]) + seg[1]; - currAbsCoord[1] = (!currAbsCoord[1] ? 0 : currAbsCoord[1]) + seg[2]; - } else if (cmd === 'm') { - currAbsCoord[0] = (!currAbsCoord[0] ? 0 : currAbsCoord[0]) + seg[1]; - currAbsCoord[1] = (!currAbsCoord[1] ? 0 : currAbsCoord[1]) + seg[2]; - startPoint = undefined; - } else if (cmd === 'M') { - currAbsCoord[0] = seg[1]; - currAbsCoord[1] = seg[2]; - startPoint = undefined; - } else if (cmd === 'H') { - currAbsCoord[0] = seg[1]; - } else if (cmd === 'h') { - currAbsCoord[0] = (!currAbsCoord[0] ? 0 : currAbsCoord[0]) + seg[1]; - } else if (cmd === 'V') { - currAbsCoord[1] = seg[1]; - } else if (cmd === 'v') { - currAbsCoord[1] = (!currAbsCoord[1] ? 0 : currAbsCoord[1]) + seg[1]; - } else if (cmd === 'C') { - currAbsCoord[0] = seg[5]; - currAbsCoord[1] = seg[6]; - } else if (cmd === "a") { - currAbsCoord[0] = (!currAbsCoord[0] ? 0 : currAbsCoord[0]) + seg[6]; - currAbsCoord[1] = (!currAbsCoord[1] ? 0 : currAbsCoord[1]) + seg[7]; - } else if (cmd === "A") { - currAbsCoord[0] = seg[6]; - currAbsCoord[1] = seg[7]; - } else if (cmd === "s") { - currAbsCoord[0] = (!currAbsCoord[0] ? 0 : currAbsCoord[0]) + seg[1]; - currAbsCoord[1] = (!currAbsCoord[1] ? 0 : currAbsCoord[1]) + seg[2]; - } else if (cmd === "S") { - currAbsCoord[0] = seg[1]; - currAbsCoord[1] = seg[2]; - } else if (cmd === "t") { - currAbsCoord[0] = (!currAbsCoord[0] ? 0 : currAbsCoord[0]) + seg[1]; - currAbsCoord[1] = (!currAbsCoord[1] ? 0 : currAbsCoord[1]) + seg[2]; - } else if (cmd === "T") { - currAbsCoord[0] = seg[1]; - currAbsCoord[1] = seg[2]; - } else if (cmd === 'c') { - currAbsCoord[0] = (!currAbsCoord[0] ? 0 : currAbsCoord[0]) + seg[5]; - currAbsCoord[1] = (!currAbsCoord[1] ? 0 : currAbsCoord[1]) + seg[6]; - } else if (cmd === 'Q') { - currAbsCoord[0] = seg[3]; - currAbsCoord[1] = seg[4]; - } else if (cmd === 'q') { - currAbsCoord[0] = (!currAbsCoord[0] ? 0 : currAbsCoord[0]) + seg[3]; - currAbsCoord[1] = (!currAbsCoord[1] ? 0 : currAbsCoord[1]) + seg[4]; - } else if (zCommands.includes(cmd)) { - // Overlapping in Z should be handled in another rule - currAbsCoord = [startPoint[0], startPoint[1]]; - _resetStartPoint = true; - } else { - throw new Error(`"${cmd}" command not handled`); - } - - if (startPoint === undefined) { - startPoint = [currAbsCoord[0], currAbsCoord[1]]; - } else if (_resetStartPoint) { - startPoint = undefined; - _resetStartPoint = false; - } - - _nextInStraightLine = straightLineCommands.includes(nextCmd); - let _exitingStraightLine = (_inStraightLine && !_nextInStraightLine); - _inStraightLine = straightLineCommands.includes(cmd); - - if (_inStraightLine) { - currLine.push([currAbsCoord[0], currAbsCoord[1]]); - } else { - if (_exitingStraightLine) { - if (straightLineCommands.includes(cmd)) { - currLine.push([currAbsCoord[0], currAbsCoord[1]]); - } - // Get collinear coordinates - for (let p = 1; p < currLine.length - 1; p++) { - let _collinearCoord = collinear(currLine[p - 1][0], - currLine[p - 1][1], - currLine[p][0], - currLine[p][1], - currLine[p + 1][0], - currLine[p + 1][1]); - if (_collinearCoord) { - collinearSegments.push( - segments[s - currLine.length + p + 1] - ); - } - } - } - currLine = []; - } - } - - return collinearSegments; - } - - const collinearSegments = getCollinearSegments(iconPath), - pathDIndex = getPathDIndex($.html()); - collinearSegments.forEach((segment) => { - let errorMsg = `Collinear segment "${iconPath.substring(segment.start, segment.end)}" found` - if (segment.chained) { - let readableChain = iconPath.substring(segment.chainStart, segment.chainEnd); - if (readableChain.length > 20) { - readableChain = `${readableChain.substring(0, 20)}...` - } - errorMsg += ` in chain "${readableChain}"`; - } - errorMsg += ` at index ${segment.start + pathDIndex} (should be removed)`; - reporter.error(errorMsg); - }); - - if (collinearSegments.length) { - if (updateIgnoreFile) { - ignoreIcon(reporter.name, iconPath, $); - } - } - }, - function(reporter, $, ast) { - reporter.name = "extraneous"; - - if (!svgRegexp.test($.html())) { - reporter.error("Unexpected character(s), most likely extraneous whitespace, detected in SVG markup"); - } - }, - function(reporter, $, ast) { - reporter.name = "negative-zeros"; - - const iconPath = $.find("path").attr("d"); - if (!updateIgnoreFile && isIgnored(reporter.name, iconPath)) { - return; - } - - // Find negative zeros inside path - const negativeZeroMatches = Array.from(iconPath.matchAll(negativeZerosRegexp)); - if (negativeZeroMatches.length) { - // Calculate the index for each match in the file - const svgFileContent = $.html(); - const pathDIndex = getPathDIndex(svgFileContent); - - negativeZeroMatches.forEach((match) => { - const negativeZeroFileIndex = match.index + pathDIndex; - const previousChar = svgFileContent[negativeZeroFileIndex - 1]; - const replacement = "0123456789".includes(previousChar) ? " 0" : "0"; - reporter.error(`Found "-0" at index ${negativeZeroFileIndex} (should be "${replacement}")`); - }) - } - }, - function(reporter, $, ast) { - reporter.name = "icon-centered"; - - const iconPath = $.find("path").attr("d"); - if (!updateIgnoreFile && isIgnored(reporter.name, iconPath)) { - return; - } - - const [minX, minY, maxX, maxY] = svgPathBbox(iconPath); - const targetCenter = iconSize / 2; - const centerX = +((minX + maxX) / 2).toFixed(iconFloatPrecision); - const devianceX = centerX - targetCenter; - const centerY = +((minY + maxY) / 2).toFixed(iconFloatPrecision); - const devianceY = centerY - targetCenter; - - if ( - Math.abs(devianceX) > iconTolerance || - Math.abs(devianceY) > iconTolerance - ) { - reporter.error(`<path> must be centered at (${targetCenter}, ${targetCenter}); the center is currently (${centerX}, ${centerY})`); - if (updateIgnoreFile) { - ignoreIcon(reporter.name, iconPath, $); - } - } - }, - function(reporter, $, ast) { - reporter.name = "path-format"; - - const iconPath = $.find("path").attr("d"); - - const validPathFormatRegex = /^[Mm][MmZzLlHhVvCcSsQqTtAaEe0-9-,.\s]+$/; - if (!validPathFormatRegex.test(iconPath)) { - let errorMsg = "Invalid path format", reason; - - if (!(/^[Mm]/.test(iconPath))) { - // doesn't start with moveto - reason = `should start with \"moveto\" command (\"M\" or \"m\"), but starts with \"${iconPath[0]}\"`; - reporter.error(`${errorMsg}: ${reason}`); - } - - const validPathCharacters = "MmZzLlHhVvCcSsQqTtAaEe0123456789-,. ", - invalidCharactersMsgs = [], - pathDIndex = getPathDIndex($.html()); - - for (let [i, char] of Object.entries(iconPath)) { - if (validPathCharacters.indexOf(char) === -1) { - invalidCharactersMsgs.push(`"${char}" at index ${pathDIndex + parseInt(i)}`); - } - } - - // contains invalid characters - if (invalidCharactersMsgs.length > 0) { - reason = `unexpected character${invalidCharactersMsgs.length > 1 ? 's' : ''} found`; - reason += ` (${invalidCharactersMsgs.join(", ")})`; - reporter.error(`${errorMsg}: ${reason}`); - } - } - } - ] - } -}; diff --git a/.svglintrc.mjs b/.svglintrc.mjs new file mode 100644 index 000000000000..85fbd6cc569e --- /dev/null +++ b/.svglintrc.mjs @@ -0,0 +1,922 @@ +import fs from 'node:fs'; +import path from 'node:path'; +import { + getDirnameFromImportMeta, + htmlFriendlyToTitle, +} from './scripts/utils.js'; +import svgpath from 'svgpath'; +import svgPathBbox from 'svg-path-bbox'; +import parsePath from 'svg-path-segments'; + +const __dirname = getDirnameFromImportMeta(import.meta.url); +const dataFile = path.join(__dirname, '_data', 'simple-icons.json'); +const htmlNamedEntitiesFile = path.join( + __dirname, + 'node_modules', + 'named-html-entities-json', + 'index.json', +); +const svglintIgnoredFile = path.join(__dirname, '.svglint-ignored.json'); + +const data = JSON.parse(fs.readFileSync(dataFile, 'utf8')); +const htmlNamedEntities = JSON.parse( + fs.readFileSync(htmlNamedEntitiesFile, 'utf8'), +); +const svglintIgnores = JSON.parse(fs.readFileSync(svglintIgnoredFile, 'utf8')); + +const svgRegexp = + /^<svg( [^\s]*=".*"){3}><title>.*<\/title><path d=".*"\/><\/svg>$/; +const negativeZerosRegexp = /-0(?=[^\.]|[\s\d\w]|$)/g; + +const iconSize = 24; +const iconFloatPrecision = 3; +const iconMaxFloatPrecision = 5; +const iconTolerance = 0.001; + +// set env SI_UPDATE_IGNORE to recreate the ignore file +const updateIgnoreFile = process.env.SI_UPDATE_IGNORE === 'true'; +const ignoreFile = './.svglint-ignored.json'; +const iconIgnored = !updateIgnoreFile ? svglintIgnores : {}; + +const sortObjectByKey = (obj) => { + return Object.keys(obj) + .sort() + .reduce((r, k) => Object.assign(r, { [k]: obj[k] }), {}); +}; + +const sortObjectByValue = (obj) => { + return Object.keys(obj) + .sort((a, b) => ('' + obj[a]).localeCompare(obj[b])) + .reduce((r, k) => Object.assign(r, { [k]: obj[k] }), {}); +}; + +const removeLeadingZeros = (number) => { + // convert 0.03 to '.03' + return number.toString().replace(/^(-?)(0)(\.?.+)/, '$1$3'); +}; + +/** + * Given three points, returns if the middle one (x2, y2) is collinear + * to the line formed by the two limit points. + **/ +const collinear = (x1, y1, x2, y2, x3, y3) => { + return x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2) === 0; +}; + +/** + * Returns the number of digits after the decimal point. + * @param num The number of interest. + */ +const countDecimals = (num) => { + if (num && num % 1) { + let [base, op, trail] = num.toExponential().split(/e([+-])/); + let elen = parseInt(trail, 10); + let idx = base.indexOf('.'); + return idx == -1 + ? elen + : base.length - idx - 1 + (op === '+' ? -elen : elen); + } + return 0; +}; + +/** + * Get the index at which the first path value of an SVG starts. + * @param svgFileContent The raw SVG as text. + */ +const getPathDIndex = (svgFileContent) => { + const pathDStart = '<path d="'; + return svgFileContent.indexOf(pathDStart) + pathDStart.length; +}; + +/** + * Get the index at which the text of the first `<title>` tag starts. + * @param svgFileContent The raw SVG as text. + **/ +const getTitleTextIndex = (svgFileContent) => { + const titleStart = ''; + return svgFileContent.indexOf(titleStart) + titleStart.length; +}; + +/** + * Convert a hexadecimal number passed as string to decimal number as integer. + * @param hex The hexadecimal number representation to convert. + **/ +const hexadecimalToDecimal = (hex) => { + let result = 0, + digitValue; + hex = hex.toLowerCase(); + for (var i = 0; i < hex.length; i++) { + digitValue = '0123456789abcdefgh'.indexOf(hex[i]); + result = result * 16 + digitValue; + } + return result; +}; + +if (updateIgnoreFile) { + process.on('exit', () => { + // ensure object output order is consistent due to async svglint processing + const sorted = sortObjectByKey(iconIgnored); + for (const linterName in sorted) { + sorted[linterName] = sortObjectByValue(sorted[linterName]); + } + + fs.writeFileSync(ignoreFile, JSON.stringify(sorted, null, 2) + '\n', { + flag: 'w', + }); + }); +} + +const isIgnored = (linterName, path) => { + return ( + iconIgnored[linterName] && iconIgnored[linterName].hasOwnProperty(path) + ); +}; + +const ignoreIcon = (linterName, path, $) => { + if (!iconIgnored[linterName]) { + iconIgnored[linterName] = {}; + } + + const title = $.find('title').text(); + const iconName = htmlFriendlyToTitle(title); + + iconIgnored[linterName][path] = iconName; +}; + +export default { + rules: { + elm: { + svg: 1, + 'svg > title': 1, + 'svg > path': 1, + '*': false, + }, + attr: [ + { + // ensure that the SVG elm has the appropriate attrs alphabetically ordered + role: 'img', + viewBox: `0 0 ${iconSize} ${iconSize}`, + xmlns: 'http://www.w3.org/2000/svg', + 'rule::selector': 'svg', + 'rule::whitelist': true, + 'rule::order': true, + }, + { + // ensure that the title elm has the appropriate attr + 'rule::selector': 'svg > title', + 'rule::whitelist': true, + }, + { + // ensure that the path element only has the 'd' attr (no style, opacity, etc.) + d: /^[,a-zA-Z0-9\. -]+$/, + 'rule::selector': 'svg > path', + 'rule::whitelist': true, + }, + ], + custom: [ + (reporter, $, ast) => { + reporter.name = 'icon-title'; + + const iconTitleText = $.find('title').text(), + xmlNamedEntitiesCodepoints = [38, 60, 62], + xmlNamedEntities = ['amp', 'lt', 'gt']; + let _validCodepointsRepr = true; + + // avoid character codepoints as hexadecimal representation + const hexadecimalCodepoints = Array.from( + iconTitleText.matchAll(/&#x([A-Fa-f0-9]+);/g), + ); + if (hexadecimalCodepoints.length > 0) { + _validCodepointsRepr = false; + + hexadecimalCodepoints.forEach((match) => { + const charHexReprIndex = + getTitleTextIndex(ast.source) + match.index + 1; + const charDec = hexadecimalToDecimal(match[1]); + + let charRepr; + if (xmlNamedEntitiesCodepoints.includes(charDec)) { + charRepr = `&${ + xmlNamedEntities[xmlNamedEntitiesCodepoints.indexOf(charDec)] + };`; + } else if (charDec < 128) { + charRepr = String.fromCodePoint(charDec); + } else { + charRepr = `&#${charDec};`; + } + + reporter.error( + `Hexadecimal representation of encoded character "${match[0]}" found at index ${charHexReprIndex}:` + + ` replace it with "${charRepr}".`, + ); + }); + } + + // avoid character codepoints as named entities + const namedEntitiesCodepoints = Array.from( + iconTitleText.matchAll(/&([A-Za-z0-9]+);/g), + ); + if (namedEntitiesCodepoints.length > 0) { + namedEntitiesCodepoints.forEach((match) => { + const namedEntiyReprIndex = + getTitleTextIndex(ast.source) + match.index + 1; + + if (!xmlNamedEntities.includes(match[1].toLowerCase())) { + _validCodepointsRepr = false; + const namedEntityJsRepr = htmlNamedEntities[match[1]]; + let replacement; + + if ( + namedEntityJsRepr === undefined || + namedEntityJsRepr.length != 1 + ) { + replacement = 'its decimal or literal representation'; + } else { + const namedEntityDec = namedEntityJsRepr.codePointAt(0); + if (namedEntityDec < 128) { + replacement = `"${namedEntityJsRepr}"`; + } else { + replacement = `"&#${namedEntityDec};"`; + } + } + + reporter.error( + `Named entity representation of encoded character "${match[0]}" found at index ${namedEntiyReprIndex}.` + + ` Replace it with ${replacement}.`, + ); + } + }); + } + + if (_validCodepointsRepr) { + // compare encoded title with original title and report error if not equal + const encodingMatches = Array.from( + iconTitleText.matchAll(/&(#([0-9]+)|(amp|quot|lt|gt));/g), + ), + encodedBuf = []; + + const _indexesToIgnore = []; + for (let m = 0; m < encodingMatches.length; m++) { + let index = encodingMatches[m].index; + for (let r = index; r < index + encodingMatches[m][0].length; r++) { + _indexesToIgnore.push(r); + } + } + + for (let i = iconTitleText.length - 1; i >= 0; i--) { + if (_indexesToIgnore.includes(i)) { + encodedBuf.unshift(iconTitleText[i]); + } else { + // encode all non ascii characters plus "'&<> (XML named entities) + let charDecimalCode = iconTitleText.charCodeAt(i); + + if (charDecimalCode > 127) { + encodedBuf.unshift(`&#${charDecimalCode};`); + } else if (xmlNamedEntitiesCodepoints.includes(charDecimalCode)) { + encodedBuf.unshift( + `&${ + xmlNamedEntities[ + xmlNamedEntitiesCodepoints.indexOf(charDecimalCode) + ] + };`, + ); + } else { + encodedBuf.unshift(iconTitleText[i]); + } + } + } + const encodedIconTitleText = encodedBuf.join(''); + if (encodedIconTitleText !== iconTitleText) { + _validCodepointsRepr = false; + + reporter.error( + `Unencoded unicode characters found in title "${iconTitleText}":` + + ` rewrite it as "${encodedIconTitleText}".`, + ); + } + + // check if there are some other encoded characters in decimal notation + // which shouldn't be encoded + encodingMatches + .filter((m) => !isNaN(m[2])) + .forEach((match) => { + const decimalNumber = parseInt(match[2]); + if (decimalNumber < 128) { + _validCodepointsRepr = false; + + const decimalCodepointCharIndex = + getTitleTextIndex(ast.source) + match.index + 1; + if (xmlNamedEntitiesCodepoints.includes(decimalNumber)) { + replacement = `"&${ + xmlNamedEntities[ + xmlNamedEntitiesCodepoints.indexOf(decimalNumber) + ] + };"`; + } else { + replacement = String.fromCharCode(decimalNumber); + replacement = replacement == '"' ? `'"'` : `"${replacement}"`; + } + + reporter.error( + `Unnecessary encoded character "${match[0]}" found at index ${decimalCodepointCharIndex}:` + + ` replace it with ${replacement}.`, + ); + } + }); + + if (_validCodepointsRepr) { + const iconName = htmlFriendlyToTitle(iconTitleText); + const iconExists = data.icons.some( + (icon) => icon.title === iconName, + ); + if (!iconExists) { + reporter.error( + `No icon with title "${iconName}" found in simple-icons.json`, + ); + } + } + } + }, + (reporter, $, ast) => { + reporter.name = 'icon-size'; + + const iconPath = $.find('path').attr('d'); + if (!updateIgnoreFile && isIgnored(reporter.name, iconPath)) { + return; + } + + const [minX, minY, maxX, maxY] = svgPathBbox(iconPath); + const width = +(maxX - minX).toFixed(iconFloatPrecision); + const height = +(maxY - minY).toFixed(iconFloatPrecision); + + if (width === 0 && height === 0) { + reporter.error( + 'Path bounds were reported as 0 x 0; check if the path is valid', + ); + if (updateIgnoreFile) { + ignoreIcon(reporter.name, iconPath, $); + } + } else if (width !== iconSize && height !== iconSize) { + reporter.error( + `Size of <path> must be exactly ${iconSize} in one dimension; the size is currently ${width} x ${height}`, + ); + if (updateIgnoreFile) { + ignoreIcon(reporter.name, iconPath, $); + } + } + }, + (reporter, $, ast) => { + reporter.name = 'icon-precision'; + + const iconPath = $.find('path').attr('d'); + if (!updateIgnoreFile && isIgnored(reporter.name, iconPath)) { + return; + } + + const segments = parsePath(iconPath), + svgFileContent = $.html(); + + segments.forEach((segment) => { + const precisionMax = Math.max( + ...segment.params.slice(1).map(countDecimals), + ); + if (precisionMax > iconMaxFloatPrecision) { + let errorMsg = `found ${precisionMax} decimals in segment "${iconPath.substring( + segment.start, + segment.end, + )}"`; + if (segment.chained) { + let readableChain = iconPath.substring( + segment.chainStart, + segment.chainEnd, + ); + if (readableChain.length > 20) { + readableChain = `${readableChain.substring(0, 20)}...`; + } + errorMsg += ` of chain "${readableChain}"`; + } + errorMsg += ` at index ${ + segment.start + getPathDIndex(svgFileContent) + }`; + reporter.error( + `Maximum precision should not be greater than ${iconMaxFloatPrecision}; ${errorMsg}`, + ); + if (updateIgnoreFile) { + ignoreIcon(reporter.name, iconPath, $); + } + } + }); + }, + (reporter, $, ast) => { + reporter.name = 'ineffective-segments'; + + const iconPath = $.find('path').attr('d'); + if (!updateIgnoreFile && isIgnored(reporter.name, iconPath)) { + return; + } + + const segments = parsePath(iconPath); + const absSegments = svgpath(iconPath).abs().unshort().segments; + + const lowerMovementCommands = ['m', 'l']; + const lowerDirectionCommands = ['h', 'v']; + const lowerCurveCommand = 'c'; + const lowerShorthandCurveCommand = 's'; + const lowerCurveCommands = [ + lowerCurveCommand, + lowerShorthandCurveCommand, + ]; + const upperMovementCommands = ['M', 'L']; + const upperHorDirectionCommand = 'H'; + const upperVerDirectionCommand = 'V'; + const upperDirectionCommands = [ + upperHorDirectionCommand, + upperVerDirectionCommand, + ]; + const upperCurveCommand = 'C'; + const upperShorthandCurveCommand = 'S'; + const upperCurveCommands = [ + upperCurveCommand, + upperShorthandCurveCommand, + ]; + const curveCommands = [...lowerCurveCommands, ...upperCurveCommands]; + const commands = [ + ...lowerMovementCommands, + ...lowerDirectionCommands, + ...upperMovementCommands, + ...upperDirectionCommands, + ...curveCommands, + ]; + const isInvalidSegment = ( + [command, x1Coord, y1Coord, ...rest], + index, + ) => { + if (commands.includes(command)) { + // Relative directions (h or v) having a length of 0 + if (lowerDirectionCommands.includes(command) && x1Coord === 0) { + return true; + } + // Relative movement (m or l) having a distance of 0 + if ( + index > 0 && + lowerMovementCommands.includes(command) && + x1Coord === 0 && + y1Coord === 0 + ) { + return true; + } + if ( + lowerCurveCommands.includes(command) && + x1Coord === 0 && + y1Coord === 0 + ) { + const [x2Coord, y2Coord] = rest; + if ( + // Relative shorthand curve (s) having a control point of 0 + command === lowerShorthandCurveCommand || + // Relative bézier curve (c) having control points of 0 + (command === lowerCurveCommand && + x2Coord === 0 && + y2Coord === 0) + ) { + return true; + } + } + if (index > 0) { + let [yPrevCoord, xPrevCoord] = [ + ...absSegments[index - 1], + ].reverse(); + // If the previous command was a direction one, we need to iterate back until we find the missing coordinates + if (upperDirectionCommands.includes(xPrevCoord)) { + xPrevCoord = undefined; + yPrevCoord = undefined; + let idx = index; + while ( + --idx > 0 && + (xPrevCoord === undefined || yPrevCoord === undefined) + ) { + let [yPrevCoordDeep, xPrevCoordDeep] = [ + ...absSegments[idx], + ].reverse(); + // If the previous command was a horizontal movement, we need to consider the single coordinate as x + if (upperHorDirectionCommand === xPrevCoordDeep) { + xPrevCoordDeep = yPrevCoordDeep; + yPrevCoordDeep = undefined; + } + // If the previous command was a vertical movement, we need to consider the single coordinate as y + if (upperVerDirectionCommand === xPrevCoordDeep) { + xPrevCoordDeep = undefined; + } + if ( + xPrevCoord === undefined && + xPrevCoordDeep !== undefined + ) { + xPrevCoord = xPrevCoordDeep; + } + if ( + yPrevCoord === undefined && + yPrevCoordDeep !== undefined + ) { + yPrevCoord = yPrevCoordDeep; + } + } + } + + if (upperCurveCommands.includes(command)) { + const [x2Coord, y2Coord, xCoord, yCoord] = rest; + // Absolute shorthand curve (S) having the same coordinate as the previous segment and a control point equal to the ending point + if ( + upperShorthandCurveCommand === command && + x1Coord === xPrevCoord && + y1Coord === yPrevCoord && + x1Coord === x2Coord && + y1Coord === y2Coord + ) { + return true; + } + // Absolute bézier curve (C) having the same coordinate as the previous segment and last control point equal to the ending point + if ( + upperCurveCommand === command && + x1Coord === xPrevCoord && + y1Coord === yPrevCoord && + x2Coord === xCoord && + y2Coord === yCoord + ) { + return true; + } + } + + return ( + // Absolute horizontal direction (H) having the same x coordinate as the previous segment + (upperHorDirectionCommand === command && + x1Coord === xPrevCoord) || + // Absolute vertical direction (V) having the same y coordinate as the previous segment + (upperVerDirectionCommand === command && + x1Coord === yPrevCoord) || + // Absolute movement (M or L) having the same coordinate as the previous segment + (upperMovementCommands.includes(command) && + x1Coord === xPrevCoord && + y1Coord === yPrevCoord) + ); + } + } + }; + + const svgFileContent = $.html(); + + segments.forEach((segment, index) => { + if (isInvalidSegment(segment.params, index)) { + const [command, x1, y1, ...rest] = segment.params; + + let errorMsg = `Innefective segment "${iconPath.substring( + segment.start, + segment.end, + )}" found`, + resolutionTip = 'should be removed'; + + if (curveCommands.includes(command)) { + const [x2, y2, x, y] = rest; + + if ( + command === lowerShorthandCurveCommand && + (x2 !== 0 || y2 !== 0) + ) { + resolutionTip = `should be "l${removeLeadingZeros( + x2, + )} ${removeLeadingZeros(y2)}" or removed`; + } + if (command === upperShorthandCurveCommand) { + resolutionTip = `should be "L${removeLeadingZeros( + x2, + )} ${removeLeadingZeros(y2)}" or removed`; + } + if (command === lowerCurveCommand && (x !== 0 || y !== 0)) { + resolutionTip = `should be "l${removeLeadingZeros( + x, + )} ${removeLeadingZeros(y)}" or removed`; + } + if (command === upperCurveCommand) { + resolutionTip = `should be "L${removeLeadingZeros( + x, + )} ${removeLeadingZeros(y)}" or removed`; + } + } + + if (segment.chained) { + let readableChain = iconPath.substring( + segment.chainStart, + segment.chainEnd, + ); + if (readableChain.length > 20) { + readableChain = `${readableChain.substring(0, 20)}...`; + } + errorMsg += ` in chain "${readableChain}"`; + } + errorMsg += ` at index ${ + segment.start + getPathDIndex(svgFileContent) + }`; + + reporter.error(`${errorMsg} (${resolutionTip})`); + + if (updateIgnoreFile) { + ignoreIcon(reporter.name, iconPath, $); + } + } + }); + }, + (reporter, $, ast) => { + reporter.name = 'collinear-segments'; + + const iconPath = $.find('path').attr('d'); + if (!updateIgnoreFile && isIgnored(reporter.name, iconPath)) { + return; + } + + /** + * Extracts collinear coordinates from SVG path straight lines + * (does not extracts collinear coordinates from curves). + **/ + const getCollinearSegments = (iconPath) => { + const segments = parsePath(iconPath), + collinearSegments = [], + straightLineCommands = 'HhVvLlMm', + zCommands = 'Zz'; + + let currLine = [], + currAbsCoord = [undefined, undefined], + startPoint, + _inStraightLine = false, + _nextInStraightLine = false, + _resetStartPoint = false; + + for (let s = 0; s < segments.length; s++) { + let seg = segments[s].params, + cmd = seg[0], + nextCmd = s + 1 < segments.length ? segments[s + 1][0] : null; + + if (cmd === 'L') { + currAbsCoord[0] = seg[1]; + currAbsCoord[1] = seg[2]; + } else if (cmd === 'l') { + currAbsCoord[0] = + (!currAbsCoord[0] ? 0 : currAbsCoord[0]) + seg[1]; + currAbsCoord[1] = + (!currAbsCoord[1] ? 0 : currAbsCoord[1]) + seg[2]; + } else if (cmd === 'm') { + currAbsCoord[0] = + (!currAbsCoord[0] ? 0 : currAbsCoord[0]) + seg[1]; + currAbsCoord[1] = + (!currAbsCoord[1] ? 0 : currAbsCoord[1]) + seg[2]; + startPoint = undefined; + } else if (cmd === 'M') { + currAbsCoord[0] = seg[1]; + currAbsCoord[1] = seg[2]; + startPoint = undefined; + } else if (cmd === 'H') { + currAbsCoord[0] = seg[1]; + } else if (cmd === 'h') { + currAbsCoord[0] = + (!currAbsCoord[0] ? 0 : currAbsCoord[0]) + seg[1]; + } else if (cmd === 'V') { + currAbsCoord[1] = seg[1]; + } else if (cmd === 'v') { + currAbsCoord[1] = + (!currAbsCoord[1] ? 0 : currAbsCoord[1]) + seg[1]; + } else if (cmd === 'C') { + currAbsCoord[0] = seg[5]; + currAbsCoord[1] = seg[6]; + } else if (cmd === 'a') { + currAbsCoord[0] = + (!currAbsCoord[0] ? 0 : currAbsCoord[0]) + seg[6]; + currAbsCoord[1] = + (!currAbsCoord[1] ? 0 : currAbsCoord[1]) + seg[7]; + } else if (cmd === 'A') { + currAbsCoord[0] = seg[6]; + currAbsCoord[1] = seg[7]; + } else if (cmd === 's') { + currAbsCoord[0] = + (!currAbsCoord[0] ? 0 : currAbsCoord[0]) + seg[1]; + currAbsCoord[1] = + (!currAbsCoord[1] ? 0 : currAbsCoord[1]) + seg[2]; + } else if (cmd === 'S') { + currAbsCoord[0] = seg[1]; + currAbsCoord[1] = seg[2]; + } else if (cmd === 't') { + currAbsCoord[0] = + (!currAbsCoord[0] ? 0 : currAbsCoord[0]) + seg[1]; + currAbsCoord[1] = + (!currAbsCoord[1] ? 0 : currAbsCoord[1]) + seg[2]; + } else if (cmd === 'T') { + currAbsCoord[0] = seg[1]; + currAbsCoord[1] = seg[2]; + } else if (cmd === 'c') { + currAbsCoord[0] = + (!currAbsCoord[0] ? 0 : currAbsCoord[0]) + seg[5]; + currAbsCoord[1] = + (!currAbsCoord[1] ? 0 : currAbsCoord[1]) + seg[6]; + } else if (cmd === 'Q') { + currAbsCoord[0] = seg[3]; + currAbsCoord[1] = seg[4]; + } else if (cmd === 'q') { + currAbsCoord[0] = + (!currAbsCoord[0] ? 0 : currAbsCoord[0]) + seg[3]; + currAbsCoord[1] = + (!currAbsCoord[1] ? 0 : currAbsCoord[1]) + seg[4]; + } else if (zCommands.includes(cmd)) { + // Overlapping in Z should be handled in another rule + currAbsCoord = [startPoint[0], startPoint[1]]; + _resetStartPoint = true; + } else { + throw new Error(`"${cmd}" command not handled`); + } + + if (startPoint === undefined) { + startPoint = [currAbsCoord[0], currAbsCoord[1]]; + } else if (_resetStartPoint) { + startPoint = undefined; + _resetStartPoint = false; + } + + _nextInStraightLine = straightLineCommands.includes(nextCmd); + let _exitingStraightLine = _inStraightLine && !_nextInStraightLine; + _inStraightLine = straightLineCommands.includes(cmd); + + if (_inStraightLine) { + currLine.push([currAbsCoord[0], currAbsCoord[1]]); + } else { + if (_exitingStraightLine) { + if (straightLineCommands.includes(cmd)) { + currLine.push([currAbsCoord[0], currAbsCoord[1]]); + } + // Get collinear coordinates + for (let p = 1; p < currLine.length - 1; p++) { + let _collinearCoord = collinear( + currLine[p - 1][0], + currLine[p - 1][1], + currLine[p][0], + currLine[p][1], + currLine[p + 1][0], + currLine[p + 1][1], + ); + if (_collinearCoord) { + collinearSegments.push( + segments[s - currLine.length + p + 1], + ); + } + } + } + currLine = []; + } + } + + return collinearSegments; + }; + + const collinearSegments = getCollinearSegments(iconPath), + pathDIndex = getPathDIndex($.html()); + collinearSegments.forEach((segment) => { + let errorMsg = `Collinear segment "${iconPath.substring( + segment.start, + segment.end, + )}" found`; + if (segment.chained) { + let readableChain = iconPath.substring( + segment.chainStart, + segment.chainEnd, + ); + if (readableChain.length > 20) { + readableChain = `${readableChain.substring(0, 20)}...`; + } + errorMsg += ` in chain "${readableChain}"`; + } + errorMsg += ` at index ${ + segment.start + pathDIndex + } (should be removed)`; + reporter.error(errorMsg); + }); + + if (collinearSegments.length) { + if (updateIgnoreFile) { + ignoreIcon(reporter.name, iconPath, $); + } + } + }, + (reporter, $, ast) => { + reporter.name = 'extraneous'; + + if (!svgRegexp.test(ast.source)) { + reporter.error( + 'Unexpected character(s), most likely extraneous whitespace, detected in SVG markup', + ); + } + }, + (reporter, $, ast) => { + reporter.name = 'negative-zeros'; + + const iconPath = $.find('path').attr('d'); + if (!updateIgnoreFile && isIgnored(reporter.name, iconPath)) { + return; + } + + // Find negative zeros inside path + const negativeZeroMatches = Array.from( + iconPath.matchAll(negativeZerosRegexp), + ); + if (negativeZeroMatches.length) { + // Calculate the index for each match in the file + const svgFileContent = $.html(); + const pathDIndex = getPathDIndex(svgFileContent); + + negativeZeroMatches.forEach((match) => { + const negativeZeroFileIndex = match.index + pathDIndex; + const previousChar = svgFileContent[negativeZeroFileIndex - 1]; + const replacement = '0123456789'.includes(previousChar) + ? ' 0' + : '0'; + reporter.error( + `Found "-0" at index ${negativeZeroFileIndex} (should be "${replacement}")`, + ); + }); + } + }, + (reporter, $, ast) => { + reporter.name = 'icon-centered'; + + const iconPath = $.find('path').attr('d'); + if (!updateIgnoreFile && isIgnored(reporter.name, iconPath)) { + return; + } + + const [minX, minY, maxX, maxY] = svgPathBbox(iconPath); + const targetCenter = iconSize / 2; + const centerX = +((minX + maxX) / 2).toFixed(iconFloatPrecision); + const devianceX = centerX - targetCenter; + const centerY = +((minY + maxY) / 2).toFixed(iconFloatPrecision); + const devianceY = centerY - targetCenter; + + if ( + Math.abs(devianceX) > iconTolerance || + Math.abs(devianceY) > iconTolerance + ) { + reporter.error( + `<path> must be centered at (${targetCenter}, ${targetCenter}); the center is currently (${centerX}, ${centerY})`, + ); + if (updateIgnoreFile) { + ignoreIcon(reporter.name, iconPath, $); + } + } + }, + (reporter, $, ast) => { + reporter.name = 'path-format'; + + const iconPath = $.find('path').attr('d'); + + const validPathFormatRegex = /^[Mm][MmZzLlHhVvCcSsQqTtAaEe0-9-,.\s]+$/; + if (!validPathFormatRegex.test(iconPath)) { + let errorMsg = 'Invalid path format', + reason; + + if (!/^[Mm]/.test(iconPath)) { + // doesn't start with moveto + reason = `should start with \"moveto\" command (\"M\" or \"m\"), but starts with \"${iconPath[0]}\"`; + reporter.error(`${errorMsg}: ${reason}`); + } + + const validPathCharacters = 'MmZzLlHhVvCcSsQqTtAaEe0123456789-,. ', + invalidCharactersMsgs = [], + pathDIndex = getPathDIndex($.html()); + + for (let [i, char] of Object.entries(iconPath)) { + if (validPathCharacters.indexOf(char) === -1) { + invalidCharactersMsgs.push( + `"${char}" at index ${pathDIndex + parseInt(i)}`, + ); + } + } + + // contains invalid characters + if (invalidCharactersMsgs.length > 0) { + reason = `unexpected character${ + invalidCharactersMsgs.length > 1 ? 's' : '' + } found`; + reason += ` (${invalidCharactersMsgs.join(', ')})`; + reporter.error(`${errorMsg}: ${reason}`); + } + } + }, + (reporter, $, ast) => { + reporter.name = 'svg-format'; + + // Don't allow explicit '</path>' closing tag + if (ast.source.includes('</path>')) { + const reason = + `found a closing "path" tag at index ${ast.source.indexOf( + '</path>', + )}.` + + " The path should be self-closing, use '/>' instead of '></path>'."; + reporter.error(`Invalid SVG content format: ${reason}`); + } + }, + ], + }, +}; diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8aea9bb12435..c89ec0c48cfc 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -34,6 +34,7 @@ Simple Icons welcomes contributions and corrections. Before contributing, please * [Requesting an Icon](#requesting-an-icon) * [Adding or Updating an Icon](#adding-or-updating-an-icon) +* [Testing Package Locally](#testing-package-locally) * [Using Docker](#using-docker) ## Requesting an Icon @@ -42,21 +43,27 @@ We welcome icon requests. Before you submit a new issue please make sure the ico * Has not already been requested. If you find an existing issue or pull request for the brand you're looking for then please add a reaction or comment to show your support. * Is of a _popular_ brand: - - For websites, the [Alexa rank](https://www.alexa.com/siteinfo) should be less than 500k. + - For websites, the [Similarweb rank](https://www.similarweb.com) should be less than 500k. - Note that for brands that have already been added the threshold for continued inclusion rises to 750k. - For GitHub projects, the amount of "stars" should be above 5k. - For anything else, popularity will be judged on a case-by-case basis. * Doesn't fall into one of the following categories: - - Illegal service (e.g. piracy, malware, threatening material, spam etc.) + - Illegal services (e.g. piracy, malware, threatening material, spam, etc.) - Governmental agencies, programs, departments - Allowed: International organizations and NGOs with supranational interests - Allowed: Space agencies - Symbols, including flags and banners - Sport clubs - - Allowed: Sport organizations + - Allowed: Sports organizations - Yearly releases - Universities or other educational institutions - - Any brands representing individuals rather than an organization, company or product. This includes musicians, bands, and social media personalities. + - Any brands representing individuals rather than an organization, company, or product. This includes musicians, bands, and social media personalities. + +Some companies and organizations are excessively protective with their brands, so please don't consider them: + +- Disney +- Oracle +- Do you know more? Please, [report them](https://github.com/simple-icons/simple-icons/issues/new?labels=docs&template=documentation.yml). If you are in doubt, feel free to submit it and we'll have a look. @@ -66,7 +73,7 @@ When submitting a request for a new or updated icon include helpful information * New Icons: `Request: GitHub Icon` * Icon Updates: `Update: GitHub Color` or `Update: GitHub Icon` -* **Issue Body:** Links to official sources for the brand's icon and colors (e.g. media kits, brand guidelines, SVG files etc.) +* **Issue Body:** Links to official sources for the brand's icon and colors (e.g. media kits, brand guidelines, SVG files, etc.) If you have an affiliation to the brand you are requesting that allows you to speak on their behalf then please disclose that in your issue as it can help speed up our research process. @@ -76,7 +83,7 @@ If you have an affiliation to the brand you are requesting that allows you to sp ### 1. Identify Official Logos and Colors -Most of the icons and brand colors on SimpleIcons have been derived from official sources. Using official sources helps ensure that the icons and colors in SimpleIcons accurately match the brand they represent. Thankfully, this is usually a simple process as organizations often provide brand guides and high quality versions of their logo for download. +Most of the icons and brand colors on SimpleIcons have been derived from official sources. Using official sources helps ensure that the icons and colors in SimpleIcons accurately match the brand they represent. Thankfully, this is usually a simple process as organizations often provide brand guides and high-quality versions of their logo for download. Official high quality brand logos and brand colors can usually be found in the following locations: @@ -86,14 +93,17 @@ Official high quality brand logos and brand colors can usually be found in the f 1. Wikimedia (which should provide a source) 1. GitHub repositories +It may be the case that no official source exists, but an unofficial icon has gained widespread acceptance and popularity. In such cases the unofficial icon can be included, but the details will be judged on a case-by-case basis. The JavaScript icon is an example of this. +Notice that an unofficial source will never supersede an official one, even if it is more popular. An unofficial icon will only be accepted if no official option exists. + #### Icon Guidelines -Working with an SVG version of the logo is best. In the absence of an SVG version, other vector filetypes may work as well (e.g. EPS, AI, PDF). In the absence of vector logos, a vector can be created from a high quality rasterized image, however this is much more labor intensive. +Working with an SVG version of the logo is best. In the absence of an SVG version, other vector filetypes may work as well (e.g. EPS, AI, PDF). In the absence of vector logos, a vector can be created from a high-quality rasterized image, however, this is much more labor-intensive. If the icon includes a (registered) trademark icon we follow the guidelines below to decide whether to include the symbol or not: * If brand guidelines explicitly require including the symbol, it must be included. -* If the the brand itself includes the symbol with all uses of the logo, even at small sizes, it must be included. +* If the brand itself includes the symbol with all uses of the logo, even at small sizes, it must be included. * If the symbol is incorporated into the design of the logo (e.g. [Chupa Chups](https://github.com/simple-icons/simple-icons/blob/develop/icons/chupachups.svg)), it must be included. * If there is ambiguity about the conditions under which the symbol is required, it must be included if it is a _registered trademark symbol_ (®) but not if is a _trademark symbol_ (™). * If brand guidelines say it _may_ be removed, usually when the icon is displayed at small sizes, it must not be included. @@ -110,9 +120,9 @@ There are many different tools for editing SVG files, some options include: | Name | Description | Platform | Price | | :---- | :---- | :----: | :----: | | [Inkscape](https://inkscape.org/) | Vector Graphics Editor | Windows, Mac, Linux | Free | +| [Boxy SVG](https://boxy-svg.com/) | Vector Graphics Editor | Windows, Mac, Linux | $ / Free (Linux, Web) | | [Affinity Designer](https://affinity.serif.com/designer/) | Vector Graphics Editor | Windows, Mac | $ | | [Adobe Illustrator](https://www.adobe.com/products/illustrator.html) | Vector Graphics Editor | Windows, Mac | $ - $$$ | -| [IcoMoon](https://icomoon.io/) | Icon Editing/Management Tool | Online | Free | Using your preferred tool you should: @@ -125,7 +135,7 @@ Using your preferred tool you should: 1. Remove all colors. The icon should be monochromatic. 1. Export the icon as an SVG. -Some icons can't be easily converted to a monochromatic version due to colour changes, shadows, or other effects. For such cases the addition of gaps is the recommended approach, with a preferred width of 0.5px. In some situations a different gap may be required, but that will be determined on a per-case basis. +Some icons can't be easily converted to a monochromatic version due to colour changes, shadows, or other effects. For such cases, the addition of gaps is the recommended approach, with a preferred width of 0.5px. In some situations, a different gap may be required, but that will be determined on a per-case basis. If you have any problems or questions while creating the SVG, check out [the GitHub Discussions](https://github.com/simple-icons/simple-icons/discussions/categories/help-with-svgs). You may find an answer to your question there or you can ask your question if you did not find an answer. @@ -148,7 +158,7 @@ All icons in Simple Icons have been optimized with the [SVGO tool](https://githu * Build: `docker build . -t simple-icons` * Run: `docker run --rm -v ${PWD}/icons/file-to-optimize.svg:/image.svg simple-icons` -After optimizing the icon, double-check it against your original version to ensure no visual imperfections have crept in. Also make sure that the dimensions of the path have not been changed so that the icon no longer fits exactly within the canvas. We currently check the dimensions up to a precision of 3 decimal points. +After optimizing the icon, double-check it against your original version to ensure no visual imperfections have crept in. Also, make sure that the dimensions of the path have not been changed so that the icon no longer fits exactly within the canvas. We currently check the dimensions up to a precision of 3 decimal points. ### 4. Annotate the Icon @@ -261,7 +271,7 @@ Make sure the icon is added in alphabetical order. If you're in doubt, you can a Additionally, each icon in the `_data/simple-icons.json` file may be given any of the following optional values: -* The `slug` must be used to specify the icon's file name in cases where a modifier has been added to it in order to resolve a clash with an exitsing icon's name. +* The `slug` must be used to specify the icon's file name in cases where a modifier has been added to it in order to resolve a clash with an existing icon's name. * The `guidelines` may be used to specify the URL of the brand's guidelines/press kit/etc. This is useful if the SVG file was sourced from a different place, still if the SVG file was sourced from the guidelines, the URL should be duplicated here. * The `license` may be used to specify the license under which the icon is available. This is an object with a `type` and `url`. The `type` should be an [SPDX License ID](https://spdx.org/licenses/) or `"custom"`, the `url` is optional unless the `type` is `"custom"`. @@ -287,11 +297,11 @@ We use the source URL as a reference for the current SVG in our repository and a If the SVG is sourced from: -- **Branding page**: For an SVG from a branding page the source URL should simply link to the branding page. -- **Company website**: If the SVG is found on the company website (but there is no branding page) the source URL should link to a common page, such as the home page or about page, that includes the source material. -- **GitHub**: For an SVG from a GitHub (GitLab, BitBucket, etc.) repository the source URL should link to the file that was used as source material. If the color comes from another file in the repository the URL should link to the repository itself. +- **Branding page**: For an SVG from a branding page the source URL should link to the branding page and not the image, PDF, or archive (such as `.zip`) file. +- **Company website**: If the SVG is found on the company website (but there is no branding page) the source URL should link to a common page, such as the home page or about page, that includes the source image and not the image file itself. +- **GitHub**: For an SVG from a GitHub (GitLab, BitBucket, etc.) repository the source URL should link to the file that was used as source material. If the color does not come from the file, its origin should be stated in the Pull Request description. - In any case the commit hash should be part of the URL. On GitHub, you can get the correct URL by pressing <kbd>y</kbd> on the GitHub page you want to link to. You can get help at the [getting permanent links to files page](https://help.github.com/en/github/managing-files-in-a-repository/getting-permanent-links-to-files). + The commit hash should always be part of the URL. On GitHub, you can get the correct URL by pressing <kbd>y</kbd> on the GitHub page you want to link to. You can get help at the [getting permanent links to files page](https://help.github.com/en/github/managing-files-in-a-repository/getting-permanent-links-to-files). - **Wikipedia**: For an SVG from Wikipedia/Wikimedia the source URL should link to the logo file's page on the relevant site, and not the brand's Wikipedia pages. For example, [this is the link for AmericanExpress](https://commons.wikimedia.org/wiki/File:American_Express_logo.svg). @@ -366,7 +376,7 @@ If you have an affiliation to the brand you contributing that allows you to spea ## Testing Package Locally -* Make sure you have [NodeJS](https://nodejs.org/en/download/) installed. At least version 12.4.0 is required. +* Make sure you have [Node.js](https://nodejs.org/en/download/) installed. At least version `^12.20.0 || ^14.13.1 || >=16.0.0` is required. * Install the dependencies using `$ npm install`. * Build and test the package using `$ npm test`. * Run the project linting process using `$ npm run lint`. @@ -384,15 +394,3 @@ Then, start a Docker container for simple-icons and attach to it: ```shell docker run -it --rm --entrypoint "/bin/ash" simple-icons ``` - ---- - -# Versioning - -We use [Semantic Versioning](https://semver.org/) in this project. Given a version number `MAJOR.MINOR.PATCH` you can expect the following kinds of changes: - -| Version number | Kinds of changes | -| :---- | :---- | -| _Major_ | Removed icons; Renamed icons; Breaking API changes | -| _Minor_ | New icons; API changes | -| _Patch_ | Updated SVGs; Updated metadata | diff --git a/DISCLAIMER.md b/DISCLAIMER.md index f8e4a12d5dd3..fe0005ecd920 100644 --- a/DISCLAIMER.md +++ b/DISCLAIMER.md @@ -4,22 +4,24 @@ Simple Icons asks that its users read this disclaimer fully before including an ## Table of Contents -* [Licenses, Copyrights & Trademarks](#licenses-copyrights--trademarks) -* [Brand Guidelines](#brand-guidelines) -* [Update of Brands](#update-of-brands) -* [Removal of Brands](#removal-of-brands) +- [Licenses, Copyrights & Trademarks](#licenses-copyrights--trademarks) +- [Brand Guidelines](#brand-guidelines) +- [Update of Brands](#update-of-brands) +- [Removal of Brands](#removal-of-brands) ## Licenses, Copyrights & Trademarks -> :information_source: NOTE: The addition of licenses to Simple Icons is an ongoing project. Hence, the absence of licence data for a particular icon does not imply that the icon is not released under a license. +> **Note** +> The addition of licenses to Simple Icons is an ongoing project. Hence, the absence of licence data for a particular icon does not imply that the icon is not released under a license. -> :information_source: NOTE: Simple Icons is released under CC0 - though that doesn't mean to imply that all icons within the project are also CC0. Please see individual licenses where available. +> **Note** +> Simple Icons is released under CC0 - though that doesn't mean to imply that all icons within the project are also CC0. Please see individual licenses where available. Simple Icons provides data on the license under which icons are available. We ask users to carefully consider this when using an icon. As licenses are subject to change we also ask our users to regularly check if the license of the icons they use have been changed. The license under which an icon is available can be found in the icon's entry in the JSON data file in the NPM and Packagist packages, or through the license link on the icon's card on [the Simple Icons website]. -As we rely largely on our community to help us keep Simple Icons up-to-date, the license data for an icon may be outdated. If you find that the license data provided is outdated, please [submit an issue] to [the Simple Icons GitHub repository]. +As we rely largely on our community to help us keep Simple Icons up-to-date, the license data for an icon may be outdated. If you find that the license data provided is outdated, please [submit an issue][icon-outdated-issues] to [the Simple Icons GitHub repository]. If an icon includes a registered trademark (`®`) or trademark symbol (`™`) the recommendations outlined in [the Simple Icons Contributing Guidelines] are followed to decide whether to include the symbol or not. @@ -27,24 +29,26 @@ Simple Icons cannot be held responsible for any legal activity raised by a brand ## Brand Guidelines -> :information_source: NOTE: the addition of guidelines to Simple Icons is an ongoing project. In the meantime, users of Simple Icons are instead encouraged to check the `source` URL as, in some cases, the icon will have been sourced from official guidelines. The lack of a `guidelines` entry for a particular brand does not imply that the brand has no guidelines. +> **Note** +> The addition of guidelines to Simple Icons is an ongoing project. In the meantime, users of Simple Icons are instead encouraged to check the `source` URL as, in some cases, the icon will have been sourced from official guidelines. The lack of a `guidelines` entry for a particular brand does not imply that the brand has no guidelines. Simple Icons provides a link to a brand's _branding guidelines_ (or similar) if the brand provides one. We ask our users read these guidelines and ensure their usage of the brand's icon is in accordance with them. As guidelines are subject to change we also ask our users to regularly check if the brand guidelines of the icons they use have been updated. The brand guidelines can be found in the icon's entry in the JSON data file in the NPM and Packagist packages, or through the "Brand Guidelines" link on the icon's card on [the Simple Icons website]. -As we rely largely on our community to help us keep Simple Icons up-to-date, the guidelines link for a brand may be outdated. If you find that the guidelines are outdated, please [submit an issue] to [the Simple Icons GitHub repository]. +As we rely largely on our community to help us keep Simple Icons up-to-date, the guidelines link for a brand may be outdated. If you find that the guidelines are outdated, please [submit an issue][icon-outdated-issues] to [the Simple Icons GitHub repository]. ## Update of Brands -Should a brand wish for their icon or data to be updated, please [submit an issue] to [the Simple Icons GitHub repository]. In the issue, please explain your affiliation with the company and reasons for the update. We generally release updates once a week, but can make exceptions for immediate updates of brands. +Should a brand wish for their icon or data to be updated, please [submit an issue][icon-outdated-issues] to [the Simple Icons GitHub repository]. In the issue, please explain your affiliation with the company and reasons for the update. We generally release updates once a week, but can make exceptions for immediate updates of brands. ## Removal of Brands -Should a brand wish for their icon to be removed from the package, contact `removals at simpleicons dot org` explaining your affiliation with the company, and reasons for removal. Alternatively, it is also possible to [submit an issue] on [the Simple Icons GitHub repository] with the same information. We generally remove icons that no longer [meet our criteria] twice a year in our major releases - but can occasionally make exceptions for immediate removal of brands. +Should a brand wish for their icon to be removed from the package, contact `removals at simpleicons dot org` explaining your affiliation with the company, and reasons for removal. Alternatively, it is also possible to [submit an issue][removal-issues] on [the Simple Icons GitHub repository] with the same information. We generally remove icons that no longer [meet our criteria] twice a year in our major releases - but can occasionally make exceptions for immediate removal of brands. [meet our criteria]: https://github.com/simple-icons/simple-icons/blob/develop/CONTRIBUTING.md#requesting-an-icon -[submit an issue]: https://github.com/simple-icons/simple-icons/issues/new?labels=icon+outdated&template=icon_update.md -[the Simple Icons Contributing Guidelines]: https://github.com/simple-icons/simple-icons/blob/develop/CONTRIBUTING.md#icon-guidelines -[the Simple Icons GitHub repository]: https://github.com/simple-icons/simple-icons -[the Simple Icons website]: https://simpleicons.org/ +[icon-outdated-issues]: https://github.com/simple-icons/simple-icons/issues/new?assignees=&labels=icon+outdated&template=icon_update.yml&title=Update%3A+ +[removal-issues]: https://github.com/simple-icons/simple-icons/issues/new?assignees=&labels=removal+request&template=icon_removal.yml&title=Remove%3A+ +[the simple icons contributing guidelines]: https://github.com/simple-icons/simple-icons/blob/develop/CONTRIBUTING.md#icon-guidelines +[the simple icons github repository]: https://github.com/simple-icons/simple-icons +[the simple icons website]: https://simpleicons.org/ diff --git a/Dockerfile b/Dockerfile index 73f17a78a423..6cd532e79177 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:16-alpine +FROM node:18-alpine RUN apk add --no-cache \ git diff --git a/README.md b/README.md index d55308525974..90d84ead4fc5 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,18 @@ <p align="center"> -<a href="https://simpleicons.org/"> -<img src="https://simpleicons.org/icons/simpleicons.svg" alt="Simple Icons" width=64 height=64> -</a> +<img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/simpleicons.svg#gh-light-mode-only" alt="Simple Icons" width=70><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/simpleicons-white.svg#gh-dark-mode-only" alt="Simple Icons" width=70> <h3 align="center">Simple Icons</h3> <p align="center"> -Over 1500 Free SVG icons for popular brands. See them all on one page at <a href="https://simpleicons.org">SimpleIcons.org</a>. Contributions, corrections & requests can be made on GitHub.</p> +Over 2300 Free SVG icons for popular brands. See them all on one page at <a href="https://simpleicons.org">SimpleIcons.org</a>. Contributions, corrections & requests can be made on GitHub.</p> </p> <p align="center"> -<a href="https://github.com/simple-icons/simple-icons/actions?query=workflow%3AVerify+branch%3Adevelop"><img src="https://img.shields.io/github/workflow/status/simple-icons/simple-icons/Verify/develop?logo=github" alt="Build status" /></a> -<a href="https://www.npmjs.com/package/simple-icons"><img src="https://img.shields.io/npm/v/simple-icons.svg?logo=npm" alt="NPM version" /></a> -<a href="https://packagist.org/packages/simple-icons/simple-icons"><img src="https://img.shields.io/packagist/v/simple-icons/simple-icons?logo=packagist&logoColor=white" alt="Build status" /></a> +<a href="https://github.com/simple-icons/simple-icons/actions?query=workflow%3AVerify+branch%3Adevelop"><img src="https://img.shields.io/github/workflow/status/simple-icons/simple-icons/Verify/develop?logo=github&label=tests" alt="Build status"/></a> +<a href="https://www.npmjs.com/package/simple-icons"><img src="https://img.shields.io/npm/v/simple-icons.svg?logo=npm" alt="NPM version"/></a> +<a href="https://packagist.org/packages/simple-icons/simple-icons"><img src="https://img.shields.io/packagist/v/simple-icons/simple-icons?logo=packagist&logoColor=white" alt="Build status"/></a> +</p> +<p align="center"> +<a href="https://simpleicons.org"><img src="https://img.shields.io/badge/dynamic/json?color=informational&label=icons&prefix=%20&logo=simpleicons&query=%24.icons.length&url=https%3A%2F%2Fraw.githubusercontent.com%2Fsimple-icons%2Fsimple-icons%2Fdevelop%2F_data%2Fsimple-icons.json" alt="Number of icons currently in the library"/></a> +<a href="https://opencollective.com/simple-icons"><img src="https://img.shields.io/opencollective/all/simple-icons?logo=opencollective" alt="Backers and sponsors on Open Collective"/></a> </p> ## Usage @@ -26,20 +28,20 @@ Icons can be downloaded as SVGs directly from [our website](https://simpleicons. Icons can be served from a CDN such as [JSDelivr](https://www.jsdelivr.com/package/npm/simple-icons) or [Unpkg](https://unpkg.com/browse/simple-icons/). Simply use the `simple-icons` npm package and specify a version in the URL like the following: ```html -<img height="32" width="32" src="https://cdn.jsdelivr.net/npm/simple-icons@v5/icons/[ICON SLUG].svg" /> -<img height="32" width="32" src="https://unpkg.com/simple-icons@v5/icons/[ICON SLUG].svg" /> +<img height="32" width="32" src="https://cdn.jsdelivr.net/npm/simple-icons@v7/icons/[ICON SLUG].svg" /> +<img height="32" width="32" src="https://unpkg.com/simple-icons@v7/icons/[ICON SLUG].svg" /> ``` Where `[ICON SLUG]` is replaced by the [slug] of the icon you want to use, for example: ```html -<img height="32" width="32" src="https://cdn.jsdelivr.net/npm/simple-icons@v5/icons/simpleicons.svg" /> -<img height="32" width="32" src="https://unpkg.com/simple-icons@v5/icons/simpleicons.svg" /> +<img height="32" width="32" src="https://cdn.jsdelivr.net/npm/simple-icons@v7/icons/simpleicons.svg" /> +<img height="32" width="32" src="https://unpkg.com/simple-icons@v7/icons/simpleicons.svg" /> ``` These examples use the latest major version. This means you won't receive any updates following the next major release. You can use `@latest` instead to receive updates indefinitely. However, this will result in a `404` error if the icon is removed. -### Node Usage +### Node Usage <img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/nodedotjs.svg#gh-light-mode-only" alt="Node" align=left width=24><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/nodedotjs-white.svg#gh-dark-mode-only" alt="Node" align=left width=24> The icons are also available through our npm package. To install, simply run: @@ -47,34 +49,22 @@ The icons are also available through our npm package. To install, simply run: npm install simple-icons ``` -The API can then be used as follows, where `[ICON SLUG]` is replaced by a [slug]: - -```javascript -const simpleIcons = require('simple-icons'); - -// Get a specific icon by its slug as: -// simpleIcons.Get('[ICON SLUG]'); - -// For example: -const icon = simpleIcons.Get('simpleicons'); - -``` - -Alternatively you can import the needed icons individually, where `[ICON SLUG]` is replaced by a [slug]. -This is useful if you are e.g. compiling your code with [webpack](https://webpack.js.org/) and therefore have to be mindful of your package size: - +All icons are imported from a single file, where `[ICON SLUG]` is replaced by a capitalized [slug]. We highly recommend using a bundler that can tree shake such as [webpack](https://webpack.js.org/) to remove the unused icon code: ```javascript // Import a specific icon by its slug as: -// require('simple-icons/icons/[ICON SLUG]'); +// import { si[ICON SLUG] } from 'simple-icons/icons' // For example: -const icon = require('simple-icons/icons/simpleicons'); +// use import/esm to allow tree shaking +import { siSimpleicons } from 'simple-icons/icons'; +// or with require/cjs +const { siSimpleicons } = require('simple-icons/icons'); ``` -Either method will return an icon object: +It will return an icon object: ```javascript -console.log(icon); +console.log(siSimpleicons); /* { @@ -96,27 +86,11 @@ NOTE: the `license` entry will be `undefined` if we do not yet have license data */ ``` -Lastly, the `simpleIcons` object is also enumerable. -This is useful if you want to do a computation on every icon: +#### TypeScript Usage <img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/typescript.svg#gh-light-mode-only" alt="Typescript" align=left width=19 height=19><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/typescript-white.svg#gh-dark-mode-only" alt="Typescript" align=left width=19 height=19> -```javascript -const simpleIcons = require('simple-icons'); +Type definitions are bundled with the package. -for (const iconSlug in simpleIcons) { - const icon = simpleIcons.Get(iconSlug); - // do stuff -} -``` - -#### TypeScript Usage - -There are also TypeScript type definitions for the Node package. To use them, simply run: - -```shell -npm install @types/simple-icons -``` - -### PHP Usage +### PHP Usage <img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/php.svg#gh-light-mode-only" alt="Php" align=left width=24 height=24><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/php-white.svg#gh-dark-mode-only" alt="Php" align=left width=24 height=24> The icons are also available through our Packagist package. To install, simply run: @@ -138,21 +112,39 @@ echo file_get_contents('path/to/package/icons/simpleicons.svg'); ?> ``` -## Third Party Extensions +## Third-Party Extensions | Extension | Author | -| :--- | :--- | -| [Drupal module](https://www.drupal.org/project/simple_icons) | [Phil Wolstenholme](https://www.drupal.org/u/phil-wolstenholme) | -| [Flutter package](https://pub.dev/packages/simple_icons) | [@jlnrrg](https://jlnrrg.github.io/) | -| [Hexo plugin](https://github.com/nidbCN/hexo-simpleIcons) | [@nidbCN](https://github.com/nidbCN/) | -| [Home Assistant plugin](https://github.com/vigonotion/hass-simpleicons) | [@vigonotion](https://github.com/vigonotion/) | -| [Jetpack Compose library](https://github.com/DevSrSouza/compose-icons) | [@devsrsouza](https://github.com/devsrsouza/) | -| [Kirby plugin](https://github.com/runxel/kirby3-simpleicons) | [@runxel](https://github.com/runxel) | -| [Laravel Package](https://github.com/ublabs/blade-simple-icons) | [@adrian-ub](https://github.com/adrian-ub) | -| [Python package](https://github.com/sachinraja/simpleicons) | [@sachinraja](https://github.com/sachinraja) | -| [React package](https://github.com/icons-pack/react-simple-icons) | [@wootsbot](https://github.com/wootsbot) | -| [Svelte package](https://github.com/icons-pack/svelte-simple-icons) | [@wootsbot](https://github.com/wootsbot) | -| [Vue package](https://github.com/mainvest/vue-simple-icons) | [@noahlitvin](https://github.com/noahlitvin) | -| [WordPress plugin](https://wordpress.org/plugins/simple-icons/) | [@tjtaylo](https://github.com/tjtaylo) | +| :-- | :-- | +| <img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/angular.svg#gh-light-mode-only" alt="Angular" align=left width=24 height=24><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/angular-white.svg#gh-dark-mode-only" alt="Angular" align=left width=24 height=24> [Angular Module](https://github.com/avmaisak/ngx-simple-icons) | [@avmaisak](https://github.com/avmaisak) | +| <img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/blazor.svg#gh-light-mode-only" alt="Blazor" align=left width=24 height=24><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/blazor-white.svg#gh-dark-mode-only" alt="Blazor" align=left width=24 height=24> [Blazor Nuget](https://github.com/TimeWarpEngineering/timewarp-simple-icons) | [@TimeWarpEngineering](https://github.com/TimeWarpEngineering) | +| <img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/blender.svg#gh-light-mode-only" alt="Blender" align=left width=24 height=24><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/blender-white.svg#gh-dark-mode-only" alt="Blender" align=left width=24 height=24> [Blender add-on](https://github.com/mondeja/simple-icons-blender) | [@mondeja](https://github.com/mondeja) | +| <img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/diagramsdotnet.svg#gh-light-mode-only" alt="Drawio" align=left width=24 height=24><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/diagramsdotnet-white.svg#gh-dark-mode-only" alt="Drawio" align=left width=24 height=24> [Drawio library](https://github.com/mondeja/simple-icons-drawio) | [@mondeja](https://github.com/mondeja) | +| <img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/drupal.svg#gh-light-mode-only" alt="Drupal" align=left width=24 height=24><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/drupal-white.svg#gh-dark-mode-only" alt="Drupal" align=left width=24 height=24> [Drupal module](https://www.drupal.org/project/simple_icons) | [Phil Wolstenholme](https://www.drupal.org/u/phil-wolstenholme) | +| <img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/flutter.svg#gh-light-mode-only" alt="Flutter" align=left width=24 height=24><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/flutter-white.svg#gh-dark-mode-only" alt="Flutter" align=left width=24 height=24> [Flutter package](https://pub.dev/packages/simple_icons) | [@jlnrrg](https://jlnrrg.github.io/) | +| <img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/hexo.svg#gh-light-mode-only" alt="Hexo" align=left width=24 height=24><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/hexo-white.svg#gh-dark-mode-only" alt="Hexo" align=left width=24 height=24> [Hexo plugin](https://github.com/nidbCN/hexo-simpleIcons) | [@nidbCN](https://github.com/nidbCN/) | +| <img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/homeassistant.svg#gh-light-mode-only" alt="Home Assistant" align=left width=24 height=24><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/homeassistant-white.svg#gh-dark-mode-only" alt="Home Assistant" align=left width=24 height=24> [Home Assistant plugin](https://github.com/vigonotion/hass-simpleicons) | [@vigonotion](https://github.com/vigonotion/) | +| <img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/hugo.svg#gh-light-mode-only" alt="Hugo" align=left width=24 height=24><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/hugo-white.svg#gh-dark-mode-only" alt="Hugo" align=left width=24 height=24> [Hugo module](https://github.com/foo-dogsquared/hugo-mod-simple-icons) | [@foo-dogsquared](https://github.com/foo-dogsquared) | +| <img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/openjdk.svg#gh-light-mode-only" alt="OpenJDK" align=left width=24 height=24><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/openjdk-white.svg#gh-dark-mode-only" alt="OpenJDK" align=left width=24 height=24> [Java library](https://github.com/silentsoft/simpleicons4j) | [@silentsoft](https://github.com/silentsoft) | +| <img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/jetpackcompose.svg#gh-light-mode-only" alt="Jetpack Compose" align=left width=24 height=24><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/jetpackcompose-white.svg#gh-dark-mode-only" alt="Jetpack Compose" align=left width=24 height=24> [Jetpack Compose library](https://github.com/DevSrSouza/compose-icons) | [@devsrsouza](https://github.com/devsrsouza/) | +| <img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/kirby.svg#gh-light-mode-only" alt="Kirby" align=left width=24 height=24><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/kirby-white.svg#gh-dark-mode-only" alt="Kirby" align=left width=24 height=24> [Kirby plugin](https://github.com/runxel/kirby3-simpleicons) | [@runxel](https://github.com/runxel) | +| <img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/latex.svg#gh-light-mode-only" alt="LaTeX" align=left width=24 height=24><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/latex-white.svg#gh-dark-mode-only" alt="LaTeX" align=left width=24 height=24> [LaTeX package](https://github.com/ineshbose/simple-icons-latex) | [@ineshbose](https://github.com/ineshbose) | +| <img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/laravel.svg#gh-light-mode-only" alt="Laravel" align=left width=24 height=24><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/laravel-white.svg#gh-dark-mode-only" alt="Laravel" align=left width=24 height=24> [Laravel Package](https://github.com/ublabs/blade-simple-icons) | [@adrian-ub](https://github.com/adrian-ub) | +| <img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/python.svg#gh-light-mode-only" alt="Python" align=left width=24 height=24><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/python-white.svg#gh-dark-mode-only" alt="Python" align=left width=24 height=24> [Python package](https://github.com/sachinraja/simple-icons-py) | [@sachinraja](https://github.com/sachinraja) | +| <img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/react.svg#gh-light-mode-only" alt="React" align=left width=24 height=24><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/react-white.svg#gh-dark-mode-only" alt="React" align=left width=24 height=24> [React package](https://github.com/icons-pack/react-simple-icons) | [@wootsbot](https://github.com/wootsbot) | +| <img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/simpleicons.svg#gh-light-mode-only" alt="Simple Icons" align=left width=24 height=24><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/simpleicons-white.svg#gh-dark-mode-only" alt="Simple Icons" align=left width=24 height=24> [Stream Deck icon pack](https://github.com/mackenly/simple-icons-stream-deck) | [@mackenly](https://github.com/mackenly) | +| <img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/svelte.svg#gh-light-mode-only" alt="Svelte" align=left width=24 height=24><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/svelte-white.svg#gh-dark-mode-only" alt="Svelte" align=left width=24 height=24> [Svelte package](https://github.com/icons-pack/svelte-simple-icons) | [@wootsbot](https://github.com/wootsbot) | +| <img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/vuedotjs.svg#gh-light-mode-only" alt="Vue" align=left width=24 height=24><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/vuedotjs-white.svg#gh-dark-mode-only" alt="Vue" align=left width=24 height=24> [Vue 3 package](https://github.com/wyatt-herkamp/vue3-simple-icons) | [@wyatt-herkamp](https://github.com/wyatt-herkamp) | +| <img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/vuedotjs.svg#gh-light-mode-only" alt="Vue" align=left width=24 height=24><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/vuedotjs-white.svg#gh-dark-mode-only" alt="Vue" align=left width=24 height=24> [Vue package](https://github.com/mainvest/vue-simple-icons) | [@noahlitvin](https://github.com/noahlitvin) | +| <img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/icons/wordpress.svg#gh-light-mode-only" alt="Wordpress" align=left width=24 height=24><img src="https://raw.githubusercontent.com/simple-icons/simple-icons/develop/assets/readme/wordpress-white.svg#gh-dark-mode-only" alt="Wordpress" align=left width=24 height=24> [WordPress plugin](https://wordpress.org/plugins/simple-icons/) | [@tjtaylo](https://github.com/tjtaylo) | + [slug]: ./slugs.md + +## Contribute + +[![Good first issues open](https://img.shields.io/github/issues/simple-icons/simple-icons/good%20first%20issue?label=good%20first%20issues&logo=git&logoColor=white)](https://github.com/simple-icons/simple-icons/labels/good%20first%20issue) + +Information describing how to contribute can be found here: + +https://github.com/simple-icons/simple-icons/blob/develop/CONTRIBUTING.md diff --git a/VERSIONING.md b/VERSIONING.md new file mode 100644 index 000000000000..98d9a1291363 --- /dev/null +++ b/VERSIONING.md @@ -0,0 +1,26 @@ +# Versioning + +We use [Semantic Versioning](https://semver.org/) to version Simple Icons. In short, this means that version numbers are structured as `MAJOR.MINOR.PATCH`. For example, version `3.1.4` is major version `3`, minor version `1`, and patch `4`. Increasing each of these numbers implies certain kinds of changes. + +For Simple Icons, given a change to the version number you can expect the following kinds of changes: + +| Version number increase | Kinds of changes | +| :---- | :---- | +| _Major_ | Removed icons; Renamed icons; Breaking API changes | +| _Minor_ | New icons; API changes | +| _Patch_ | Updated SVGs; Updated metadata | + +## Release Schedule + +_Minor_ releases and _patches_ are scheduled on a weekly basis and are generally released on a Sunday. + +_Major_ releases are scheduled on a half-year basis, mainly to remove old SVGs. That is, approximately every 6 months a normal Sunday release is a _major_ release instead of a _minor_ release or _patch_. + +## Deprecation + +For approximately 3 months after a _major_ release, the _major_ release preceding it will be supported. After 3 months, the previous _major_ release is deprecated and will no longer be supported. + +Support of a _major_ version entails the following: + +- SVGs and metadata of brands will be updated on request. This excludes brands that were removed in the new _major_ release. +- Bugs in the npm library will be updated if reported. diff --git a/_data/simple-icons.json b/_data/simple-icons.json index 0b39148e1ce8..5f82795d07f5 100644 --- a/_data/simple-icons.json +++ b/_data/simple-icons.json @@ -3,7 +3,12 @@ { "title": ".NET", "hex": "512BD4", - "source": "https://github.com/dotnet/brand/" + "source": "https://github.com/dotnet/brand/tree/defe0408e765b48223a434a0d9a94213edc062f8" + }, + { + "title": "/e/", + "hex": "000000", + "source": "https://gitlab.e.foundation/e/cloud/my-spot/-/blob/4e5430a17ba4ce77d4cb188222e47924f032b197/searx/static/themes/eelo/img/logo.svg" }, { "title": "1001Tracklists", @@ -25,6 +30,11 @@ "hex": "000000", "source": "https://www.42.fr/" }, + { + "title": "4chan", + "hex": "006600", + "source": "https://www.4chan.org/" + }, { "title": "4D", "hex": "004088", @@ -45,6 +55,11 @@ "hex": "FF9E0F", "source": "https://new.abb.com/products/robotics/en/robotstudio/downloads" }, + { + "title": "Abbott", + "hex": "008FC7", + "source": "https://commons.wikimedia.org/wiki/File:Logo_Abbott_Laboratories.svg" + }, { "title": "Abbvie", "hex": "071D49", @@ -207,8 +222,15 @@ }, { "title": "AdonisJS", - "hex": "220052", - "source": "https://adonisjs.com/" + "hex": "5A45FF", + "source": "https://adonisjs.com/", + "guidelines": "https://www.notion.so/adonisjs/Welcome-to-the-AdonisJS-Brand-Assets-Guidelines-a042a6d0be7640c6bc78eb32e1bbaaa1" + }, + { + "title": "Adyen", + "hex": "0ABF53", + "source": "https://www.adyen.com/press-and-media/presskit", + "guidelines": "https://www.adyen.com/press-and-media/presskit" }, { "title": "Aer Lingus", @@ -265,6 +287,16 @@ "hex": "000000", "source": "https://commons.wikimedia.org/wiki/File:AI_Dungeon_Logo.png" }, + { + "title": "AIB", + "hex": "7F2B7B", + "source": "https://aib.ie/", + "aliases": { + "aka": [ + "Allied Irish Banks" + ] + } + }, { "title": "AIOHTTP", "hex": "2C5BB4", @@ -305,6 +337,11 @@ "hex": "00205B", "source": "https://brand.airbus.com/brand-elements/logo.html" }, + { + "title": "Airbyte", + "hex": "615EFF", + "source": "https://airbyte.com/" + }, { "title": "Aircall", "hex": "00B388", @@ -325,16 +362,41 @@ "hex": "18BFFF", "source": "https://airtable.com/press" }, + { + "title": "Ajv", + "hex": "23C8D2", + "source": "https://github.com/ajv-validator/ajv/blob/95b15b683dfb60f63c5129b0426629b968d53af8/docs/.vuepress/public/img/ajv.svg" + }, { "title": "Alacritty", "hex": "F46D01", "source": "https://github.com/alacritty/alacritty/blob/6d8db6b9dfadd6164c4be7a053f25db8ef6b7998/extra/logo/alacritty-simple.svg" }, + { + "title": "Albert Heijn", + "hex": "04ACE6", + "source": "https://www.ah.nl/" + }, + { + "title": "Aldi Nord", + "hex": "2490D7", + "source": "https://commons.wikimedia.org/wiki/File:Aldi_Nord_201x_logo.svg" + }, + { + "title": "Aldi Süd", + "hex": "00005F", + "source": "https://www.aldi-sued.de" + }, { "title": "Alfa Romeo", "hex": "981E32", "source": "http://www.fcaci.com/x/Alfa" }, + { + "title": "Alfred", + "hex": "5C1F87", + "source": "https://www.alfredapp.com/" + }, { "title": "Algolia", "hex": "5468FF", @@ -365,6 +427,11 @@ "hex": "006643", "source": "https://www.alitalia.com/it_it/fly-alitalia/in-flight/ulisse-magazine.html" }, + { + "title": "Allegro", + "hex": "FF5A00", + "source": "https://allegro.pl/" + }, { "title": "AlliedModders", "hex": "1578D3", @@ -398,22 +465,95 @@ { "title": "Amazon", "hex": "FF9900", - "source": "https://worldvectorlogo.com/logo/amazon-icon" + "source": "https://worldvectorlogo.com/logo/amazon-icon", + "guidelines": "https://worldvectorlogo.com/terms-of-use" }, { "title": "Amazon Alexa", "hex": "00CAFF", "source": "https://developer.amazon.com/docs/alexa-voice-service/logo-and-brand.html" }, + { + "title": "Amazon API Gateway", + "hex": "FF4F8B", + "source": "https://aws.amazon.com/architecture/icons/", + "guidelines": "https://aws.amazon.com/architecture/icons/", + "aliases": { + "aka": [ + "AWS API Gateway" + ] + } + }, { "title": "Amazon AWS", "hex": "232F3E", - "source": "https://upload.wikimedia.org/wikipedia/commons/9/93/Amazon_Web_Services_Logo.svg" + "source": "https://upload.wikimedia.org/wikipedia/commons/9/93/Amazon_Web_Services_Logo.svg", + "aliases": { + "aka": [ + "AWS" + ] + } + }, + { + "title": "Amazon CloudWatch", + "hex": "FF4F8B", + "source": "https://aws.amazon.com/architecture/icons/", + "guidelines": "https://aws.amazon.com/architecture/icons/", + "aliases": { + "aka": [ + "AWS CloudWatch" + ] + } }, { "title": "Amazon DynamoDB", "hex": "4053D6", - "source": "https://aws.amazon.com/architecture/icons/" + "source": "https://aws.amazon.com/architecture/icons/", + "guidelines": "https://aws.amazon.com/architecture/icons/", + "aliases": { + "aka": [ + "AWS DynamoDB" + ] + } + }, + { + "title": "Amazon EC2", + "hex": "FF9900", + "source": "https://aws.amazon.com/architecture/icons/", + "guidelines": "https://aws.amazon.com/architecture/icons/", + "aliases": { + "aka": [ + "Amazon Elastic Compute Cloud", + "AWS EC2", + "AWS Elastic Compute Cloud" + ] + } + }, + { + "title": "Amazon ECS", + "hex": "FF9900", + "source": "https://aws.amazon.com/architecture/icons/", + "guidelines": "https://aws.amazon.com/architecture/icons/", + "aliases": { + "aka": [ + "Amazon Elastic Container Service", + "AWS ECS", + "AWS Elastic Container Service" + ] + } + }, + { + "title": "Amazon EKS", + "hex": "FF9900", + "source": "https://aws.amazon.com/architecture/icons/", + "guidelines": "https://aws.amazon.com/architecture/icons/", + "aliases": { + "aka": [ + "Amazon Elastic Kubernetes Service", + "AWS EKS", + "AWS Elastic Kubernetes Service" + ] + } }, { "title": "Amazon Fire TV", @@ -423,7 +563,8 @@ { "title": "Amazon Lumberyard", "hex": "66459B", - "source": "https://aws.amazon.com/lumberyard/support" + "source": "https://aws.amazon.com/architecture/icons/", + "guidelines": "https://aws.amazon.com/architecture/icons/" }, { "title": "Amazon Pay", @@ -435,10 +576,40 @@ "hex": "00A8E1", "source": "https://www.amazon.com/b?node=17277626011" }, + { + "title": "Amazon RDS", + "hex": "527FFF", + "source": "https://aws.amazon.com/architecture/icons/", + "guidelines": "https://aws.amazon.com/architecture/icons/", + "aliases": { + "aka": [ + "AWS RDS" + ] + } + }, { "title": "Amazon S3", "hex": "569A31", - "source": "https://aws.amazon.com/architecture/icons/" + "source": "https://aws.amazon.com/architecture/icons/", + "guidelines": "https://aws.amazon.com/architecture/icons/", + "aliases": { + "aka": [ + "AWS S3" + ] + } + }, + { + "title": "Amazon SQS", + "hex": "FF4F8B", + "source": "https://aws.amazon.com/architecture/icons/", + "guidelines": "https://aws.amazon.com/architecture/icons/", + "aliases": { + "aka": [ + "Amazon Simple Queue Service", + "AWS SQS", + "AWS Simple Queue Service" + ] + } }, { "title": "AMD", @@ -455,6 +626,11 @@ "hex": "2E77BC", "source": "https://commons.wikimedia.org/wiki/File:American_Express_logo.svg" }, + { + "title": "AMG", + "hex": "000000", + "source": "https://www.mercedes-amg.com/etc/clientlibs/amg/amg.base/assets/images/svg/amg-logo.svg" + }, { "title": "AMP", "hex": "005AF0", @@ -545,6 +721,11 @@ "hex": "0170FE", "source": "https://ant.design/components/icon/" }, + { + "title": "Anta", + "hex": "D70010", + "source": "https://www.anta.com/" + }, { "title": "Antena 3", "hex": "FF7328", @@ -591,6 +772,11 @@ "hex": "E8E8E8", "source": "https://cordova.apache.org/artwork/" }, + { + "title": "Apache CouchDB", + "hex": "E42528", + "source": "https://apache.org/logos/#couchdb" + }, { "title": "Apache Druid", "hex": "29F1FB", @@ -611,6 +797,11 @@ "hex": "4298B8", "source": "https://groovy-lang.org/" }, + { + "title": "Apache Hadoop", + "hex": "66CCFF", + "source": "https://apache.org/logos/#hadoop" + }, { "title": "Apache Hive", "hex": "FDEE21", @@ -696,6 +887,12 @@ "hex": "0D96F6", "source": "https://developer.apple.com/app-store/" }, + { + "title": "Appian", + "hex": "2322F0", + "source": "https://appian.com", + "guidelines": "https://assets.appian.com/uploads/assets/Appian_BrandGuidelines_Newsroom.pdf" + }, { "title": "Apple", "hex": "000000", @@ -736,6 +933,17 @@ "hex": "00B3E0", "source": "https://commons.wikimedia.org/wiki/File:Appveyor_logo.svg" }, + { + "title": "Appwrite", + "hex": "F02E65", + "source": "https://github.com/appwrite/appwrite/blob/c961382fb7a59ce908b4982a572e02e6e0feacd5/public/images/appwrite.svg" + }, + { + "title": "Aqua", + "hex": "1904DA", + "source": "https://www.aquasec.com/brand/", + "guidelines": "https://www.aquasec.com/brand/" + }, { "title": "ARAL", "hex": "0063CB", @@ -773,6 +981,16 @@ "hex": "00979D", "source": "https://cdn.arduino.cc/projecthub/img/Arduino-logo.svg" }, + { + "title": "Argo", + "hex": "EF7B4D", + "source": "https://cncf-branding.netlify.app/projects/argo/" + }, + { + "title": "Argos", + "hex": "DA291C", + "source": "https://www.argos.co.uk/" + }, { "title": "ARK Ecosystem", "hex": "C9292C", @@ -783,6 +1001,17 @@ "hex": "49B48A", "source": "https://www.arlo.com/" }, + { + "title": "Arm", + "hex": "0091BD", + "source": "https://www.arm.com/", + "guidelines": "https://www.arm.com/company/policies/trademarks/guidelines-corporate-logo" + }, + { + "title": "Artifact Hub", + "hex": "417598", + "source": "https://raw.githubusercontent.com/artifacthub/hub/87a1fed/web/public/static/media/logo/artifacthub-brand-white.svg" + }, { "title": "Artix Linux", "hex": "10A0CC", @@ -811,7 +1040,12 @@ { "title": "asciinema", "hex": "D40000", - "source": "https://github.com/asciinema/asciinema-logo" + "source": "https://github.com/asciinema/asciinema-logo/tree/1c743621830c0d8c92fd0076b4f15f75b4cf79f4" + }, + { + "title": "ASDA", + "hex": "68A51C", + "source": "https://www.asda.com/" }, { "title": "Aseprite", @@ -834,6 +1068,19 @@ "hex": "007AAC", "source": "https://www.assemblyscript.org/" }, + { + "title": "Aston Martin", + "hex": "000000", + "source": "https://www.astonmartin.com/" + }, + { + "title": "Astro", + "hex": "FF5D01", + "source": "https://github.com/withastro/astro/blob/09144e8e88fbb79a75a2283aca8bf6eba6dc45f0/assets/brand/logo-white.svg", + "license": { + "type": "MIT" + } + }, { "title": "ASUS", "hex": "000000", @@ -859,6 +1106,11 @@ "hex": "66595C", "source": "https://commons.wikimedia.org/wiki/File:Atom_editor_logo.svg" }, + { + "title": "Auchan", + "hex": "D6180B", + "source": "https://www.auchan.fr/" + }, { "title": "Audacity", "hex": "0000CC", @@ -919,6 +1171,22 @@ "hex": "3499CD", "source": "https://automattic.com/press/brand-materials/" }, + { + "title": "Autoprefixer", + "hex": "DD3735", + "source": "https://github.com/postcss/autoprefixer/blob/1341747bc8142a147342f55eea5ed4286a3ca318/logo.svg" + }, + { + "title": "avajs", + "hex": "4B4B77", + "source": "https://github.com/avajs/ava/blob/6f8e30c94626238a5b26deadac319089fa43d333/media/logo.svg" + }, + { + "title": "Avast", + "hex": "FF7800", + "source": "https://www.avast.com/", + "guidelines": "https://press.avast.com/media-materials" + }, { "title": "Awesome Lists", "hex": "FC60A8", @@ -932,7 +1200,20 @@ { "title": "AWS Amplify", "hex": "FF9900", - "source": "https://docs.amplify.aws/" + "source": "https://aws.amazon.com/architecture/icons/", + "guidelines": "https://aws.amazon.com/architecture/icons/" + }, + { + "title": "AWS Fargate", + "hex": "FF9900", + "source": "https://aws.amazon.com/architecture/icons/", + "guidelines": "https://aws.amazon.com/architecture/icons/" + }, + { + "title": "AWS Lambda", + "hex": "FF9900", + "source": "https://aws.amazon.com/architecture/icons/", + "guidelines": "https://aws.amazon.com/architecture/icons/" }, { "title": "Azure Artifacts", @@ -969,6 +1250,20 @@ "hex": "F9DC3E", "source": "https://github.com/babel/website/blob/93330158b6ecca1ab88d3be8dbf661f5c2da6c76/website/static/img/babel-black.svg" }, + { + "title": "Backbone.js", + "hex": "0071B5", + "source": "https://upload.wikimedia.org/wikipedia/commons/2/20/Backbone.js_logo.svg", + "license": { + "type": "MIT", + "url": "https://github.com/jashkenas/backbone/blob/master/LICENSE" + } + }, + { + "title": "Backendless", + "hex": "FFFFFF", + "source": "https://backendless.com/" + }, { "title": "Badgr", "hex": "282C4C", @@ -996,7 +1291,7 @@ }, { "title": "BandLab", - "hex": "DC3710", + "hex": "F12C18", "source": "https://blog.bandlab.com/press/" }, { @@ -1076,6 +1371,11 @@ "hex": "004A9D", "source": "https://zh.wikipedia.org/wiki/File:Beijing_Subway_Logo.svg" }, + { + "title": "BEM", + "hex": "000000", + "source": "https://en.bem.info/" + }, { "title": "Bentley", "hex": "333333", @@ -1117,6 +1417,11 @@ "hex": "F0B90B", "source": "https://binance.com/" }, + { + "title": "Bio Link", + "hex": "000000", + "source": "https://bio.link/" + }, { "title": "Bit", "hex": "73398D", @@ -1223,6 +1528,11 @@ "hex": "0066B1", "source": "https://www.bmw.de/" }, + { + "title": "Boehringer Ingelheim", + "hex": "003366", + "source": "https://cd.boehringer-ingelheim.com" + }, { "title": "Boeing", "hex": "1D439C", @@ -1238,6 +1548,11 @@ "hex": "64BC4B", "source": "https://bookmeter.com/" }, + { + "title": "BookMyShow", + "hex": "C4242B", + "source": "https://in.bookmyshow.com/" + }, { "title": "BookStack", "hex": "0288D1", @@ -1248,11 +1563,21 @@ "hex": "F7901E", "source": "https://www.boostmobile.com/" }, + { + "title": "Boots", + "hex": "05054B", + "source": "https://www.boots-uk.com/css/images/Boots_logo.svg" + }, { "title": "Bootstrap", "hex": "7952B3", "source": "http://getbootstrap.com/about" }, + { + "title": "BorgBackup", + "hex": "00DD00", + "source": "https://www.borgbackup.org/" + }, { "title": "Bosch", "hex": "EA0016", @@ -1263,6 +1588,11 @@ "hex": "000000", "source": "https://developer.bose.com/sites/default/files/Bose%20AR%20Design%20Guidelines%20v1.0.pdf" }, + { + "title": "boulanger", + "hex": "FD5300", + "source": "https://www.boulanger.com/" + }, { "title": "Bower", "hex": "EF5734", @@ -1273,6 +1603,11 @@ "hex": "0061D5", "source": "https://www.box.com/en-gb/about-us/press" }, + { + "title": "Boxy SVG", + "hex": "3584E3", + "source": "https://boxy-svg.com/ideas/7/redesign-the-app-icon#comment-1875" + }, { "title": "Brandfolder", "hex": "40D1F5", @@ -1308,6 +1643,11 @@ "hex": "1A86FD", "source": "https://buddy.works/about" }, + { + "title": "Budibase", + "hex": "000000", + "source": "https://github.com/Budibase/budibase/blob/6137ffd9a278ecb3e4dbb42af804c9652741699e/packages/builder/assets/bb-emblem.svg" + }, { "title": "Buefy", "hex": "7957D5", @@ -1338,16 +1678,34 @@ "hex": "14CC80", "source": "https://buildkite.com/brand-assets" }, + { + "title": "Bukalapak", + "hex": "E31E52", + "source": "https://assets.bukalapak.com/sigil/bukalapak-logo-icon.svg", + "guidelines": "https://brand.bukalapak.design/brand-elements#logo-overview" + }, { "title": "Bulma", "hex": "00D1B2", - "source": "https://github.com/jgthms/bulma/" + "source": "https://github.com/jgthms/bulma/tree/b0ed28b0e63fdfe54ef802ad155c889241fb6ae1" }, { "title": "bunq", "hex": "3394D7", "source": "https://www.bunq.com/press/" }, + { + "title": "Burger King", + "hex": "D62300", + "source": "https://www.bk.com/", + "guidelines": "https://www.bk.com/trademarks" + }, + { + "title": "Burton", + "hex": "000000", + "source": "https://brand.burton.com/logo/", + "guidelines": "https://brand.burton.com/logo/" + }, { "title": "Buy Me A Coffee", "hex": "FFDD00", @@ -1358,6 +1716,11 @@ "hex": "EE3322", "source": "https://www.buzzfeed.com/press/assets" }, + { + "title": "Byju's", + "hex": "813588", + "source": "https://byjus.com/byjus-the-learning-app/" + }, { "title": "byte", "hex": "551DEF", @@ -1381,13 +1744,19 @@ { "title": "C++", "hex": "00599C", - "source": "https://github.com/isocpp/logos" + "source": "https://github.com/isocpp/logos/tree/64ef037049f87ac74875dbe72695e59118b52186" }, { "title": "Cachet", "hex": "7ED321", "source": "https://cachethq.io/press" }, + { + "title": "Caffeine", + "hex": "0000FF", + "source": "https://www.caffeine.tv/", + "guidelines": "https://www.caffeine.tv/newsroom.html" + }, { "title": "Cairo Metro", "hex": "C10C0C", @@ -1406,7 +1775,11 @@ { "title": "Canonical", "hex": "77216F", - "source": "https://design.ubuntu.com/downloads/" + "source": "https://design.ubuntu.com/downloads/", + "guidelines": "https://design.ubuntu.com/brand/canonical-logo/", + "license": { + "type": "CC-BY-SA-3.0" + } }, { "title": "Canva", @@ -1423,6 +1796,11 @@ "hex": "FF9C42", "source": "https://www.carthrottle.com/" }, + { + "title": "Carrefour", + "hex": "004E9F", + "source": "https://upload.wikimedia.org/wikipedia/commons/5/5b/Carrefour_logo.svg" + }, { "title": "Carto", "hex": "EB1510", @@ -1533,6 +1911,11 @@ "hex": "F09820", "source": "https://www.chef.io/" }, + { + "title": "Chemex", + "hex": "4D2B1A", + "source": "https://vtlogo.com/chemex-coffeemaker-vector-logo-svg/" + }, { "title": "Chevrolet", "hex": "CD9834", @@ -1553,6 +1936,16 @@ "hex": "80B5E3", "source": "https://chocolatey.org/media-kit" }, + { + "title": "Chromecast", + "hex": "999999", + "source": "https://www.google.com/intl/en_us/chromecast/built-in/", + "aliases": { + "aka": [ + "Google Cast" + ] + } + }, { "title": "Chrysler", "hex": "000000", @@ -1563,6 +1956,11 @@ "hex": "CF103E", "source": "https://www.chupachups.co.uk/" }, + { + "title": "Cilium", + "hex": "F8C517", + "source": "https://github.com/cilium/cilium/blob/774a91f0e7497d9c9085234005ec81f1065c3783/Documentation/images/logo-solo.svg" + }, { "title": "Cinema 4D", "hex": "011A6A", @@ -1603,6 +2001,12 @@ "hex": "81C459", "source": "https://civicrm.org/trademark" }, + { + "title": "Civo", + "hex": "239DFF", + "source": "https://www.civo.com/brand-assets", + "guidelines": "https://www.civo.com/brand-assets" + }, { "title": "CKEditor 4", "hex": "0287D0", @@ -1613,6 +2017,11 @@ "hex": "000000", "source": "https://www.claris.com/" }, + { + "title": "ClickHouse", + "hex": "FFCC01", + "source": "https://github.com/ClickHouse/ClickHouse/blob/12bd453a43819176d25ecf247033f6cb1af54beb/website/images/logo-clickhouse.svg" + }, { "title": "ClickUp", "hex": "7B68EE", @@ -1668,7 +2077,14 @@ { "title": "Cloudflare", "hex": "F38020", - "source": "https://www.cloudflare.com/logo/" + "source": "https://www.cloudflare.com/logo/", + "guidelines": "https://www.cloudflare.com/trademark/" + }, + { + "title": "Cloudflare Pages", + "hex": "F38020", + "source": "https://pages.cloudflare.com/", + "guidelines": "https://www.cloudflare.com/trademark/" }, { "title": "Cloudsmith", @@ -1696,6 +2112,12 @@ "hex": "064F8C", "source": "https://www.kitware.com/platforms/" }, + { + "title": "CNCF", + "hex": "231F20", + "source": "https://github.com/cncf/artwork/blob/master/examples/other.md#cncf-logos", + "guidelines": "https://www.cncf.io/brand-guidelines/" + }, { "title": "CNN", "hex": "CC0000", @@ -1706,6 +2128,11 @@ "hex": "00B1E7", "source": "http://www.co-operative.coop/corporate/press/logos/" }, + { + "title": "Cockpit", + "hex": "0066CC", + "source": "https://github.com/cockpit-project/cockpit-project.github.io/blob/b851b3477d90017961ac9b252401c9a6cb6239f1/images/site/cockpit-logo.svg" + }, { "title": "Cockroach Labs", "hex": "6933FF", @@ -1714,7 +2141,7 @@ { "title": "CocoaPods", "hex": "EE3322", - "source": "https://github.com/CocoaPods/shared_resources", + "source": "https://github.com/CocoaPods/shared_resources/tree/3125baf19976bd240c86459645f45b68d2facd10", "license": { "type": "CC-BY-NC-4.0" } @@ -1739,6 +2166,12 @@ "hex": "000000", "source": "https://codeclimate.com/github/codeclimate/python-test-reporter/badges/" }, + { + "title": "Code Review", + "hex": "485A62", + "source": "https://codereview.stackexchange.com/", + "guidelines": "https://stackoverflow.com/legal/trademark-guidance" + }, { "title": "Codeberg", "hex": "2185D0", @@ -1791,7 +2224,7 @@ }, { "title": "CodeNewbie", - "hex": "6BD80B", + "hex": "9013FE", "source": "https://community.codenewbie.org/" }, { @@ -1812,7 +2245,7 @@ { "title": "Coderwall", "hex": "3E8DCC", - "source": "https://github.com/twolfson/coderwall-svg" + "source": "https://github.com/twolfson/coderwall-svg/tree/e87fb90eab5e401210a174f9418b5af0a246758e" }, { "title": "CodeSandbox", @@ -1827,7 +2260,7 @@ { "title": "Codewars", "hex": "B1361E", - "source": "https://github.com/codewars/branding" + "source": "https://github.com/codewars/branding/tree/1ff0d44db52ac4a5e3a1c43277dc35f228eb6983" }, { "title": "Coding Ninjas", @@ -1854,16 +2287,32 @@ "hex": "1A4CA1", "source": "https://www.cognizant.com/" }, + { + "title": "Coil", + "hex": "000000", + "source": "https://coil.com/press/brand-guidelines", + "guidelines": "https://coil.com/press/brand-guidelines" + }, { "title": "Coinbase", "hex": "0052FF", "source": "https://www.coinbase.com/press" }, + { + "title": "CoinMarketCap", + "hex": "17181B", + "source": "https://www.coinmarketcap.com/" + }, { "title": "Commerzbank", "hex": "FFCC33", "source": "https://commons.wikimedia.org/wiki/Category:Commerzbank_logos" }, + { + "title": "commitlint", + "hex": "000000", + "source": "https://github.com/conventional-changelog/commitlint/blob/0b177635472214faac5a5800ced970bf4d2e6012/docs/assets/icon.svg" + }, { "title": "Common Workflow Language", "hex": "B5314C", @@ -1874,6 +2323,16 @@ "hex": "885630", "source": "https://getcomposer.org/" }, + { + "title": "Comsol", + "hex": "368CCB", + "source": "https://cdn.comsol.com/company/comsol-brand-guide-November2019.pdf" + }, + { + "title": "Conan", + "hex": "6699CB", + "source": "https://conan.io/" + }, { "title": "Concourse", "hex": "3398DC", @@ -1882,7 +2341,7 @@ { "title": "Conda-Forge", "hex": "000000", - "source": "https://github.com/conda-forge/conda-forge.github.io/" + "source": "https://github.com/conda-forge/conda-forge.github.io/tree/0fc7dac2b989f3601dcc1be8a9f92c5b617c291e" }, { "title": "Conekta", @@ -1911,11 +2370,24 @@ "hex": "000000", "source": "https://en.wikipedia.org/wiki/Contactless_payment" }, + { + "title": "containerd", + "hex": "575757", + "source": "https://cncf-branding.netlify.app/projects/containerd/" + }, { "title": "Contentful", "hex": "2478CC", "source": "https://press.contentful.com/media_kits" }, + { + "title": "Conventional Commits", + "hex": "FE5196", + "source": "https://www.conventionalcommits.org", + "license": { + "type": "MIT" + } + }, { "title": "Convertio", "hex": "FF3333", @@ -1926,6 +2398,11 @@ "hex": "D4AA00", "source": "https://github.com/cookiecutter/cookiecutter/blob/52dd18513bbab7f0fbfcb2938c9644d9092247cf/logo/cookiecutter-logo.svg" }, + { + "title": "Cora", + "hex": "E61845", + "source": "https://www.cora.fr/" + }, { "title": "Corona Engine", "hex": "F96F29", @@ -1978,16 +2455,36 @@ "hex": "E5422B", "source": "https://craftcms.com/brand-resources" }, + { + "title": "CrateDB", + "hex": "009DC7", + "source": "https://github.com/crate/crate-docs-theme/blob/cbd734b3617489ca937f35e30f37f3f6c1870e1f/src/crate/theme/rtd/crate/static/images/crate-logo.svg" + }, + { + "title": "Create React App", + "hex": "09D3AC", + "source": "https://github.com/facebook/create-react-app/blob/9d0369b1fe3260e620b08effcf85f1edefc5d1ea/docusaurus/website/static/img/logo.svg" + }, { "title": "Creative Commons", "hex": "EF9421", "source": "https://creativecommons.org/" }, + { + "title": "Credly", + "hex": "FF6B00", + "source": "https://cdn.credly.com/assets/structure/logo-78b59f8114817c758ca965ed8f1a58a76a39b6fd70d031f771a9bbc581fcde65.svg" + }, { "title": "Crehana", "hex": "4B22F4", "source": "https://www.crehana.com/" }, + { + "title": "Critical Role", + "hex": "000000", + "source": "https://critrole.com/" + }, { "title": "Crowdin", "hex": "2E3340", @@ -2018,6 +2515,11 @@ "hex": "000000", "source": "https://crystal-lang.org/media/" }, + { + "title": "CSS Modules", + "hex": "000000", + "source": "https://github.com/css-modules/logos/blob/32e4717062e4328ed861fa92d5d9cfd47859362f/css-modules-logo.svg" + }, { "title": "CSS Wizardry", "hex": "F43059", @@ -2058,6 +2560,11 @@ "hex": "F7DF1E", "source": "https://github.com/cytoscape/cytoscape.js/blob/97c27700feefe2f7b79fca248763049e9a0b38c6/documentation/img/cytoscape-logo.svg" }, + { + "title": "D-EDGE", + "hex": "432975", + "source": "https://github.com/d-edge/JoinUs/blob/main/d-edge.svg" + }, { "title": "D-Wave Systems", "hex": "008CD7", @@ -2066,7 +2573,7 @@ { "title": "D3.js", "hex": "F9A03C", - "source": "https://github.com/d3/d3-logo" + "source": "https://github.com/d3/d3-logo/tree/6d9c471aa852033501d00ca63fe73d9f8be82d1d" }, { "title": "Dacia", @@ -2099,6 +2606,11 @@ "hex": "0175C2", "source": "https://github.com/dart-lang/site-shared/tree/master/src/_assets/image/dart/logo" }, + { + "title": "Darty", + "hex": "EB1B23", + "source": "https://www.darty.com/" + }, { "title": "Das Erste", "hex": "001A4B", @@ -2115,6 +2627,11 @@ "hex": "0E353D", "source": "https://brandfolder.com/dashlane/brandkitpartners" }, + { + "title": "Dask", + "hex": "FDA061", + "source": "https://github.com/dask/dask/blob/fc911b6d481e602f7549eecb180c3f7622260001/docs/source/images/dask_icon.svg" + }, { "title": "Dassault Systèmes", "hex": "005386", @@ -2130,6 +2647,11 @@ "hex": "945DD6", "source": "https://static.iterative.ai/logo/dvc.svg" }, + { + "title": "data.ai", + "hex": "000000", + "source": "https://www.data.ai/en/about/press/" + }, { "title": "Databricks", "hex": "FF3621", @@ -2147,6 +2669,17 @@ "source": "https://www.datadoghq.com/about/resources", "guidelines": "https://www.datadoghq.com/about/resources/" }, + { + "title": "DataGrip", + "hex": "000000", + "source": "https://www.jetbrains.com/company/brand/logos/", + "guidelines": "https://www.jetbrains.com/company/brand/" + }, + { + "title": "Dataiku", + "hex": "2AB1AC", + "source": "https://www.dataiku.com/company/media-kit/" + }, { "title": "DataStax", "hex": "3A3A42", @@ -2249,7 +2782,10 @@ { "title": "Deno", "hex": "000000", - "source": "https://github.com/denoland/deno_website2/blob/892750b99cc260f8b1b2a4bcea59eab9101dd67c/public/logo.svg" + "source": "https://github.com/denoland/dotland/blob/f1ba74327b401b47de678f30d768ff9bf54494b6/public/logo.svg", + "license": { + "type": "MIT" + } }, { "title": "Dependabot", @@ -2281,6 +2817,11 @@ "hex": "0A0A0A", "source": "https://dev.to/" }, + { + "title": "DevExpress", + "hex": "FF7200", + "source": "https://www.devexpress.com/aboutus/" + }, { "title": "DeviantArt", "hex": "05CC47", @@ -2356,8 +2897,8 @@ { "title": "Discord", "hex": "5865F2", - "source": "https://discord.com/brand-new/branding", - "guidelines": "https://discord.com/brand-new/branding" + "source": "https://discord.com/branding", + "guidelines": "https://discord.com/branding" }, { "title": "Discourse", @@ -2377,23 +2918,38 @@ { "title": "Disroot", "hex": "50162D", - "source": "https://git.fosscommunity.in/disroot/assests/blob/master/d.svg" + "source": "https://disroot.org/en" }, { "title": "Django", "hex": "092E20", "source": "https://www.djangoproject.com/community/logos/" }, + { + "title": "Dlib", + "hex": "008000", + "source": "https://github.com/davisking/dlib/blob/8a2c7442074339ac9ffceff6ef5a49e0114222b9/docs/docs/dlib-logo-and-icons.svg" + }, { "title": "DLNA", "hex": "48A842", "source": "https://upload.wikimedia.org/wikipedia/de/e/eb/Digital_Living_Network_Alliance_logo.svg" }, + { + "title": "dm", + "hex": "002878", + "source": "https://www.dm.de/" + }, { "title": "Docker", "hex": "2496ED", "source": "https://www.docker.com/company/newsroom/media-resources" }, + { + "title": "Docs.rs", + "hex": "000000", + "source": "https://docs.rs/" + }, { "title": "DocuSign", "hex": "FFCC22", @@ -2417,7 +2973,30 @@ { "title": "Douban", "hex": "007722", - "source": "https://zh.wikipedia.org/wiki/Douban" + "source": "https://zh.wikipedia.org/wiki/Douban", + "license": { + "type": "custom", + "url": "https://www.douban.com/about/legal#info_data" + } + }, + { + "title": "Douban Read", + "hex": "389EAC", + "source": "https://read.douban.com", + "license": { + "type": "custom", + "url": "https://www.douban.com/about/legal#info_data" + } + }, + { + "title": "DPD", + "hex": "DC0032", + "source": "https://www.dpd.com/" + }, + { + "title": "Dragonframe", + "hex": "D4911E", + "source": "https://dragonframe.com/" }, { "title": "Draugiem.lv", @@ -2432,7 +3011,7 @@ { "title": "Drone", "hex": "212121", - "source": "https://github.com/drone/brand" + "source": "https://github.com/drone/brand/tree/f3ba7a1ad3c35abfe9571ea9c3ea93dff9912955" }, { "title": "Drooble", @@ -2459,11 +3038,27 @@ "hex": "F01A30", "source": "https://about.d.tube/mediakit.html" }, + { + "title": "DuckDB", + "hex": "FFF000", + "source": "https://duckdb.org/" + }, { "title": "DuckDuckGo", "hex": "DE5833", "source": "https://duckduckgo.com/" }, + { + "title": "Dungeons & Dragons", + "hex": "ED1C24", + "source": "https://dnd.wizards.com/articles/features/basicrules", + "guidelines": "https://dnd.wizards.com/articles/features/fan-site-kit", + "aliases": { + "aka": [ + "D&D" + ] + } + }, { "title": "Dunked", "hex": "2DA9D7", @@ -2474,6 +3069,12 @@ "hex": "58CC02", "source": "https://www.duolingo.com/" }, + { + "title": "DVC", + "hex": "13ADC7", + "source": "https://iterative.ai/brand/", + "guidelines": "https://iterative.ai/brand/" + }, { "title": "dwm", "hex": "1177AA", @@ -2489,6 +3090,11 @@ "hex": "1496FF", "source": "https://www.dynatrace.com/company/press-kit/" }, + { + "title": "E.Leclerc", + "hex": "0066CC", + "source": "https://www.e.leclerc/assets/images/sue-logo.svg" + }, { "title": "EA", "hex": "000000", @@ -2534,6 +3140,11 @@ "hex": "782A90", "source": "https://github.com/vert-x3/.github/blob/1ad6612d87f35665e50a00fc32eb9c542556385d/workflow-templates/vertx-favicon.svg" }, + { + "title": "EDEKA", + "hex": "1B66B3", + "source": "https://www.edeka.de/" + }, { "title": "EditorConfig", "hex": "FEFEFE", @@ -2589,6 +3200,11 @@ "hex": "47848F", "source": "https://www.electronjs.org/" }, + { + "title": "electron-builder", + "hex": "FFFFFF", + "source": "https://www.electron.build/" + }, { "title": "Element", "hex": "0DBD8B", @@ -2599,6 +3215,12 @@ "hex": "64BAFF", "source": "https://elementary.io/brand" }, + { + "title": "Elementor", + "hex": "92003B", + "source": "https://elementor.com/logos/", + "guidelines": "https://elementor.com/logos/" + }, { "title": "Eleventy", "hex": "000000", @@ -2660,6 +3282,11 @@ "hex": "0D47A1", "source": "https://www.enpass.io/press/" }, + { + "title": "EnterpriseDB", + "hex": "FF3E00", + "source": "https://www.enterprisedb.com/" + }, { "title": "Envato", "hex": "81B441", @@ -2681,11 +3308,21 @@ "hex": "003399", "source": "https://global.epson.com/IR/library/" }, + { + "title": "Equinix Metal", + "hex": "ED2224", + "source": "https://metal.equinix.com/" + }, { "title": "Erlang", "hex": "A90533", "source": "https://github.com/erlang/erlide_eclipse/blob/99d1d61fde8e32ef1630ca0e1b05a6822b3d6489/meta/media/erlang-logo.svg" }, + { + "title": "esbuild", + "hex": "FFCF00", + "source": "https://github.com/evanw/esbuild/blob/ac542f913908d7326b65eb2e01f0559ed135a40e/images/logo.svg" + }, { "title": "ESEA", "hex": "0E9648", @@ -2712,6 +3349,11 @@ "hex": "E7352C", "source": "https://www.espressif.com/" }, + { + "title": "etcd", + "hex": "419EDA", + "source": "https://cncf-branding.netlify.app/projects/etcd/" + }, { "title": "Ethereum", "hex": "3C3C3D", @@ -2735,7 +3377,7 @@ { "title": "Event Store", "hex": "5AB552", - "source": "https://github.com/eventstore/brand" + "source": "https://github.com/EventStore/Brand/tree/319d6f8dadc2881062917ea5a6dafa675775ea85" }, { "title": "Eventbrite", @@ -2756,6 +3398,17 @@ "type": "CC-BY-3.0" } }, + { + "title": "Exordo", + "hex": "DAA449", + "source": "https://www.exordo.com/" + }, + { + "title": "Exoscale", + "hex": "DA291C", + "source": "https://www.exoscale.com/press/", + "guidelines": "https://www.exoscale.com/press/" + }, { "title": "Expensify", "hex": "0185FF", @@ -2798,6 +3451,11 @@ "hex": "00BAFF", "source": "https://vip.f-secure.com/en/marketing/logos" }, + { + "title": "F1", + "hex": "E10600", + "source": "https://www.formula1.com/" + }, { "title": "Facebook", "hex": "1877F2", @@ -2840,8 +3498,8 @@ }, { "title": "Fandom", - "hex": "00D6D6", - "source": "https://fandomdesignsystem.com/identity/assets" + "hex": "FA005A", + "source": "https://fandomdesignsystem.com/" }, { "title": "FARFETCH", @@ -2873,6 +3531,11 @@ "hex": "9187FF", "source": "https://usefathom.com/brand" }, + { + "title": "Fauna", + "hex": "3A1AB6", + "source": "https://fauna.com/" + }, { "title": "Favro", "hex": "512DA8", @@ -2890,12 +3553,12 @@ }, { "title": "Fedora", - "hex": "294172", - "source": "https://fedoraproject.org/wiki/Logo/UsageGuidelines", - "guidelines": "https://fedoraproject.org/wiki/Logo/UsageGuidelines", + "hex": "51A2DA", + "source": "https://docs.fedoraproject.org/en-US/project/brand/", + "guidelines": "https://fedoraproject.org/wiki/Legal:Trademark_guidelines", "license": { "type": "custom", - "url": "https://fedoraproject.org/wiki/Legal:Trademark_guidelines" + "url": "https://docs.fedoraproject.org/en-US/project/brand/" } }, { @@ -2938,7 +3601,8 @@ { "title": "Figma", "hex": "F24E1E", - "source": "https://brand.figma.com/icon.html" + "source": "https://www.figma.com/using-the-figma-brand/", + "guidelines": "https://www.figma.com/using-the-figma-brand/" }, { "title": "figshare", @@ -2997,6 +3661,11 @@ "hex": "CA0404", "source": "https://www.fite.tv/" }, + { + "title": "FiveM", + "hex": "F40552", + "source": "https://fivem.net/" + }, { "title": "Fiverr", "hex": "1DBF73", @@ -3011,11 +3680,22 @@ "url": "https://github.com/pallets/flask/blob/master/artwork/LICENSE.rst" } }, + { + "title": "Flat", + "hex": "3481FE", + "source": "https://github.com/netless-io/flat/blob/525b2247f36e96ae2f9e6a39b4fe0967152305f2/desktop/renderer-app/src/assets/image/logo.svg" + }, { "title": "Flathub", "hex": "4A86CF", "source": "https://flathub.org/" }, + { + "title": "Flatpak", + "hex": "4A90D9", + "source": "https://flatpak.org/press", + "guidelines": "https://flatpak.org/press" + }, { "title": "Flattr", "hex": "000000", @@ -3046,6 +3726,11 @@ "hex": "4285F4", "source": "https://flood.io/" }, + { + "title": "Fluent Bit", + "hex": "49BDA5", + "source": "https://github.com/fluent/fluent-bit/blob/cdb35721d06242d66a729656282831ccd1589ca2/snap/fluent-bit.svg" + }, { "title": "Fluentd", "hex": "0E83C8", @@ -3060,6 +3745,11 @@ "source": "https://flutter.dev/brand", "guidelines": "https://flutter.dev/brand" }, + { + "title": "Flyway", + "hex": "CC0200", + "source": "https://github.com/flyway/flywaydb.org/blob/8a7923cb9ead016442d4c5caf2e8ba5a9bfad5cf/assets/logo/flyway-logo.png" + }, { "title": "FMOD", "hex": "000000", @@ -3076,10 +3766,15 @@ "hex": "77B829", "source": "https://python-visualization.github.io/folium/" }, + { + "title": "Fonoma", + "hex": "02B78F", + "source": "https://en.fonoma.com/" + }, { "title": "Font Awesome", - "hex": "339AF0", - "source": "https://fontawesome.com/icons/font-awesome" + "hex": "528DD7", + "source": "https://fontawesome.com/v5.15/icons/font-awesome-flag" }, { "title": "FontBase", @@ -3152,6 +3847,16 @@ "hex": "0055FF", "source": "https://framer.com" }, + { + "title": "Framework7", + "hex": "EE350F", + "source": "https://github.com/framework7io/framework7-website/blob/2a1e32290c795c2070ffc7019ba7276614e00de0/public/i/logo.svg" + }, + { + "title": "Franprix", + "hex": "EC6237", + "source": "https://www.franprix.fr/" + }, { "title": "Fraunhofer-Gesellschaft", "hex": "179C7D", @@ -3165,7 +3870,12 @@ { "title": "freeCodeCamp", "hex": "0A0A23", - "source": "https://design-style-guide.freecodecamp.org/" + "source": "https://design-style-guide.freecodecamp.org/", + "guidelines": "https://design-style-guide.freecodecamp.org/", + "license": { + "type": "CC-BY-SA-4.0", + "url": "https://github.com/freeCodeCamp/design-style-guide/blob/cc950c311c61574b6ecbd9e724b6631026e14bfa/LICENSE" + } }, { "title": "freedesktop.org", @@ -3197,6 +3907,12 @@ "hex": "FF0000", "source": "https://www.fujitsu.com/global/about/brandmanagement/logo/" }, + { + "title": "Funimation", + "hex": "5B0BB5", + "source": "https://www.funimation.com/", + "guidelines": "https://brandpad.io/funimationstyleguide" + }, { "title": "Fur Affinity", "hex": "36566F", @@ -3212,12 +3928,23 @@ "hex": "DE00A5", "source": "https://www.futurelearn.com/" }, + { + "title": "G2", + "hex": "FF492C", + "source": "https://www.g2.com", + "guidelines": "https://company.g2.com/brand-resources" + }, { "title": "G2A", "hex": "F05F00", "source": "https://www.g2a.co/documents/", "guidelines": "https://www.g2a.co/documents/" }, + { + "title": "Game & Watch", + "hex": "000000", + "source": "https://upload.wikimedia.org/wikipedia/commons/4/41/Game_and_watch_logo.svg" + }, { "title": "Game Jolt", "hex": "CCFF00", @@ -3241,6 +3968,11 @@ "source": "https://www.gatsbyjs.com/guidelines/logo", "guidelines": "https://www.gatsbyjs.com/guidelines/logo" }, + { + "title": "Géant", + "hex": "DD1F26", + "source": "https://www.geantcasino.fr/" + }, { "title": "GeeksforGeeks", "hex": "2F8D46", @@ -3351,11 +4083,21 @@ "hex": "2088FF", "source": "https://github.com/features/actions" }, + { + "title": "GitHub Pages", + "hex": "222222", + "source": "https://pages.github.com/" + }, { "title": "GitHub Sponsors", "hex": "EA4AAA", "source": "https://github.com/sponsors" }, + { + "title": "gitignore.io", + "hex": "204ECF", + "source": "https://docs.gitignore.io/design/logo" + }, { "title": "GitKraken", "hex": "179287", @@ -3363,8 +4105,9 @@ }, { "title": "GitLab", - "hex": "FCA121", - "source": "https://about.gitlab.com/press/press-kit/" + "hex": "FC6D26", + "source": "https://about.gitlab.com/press/press-kit/", + "guidelines": "https://about.gitlab.com/handbook/marketing/corporate-marketing/brand-activation/trademark-guidelines/" }, { "title": "Gitpod", @@ -3387,6 +4130,11 @@ "hex": "3333FF", "source": "https://glitch.com/about/press/" }, + { + "title": "Globus", + "hex": "CA6201", + "source": "https://www.globus.de/" + }, { "title": "Gmail", "hex": "EA4335", @@ -3395,7 +4143,14 @@ { "title": "GNOME", "hex": "4A86CF", - "source": "https://wiki.gnome.org/Engagement/BrandGuidelines" + "source": "https://wiki.gnome.org/Engagement/BrandGuidelines", + "guidelines": "https://gitlab.gnome.org/Teams/Design/brand/-/blob/master/brand-book.pdf" + }, + { + "title": "GNOME Terminal", + "hex": "241F31", + "source": "https://gitlab.gnome.org/GNOME/gnome-terminal/-/blob/9c32e039bfb7902c136dc7aed3308e027325776c/data/icons/hicolor_apps_scalable_org.gnome.Terminal.svg", + "guidelines": "https://gitlab.gnome.org/Teams/Design/brand/-/blob/master/brand-book.pdf" }, { "title": "GNU", @@ -3408,11 +4163,10 @@ { "title": "GNU Bash", "hex": "4EAA25", - "source": "https://github.com/odb/official-bash-logo", + "source": "https://github.com/odb/official-bash-logo/tree/61eff022f2dad3c7468f5deb4f06652d15f2c143", "guidelines": "https://github.com/odb/official-bash-logo", "license": { - "type": "custom", - "url": "http://artlibre.org/licence/lal/en/" + "type": "MIT" } }, { @@ -3450,6 +4204,12 @@ "source": "https://blog.golang.org/go-brand", "guidelines": "https://blog.golang.org/go-brand" }, + { + "title": "GoCD", + "hex": "94399E", + "source": "https://www.gocd.org/", + "guidelines": "https://www.gocd.org/" + }, { "title": "GoDaddy", "hex": "1BDBDB", @@ -3475,6 +4235,12 @@ "hex": "86328A", "source": "https://www.cdprojekt.com/en/media/logotypes/" }, + { + "title": "GoLand", + "hex": "000000", + "source": "https://www.jetbrains.com/company/brand/#logos-and-icons-jetbrains-logos", + "guidelines": "https://www.jetbrains.com/company/brand/#brand-guidelines" + }, { "title": "GoldenLine", "hex": "FFE005", @@ -3491,6 +4257,11 @@ "source": "https://partnermarketinghub.withgoogle.com/", "guidelines": "https://about.google/brand-resource-center/brand-elements/" }, + { + "title": "Google AdMob", + "hex": "EA4335", + "source": "https://commons.wikimedia.org/wiki/File:Google_AdMob_logo.svg" + }, { "title": "Google Ads", "hex": "4285F4", @@ -3521,11 +4292,6 @@ "hex": "FF7143", "source": "https://arvr.google.com/cardboard/images/header/vr-home.svg" }, - { - "title": "Google Cast", - "hex": "1BB6F6", - "source": "https://www.google.com/intl/en_us/chromecast/built-in/" - }, { "title": "Google Chat", "hex": "00AC47", @@ -3538,7 +4304,7 @@ }, { "title": "Google Classroom", - "hex": "4285F4", + "hex": "0F9D58", "source": "https://classroom.google.com/" }, { @@ -3584,7 +4350,7 @@ { "title": "Google Keep", "hex": "FFBB00", - "source": "https://play.google.com/store/apps/details?id=com.google.android.keep" + "source": "https://about.google/brand-resource-center/logos-list/" }, { "title": "Google Lens", @@ -3596,10 +4362,15 @@ "hex": "4285F4", "source": "https://upload.wikimedia.org/wikipedia/commons/a/a9/Google_Maps_icon.svg" }, + { + "title": "Google Marketing Platform", + "hex": "4285F4", + "source": "https://about.google/brand-resource-center/logos-list/" + }, { "title": "Google Meet", "hex": "00897B", - "source": "https://meet.google.com/" + "source": "https://about.google/brand-resource-center/logos-list/" }, { "title": "Google Messages", @@ -3694,6 +4465,11 @@ ] } }, + { + "title": "Grab", + "hex": "00B14F", + "source": "https://en.wikipedia.org/wiki/File:Grab_(application)_logo.svg" + }, { "title": "Gradle", "hex": "02303A", @@ -3710,11 +4486,16 @@ "hex": "15C39A", "source": "https://www.grammarly.com/media-assets" }, + { + "title": "Grand Frais", + "hex": "ED2D2F", + "source": "https://www.grandfrais.com/" + }, { "title": "GraphQL", - "hex": "E434AA", - "source": "https://github.com/graphql/artwork/blob/ac6ee2ac1cf31ba1be1b8fbc40910f0c70c98a1e/GraphQL/icon/GraphQL-mark-black.svg", - "guidelines": "https://github.com/graphql/artwork" + "hex": "E10098", + "source": "https://graphql.org/brand", + "guidelines": "https://graphql.org/brand" }, { "title": "Grav", @@ -3746,6 +4527,11 @@ "hex": "00A672", "source": "https://gridsome.org/logo/" }, + { + "title": "GroupMe", + "hex": "00AFF0", + "source": "https://groupme.com" + }, { "title": "Groupon", "hex": "53A318", @@ -3763,11 +4549,23 @@ "source": "https://github.com/gruntjs/gruntjs.com/blob/70f43898d9ce8e6cc862ad72bf8a7aee5ca199a9/src/media/grunt-logo-no-wordmark.svg", "guidelines": "https://github.com/gruntjs/grunt-docs/blob/main/Grunt-Brand-Guide.md" }, + { + "title": "GTK", + "hex": "7FE719", + "source": "https://commons.wikimedia.org/wiki/File:GTK_logo.svg", + "guidelines": "https://foundation.gnome.org/logo-and-trademarks/" + }, { "title": "Guangzhou Metro", "hex": "C51935", "source": "https://commons.wikimedia.org/wiki/File:Guangzhou_Metro_logo.svg" }, + { + "title": "Guilded", + "hex": "F5C400", + "source": "https://www.guilded.gg/brand", + "guidelines": "https://www.guilded.gg/brand" + }, { "title": "gulp", "hex": "CF4647", @@ -3787,6 +4585,16 @@ "hex": "72EF36", "source": "https://www.gumtree.com" }, + { + "title": "Gunicorn", + "hex": "499848", + "source": "https://github.com/benoitc/gunicorn/blob/ff58e0c6da83d5520916bc4cc109a529258d76e1/docs/logo/gunicorn.svg" + }, + { + "title": "Gurobi", + "hex": "EE3524", + "source": "https://cdn.gurobi.com/wp-content/uploads/2021/02/Gurobi-Optimization_Corporate-Brochure.pdf" + }, { "title": "Gutenberg", "hex": "000000", @@ -3839,6 +4647,11 @@ "source": "https://www.hackster.io/branding#logos", "guidelines": "https://www.hackster.io/branding" }, + { + "title": "Handlebars.js", + "hex": "000000", + "source": "https://raw.githubusercontent.com/handlebars-lang/docs/master/src/.vuepress/public/icons/handlebarsjs-icon.svg" + }, { "title": "Handshake", "hex": "FF2F1C", @@ -3903,6 +4716,11 @@ "source": "https://www.hcl.com/brand-guidelines", "guidelines": "https://www.hcl.com/brand-guidelines" }, + { + "title": "Headless UI", + "hex": "66E3FF", + "source": "https://headlessui.dev/" + }, { "title": "Headspace", "hex": "F47D31", @@ -3923,6 +4741,11 @@ "hex": "0F1689", "source": "https://helm.sh" }, + { + "title": "Help Scout", + "hex": "1292EE", + "source": "https://www.helpscout.com" + }, { "title": "HelpDesk", "hex": "FFD000", @@ -3940,6 +4763,11 @@ "source": "https://brand.heroku.com/", "guidelines": "https://brand.heroku.com/" }, + { + "title": "Hetzner", + "hex": "D50C2D", + "source": "https://www.hetzner.com/" + }, { "title": "Hexo", "hex": "0E83CD", @@ -3950,6 +4778,16 @@ "hex": "5522FA", "source": "https://hey.com/" }, + { + "title": "Hi Bob", + "hex": "E42C51", + "source": "https://www.hibob.com/", + "aliases": { + "aka": [ + "Bob" + ] + } + }, { "title": "Hibernate", "hex": "59666C", @@ -4061,6 +4899,11 @@ "hex": "E34F26", "source": "http://www.w3.org/html/logo/" }, + { + "title": "HTTPie", + "hex": "73DC8C", + "source": "https://github.com/httpie/httpie/blob/d262181bede5241a6b692c3245a77e2eb02bc262/docs/httpie-logo.svg" + }, { "title": "Huawei", "hex": "FF0000", @@ -4125,6 +4968,11 @@ "source": "https://en.wikipedia.org/wiki/File:Hyundai_Motor_Company_logo.svg", "guidelines": "https://www.hyundai.pl/fileadmin/user_upload/media/logo/201607_HYU_Guideline_ENG_small.pdf" }, + { + "title": "i18next", + "hex": "26A69A", + "source": "https://github.com/i18next/i18next-gitbook/blob/32efcfd9c59ae55cc63a60e633dbc1651c7950ad/assets/img/logo.svg" + }, { "title": "Iata", "hex": "004E81", @@ -4141,11 +4989,21 @@ "source": "https://www.ibm.com/design/language/ibm-logos/8-bar/", "guidelines": "https://www.ibm.com/design/language/ibm-logos/8-bar/" }, + { + "title": "IBM Cloud", + "hex": "1261FE", + "source": "https://www.ibm.com/brand/systems/cloud/brand/logo" + }, { "title": "IBM Watson", "hex": "BE95FF", "source": "https://www.ibm.com/brand/systems/watson/brand/" }, + { + "title": "Iceland", + "hex": "CC092F", + "source": "https://www.iceland.co.uk/" + }, { "title": "Icinga", "hex": "06062C", @@ -4283,6 +5141,11 @@ "hex": "783CBD", "source": "https://ingress.com/assets/fonts/ingress_icons.woff" }, + { + "title": "Inkdrop", + "hex": "7A78D7", + "source": "https://site-cdn.inkdrop.app/site/icons/inkdrop-icon.svg" + }, { "title": "Inkscape", "hex": "000000", @@ -4293,7 +5156,7 @@ }, { "title": "Insomnia", - "hex": "5849BE", + "hex": "4000BF", "source": "https://insomnia.rest/" }, { @@ -4312,6 +5175,11 @@ "hex": "1F1F1F", "source": "https://www.instapaper.com/" }, + { + "title": "Instatus", + "hex": "4EE3C2", + "source": "https://www.instatus.com/" + }, { "title": "Instructables", "hex": "FABF15", @@ -4333,12 +5201,22 @@ "source": "https://www.jetbrains.com/idea/", "guidelines": "https://www.jetbrains.com/company/brand/" }, + { + "title": "InteractJS", + "hex": "2599ED", + "source": "https://github.com/taye/interact.js/blob/603c34d4b34dece8a260381e2e5991b810d6d739/img/ijs-icon.svg" + }, { "title": "Intercom", "hex": "6AFDEF", "source": "https://www.intercom.com/press", "guidelines": "https://www.intercom.com/press" }, + { + "title": "Intermarche", + "hex": "E2001A", + "source": "https://www.intermarche.com/" + }, { "title": "Internet Archive", "hex": "666666", @@ -4375,6 +5253,11 @@ "hex": "3880FF", "source": "https://ionicframework.com/press" }, + { + "title": "Ionos", + "hex": "003D8F", + "source": "https://www.ionos.de" + }, { "title": "iOS", "hex": "000000", @@ -4392,7 +5275,10 @@ { "title": "IPFS", "hex": "65C2CB", - "source": "https://github.com/ipfs/logo" + "source": "https://github.com/ipfs-inactive/logo/tree/73169b495332415b174ac2f37ec27c4b2ee8da83", + "license": { + "type": "CC-BY-SA-3.0" + } }, { "title": "Issuu", @@ -4400,12 +5286,22 @@ "source": "https://issuu.com/press", "guidelines": "https://issuu.com/press" }, + { + "title": "Istio", + "hex": "466BB0", + "source": "https://github.com/istio/istio/blob/5a047251817eb2523af297607b7614120812e47a/logo/istio-bluelogo-whitebackground-unframed.svg" + }, { "title": "Itch.io", "hex": "FA5C5C", "source": "https://itch.io/press-kit", "guidelines": "https://itch.io/press-kit" }, + { + "title": "iTerm2", + "hex": "000000", + "source": "https://github.com/gnachman/iTerm2/blob/6a857f3f5872eb1465ddc0dd83412015991e79ae/images/AppIcon/iTermIcon.sketch" + }, { "title": "iTunes", "hex": "FB5BC5", @@ -4451,16 +5347,10 @@ "hex": "8A4182", "source": "https://github.com/jasmine/jasmine/blob/8991b1bba39b5b7e89fc5eeb07ae271a684cb1a4/images/jasmine-horizontal.svg" }, - { - "title": "Java", - "hex": "007396", - "source": "https://www.oracle.com/legal/logos.html", - "guidelines": "https://www.oracle.com/legal/logos.html" - }, { "title": "JavaScript", "hex": "F7DF1E", - "source": "https://github.com/voodootikigod/logo.js", + "source": "https://github.com/voodootikigod/logo.js/tree/1544bdeed6d618a6cfe4f0650d04ab8d9cfa76d9", "license": { "type": "MIT" } @@ -4508,7 +5398,7 @@ { "title": "Jenkins X", "hex": "73C3D5", - "source": "https://github.com/cdfoundation/artwork" + "source": "https://github.com/cdfoundation/artwork/tree/358a7db882463b68f59ae9bc669b8f97c4539ffd" }, { "title": "Jest", @@ -4526,6 +5416,11 @@ "source": "https://www.jetbrains.com/company/brand/logos/", "guidelines": "https://www.jetbrains.com/company/brand/" }, + { + "title": "Jetpack Compose", + "hex": "4285F4", + "source": "https://developer.android.com/jetpack/compose/" + }, { "title": "JFrog", "hex": "41BF47", @@ -4571,6 +5466,11 @@ "source": "https://docs.joomla.org/Joomla:Brand_Identity_Elements/Official_Logo", "guidelines": "https://docs.joomla.org/Joomla:Brand_Identity_Elements" }, + { + "title": "Joplin", + "hex": "1071D3", + "source": "https://github.com/laurent22/joplin/blob/45e35576bd8b1bb0ffe958309cc1ab3736cc266b/Assets/JoplinLetter.svg" + }, { "title": "Jordan", "hex": "000000", @@ -4579,7 +5479,10 @@ { "title": "JPEG", "hex": "8A8A8A", - "source": "https://jpeg.org/contact.html" + "source": "https://jpeg.org/contact.html", + "license": { + "type": "CC-BY-ND-4.0" + } }, { "title": "jQuery", @@ -4649,6 +5552,21 @@ "hex": "AD29B6", "source": "https://justgiving.com" }, + { + "title": "K3s", + "hex": "FFC61C", + "source": "https://k3s.io/" + }, + { + "title": "k6", + "hex": "7D64FF", + "source": "https://commons.wikimedia.org/wiki/File:K6-logo.svg", + "aliases": { + "aka": [ + "Grafana k6" + ] + } + }, { "title": "Kaggle", "hex": "20BEFF", @@ -4682,6 +5600,11 @@ "source": "https://www.kali.org/docs/policy/trademark/", "guidelines": "https://www.kali.org/docs/policy/trademark/" }, + { + "title": "Kaniko", + "hex": "FFA600", + "source": "https://github.com/GoogleContainerTools/kaniko/blob/cf5ca26aa4e2f7bf0de56efdf3b4e86b0ff74ed0/logo/Kaniko-Logo-Monochrome.svg" + }, { "title": "Karlsruher Verkehrsverbund", "hex": "9B2321", @@ -4728,10 +5651,15 @@ "source": "https://kdenlive.org/en/logo/", "guidelines": "https://kdenlive.org/en/logo/" }, + { + "title": "Keep a Changelog", + "hex": "E05735", + "source": "https://keepachangelog.com/" + }, { "title": "KeePassXC", "hex": "6CAC4D", - "source": "https://github.com/keepassxreboot/keepassxc/" + "source": "https://github.com/keepassxreboot/keepassxc/tree/3fdafc6d25e85050976e0cc645db579086db3f45" }, { "title": "Kentico", @@ -4790,6 +5718,14 @@ "hex": "005571", "source": "https://www.elastic.co/brand" }, + { + "title": "KiCad", + "hex": "314CB0", + "source": "https://www.kicad.org/about/kicad/", + "license": { + "type": "GPL-3.0-or-later" + } + }, { "title": "Kickstarter", "hex": "05CE78", @@ -4800,6 +5736,26 @@ "hex": "82BC23", "source": "https://www.kik.com/news/" }, + { + "title": "Kingston Technology", + "aliases": { + "aka": [ + "Kingston" + ] + }, + "hex": "000000", + "source": "https://www.kingston.com/" + }, + { + "title": "KinoPoisk", + "hex": "FF6600", + "source": "https://www.kinopoisk.ru/", + "aliases": { + "loc": { + "ru-RU": "КиноПоиск" + } + } + }, { "title": "Kirby", "hex": "000000", @@ -4825,6 +5781,12 @@ "hex": "FF5722", "source": "https://www.klook.com/en-GB/newsroom/" }, + { + "title": "Knative", + "hex": "0865AD", + "source": "https://github.com/knative/community/blob/fb49068c9b7619685248247d29e48eb3d96f3ac2/icons/logo.svg", + "guidelines": "https://github.com/knative/community/blob/main/BRANDING.MD" + }, { "title": "KnowledgeBase", "hex": "FFD000", @@ -4842,16 +5804,21 @@ "source": "https://more.ko-fi.com/brand-assets", "guidelines": "https://more.ko-fi.com/brand-assets" }, + { + "title": "Koa", + "hex": "33333D", + "source": "https://koajs.com/" + }, + { + "title": "Koc", + "hex": "F9423A", + "source": "https://www.koc.com.tr/en" + }, { "title": "Kodi", "hex": "17B2E7", "source": "https://kodi.tv/" }, - { - "title": "Koding", - "hex": "00B057", - "source": "https://koding.com/About" - }, { "title": "Kofax", "hex": "00558C", @@ -4863,6 +5830,17 @@ "source": "http://newsroom.komoot.com/media_kits/219423/", "guidelines": "http://newsroom.komoot.com/media_kits/219423/" }, + { + "title": "Konami", + "hex": "B60014", + "source": "https://commons.wikimedia.org/wiki/File:Konami_4th_logo_2.svg" + }, + { + "title": "Kong", + "hex": "003459", + "source": "https://konghq.com/brand-assets/", + "guidelines": "https://konghq.com/brand/" + }, { "title": "Kongregate", "hex": "990000", @@ -4875,10 +5853,15 @@ }, { "title": "Kotlin", - "hex": "0095D5", - "source": "https://resources.jetbrains.com/storage/products/kotlin/docs/kotlin_logos.zip", + "hex": "7F52FF", + "source": "https://www.jetbrains.com/company/brand/logos/", "guidelines": "https://www.jetbrains.com/company/brand/" }, + { + "title": "Koyeb", + "hex": "121212", + "source": "https://www.koyeb.com/" + }, { "title": "Krita", "hex": "3BABFF", @@ -4889,6 +5872,12 @@ "hex": "FF6600", "source": "https://ktm.com" }, + { + "title": "Kuaishou", + "hex": "FF4906", + "source": "https://www.kuaishou.com/official/material-lib", + "guidelines": "https://www.kuaishou.com/official/material-lib" + }, { "title": "Kubernetes", "hex": "326CE5", @@ -4899,6 +5888,11 @@ "hex": "0079C1", "source": "https://kubuntu.org" }, + { + "title": "Kuma", + "hex": "290B53", + "source": "https://cncf-branding.netlify.app/projects/kuma/" + }, { "title": "Kyocera", "hex": "DF0522", @@ -4925,6 +5919,11 @@ "hex": "005A2B", "source": "https://media.landrover.com/en/press-kit" }, + { + "title": "Lapce", + "hex": "3B82F6", + "source": "https://github.com/lapce/lapce/blob/95c4cf2d87083e348c0b621d0be0ea17f79ed703/extra/images/logo.svg" + }, { "title": "Laragon", "hex": "0E83CD", @@ -4933,7 +5932,7 @@ { "title": "Laravel", "hex": "FF2D20", - "source": "https://github.com/laravel/art" + "source": "https://github.com/laravel/art/tree/5a8325b064634b900f25dbb6f1cafd888b2d2211" }, { "title": "Laravel Horizon", @@ -4959,7 +5958,7 @@ { "title": "LaTeX", "hex": "008080", - "source": "https://github.com/latex3/branding" + "source": "https://github.com/latex3/branding/tree/9def6b5f6075567d62b67424e11dbe6d4d5245b4" }, { "title": "Launchpad", @@ -4970,12 +5969,22 @@ "type": "CC-BY-ND-2.0" } }, + { + "title": "Lazarus", + "hex": "000000", + "source": "https://sourceforge.net/projects/lazarus/" + }, { "title": "LBRY", "hex": "2F9176", "source": "https://lbry.com/press-kit", "guidelines": "https://lbry.com/faq/acceptable-use-policy" }, + { + "title": "Leader Price", + "hex": "E50005", + "source": "https://www.leaderprice.fr" + }, { "title": "Leaflet", "hex": "199900", @@ -4992,18 +6001,38 @@ "hex": "FFA116", "source": "https://leetcode.com/store" }, + { + "title": "Lemmy", + "hex": "FFFFFF", + "source": "https://join-lemmy.org" + }, { "title": "Lenovo", "hex": "E2231A", "source": "https://news.lenovo.com/press-kits/" }, + { + "title": "Lens", + "hex": "3D90CE", + "source": "https://github.com/lensapp/lens/blob/3cc12d9599b655a366e7a34c356d2a84654b2466/docs/img/lens-logo-icon.svg" + }, + { + "title": "Lerna", + "hex": "9333EA", + "source": "https://github.com/lerna/logo/blob/fb18db535d71aacc6ffb0f6b75a0c3bd9e353543/lerna.svg" + }, + { + "title": "Leroy Merlin", + "hex": "78BE20", + "source": "https://www.leroymerlin.fr/" + }, { "title": "Less", "hex": "1D365D", "source": "https://github.com/less/logo/blob/c9c10c328cfc00071e92443934b35e389310abf8/less_logo.ai" }, { - "title": "Let’s Encrypt", + "title": "Let's Encrypt", "hex": "003A70", "source": "https://letsencrypt.org/trademarks/", "guidelines": "https://letsencrypt.org/trademarks/", @@ -5016,6 +6045,11 @@ "hex": "00D735", "source": "https://letterboxd.com/about/logos/" }, + { + "title": "levels.fyi", + "hex": "788B95", + "source": "https://www.levels.fyi/press/" + }, { "title": "LG", "hex": "A50034", @@ -5062,6 +6096,11 @@ "hex": "000000", "source": "https://lichess.org/about" }, + { + "title": "Lidl", + "hex": "0050AA", + "source": "https://www.lidl.de/" + }, { "title": "LIFX", "hex": "000000", @@ -5085,12 +6124,27 @@ "source": "https://www.lineageos.org/", "guidelines": "https://docs.google.com/presentation/d/1VmxFrVqkjtNMjZbAcrC4egp8C_So7gjJR3KuxdJfJDo/edit?usp=sharing" }, + { + "title": "Linear", + "hex": "5E6AD2", + "source": "https://linear.app/" + }, { "title": "LinkedIn", "hex": "0A66C2", "source": "https://brand.linkedin.com", "guidelines": "https://brand.linkedin.com/policies" }, + { + "title": "Linkerd", + "hex": "2BEDA7", + "source": "https://cncf-branding.netlify.app/projects/linkerd/" + }, + { + "title": "Linkfire", + "hex": "FF3850", + "source": "https://www.linkfire.com/" + }, { "title": "Linktree", "hex": "39E09B", @@ -5127,6 +6181,12 @@ "hex": "ED3237", "source": "https://lionairthai.com/en/" }, + { + "title": "Liquibase", + "hex": "2962FF", + "source": "https://www.liquibase.com/brand", + "guidelines": "https://www.liquibase.com/brand" + }, { "title": "Lit", "hex": "324FFF", @@ -5149,6 +6209,11 @@ "hex": "00B0EA", "source": "http://www.livejournal.com" }, + { + "title": "Livewire", + "hex": "4E56A6", + "source": "https://laravel-livewire.com/" + }, { "title": "LLVM", "hex": "262D3A", @@ -5159,6 +6224,11 @@ "hex": "10B146", "source": "https://lmms.io/branding" }, + { + "title": "Lodash", + "hex": "3492FF", + "source": "https://github.com/lodash/lodash.com/blob/c8d41c62b446f08905fd94802db4da8da05d3e92/assets/img/lodash.svg" + }, { "title": "Logitech", "hex": "00B8FC", @@ -5191,6 +6261,11 @@ "hex": "F29400", "source": "https://loop.frontiersin.org/" }, + { + "title": "LoopBack", + "hex": "3F5DFF", + "source": "https://loopback.io/resources" + }, { "title": "Lospec", "hex": "EAEAEA", @@ -5213,6 +6288,11 @@ "hex": "0068C8", "source": "https://lubuntu.net/" }, + { + "title": "Ludwig", + "hex": "FFFFFF", + "source": "https://github.com/ludwig-ai/ludwig-docs/blob/8d8abb2117a93af2622a6545943c773b27153e1b/docs/images/ludwig_icon.svg" + }, { "title": "Lufthansa", "hex": "05164D", @@ -5223,6 +6303,11 @@ "hex": "E74430", "source": "https://lumen.laravel.com/" }, + { + "title": "Lunacy", + "hex": "179DE3", + "source": "https://icons8.com/lunacy" + }, { "title": "Lydia", "hex": "0180FF", @@ -5248,10 +6333,15 @@ "source": "https://commons.wikimedia.org/wiki/File:MacOS_wordmark_(2017).svg" }, { - "title": "Macy’s", + "title": "Macy's", "hex": "E21A2C", "source": "https://www.macysinc.com/news-media/media-assets" }, + { + "title": "Magasins U", + "hex": "E71B34", + "source": "https://www.magasins-u.com" + }, { "title": "Magento", "hex": "EE672F", @@ -5273,6 +6363,11 @@ "source": "http://mailchimp.com/about/brand-assets", "guidelines": "http://mailchimp.com/about/brand-assets" }, + { + "title": "Mailgun", + "hex": "F06B66", + "source": "https://mailgun.com" + }, { "title": "Major League Hacking", "hex": "265A8F", @@ -5284,6 +6379,11 @@ "hex": "FF1E0D", "source": "http://www.makerbot.com/makerbot-press-assets" }, + { + "title": "MAMP", + "hex": "02749C", + "source": "https://www.mamp.info/en/mamp/mac/" + }, { "title": "MAN", "hex": "E40045", @@ -5319,7 +6419,7 @@ { "title": "Markdown", "hex": "000000", - "source": "https://github.com/dcurtis/markdown-mark", + "source": "https://github.com/dcurtis/markdown-mark/tree/360a3657fef7f6ad0b303296a95ad52985caa0d3", "guidelines": "https://github.com/dcurtis/markdown-mark", "license": { "type": "CC0-1.0" @@ -5330,6 +6430,11 @@ "hex": "5C4C9F", "source": "https://www.marketo.com/" }, + { + "title": "Marko", + "hex": "2596BE", + "source": "https://github.com/marko-js/website/blob/c03b8229e8fe8e01fde6c0772bc1cb0ceae9be05/src/logos/marko.svg" + }, { "title": "Marriott", "hex": "A70023", @@ -5369,11 +6474,6 @@ "type": "Apache-2.0" } }, - { - "title": "Material-UI", - "hex": "0081CB", - "source": "https://material-ui.com/" - }, { "title": "Matomo", "hex": "3152A0", @@ -5384,6 +6484,11 @@ "hex": "000000", "source": "https://matrix.org" }, + { + "title": "Matter.js", + "hex": "4B5562", + "source": "https://brm.io/matter-js" + }, { "title": "Mattermost", "hex": "0058CC", @@ -5430,10 +6535,20 @@ "hex": "FF0000", "source": "https://cars.mclaren.com/" }, + { + "title": "mdBook", + "hex": "000000", + "source": "https://github.com/rust-lang/mdBook/blob/cdfa5ad9909e2cba8390688f3f0686fb70cb4bef/src/theme/favicon.svg" + }, { "title": "MDN Web Docs", "hex": "000000", - "source": "https://developer.mozilla.org/" + "source": "https://github.com/mdn/yari/blob/77e6cda02f7013219e9da27a00b9424085e60fdb/client/src/assets/mdn-logo.svg" + }, + { + "title": "MDX", + "hex": "1B1F24", + "source": "https://github.com/mdx-js/mdx/blob/b8a76c95deb14f7297bafdac1aa3eddd2b0fbb8f/docs/_static/icon.svg" }, { "title": "MediaFire", @@ -5441,6 +6556,11 @@ "source": "https://www.mediafire.com/developers/brand_assets/mediafire_brand_assets/", "guidelines": "https://www.mediafire.com/developers/brand_assets/mediafire_brand_assets/" }, + { + "title": "MediaMarkt", + "hex": "DF0000", + "source": "https://www.mediamarkt.de/" + }, { "title": "MediaTek", "hex": "EC9430", @@ -5477,6 +6597,11 @@ "hex": "242424", "source": "https://www.mercedes-benz.com/" }, + { + "title": "Merck", + "hex": "007A73", + "source": "https://www.merck.com/" + }, { "title": "Mercurial", "hex": "999999", @@ -5492,6 +6617,12 @@ "source": "https://en.facebookbrand.com/facebookapp/assets/messenger/", "guidelines": "https://en.facebookbrand.com/facebookapp/assets/messenger/" }, + { + "title": "Meta", + "hex": "0467DF", + "source": "https://www.meta.com", + "guidelines": "https://www.facebook.com/brand/resources/meta/company-brand" + }, { "title": "Metabase", "hex": "509EE3", @@ -5632,6 +6763,11 @@ "hex": "6264A7", "source": "https://developer.microsoft.com/en-us/fluentui#/styles/web/colors/products" }, + { + "title": "Microsoft Translator", + "hex": "057B00", + "source": "https://translator.microsoft.com" + }, { "title": "Microsoft Visio", "hex": "3955A3", @@ -5702,6 +6838,21 @@ "source": "https://www.mixcloud.com/about", "guidelines": "https://www.mixcloud.com/about" }, + { + "title": "MLB", + "hex": "041E42", + "source": "https://www.mlb.com/", + "aliases": { + "aka": [ + "Major League Baseball" + ] + } + }, + { + "title": "MLflow", + "hex": "0194E2", + "source": "https://github.com/mlflow/mlflow/blob/855881f93703b15ffe643003fb4d7c84f0ec2502/assets/icon.svg" + }, { "title": "MobX", "hex": "FF9955", @@ -5742,6 +6893,11 @@ "hex": "FF6600", "source": "https://www.getmonero.org/press-kit/" }, + { + "title": "MoneyGram", + "hex": "FF6600", + "source": "https://moneygram.com" + }, { "title": "MongoDB", "hex": "47A248", @@ -5752,6 +6908,16 @@ "hex": "1A52C2", "source": "https://www.monkey-tie.com" }, + { + "title": "MonoGames", + "hex": "E73C00", + "source": "https://www.monogame.net" + }, + { + "title": "Monoprix", + "hex": "FB1911", + "source": "https://www.monoprix.fr/" + }, { "title": "Monster", "hex": "6D4C9F", @@ -5767,6 +6933,11 @@ "hex": "00945E", "source": "https://www.moo.com/uk/about/press" }, + { + "title": "Morrisons", + "hex": "007531", + "source": "https://groceries.morrisons.com" + }, { "title": "Moscow Metro", "hex": "D9232E", @@ -5783,6 +6954,21 @@ "source": "https://mozilla.design/mozilla/", "guidelines": "https://mozilla.design/mozilla/" }, + { + "title": "MSI", + "aliases": { + "aka": [ + "Micro-Star International" + ] + }, + "hex": "FF0000", + "source": "https://www.msi.com/page/brochure" + }, + { + "title": "MSI Business", + "hex": "9A8555", + "source": "https://www.msi.com/Business-Productivity" + }, { "title": "MTA", "hex": "0039A6", @@ -5793,6 +6979,27 @@ "hex": "AC2E45", "source": "https://commons.wikimedia.org/wiki/File:MTR_(logo_with_text).svg" }, + { + "title": "MUI", + "aliases": { + "aka": [ + "Material-UI" + ] + }, + "hex": "007FFF", + "source": "https://github.com/mui-org/material-ui/blob/353cecb5391571163eb6bd8cbf36d2dd299aaf56/docs/src/icons/SvgMuiLogo.tsx" + }, + { + "title": "Mulesoft", + "hex": "00A0DF", + "source": "https://www.mulesoft.com/brand", + "guidelines": "https://www.mulesoft.com/brand" + }, + { + "title": "Müller", + "hex": "F46519", + "source": "https://www.mueller.de/" + }, { "title": "Mumble", "hex": "FFFFFF", @@ -5878,7 +7085,14 @@ { "title": "Naver", "hex": "03C75A", - "source": "https://www.navercorp.com/investment/annualReport" + "source": "https://developers.naver.com/docs/login/bi/bi.md", + "guidelines": "https://developers.naver.com/docs/login/bi/bi.md", + "aliases": { + "loc": { + "ko-KR": "네이버", + "ja-JP": "ネイバー" + } + } }, { "title": "NBA", @@ -5925,6 +7139,12 @@ "source": "http://www.netapp.com/", "guidelines": "https://www.netapp.com/company/legal/trademark-guidelines/" }, + { + "title": "NetBSD", + "hex": "FF6600", + "source": "https://www.netbsd.org", + "guidelines": "https://www.netbsd.org/about/disclaimer.html" + }, { "title": "Netflix", "hex": "E50914", @@ -5952,6 +7172,16 @@ "source": "https://nette.org/en/logo", "guidelines": "https://nette.org/en/logo" }, + { + "title": "Netto", + "hex": "FFE500", + "source": "https://www.netto-online.de/INTERSHOP/static/WFS/Plus-NettoDE-Site/-/-/de_DE/css/images/netto-logo.svg" + }, + { + "title": "New Balance", + "hex": "CF0A2C", + "source": "https://www.newbalance.com" + }, { "title": "New Japan Pro-Wrestling", "hex": "FF160B", @@ -6087,6 +7317,11 @@ "hex": "124191", "source": "https://www.nokia.com/" }, + { + "title": "Norco", + "hex": "00FF00", + "source": "https://www.norco.com/" + }, { "title": "NordVPN", "hex": "4687FF", @@ -6118,6 +7353,11 @@ "hex": "000000", "source": "https://www.lingoapp.com/6/s/oJkq3W/?v=3" }, + { + "title": "NOW", + "hex": "001211", + "source": "https://www.nowtv.com/" + }, { "title": "npm", "hex": "CB3837", @@ -6160,6 +7400,11 @@ "source": "https://numpy.org/press-kit/", "guidelines": "https://github.com/numpy/numpy/blob/main/branding/logo/logoguidelines.md" }, + { + "title": "Nunjucks", + "hex": "1C4913", + "source": "https://github.com/mozilla/nunjucks/blob/master/docs/img/favicon.png" + }, { "title": "Nutanix", "hex": "024DA1", @@ -6167,8 +7412,9 @@ }, { "title": "Nuxt.js", - "hex": "00C58E", - "source": "https://nuxtjs.org/design" + "hex": "00DC82", + "source": "https://nuxtjs.org/design", + "guidelines": "https://nuxtjs.org/design" }, { "title": "NVIDIA", @@ -6180,6 +7426,18 @@ "hex": "143055", "source": "https://nx.dev/" }, + { + "title": "NZXT", + "hex": "000000", + "source": "https://nzxt.com/", + "guidelines": "https://nzxt.com/about/brand-guidelines" + }, + { + "title": "O'Reilly", + "hex": "D3002D", + "source": "https://www.oreilly.com/about/logos/", + "guidelines": "https://www.oreilly.com/about/logos/" + }, { "title": "OBS Studio", "hex": "302E31", @@ -6190,6 +7448,11 @@ "hex": "353E58", "source": "https://observablehq.com/" }, + { + "title": "Obsidian", + "hex": "483699", + "source": "https://obsidian.md/" + }, { "title": "OCaml", "hex": "EC6813", @@ -6199,11 +7462,26 @@ "type": "Unlicense" } }, + { + "title": "Octane Render", + "hex": "000000", + "source": "https://render.otoy.com/forum/viewtopic.php?f=9&t=359", + "aliases": { + "aka": [ + "otoy" + ] + } + }, { "title": "Octave", "hex": "0790C0", "source": "https://www.gnu.org/software/octave/" }, + { + "title": "OctoPrint", + "hex": "13C100", + "source": "https://github.com/OctoPrint/OctoPrint/blob/53b9b6185781c07e8c4744a6e28462e96448f249/src/octoprint/static/img/mask.svg" + }, { "title": "Octopus Deploy", "hex": "2F93E0", @@ -6226,6 +7504,11 @@ "hex": "EF1970", "source": "https://odysee.com/@OdyseeHelp:b/odyseepresskit:b" }, + { + "title": "Oh Dear", + "hex": "FFFFFF", + "source": "https://ohdear.app/logos" + }, { "title": "okcupid", "hex": "0500BE", @@ -6248,6 +7531,11 @@ "source": "https://onlyfans.com/brand", "guidelines": "https://onlyfans.com/brand" }, + { + "title": "ONLYOFFICE", + "hex": "444444", + "source": "https://www.onlyoffice.com/en/press-downloads.aspx" + }, { "title": "ONNX", "hex": "005CED", @@ -6336,16 +7624,38 @@ "hex": "F78C40", "source": "https://openid.net/add-openid/logos/" }, + { + "title": "OpenJDK", + "hex": "FFFFFF", + "source": "https://hg.openjdk.java.net/duke/duke/file/ca00f100dafc/vector/Agent.svg#l1" + }, { "title": "Openlayers", "hex": "1F6B75", "source": "https://github.com/openlayers/openlayers.github.io/blob/5b93e18b8d302eb49a812fb96abb529895ceb7a2/assets/logo.svg" }, + { + "title": "OpenMined", + "hex": "ED986C", + "source": "https://www.openmined.org/", + "guidelines": "https://www.openmined.org/" + }, { "title": "OpenNebula", "hex": "0097C2", "source": "https://opennebula.io/docs/" }, + { + "title": "OpenSea", + "hex": "2081E2", + "source": "https://docs.opensea.io" + }, + { + "title": "OpenSearch", + "hex": "005EB8", + "source": "https://opensearch.org/brand.html", + "guidelines": "https://opensearch.org/brand.html" + }, { "title": "OpenSSL", "hex": "721412", @@ -6369,6 +7679,27 @@ "source": "https://github.com/openSUSE/artwork/blob/33e94aa76837c09f03d1712705949b71a246a53b/logos/buttons/button-colour.svg", "guidelines": "https://en.opensuse.org/Portal:Artwork" }, + { + "title": "OpenTelemetry", + "hex": "000000", + "source": "https://cncf-branding.netlify.app/projects/opentelemetry/", + "guidelines": "https://cncf-branding.netlify.app/projects/opentelemetry/", + "license": { + "type": "CC-BY-4.0", + "url": "https://www.linuxfoundation.org/trademark-usage/" + }, + "aliases": { + "aka": [ + "OTel" + ] + } + }, + { + "title": "Openverse", + "hex": "FFE033", + "source": "https://github.com/WordPress/openverse/blob/main/brand/icon.svg", + "guidelines": "https://www.figma.com/file/GIIQ4sDbaToCfFQyKMvzr8/Openverse-Design-Library?node-id=312%3A487" + }, { "title": "OpenVPN", "hex": "EA7E20", @@ -6381,6 +7712,16 @@ "source": "https://openwrt.org/docs/guide-graphic-designer/openwrt-logo", "guidelines": "https://openwrt.org/docs/guide-graphic-designer/openwrt-logo" }, + { + "title": "OpenZeppelin", + "hex": "4E5EE4", + "source": "https://openzeppelin.com/" + }, + { + "title": "OpenZFS", + "hex": "2A667F", + "source": "https://commons.wikimedia.org/wiki/File:OpenZFS_logo.svg" + }, { "title": "Opera", "hex": "FF1B2D", @@ -6449,6 +7790,11 @@ "source": "https://osu.ppy.sh/wiki/vi/Brand_identity_guidelines", "guidelines": "https://osu.ppy.sh/wiki/vi/Brand_identity_guidelines" }, + { + "title": "Otto", + "hex": "D4021D", + "source": "https://www.ottogroup.com/en/presse/material.php" + }, { "title": "Overcast", "hex": "FC7E0F", @@ -6493,6 +7839,12 @@ "type": "MIT" } }, + { + "title": "Packer", + "hex": "02A8EF", + "source": "https://www.hashicorp.com/brand", + "guidelines": "https://www.hashicorp.com/brand" + }, { "title": "Paddy Power", "hex": "004833", @@ -6547,6 +7899,11 @@ "source": "https://projects.invisionapp.com/boards/8UOJQWW2J3G5#/1145336", "guidelines": "https://projects.invisionapp.com/boards/8UOJQWW2J3G5#/1145336" }, + { + "title": "Paperspace", + "hex": "000000", + "source": "https://docs.paperspace.com/img/ps-logo-light.svg" + }, { "title": "Parity Substrate", "hex": "282828", @@ -6594,6 +7951,11 @@ "hex": "556DB3", "source": "https://www.pcgamingwiki.com/wiki/Home" }, + { + "title": "Peak Design", + "hex": "1C1B1C", + "source": "https://www.peakdesign.com/" + }, { "title": "PeerTube", "hex": "F1680D", @@ -6617,12 +7979,22 @@ "hex": "181A1D", "source": "https://press.onepeloton.com/#logos" }, + { + "title": "Penny", + "hex": "CD1414", + "source": "https://www.penny.de/" + }, { "title": "Pepsi", "hex": "2151A1", "source": "http://gillettepepsicola.com/promotions-media/media-kit/", "guidelines": "http://gillettepepsicola.com/promotions-media/media-kit/" }, + { + "title": "Percy", + "hex": "9E66BF", + "source": "https://percy.io/" + }, { "title": "Perforce", "hex": "404040", @@ -6633,6 +8005,16 @@ "hex": "39457E", "source": "https://github.com/tpf/marketing-materials/blob/6765c6fd71bc5b123d6c1a77b86e08cdd6376078/images/onion-logo/tpf-logo-onion.svg" }, + { + "title": "Personio", + "hex": "FFFFFF", + "source": "https://www.personio.com/" + }, + { + "title": "Pets at Home", + "hex": "4BA840", + "source": "https://petsathome.com" + }, { "title": "Peugeot", "hex": "000000", @@ -6687,6 +8069,11 @@ "type": "CC-BY-SA-4.0" } }, + { + "title": "phpMyAdmin", + "hex": "6C78AF", + "source": "https://github.com/phpmyadmin/data/blob/b7d3bdb9bb973beff4726541b87d3a4c8a950b4b/brand/phpMyAdmin-Logo-Symbol.svg" + }, { "title": "PhpStorm", "hex": "000000", @@ -6699,6 +8086,11 @@ "source": "https://docs.pi-hole.net", "guidelines": "https://pi-hole.net/trademark-rules-and-brand-guidelines/" }, + { + "title": "Picard Surgelés", + "hex": "2D4999", + "source": "https://www.picard.fr/" + }, { "title": "Picarto.TV", "hex": "1DA456", @@ -6753,6 +8145,12 @@ "hex": "FF7700", "source": "https://github.com/Piwigo/piwigodotorg/blob/6edb840c16257314caec770a9a51f67ef81836e4/images/piwigo.org.svg" }, + { + "title": "Pix", + "hex": "77B6A8", + "source": "https://www.bcb.gov.br/estabilidadefinanceira/pix", + "guidelines": "https://www.bcb.gov.br/content/estabilidadefinanceira/pix/Regulamento_Pix/I_manual_uso_marca_pix.pdf" + }, { "title": "Pixabay", "hex": "2EC66D", @@ -6765,15 +8163,20 @@ "guidelines": "https://policies.pixiv.net/en.html#brand" }, { - "title": "PJSIP", - "hex": "F86001", - "source": "https://www.pjsip.org/" + "title": "pkgsrc", + "hex": "FF6600", + "source": "https://pkgsrc.org/" }, { "title": "Planet", "hex": "009DB1", "source": "https://www.planet.com/explorer/" }, + { + "title": "PlanetScale", + "hex": "000000", + "source": "https://planetscale.com/" + }, { "title": "PlanGrid", "hex": "0085DE", @@ -6789,6 +8192,11 @@ "hex": "98CA3F", "source": "https://github.com/PlatziDev/oss/blob/932bd83d43e061e1c38fbc116db31aa6d0145be6/static/logo.svg" }, + { + "title": "Plausible Analytics", + "hex": "5850EC", + "source": "https://github.com/plausible/docs/blob/be5c935484e075f1e0caf3c9b3351ddd62348139/static/img/logo.svg" + }, { "title": "PlayCanvas", "hex": "E05F2C", @@ -6834,6 +8242,11 @@ "hex": "003791", "source": "https://commons.wikimedia.org/wiki/File:PlayStation_Vita_logo.svg" }, + { + "title": "Playwright", + "hex": "2EAD33", + "source": "https://github.com/microsoft/playwright.dev/blob/768c59464e5b3270db26fa6a839d022a7e0dd064/static/img/playwright-logo.svg" + }, { "title": "Pleroma", "hex": "FBA457", @@ -6902,6 +8315,11 @@ "hex": "892CA0", "source": "https://podman.io/" }, + { + "title": "Poetry", + "hex": "60A5FA", + "source": "https://python-poetry.org/" + }, { "title": "Pointy", "hex": "009DE0", @@ -6912,6 +8330,12 @@ "hex": "FFCB05", "source": "https://commons.wikimedia.org/wiki/File:International_Pok%C3%A9mon_logo.svg" }, + { + "title": "Polkadot", + "hex": "E6007A", + "source": "https://polkadot.network/brand-assets/", + "guidelines": "https://polkadot.network/brand-assets/" + }, { "title": "Poly", "hex": "EB3C00", @@ -6963,11 +8387,26 @@ "hex": "FFDF18", "source": "https://postmates.com/press-and-media" }, + { + "title": "Power Apps", + "hex": "742774", + "source": "https://powerapps.microsoft.com/en-us/" + }, + { + "title": "Power Automate", + "hex": "0066FF", + "source": "https://flow.microsoft.com/en-us/" + }, { "title": "Power BI", "hex": "F2C811", "source": "https://powerbi.microsoft.com/en-us/" }, + { + "title": "Power Virtual Agents", + "hex": "0B556A", + "source": "https://powervirtualagents.microsoft.com/en-us/" + }, { "title": "POWERS", "hex": "E74536", @@ -6976,7 +8415,7 @@ { "title": "PowerShell", "hex": "5391FE", - "source": "https://github.com/PowerShell/PowerShell" + "source": "https://github.com/PowerShell/PowerShell/tree/11d7587f9b934cf27013d318886f97fb95c811cf" }, { "title": "pr.co", @@ -6988,6 +8427,11 @@ "hex": "FAB040", "source": "https://github.com/pre-commit/pre-commit.com/blob/f263cdbcf46f97e1bd6229f2ab6d27bf8290ca88/logo.svg" }, + { + "title": "Preact", + "hex": "673AB8", + "source": "https://preactjs.com" + }, { "title": "Premier League", "hex": "360D3A", @@ -7028,7 +8472,7 @@ { "title": "Prisma", "hex": "2D3748", - "source": "https://github.com/prisma/presskit" + "source": "https://github.com/prisma/presskit/tree/4bcb64181f266723439d955d60afa1c55fefa715" }, { "title": "Prismic", @@ -7124,6 +8568,11 @@ "source": "https://www.proxmox.com/en/news/media-kit", "guidelines": "https://www.proxmox.com/en/news/media-kit" }, + { + "title": "PUBG", + "hex": "FEAB02", + "source": "https://www.pubgmobile.com/en/event/brandassets/" + }, { "title": "Publons", "hex": "336699", @@ -7140,6 +8589,12 @@ "hex": "A86454", "source": "https://github.com/pugjs/pug-logo/blob/61429fc45b5a411b83bdb5c99a61084d3054d1e6/SVG/pug-final-logo_-mono-64.svg" }, + { + "title": "Pulumi", + "hex": "8A3391", + "source": "https://www.pulumi.com/", + "guidelines": "https://www.pulumi.com/brand/" + }, { "title": "Puma", "hex": "242B2F", @@ -7158,7 +8613,7 @@ { "title": "PureScript", "hex": "14161A", - "source": "https://github.com/purescript/logo", + "source": "https://github.com/purescript/logo/tree/1e7a57affdaeaf88ff594c08bd2b5a78fe2ed13c", "license": { "type": "CC-BY-4.0" } @@ -7178,12 +8633,33 @@ "hex": "300D4F", "source": "https://pusher.com/" }, + { + "title": "PWA", + "hex": "5A0FC8", + "source": "https://github.com/webmaxru/progressive-web-apps-logo/blob/77744cd5c0a4d484bb3d082c6ac458c44202da03/pwalogo-white.svg", + "guidelines": "https://github.com/webmaxru/progressive-web-apps-logo#readme", + "aliases": { + "aka": [ + "Progressive Web Application" + ] + } + }, { "title": "PyCharm", "hex": "000000", "source": "https://www.jetbrains.com/company/brand/logos/", "guidelines": "https://www.jetbrains.com/company/brand/" }, + { + "title": "PyG", + "hex": "3C2179", + "source": "https://github.com/pyg-team/pyg_sphinx_theme/blob/4f696513b4b4adf2ba3874574a10a8e8718672fe/pyg_sphinx_theme/static/img/pyg_logo.svg", + "aliases": { + "aka": [ + "PyTorch Geometric" + ] + } + }, { "title": "PyPI", "hex": "3775A9", @@ -7286,6 +8762,12 @@ "source": "https://www.qualtrics.com/brand-book/", "guidelines": "https://www.qualtrics.com/brand-book/" }, + { + "title": "Qualys", + "hex": "ED2E26", + "source": "https://www.qualys.com/", + "guidelines": "https://www.qualys.com/docs/qualys-logo-guidelines.pdf" + }, { "title": "Quantcast", "hex": "000000", @@ -7326,6 +8808,11 @@ "source": "https://designsystem.quickbooks.com/visual-assets/logos/", "guidelines": "https://designsystem.quickbooks.com/visual-assets/logos/" }, + { + "title": "QuickLook", + "hex": "22A2E3", + "source": "https://github.com/QL-Win/QuickLook/tree/f726841d99bbceafd5399e5777b4dba302bf1e51" + }, { "title": "QuickTime", "hex": "1C69F0", @@ -7414,12 +8901,27 @@ "source": "https://rancher.com/brand-guidelines/", "guidelines": "https://rancher.com/brand-guidelines/" }, + { + "title": "Rarible", + "hex": "FEDA03", + "source": "https://rarible.com/" + }, + { + "title": "Rasa", + "hex": "5A17EE", + "source": "https://rasa.com/" + }, { "title": "Raspberry Pi", "hex": "A22846", "source": "https://www.raspberrypi.org/trademark-rules", "guidelines": "https://www.raspberrypi.org/trademark-rules" }, + { + "title": "Ray", + "hex": "028CF0", + "source": "https://github.com/ray-project/ray/blob/6522935291caa120e83697c6c9b3a450617c9283/dashboard/client/src/logo.svg" + }, { "title": "Razer", "hex": "00FF00", @@ -7444,6 +8946,16 @@ ] } }, + { + "title": "React Hook Form", + "hex": "EC5990", + "source": "https://github.com/react-hook-form/documentation/blob/d049ffe923336ce7a5bf58990c54c07f39ab2429/src/images/Logo.svg" + }, + { + "title": "React Query", + "hex": "FF4154", + "source": "https://github.com/tannerlinsley/react-query/blob/9b5d18cd47a4c1454d6c8dd0f38280641c1dd5dd/docs/src/images/emblem-light.svg" + }, { "title": "React Router", "hex": "CA4245", @@ -7457,7 +8969,7 @@ { "title": "ReactiveX", "hex": "B7178C", - "source": "https://github.com/ReactiveX/rxjs/blob/master/resources/CI-CD/logo/svg/RxJs_Logo_Black.svg", + "source": "https://github.com/ReactiveX/rxjs/blob/ee6ababb9fa75f068ac2122e956ff4e449604c59/resources/CI-CD/logo/svg/RxJs_Logo_Black.svg", "aliases": { "dup": [ { @@ -7470,7 +8982,7 @@ { "title": "ReactOS", "hex": "0088CC", - "source": "https://github.com/reactos/press-media" + "source": "https://github.com/reactos/press-media/tree/48089e09e0c7e828f1eb81e5ea0d8da85ec41dc3" }, { "title": "Read the Docs", @@ -7520,6 +9032,15 @@ "source": "https://www.redislabs.com/brand-guidelines/", "guidelines": "https://www.redislabs.com/brand-guidelines/" }, + { + "title": "Redmine", + "hex": "B32024", + "source": "https://www.redmine.org/projects/redmine/wiki/logo", + "license": { + "type": "CC-BY-SA-2.5", + "url": "https://github.com/edavis10/redmine_logo/blob/2afe855c4e9cd955b648972d09cc20d76dabbf4c/COPYRIGHT" + } + }, { "title": "Redux", "hex": "764ABC", @@ -7546,6 +9067,11 @@ "hex": "D1AB66", "source": "https://www.ril.com/getattachment/7c210e67-5b0e-4965-b1a2-2ee83e19cee9/Morgan-Stanley-Eighteenth-Annual-India-Summit,-31.aspx" }, + { + "title": "Remix", + "hex": "000000", + "source": "https://drive.google.com/drive/u/0/folders/1pbHnJqg8Y1ATs0Oi8gARH7wccJGv4I2c" + }, { "title": "Ren'Py", "hex": "FF7F7F", @@ -7556,6 +9082,11 @@ "hex": "FFCC33", "source": "https://en.media.groupe.renault.com/news/renault-news-march-2021-5f28-989c5.html" }, + { + "title": "Render", + "hex": "46E3B7", + "source": "https://render.com/" + }, { "title": "RenovateBot", "hex": "1A1F6C", @@ -7571,6 +9102,27 @@ "hex": "667881", "source": "https://repl.it/" }, + { + "title": "Republic of Gamers", + "aliases": { + "aka": [ + "ASUS ROG", + "ROG" + ] + }, + "hex": "FF0029", + "source": "https://rog.asus.com" + }, + { + "title": "ReScript", + "hex": "E6484F", + "source": "https://rescript-lang.org/brand" + }, + { + "title": "RescueTime", + "hex": "161A3B", + "source": "https://www.rescuetime.com/press" + }, { "title": "ResearchGate", "hex": "00CCBB", @@ -7632,6 +9184,12 @@ "source": "https://www.jetbrains.com/company/brand/logos/", "guidelines": "https://www.jetbrains.com/company/brand/" }, + { + "title": "Rimac Automobili", + "hex": "0A222E", + "source": "https://www.rimac-automobili.com/media/", + "guidelines": "https://www.rimac-automobili.com/media/" + }, { "title": "Ring", "hex": "1C9AD6", @@ -7667,8 +9225,11 @@ { "title": "Robot Framework", "hex": "000000", - "source": "https://github.com/robotframework/visual-identity", - "guidelines": "https://github.com/robotframework/visual-identity/blob/master/robot-framework-brand-guidelines.pdf" + "source": "https://github.com/robotframework/visual-identity/tree/fadf8cda9f79ea31987a214f0047cca9626327b7", + "guidelines": "https://github.com/robotframework/visual-identity/blob/master/robot-framework-brand-guidelines.pdf", + "license": { + "type": "CC-BY-NC-SA-4.0" + } }, { "title": "Rocket.Chat", @@ -7676,6 +9237,22 @@ "source": "https://rocket.chat/press", "guidelines": "https://docs.rocket.chat/guides/brand-and-visual-guidelines/logo" }, + { + "title": "RocksDB", + "hex": "2A2A2A", + "source": "https://github.com/facebook/rocksdb/blob/9ed96703d11a1cf4af0e1c1db0e4a6057a8e5d42/docs/static/logo.svg", + "license": { + "type": "CC-BY-4.0" + } + }, + { + "title": "Rocky Linux", + "hex": "10B981", + "source": "https://github.com/rocky-linux/branding/blob/94e97dd30b87d909cc4f6a6838a2926f77f9ac47/logo/src/icon-black.svg", + "license": { + "type": "CC-BY-SA-4.0" + } + }, { "title": "Roku", "hex": "662D91", @@ -7692,6 +9269,15 @@ "hex": "EC4A3F", "source": "https://rollupjs.org/" }, + { + "title": "Rome", + "hex": "27272A", + "source": "https://github.com/rome/tools/blob/261c3f3bdc21439777f78b6551f707cce0c8d04a/assets/SVG/logomark_black.svg", + "guidelines": "https://github.com/rome/tools/tree/main/assets", + "license": { + "type": "CC-BY-NC-SA-4.0" + } + }, { "title": "Roots", "hex": "525DDC", @@ -7714,6 +9300,17 @@ "source": "https://www.ros.org/press-kit/", "guidelines": "https://www.ros.org/press-kit/" }, + { + "title": "Rossmann", + "hex": "C3002D", + "source": "https://www.rossmann.de" + }, + { + "title": "Rotary International", + "hex": "F7A81B", + "source": "https://www.rotary.org/en", + "guidelines": "https://my.rotary.org/en/rotary-identity-guidelines" + }, { "title": "Rotten Tomatoes", "hex": "FA320A", @@ -7750,6 +9347,14 @@ "hex": "00BCF6", "source": "https://www.rtl2.de/" }, + { + "title": "RuboCop", + "hex": "000000", + "source": "https://github.com/rubocop-semver/rubocop-ruby2_0/blob/5302f93058f7b739a73a7a6c11c566a2b196b96e/docs/images/logo/rubocop-light.svg", + "license": { + "type": "CC-BY-NC-4.0" + } + }, { "title": "Ruby", "hex": "CC342D", @@ -7764,6 +9369,11 @@ "source": "http://rubyonrails.org/", "guidelines": "https://rubyonrails.org/trademarks/" }, + { + "title": "Ruby Sinatra", + "hex": "000000", + "source": "https://github.com/sinatra/resources/tree/master/logo" + }, { "title": "RubyGems", "hex": "E9573F", @@ -7801,8 +9411,14 @@ }, { "title": "S7 Airlines", - "hex": "BED600", - "source": "https://www.s7.ru/" + "hex": "C4D600", + "source": "https://www.s7.ru/en/info/s7-airlines/brand/", + "guidelines": "https://www.s7.ru/en/info/s7-airlines/brand/" + }, + { + "title": "Sabanci", + "hex": "004B93", + "source": "https://www.sabanci.com/en" }, { "title": "Safari", @@ -7814,31 +9430,48 @@ "hex": "FFE800", "source": "https://www.sahibinden.com/favicon.ico" }, + { + "title": "Sailfish OS", + "hex": "053766", + "source": "https://sailfishos.org" + }, { "title": "Salesforce", "hex": "00A1E0", - "source": "https://www.salesforce.com/styleguide/elements/logos" + "source": "https://brand.salesforce.com/content/logo-guidelines", + "guidelines": "https://brand.salesforce.com/content/logo-guidelines" }, { - "title": "SaltStack", - "hex": "00EACE", - "source": "https://www.saltstack.com/resources/brand/" + "title": "Salt Project", + "hex": "57BCAD", + "source": "https://saltproject.io/", + "guidelines": "https://gitlab.com/saltstack/open/salt-branding-guide/-/blob/37bbc3a8577be2f44895310c092439472491a8f4/README.md", + "license": { + "type": "Apache-2.0" + } }, { "title": "Samsung", "hex": "1428A0", - "source": "https://www.samsung.com/us" + "source": "https://www.samsung.com/us/about-us/brand-identity/logo/", + "guidelines": "https://www.samsung.com/us/about-us/brand-identity/logo/" }, { "title": "Samsung Pay", "hex": "1428A0", - "source": "https://pay.samsung.com/developers/resource/brand" + "source": "https://pay.samsung.com/developers/resource/brand", + "guidelines": "https://pay.samsung.com/developers/resource/brand" }, { "title": "San Francisco Municipal Railway", "hex": "BA0C2F", "source": "http://www.actransit.org/wp-content/uploads/HSP_CC-sched.pdf" }, + { + "title": "SanDisk", + "hex": "ED1C24", + "source": "https://kb.sandisk.com/" + }, { "title": "São Paulo Metro", "hex": "004382", @@ -7852,7 +9485,11 @@ { "title": "Sass", "hex": "CC6699", - "source": "http://sass-lang.com/styleguide/brand" + "source": "http://sass-lang.com/styleguide/brand", + "guidelines": "http://sass-lang.com/styleguide/brand", + "license": { + "type": "CC-BY-NC-SA-3.0" + } }, { "title": "Sat.1", @@ -7860,6 +9497,11 @@ "hex": "047DA3", "source": "https://www.prosiebensat1.com/presse/downloads/logos" }, + { + "title": "Saturn", + "hex": "EB680B", + "source": "https://www.saturn.de/" + }, { "title": "Sauce Labs", "hex": "E2231A", @@ -7873,12 +9515,19 @@ { "title": "Scaleway", "hex": "4F0599", - "source": "https://www.scaleway.com" + "source": "https://www.scaleway.com/en/design-resources/", + "guidelines": "https://www.scaleway.com/en/design-resources/" }, { "title": "Scania", "hex": "041E42", - "source": "https://www.scania.com/" + "source": "https://digitaldesign.scania.com/resources/brand/logotype", + "guidelines": "https://digitaldesign.scania.com/resources/brand/logotype" + }, + { + "title": "Schneider Electric", + "hex": "3DCD58", + "source": "https://www.se.com/us/en/assets/739/media/202250/SE_logo-LIO-white_header.svg" }, { "title": "scikit-learn", @@ -7895,6 +9544,11 @@ "hex": "E9711C", "source": "https://www.scopus.com/" }, + { + "title": "SCP Foundation", + "hex": "FFFFFF", + "source": "https://scp-wiki.wikidot.com/" + }, { "title": "Scratch", "hex": "4D97FF", @@ -7907,8 +9561,9 @@ }, { "title": "Scribd", - "hex": "1A7BBA", - "source": "https://www.scribd.com" + "hex": "1E7B85", + "source": "https://scribdbrand.frontify.com/d/eqGJ2WET8x3A/scribd-brand-style-guide#/other/media-press-kit/download-horizontal-vertical-logos-for-small-applications", + "guidelines": "https://scribdbrand.frontify.com/d/eqGJ2WET8x3A/scribd-brand-style-guide#/basics/logo-usage-guidelines-1576192924" }, { "title": "Scrimba", @@ -7989,7 +9644,8 @@ { "title": "Sencha", "hex": "86BC40", - "source": "http://design.sencha.com/" + "source": "http://design.sencha.com/", + "guidelines": "http://design.sencha.com/productlogo.html" }, { "title": "Sennheiser", @@ -8009,7 +9665,8 @@ { "title": "SEPA", "hex": "2350A9", - "source": "https://www.europeanpaymentscouncil.eu/document-library/other/sepa-logo-vector-format" + "source": "https://www.europeanpaymentscouncil.eu/document-library/other/sepa-logo-vector-format", + "guidelines": "https://www.europeanpaymentscouncil.eu/document-library/other/sepa-logo-visual-identity-guidelines" }, { "title": "Sequelize", @@ -8032,6 +9689,11 @@ "hex": "8CC445", "source": "https://www.sfml-dev.org/download/goodies/" }, + { + "title": "Shadow", + "hex": "0A0C0D", + "source": "https://shadow.tech/" + }, { "title": "Shanghai Metro", "hex": "EC1C24", @@ -8045,7 +9707,7 @@ { "title": "Shazam", "hex": "0088FF", - "source": "https://brandfolder.com/shazam" + "source": "https://www.shazam.com/" }, { "title": "Shell", @@ -8075,7 +9737,8 @@ { "title": "Shopify", "hex": "7AB55C", - "source": "https://press.shopify.com/brand" + "source": "https://www.shopify.com/brand-assets", + "guidelines": "https://www.shopify.com/brand-assets" }, { "title": "Shopware", @@ -8100,7 +9763,8 @@ { "title": "Shutterstock", "hex": "EE2B24", - "source": "https://www.shutterstock.com/press/media" + "source": "https://www.shutterstock.com/press/media", + "guidelines": "https://www.shutterstock.com/press/media" }, { "title": "Siemens", @@ -8109,8 +9773,8 @@ }, { "title": "Signal", - "hex": "2592E9", - "source": "https://play.google.com/store/apps/details?id=org.thoughtcrime.securesms" + "hex": "3A76F0", + "source": "https://github.com/signalapp/Signal-Desktop/blob/9db8765b6cf270195e45a7f251374d4e53d54c95/images/signal-logo.svg" }, { "title": "Simkl", @@ -8131,6 +9795,11 @@ "type": "CC0-1.0" } }, + { + "title": "Simplenote", + "hex": "3361CC", + "source": "https://en.wikipedia.org/wiki/File:Simplenote_logo.svg" + }, { "title": "Sina Weibo", "hex": "E6162D", @@ -8149,7 +9818,8 @@ { "title": "Sketch", "hex": "F7B500", - "source": "https://www.sketch.com/press/" + "source": "https://www.sketch.com/about-us/#press", + "guidelines": "https://www.sketch.com/about-us/#press" }, { "title": "Sketchfab", @@ -8177,9 +9847,15 @@ "source": "https://www.skysports.com/" }, { - "title": "Skyliner", - "hex": "2FCEA0", - "source": "https://www.skyliner.io/help" + "title": "Skynet", + "hex": "00C65E", + "source": "https://support.siasky.net/key-concepts/skynet-brand-guidelines", + "guidelines": "https://support.siasky.net/key-concepts/skynet-brand-guidelines" + }, + { + "title": "Skypack", + "hex": "3167FF", + "source": "https://skypack.dev" }, { "title": "Skype", @@ -8194,7 +9870,8 @@ { "title": "Slack", "hex": "4A154B", - "source": "https://slack.com/brand-guidelines" + "source": "https://slack.com/brand-guidelines", + "guidelines": "https://slack.com/brand-guidelines" }, { "title": "Slackware", @@ -8229,7 +9906,8 @@ { "title": "SmartThings", "hex": "15BFFF", - "source": "https://www.smartthings.com/press-kit" + "source": "https://www.smartthings.com/press-kit", + "guidelines": "https://www.smartthings.com/press-kit" }, { "title": "smash.gg", @@ -8255,23 +9933,38 @@ { "title": "Snapchat", "hex": "FFFC00", - "source": "https://www.snapchat.com/brand-guidelines" + "source": "https://www.snapchat.com/brand-guidelines", + "guidelines": "https://www.snapchat.com/brand-guidelines" }, { "title": "Snapcraft", "hex": "82BEA0", - "source": "https://github.com/snapcore/snap-store-badges" + "source": "https://github.com/snapcore/snap-store-badges/tree/eda2cb0495ef7f4d479e231079967c9d27f2bc70", + "license": { + "type": "CC-BY-ND-2.0" + } }, { "title": "Snowflake", - "hex": "56B9EB", - "source": "https://www.snowflake.com/about/press-and-news/" + "hex": "29B5E8", + "source": "https://www.snowflake.com/brand-guidelines/", + "guidelines": "https://www.snowflake.com/brand-guidelines/" + }, + { + "title": "Snowpack", + "hex": "2E5E82", + "source": "https://www.snowpack.dev/" }, { "title": "Snyk", "hex": "4C4A73", "source": "https://snyk.io/press-kit" }, + { + "title": "Social Blade", + "hex": "B3382C", + "source": "https://socialblade.com/info/media" + }, { "title": "Society6", "hex": "000000", @@ -8287,15 +9980,29 @@ "hex": "FB6022", "source": "https://www.sogou.com/" }, + { + "title": "Solid", + "hex": "2C4F7C", + "source": "https://www.solidjs.com/media" + }, { "title": "Solidity", "hex": "363636", - "source": "https://docs.soliditylang.org/en/v0.7.4/brand-guide.html" + "source": "https://docs.soliditylang.org/en/v0.8.6/brand-guide.html", + "guidelines": "https://docs.soliditylang.org/en/v0.8.6/brand-guide.html", + "license": { + "type": "CC-BY-4.0" + } }, { - "title": "SoloLearn", - "hex": "1ABC9C", - "source": "https://www.sololearn.com/" + "title": "Sololearn", + "hex": "149EF2", + "source": "https://www.sololearn.com/", + "aliases": { + "aka": [ + "SoloLearn" + ] + } }, { "title": "Solus", @@ -8310,27 +10017,32 @@ { "title": "SonarLint", "hex": "CB2029", - "source": "https://www.sonarsource.com" + "source": "https://www.sonarlint.org/logos/", + "guidelines": "https://www.sonarlint.org/logos/" }, { "title": "SonarQube", "hex": "4E9BCD", - "source": "https://www.sonarqube.org/logos/" + "source": "https://www.sonarqube.org/logos/", + "guidelines": "https://www.sonarqube.org/logos/" }, { "title": "SonarSource", "hex": "CB3032", - "source": "https://www.sonarsource.com/" + "source": "https://www.sonarsource.com/logos/", + "guidelines": "https://www.sonarsource.com/logos/" }, { "title": "Songkick", "hex": "F80046", - "source": "http://blog.songkick.com/media-assets" + "source": "https://www.songkick.com/style-guide/design", + "guidelines": "https://www.songkick.com/style-guide/design" }, { "title": "Songoda", "hex": "FC494A", - "source": "https://songoda.com/branding" + "source": "https://songoda.com/branding", + "guidelines": "https://songoda.com/branding" }, { "title": "SonicWall", @@ -8342,6 +10054,16 @@ "hex": "000000", "source": "https://www.sonos.com/en-gb/home" }, + { + "title": "Sony", + "hex": "FFFFFF", + "source": "https://www.sony.com" + }, + { + "title": "Soundcharts", + "hex": "0C1528", + "source": "https://soundcharts.com/img/soundcharts-logo.svg" + }, { "title": "SoundCloud", "hex": "FF3300", @@ -8359,8 +10081,15 @@ }, { "title": "Sourcegraph", - "hex": "00B4F2", - "source": "https://sourcegraph.com/.assets/img" + "hex": "00CBEC", + "source": "https://about.sourcegraph.com/handbook/marketing/brand/brand_guidelines", + "guidelines": "https://about.sourcegraph.com/handbook/marketing/brand/brand_guidelines" + }, + { + "title": "Sourcetree", + "hex": "0052CC", + "source": "https://atlassian.design/resources/logo-library", + "guidelines": "https://atlassian.design/foundations/logos/" }, { "title": "Southwest Airlines", @@ -8370,13 +10099,21 @@ { "title": "Spacemacs", "hex": "9266CC", - "source": "http://spacemacs.org/" + "source": "http://spacemacs.org/", + "license": { + "type": "CC-BY-SA-4.0" + } }, { "title": "SpaceX", "hex": "000000", "source": "https://www.spacex.com/" }, + { + "title": "spaCy", + "hex": "09A3D5", + "source": "https://github.com/explosion/spaCy/blob/c17980e535a8009b14ee4d1f818db207d9c07e55/website/src/images/logo.svg" + }, { "title": "Spark AR", "hex": "FF5C83", @@ -8397,7 +10134,8 @@ { "title": "SparkPost", "hex": "FA6423", - "source": "https://www.sparkpost.com/" + "source": "https://www.sparkpost.com/press-kit/", + "guidelines": "https://www.sparkpost.com/press-kit/" }, { "title": "SPDX", @@ -8441,8 +10179,9 @@ }, { "title": "Spotify", - "hex": "1ED760", - "source": "https://developer.spotify.com/design" + "hex": "1DB954", + "source": "https://developer.spotify.com/documentation/general/design-and-branding/#using-our-logo", + "guidelines": "https://developer.spotify.com/documentation/general/design-and-branding/#using-our-logo" }, { "title": "Spotlight", @@ -8466,18 +10205,29 @@ { "title": "Spreaker", "hex": "F5C300", - "source": "http://www.spreaker.com/press" + "source": "https://www.spreaker.com/" }, { "title": "Spring", "hex": "6DB33F", "source": "https://spring.io/trademarks" }, + { + "title": "Spring", + "slug": "spring_creators", + "hex": "000000", + "source": "https://www.spri.ng/" + }, { "title": "Spring Boot", "hex": "6DB33F", "source": "https://spring.io/projects" }, + { + "title": "Spring Security", + "hex": "6DB33F", + "source": "https://spring.io/projects" + }, { "title": "Spyder IDE", "hex": "FF0000", @@ -8501,7 +10251,8 @@ { "title": "Squarespace", "hex": "000000", - "source": "http://squarespace.com/brand-guidelines" + "source": "https://www.squarespace.com/logo-guidelines", + "guidelines": "http://www.squarespace.com/brand-guidelines" }, { "title": "SSRN", @@ -8523,12 +10274,19 @@ { "title": "Stackbit", "hex": "207BEA", - "source": "https://www.stackbit.com/branding-guidelines/" + "source": "https://www.stackbit.com/branding-guidelines/", + "guidelines": "https://www.stackbit.com/branding-guidelines/" + }, + { + "title": "StackEdit", + "hex": "606060", + "source": "https://github.com/benweet/stackedit/blob/46383b5b6a54b65b8720d786ed0a0518b9ad652d/src/assets/iconStackedit.svg" }, { "title": "StackPath", "hex": "000000", - "source": "https://www.stackpath.com/company/logo-and-branding/" + "source": "https://www.stackpath.com/company/logo-and-branding/", + "guidelines": "https://www.stackpath.com/company/logo-and-branding/" }, { "title": "StackShare", @@ -8556,10 +10314,16 @@ "source": "https://starbucks.com/", "guidelines": "https://creative.starbucks.com/" }, + { + "title": "Stardock", + "hex": "004B8D", + "source": "https://www.stardock.com/press/stardock%20branding/" + }, { "title": "Starling Bank", - "hex": "7433FF", - "source": "https://www.starlingbank.com/media/" + "hex": "6935D3", + "source": "https://www.starlingbank.com/media/", + "guidelines": "https://www.starlingbank.com/docs/brand/starling-bank-brand-guidelines.pdf" }, { "title": "Starship", @@ -8569,12 +10333,13 @@ { "title": "STARZ", "hex": "000000", - "source": "https://www.starz.com/StaticContent/Prod/guides/starzlibrary/" + "source": "https://www.starz.com/guides/starzlibrary/" }, { "title": "Statamic", "hex": "FF269E", - "source": "https://statamic.com/branding" + "source": "https://statamic.com/branding", + "guidelines": "https://statamic.com/branding" }, { "title": "Statuspage", @@ -8589,7 +10354,14 @@ { "title": "Steam", "hex": "000000", - "source": "https://partner.steamgames.com/public/marketing/Steam_Guidelines_02102016.pdf" + "source": "https://partner.steamgames.com/doc/marketing/branding", + "guidelines": "https://partner.steamgames.com/doc/marketing/branding" + }, + { + "title": "Steam Deck", + "hex": "1A9FFF", + "source": "https://partner.steamgames.com/doc/marketing/branding", + "guidelines": "https://partner.steamgames.com/doc/marketing/branding" }, { "title": "SteamDB", @@ -8601,6 +10373,11 @@ "hex": "1E1E1E", "source": "https://partner.steamgames.com/" }, + { + "title": "Steelseries", + "hex": "FF5200", + "source": "https://techblog.steelseries.com/ux-guide/index.html" + }, { "title": "Steem", "hex": "171FC9", @@ -8614,12 +10391,12 @@ { "title": "Steinberg", "hex": "C90827", - "source": "https://www.steinberg.net/en/company/press.html" + "source": "https://new.steinberg.net/press/" }, { "title": "Stellar", "hex": "7D00FF", - "source": "https://www.stellar.org/blog/announcing-the-new-stellar-logo" + "source": "https://www.stellar.org/press" }, { "title": "Stencyl", @@ -8641,6 +10418,14 @@ "hex": "03234B", "source": "https://www.st.com/" }, + { + "title": "StopStalk", + "hex": "536DFE", + "source": "https://github.com/stopstalk/media-resources/blob/265b728c26ba597b957e72134a3b49a10dc0c91d/stopstalk-small-black.svg", + "license": { + "type": "MIT" + } + }, { "title": "Storyblok", "hex": "09B3AF", @@ -8650,7 +10435,10 @@ { "title": "Storybook", "hex": "FF4785", - "source": "https://github.com/storybookjs/brand" + "source": "https://github.com/storybookjs/brand/tree/6f4d67f65f8275c53c310a73a8da6c6e96c8488c", + "license": { + "type": "MIT" + } }, { "title": "Strapi", @@ -8665,7 +10453,8 @@ { "title": "Streamlit", "hex": "FF4B4B", - "source": "https://www.streamlit.io/brand" + "source": "https://www.streamlit.io/brand", + "guidelines": "https://www.streamlit.io/brand" }, { "title": "Stripe", @@ -8700,7 +10489,7 @@ { "title": "Stylus", "hex": "333333", - "source": "http://stylus-lang.com/img/stylus-logo.svg" + "source": "https://github.com/stylus/stylus-lang.com/blob/c833bf697e39e1174c7c6e679e0e5a23d0baeb90/img/stylus-logo.svg" }, { "title": "Subaru", @@ -8710,7 +10499,7 @@ { "title": "Sublime Text", "hex": "FF9800", - "source": "https://www.sublimetext.com/images/logo.svg" + "source": "https://www.sublimetext.com/" }, { "title": "Substack", @@ -8730,7 +10519,8 @@ { "title": "Sumo Logic", "hex": "000099", - "source": "https://sites.google.com/sumologic.com/sumo-logic-brand/home" + "source": "https://sites.google.com/sumologic.com/sumo-logic-brand/home", + "guidelines": "https://sites.google.com/sumologic.com/sumo-logic-brand/home" }, { "title": "Supabase", @@ -8743,15 +10533,22 @@ "source": "https://stackoverflow.design/brand/logo/", "guidelines": "https://stackoverflow.com/legal/trademark-guidance" }, + { + "title": "Supermicro", + "hex": "151F6D", + "source": "https://www.supermicro.com/manuals/supermicro_logo_guidelines.pdf" + }, { "title": "SurveyMonkey", "hex": "00BF6F", - "source": "https://www.surveymonkey.com/mp/brandassets/" + "source": "https://www.surveymonkey.com/mp/brandassets/", + "guidelines": "https://www.surveymonkey.com/mp/brandassets/" }, { "title": "SUSE", "hex": "0C322C", - "source": "https://brand.suse.com/" + "source": "https://brand.suse.com/", + "guidelines": "https://brand.suse.com/" }, { "title": "Suzuki", @@ -8775,7 +10572,11 @@ { "title": "SVG", "hex": "FFB13B", - "source": "https://www.w3.org/2009/08/svg-logos.html" + "source": "https://www.w3.org/2009/08/svg-logos.html", + "guidelines": "https://www.w3.org/2009/08/svg-logos.html", + "license": { + "type": "CC-BY-SA-4.0" + } }, { "title": "SVGO", @@ -8792,10 +10593,16 @@ "hex": "FFA633", "source": "https://foursquare.com/about/logos" }, + { + "title": "SWC", + "hex": "FFFFFF", + "source": "https://github.com/swc-project/logo/blob/f26cac1b4a490e3bdf128d3b084bb57f4fab1aac/svg/swc_black.svg" + }, { "title": "Swift", - "hex": "FA7343", - "source": "https://developer.apple.com/develop/" + "hex": "F05138", + "source": "https://developer.apple.com/swift/resources/", + "guidelines": "https://developer.apple.com/swift/resources/" }, { "title": "Swiggy", @@ -8815,7 +10622,8 @@ { "title": "Symfony", "hex": "000000", - "source": "https://symfony.com/logo" + "source": "https://symfony.com/logo", + "guidelines": "https://symfony.com/trademark" }, { "title": "Symphony", @@ -8830,12 +10638,14 @@ { "title": "Synology", "hex": "B5B5B6", - "source": "https://www.synology.com/en-global/company/branding" + "source": "https://www.synology.com/en-global/company/branding", + "guidelines": "https://www.synology.com/en-global/company/branding" }, { "title": "T-Mobile", "hex": "E20074", - "source": "https://www.t-mobile.com/" + "source": "https://tmap.t-mobile.com/portals/pro74u7a/EXTBrandPortal", + "guidelines": "https://tmap.t-mobile.com/portals/pro74u7a/EXTBrandPortal" }, { "title": "Tableau", @@ -8854,13 +10664,19 @@ }, { "title": "Tailwind CSS", - "hex": "38B2AC", - "source": "https://tailwindcss.com/" + "hex": "06B6D4", + "source": "https://tailwindcss.com/brand", + "guidelines": "https://tailwindcss.com/brand" }, { "title": "Talend", - "hex": "1675BC", - "source": "https://www.talend.com/" + "hex": "FF6D70", + "source": "https://www.talend.com/blog/" + }, + { + "title": "Talenthouse", + "hex": "FFFFFF", + "source": "https://www.talenthouse.com/" }, { "title": "Tampermonkey", @@ -8877,6 +10693,16 @@ "hex": "FFCE00", "source": "https://tapas.io/site/about#media" }, + { + "title": "Target", + "hex": "CC0000", + "source": "https://www.target.com/" + }, + { + "title": "Task", + "hex": "29BEB0", + "source": "https://github.com/go-task/task/blob/367c0b38a6787bebf6ee5af864be1574ad40b24a/docs/Logo_mono.svg" + }, { "title": "Tasmota", "hex": "1FA3EC", @@ -8885,7 +10711,17 @@ { "title": "Tata", "hex": "486AAE", - "source": "https://www.tata.com/" + "source": "https://www.tatasteel.com/media/media-kit/logos-usage-guidelines/", + "guidelines": "https://www.tatasteel.com/media/media-kit/logos-usage-guidelines/" + }, + { + "title": "Tauri", + "hex": "FFC131", + "source": "https://github.com/tauri-apps/tauri/blob/093f85dc2b90a6dd0f48d941f6e88daec311250a/app-icon.png", + "license": { + "type": "CC-BY-NC-ND-4.0", + "url": "https://github.com/tauri-apps/tauri" + } }, { "title": "TaxBuzz", @@ -8905,8 +10741,8 @@ }, { "title": "TeamViewer", - "hex": "0E8EE9", - "source": "https://www.teamviewer.com/resources/images/logos/teamviewer-logo-big.svg" + "hex": "004680", + "source": "https://www.teamviewer.com/en-us/" }, { "title": "TED", @@ -8915,7 +10751,7 @@ }, { "title": "Teespring", - "hex": "39ACE6", + "hex": "ED2761", "source": "https://teespring.com" }, { @@ -8939,6 +10775,11 @@ "hex": "FAFAFA", "source": "https://telegra.ph/" }, + { + "title": "Temporal", + "hex": "000000", + "source": "https://github.com/temporalio/temporaldotio/blob/b6b5f3ed1fda818d5d6c07e27ec15d51a61f2267/public/images/icons/temporal-no-text.svg" + }, { "title": "Tencent QQ", "hex": "EB1923", @@ -8952,7 +10793,7 @@ { "title": "Teradata", "hex": "F37440", - "source": "https://github.com/Teradata/teradata.github.io/" + "source": "https://github.com/Teradata/teradata.github.io/tree/0b5124f0c652d7ba006a487c8b4b21bd61150ab2" }, { "title": "teratail", @@ -8965,10 +10806,20 @@ "source": "https://www.hashicorp.com/brand", "guidelines": "https://www.hashicorp.com/brand" }, + { + "title": "Tesco", + "hex": "00539F", + "source": "https://www.tesco.com" + }, { "title": "Tesla", "hex": "CC0000", - "source": "http://www.teslamotors.com/en_GB/about" + "source": "https://www.tesla.com/tesla-gallery" + }, + { + "title": "TestCafe", + "hex": "36B6E5", + "source": "https://github.com/DevExpress/testcafe/blob/dd174b6682b5f2675ac90e305d3d893c36a1d814/media/logos/svg/TestCafe-logo-600.svg" }, { "title": "Testin", @@ -8980,11 +10831,27 @@ "hex": "E33332", "source": "https://testing-library.com/" }, + { + "title": "Tether", + "hex": "50AF95", + "aliases": { + "aka": [ + "USDt" + ] + }, + "source": "https://tether.to/branding/", + "guidelines": "https://tether.to/branding/" + }, { "title": "Textpattern", "hex": "FFDA44", "source": "https://textpattern.com/" }, + { + "title": "The Algorithms", + "hex": "00BCB4", + "source": "https://github.com/TheAlgorithms/website/blob/f4e439578c88fed3b21c70898605238602975d2d/public/logo_t.svg" + }, { "title": "The Conversation", "hex": "D8352A", @@ -9007,9 +10874,19 @@ }, { "title": "The Movie Database", - "hex": "01D277", + "aliases": { + "aka": [ + "TMDB" + ] + }, + "hex": "01B4E4", "source": "https://www.themoviedb.org/about/logos-attribution" }, + { + "title": "The North Face", + "hex": "000000", + "source": "https://www.thenorthface.com/" + }, { "title": "The Register", "hex": "FF0000", @@ -9040,6 +10917,11 @@ "hex": "EE2624", "source": "https://www.lenovo.com/us/en/thinkpad" }, + { + "title": "Threadless", + "hex": "0099FF", + "source": "https://www.threadless.com/about-us/" + }, { "title": "Three.js", "hex": "000000", @@ -9058,12 +10940,12 @@ { "title": "Thunderbird", "hex": "0A84FF", - "source": "https://demo.identihub.co/thunderbird" + "source": "https://github.com/thundernest/thunderbird-website/blob/d7446f3eee14b38f02ee60da7d4b4fb8c9ef20e3/media/svg/logo.svg" }, { "title": "Thymeleaf", "hex": "005F0F", - "source": "https://github.com/thymeleaf/thymeleaf-dist/tree/master/src/artwork/thymeleaf%202016" + "source": "https://github.com/thymeleaf/thymeleaf-org/blob/0427d4d4c6f08d3a1fbed3bc90ceeebcf094b532/artwork/thymeleaf%202016/thymeleaf.svg" }, { "title": "Ticketmaster", @@ -9108,7 +10990,17 @@ { "title": "TinyLetter", "hex": "ED1C24", - "source": "https://tinyletter.com/site/press" + "source": "https://tinyletter.com/site/press/" + }, + { + "title": "Tistory", + "hex": "000000", + "source": "https://tistory.com/", + "aliases": { + "loc": { + "ko-KR": "티스토리" + } + } }, { "title": "tmux", @@ -9138,7 +11030,8 @@ { "title": "Topcoder", "hex": "29A7DF", - "source": "http://topcoder.com/" + "source": "https://www.topcoder.com/thrive/articles/How%20to%20use%20the%20Topcoder%20GUI%20KIT", + "guidelines": "https://www.topcoder.com/thrive/articles/How%20to%20use%20the%20Topcoder%20GUI%20KIT" }, { "title": "Toptal", @@ -9176,21 +11069,27 @@ "hex": "FFC107", "source": "https://github.com/tqdm/img/blob/0dd23d9336af67976f88f9988ea660cde78c54d4/logo.svg" }, + { + "title": "Traefik Mesh", + "hex": "9D0FB0", + "source": "https://github.com/traefik/mesh/blob/ef03c40b78c08931d47fdad0be10d1986f4e21bc/docs/content/assets/img/traefik-mesh-logo.svg" + }, + { + "title": "Traefik Proxy", + "hex": "24A1C1", + "source": "https://traefik.io/traefik/" + }, { "title": "TrainerRoad", - "hex": "E12726", - "source": "https://www.trainerroad.com/" + "hex": "DA291C", + "source": "https://www.trainerroad.com/press/", + "guidelines": "https://www.trainerroad.com/press/" }, { "title": "Trakt", "hex": "ED1C24", "source": "https://trakt.tv" }, - { - "title": "TransferWise", - "hex": "00B9FF", - "source": "https://brand.transferwise.com/logo" - }, { "title": "Transport for Ireland", "hex": "00B274", @@ -9249,8 +11148,14 @@ }, { "title": "Trove", - "hex": "609540", - "source": "https://trove.nla.gov.au/" + "hex": "2D004B", + "source": "https://trove.nla.gov.au/about/who-we-are/our-logo", + "guidelines": "https://trove.nla.gov.au/about/who-we-are/trove-brand-guidelines" + }, + { + "title": "tRPC", + "hex": "2596BE", + "source": "https://github.com/trpc/trpc/blob/e0df4a2d5b498dd953a65901e04915c6e3f7ecc5/www/static/img/logo-no-text.svg" }, { "title": "TrueNAS", @@ -9258,9 +11163,10 @@ "source": "https://www.truenas.com/" }, { - "title": "Trulia", - "hex": "53B50A", - "source": "http://www.trulia.com" + "title": "trulia", + "hex": "0A0B09", + "source": "https://www.trulia.com/newsroom/media/brand-logos/", + "guidelines": "https://www.trulia.com/newsroom/media/brand-logos/" }, { "title": "Trusted Shops", @@ -9287,10 +11193,16 @@ "hex": "3178C6", "source": "https://typestrong.org/ts-node/" }, + { + "title": "Tubi", + "hex": "000000", + "source": "https://corporate.tubitv.com/press-releases/" + }, { "title": "TUI", - "hex": "70CBF4", - "source": "https://www.tuiholidays.ie/" + "hex": "D40E14", + "source": "https://www.design.tui/brand/logos/", + "guidelines": "https://www.design.tui/brand/" }, { "title": "Tumblr", @@ -9302,10 +11214,16 @@ "hex": "14D8CC", "source": "https://cms.tunein.com/press/" }, + { + "title": "Turborepo", + "hex": "EF4444", + "source": "https://github.com/vercel/turborepo/blob/7312e316629a2138f895a90c9704045891be817b/docs/public/logo-light.svg" + }, { "title": "TurboSquid", "hex": "FF8135", - "source": "https://www.brand.turbosquid.com/" + "source": "https://www.brand.turbosquid.com/turbosquidicons", + "guidelines": "https://www.brand.turbosquid.com/" }, { "title": "Turkish Airlines", @@ -9342,10 +11260,16 @@ "hex": "FF7102", "source": "http://www.twoo.com/about/press" }, + { + "title": "Typeform", + "hex": "262627", + "source": "https://www.typeform.com" + }, { "title": "TypeScript", "hex": "3178C6", - "source": "https://www.staging-typescript.org/branding" + "source": "https://www.typescriptlang.org/branding", + "guidelines": "https://www.typescriptlang.org/branding" }, { "title": "TYPO3", @@ -9380,7 +11304,7 @@ { "title": "Ubuntu", "hex": "E95420", - "source": "https://design.ubuntu.com/brand/ubuntu-logo/", + "source": "https://design.ubuntu.com/downloads/", "guidelines": "https://design.ubuntu.com/brand/ubuntu-logo/" }, { @@ -9390,8 +11314,8 @@ }, { "title": "Udemy", - "hex": "EC5252", - "source": "https://about.udemy.com/newbrand/" + "hex": "A435F0", + "source": "https://www.udemy.com/ourbrand/" }, { "title": "UFC", @@ -9418,6 +11342,16 @@ "hex": "08BD80", "source": "https://unacademy.com/" }, + { + "title": "Under Armour", + "hex": "1D1D1D", + "source": "https://www.underarmour.com/en-us/" + }, + { + "title": "Underscore.js", + "hex": "0371B5", + "source": "https://github.com/jashkenas/underscore/blob/f098f61ff84931dea69c276b3674a62b6ae4def7/docs/images/underscore.png" + }, { "title": "Undertale", "hex": "E71D29", @@ -9440,8 +11374,19 @@ }, { "title": "Unity", - "hex": "000000", - "source": "https://unity.com/" + "hex": "FFFFFF", + "source": "https://brand.unity.com/", + "guidelines": "https://brand.unity.com/" + }, + { + "title": "Unlicense", + "hex": "808080", + "source": "https://commons.wikimedia.org/wiki/File:PD-icon.svg" + }, + { + "title": "UnoCSS", + "hex": "333333", + "source": "https://github.com/unocss/unocss/blob/fc2ed5bb6019b45565ff5293d4b650522f1b79b4/playground/public/icon.svg" }, { "title": "Unraid", @@ -9450,7 +11395,7 @@ }, { "title": "Unreal Engine", - "hex": "313131", + "hex": "0E1128", "source": "https://www.unrealengine.com/en-US/branding", "guidelines": "https://www.unrealengine.com/en-US/branding" }, @@ -9491,6 +11436,16 @@ "hex": "150400", "source": "https://www.ups.com/" }, + { + "title": "Upstash", + "hex": "00E9A3", + "source": "https://upstash.com/" + }, + { + "title": "Uptobox", + "hex": "5CE1E6", + "source": "https://uptoboxpremium.org/" + }, { "title": "Upwork", "hex": "6FDA44", @@ -9504,7 +11459,7 @@ { "title": "V", "hex": "5D87BF", - "source": "https://github.com/vlang/v-logo", + "source": "https://github.com/vlang/v-logo/tree/62dd9fe256f64190b53a306310c4a4cc27398d0f", "license": { "type": "MIT" } @@ -9526,6 +11481,11 @@ "source": "https://www.hashicorp.com/brand", "guidelines": "https://www.hashicorp.com/brand" }, + { + "title": "Valorant", + "hex": "FA4454", + "source": "https://commons.wikimedia.org/wiki/File:Valorant_logo_-_black_color_version.svg" + }, { "title": "Valve", "hex": "F74843", @@ -9572,6 +11532,11 @@ "hex": "EC008C", "source": "https://www.veepee.fr/" }, + { + "title": "Velog", + "hex": "20C997", + "source": "https://github.com/velopert/velog-client/blob/8fbbb371f4b4525b6747e54d0c608900ea8bf03e/src/static/svg/velog-icon.svg" + }, { "title": "Venmo", "hex": "3D95CE", @@ -9597,6 +11562,11 @@ "hex": "CD040B", "source": "https://www.verizondigitalmedia.com/about/logo-usage/" }, + { + "title": "VEXXHOST", + "hex": "2A1659", + "source": "https://vexxhost.com" + }, { "title": "vFairs", "hex": "EF4678", @@ -9627,6 +11597,21 @@ "hex": "0A0A20", "source": "https://livestream.com" }, + { + "title": "Virgin", + "aliases": { + "aka": [ + "Virgin Group" + ] + }, + "hex": "E10A0A", + "source": "https://www.virgin.com/img/virgin-logo-square.svg" + }, + { + "title": "Virgin Media", + "hex": "ED1A37", + "source": "https://en.wikipedia.org/wiki/Virgin_Media#/media/File:Virgin_Media.svg" + }, { "title": "VirtualBox", "hex": "183A61", @@ -9657,6 +11642,11 @@ "hex": "646CFF", "source": "https://vitejs.dev/" }, + { + "title": "Vitess", + "hex": "F16728", + "source": "https://cncf-branding.netlify.app/projects/vitess/" + }, { "title": "Vivaldi", "hex": "EF3939", @@ -9669,8 +11659,9 @@ }, { "title": "VK", - "hex": "4680C2", - "source": "https://vk.com/brand" + "hex": "0077FF", + "source": "https://vk.com/brand", + "guidelines": "https://vk.com/brand" }, { "title": "VLC media player", @@ -9702,6 +11693,11 @@ "hex": "FFFFFF", "source": "https://www.vonage.com" }, + { + "title": "Vowpal Wabbit", + "hex": "FF81F9", + "source": "https://github.com/VowpalWabbit/vowpal_wabbit/blob/1da1aa4bb4f2dfb5e1a6083c14b429b30eba372d/logo_assets/vowpal-wabbits-icon.svg" + }, { "title": "VOX", "hex": "DA074A", @@ -9712,15 +11708,19 @@ "hex": "000000", "source": "https://vscopress.co/media-kit" }, + { + "title": "VTEX", + "hex": "ED125F", + "source": "https://vtex.com" + }, { "title": "Vue.js", "hex": "4FC08D", - "source": "https://github.com/vuejs/art", + "source": "https://github.com/vuejs/art/tree/d840546f0779f0639ba3fe1cb78e7b04d8127eab", + "guidelines": "https://github.com/vuejs/art/blob/master/README.md", "license": { - "type": "custom", - "url": "https://github.com/vuejs/art/blob/master/README.md" - }, - "guidelines": "https://github.com/vuejs/art/blob/master/README.md" + "type": "CC-BY-NC-SA-4.0" + } }, { "title": "Vuetify", @@ -9767,6 +11767,12 @@ "hex": "3F6184", "source": "https://github.com/wallabag/logo/blob/f670395da2d85c3bbcb8dcfa8d2a339d8af5abb0/_default/icon/svg/logo-icon-black-no-bg.svg" }, + { + "title": "Walmart", + "hex": "0071CE", + "source": "https://corporate.walmart.com", + "guidelines": "https://one.walmart.com/content/people-experience/associate-brand-center.html" + }, { "title": "Wappalyzer", "hex": "32067C", @@ -9778,6 +11784,12 @@ "hex": "004DB4", "source": "https://www.warnerbros.com/" }, + { + "title": "wasmCloud", + "hex": "00BC8E", + "source": "https://github.com/wasmCloud/branding/", + "guidelines": "https://github.com/wasmCloud/branding/" + }, { "title": "Wattpad", "hex": "FF500A", @@ -9812,7 +11824,7 @@ { "title": "WebAuthn", "hex": "3423A6", - "source": "https://github.com/webauthn-open-source/webauthn-logos", + "source": "https://github.com/webauthn-open-source/webauthn-logos/tree/b21be672811eb4a5caadaba41044970cae299a55", "guidelines": "https://github.com/webauthn-open-source/webauthn-logos" }, { @@ -9886,16 +11898,41 @@ "source": "https://wechat.design/standard/download/brand", "guidelines": "https://wechat.design/standard/download/brand" }, + { + "title": "WeGame", + "hex": "FAAB00", + "source": "https://www.wegame.com.cn" + }, { "title": "Weights & Biases", "hex": "FFBE00", "source": "https://wandb.ai/" }, + { + "title": "Welcome to the Jungle", + "aliases": { + "aka": [ + "WTTJ" + ] + }, + "hex": "FFCD00", + "source": "https://www.welcometothejungle.com/" + }, { "title": "WEMO", "hex": "72D44C", "source": "https://commons.wikimedia.org/wiki/File:WeMoApp.svg" }, + { + "title": "Western Digital", + "aliases": { + "aka": [ + "WD" + ] + }, + "hex": "000000", + "source": "https://www.westerndigital.com" + }, { "title": "WeTransfer", "hex": "409FFF", @@ -9904,8 +11941,8 @@ { "title": "WhatsApp", "hex": "25D366", - "source": "https://www.whatsappbrand.com", - "guidelines": "https://whatsappbrand.com/" + "source": "https://www.facebook.com/brand/resources/whatsapp/whatsapp-brand", + "guidelines": "https://www.facebook.com/brand/resources/whatsapp/whatsapp-brand" }, { "title": "When I Work", @@ -9927,6 +11964,11 @@ "hex": "8B8B8B", "source": "https://commons.wikipedia.org/wiki/File:WiiU.svg" }, + { + "title": "Wiki.js", + "hex": "1976D2", + "source": "https://cdn.js.wiki/images/wikijs-butterfly-mono.svg" + }, { "title": "Wikidata", "hex": "006699", @@ -9952,6 +11994,16 @@ "hex": "006699", "source": "https://commons.wikimedia.org/wiki/File:Wikivoyage-Logo-v3-en.svg" }, + { + "title": "Winamp", + "hex": "F93821", + "source": "https://www.winamp.com" + }, + { + "title": "Windi CSS", + "hex": "48B0F1", + "source": "https://github.com/windicss/docs/blob/d7a01df515c4fa30dbb33ede7c46392e21fbf2cb/public/assets/logo.svg" + }, { "title": "Windows", "hex": "0078D6", @@ -9998,6 +12050,12 @@ "hex": "1679A7", "source": "https://gitlab.com/wanduow/wireshark/-/blob/cd5539b0f76975474869984a9d2f0fce29d5c21e/image/wsicon.svg" }, + { + "title": "Wise", + "hex": "00B9FF", + "source": "https://brand.wise.com/logo", + "guidelines": "https://brand.wise.com/logo" + }, { "title": "Wish", "hex": "2FB7EC", @@ -10202,7 +12260,7 @@ { "title": "Yarn", "hex": "2C8EBB", - "source": "https://github.com/yarnpkg/assets" + "source": "https://github.com/yarnpkg/assets/tree/76d30ca2aebed5b73ea8131d972218fb860bd32d" }, { "title": "Yelp", @@ -10214,6 +12272,11 @@ "hex": "A4286A", "source": "https://yoast.com/media/logo/" }, + { + "title": "YOLO", + "hex": "00FFFF", + "source": "https://pjreddie.com/darknet/yolo/" + }, { "title": "YourTravel.TV", "hex": "F79025", @@ -10222,7 +12285,8 @@ { "title": "YouTube", "hex": "FF0000", - "source": "https://www.youtube.com/yt/about/brand-resources/#logos-icons-colors" + "source": "https://www.youtube.com/howyoutubeworks/resources/brand-resources/#logos-icons-and-colors", + "guidelines": "https://www.youtube.com/howyoutubeworks/resources/brand-resources/#logos-icons-and-colors" }, { "title": "YouTube Gaming", @@ -10244,11 +12308,21 @@ "hex": "FF0000", "source": "https://partnermarketinghub.withgoogle.com/#/brands/" }, + { + "title": "Yubico", + "hex": "84BD00", + "source": "https://www.yubico.com/wp-content/themes/coronado/img/icon.svg" + }, { "title": "Z-Wave", "hex": "1B365D", "source": "https://www.z-wave.com/" }, + { + "title": "Żabka", + "hex": "006420", + "source": "https://www.zabka.pl/" + }, { "title": "Zalando", "hex": "FF6900", @@ -10264,11 +12338,38 @@ "hex": "FF4A00", "source": "https://zapier.com/about/brand" }, + { + "title": "Zara", + "hex": "000000", + "source": "https://www.zara.com/" + }, + { + "title": "Zazzle", + "hex": "212121", + "source": "https://www.zazzle.com/logo", + "guidelines": "https://www.zazzle.com/logo" + }, + { + "title": "Zcash", + "aliases": { + "aka": [ + "ZEC" + ] + }, + "hex": "F4B728", + "source": "https://z.cash/press/", + "guidelines": "https://www.zfnd.org/about/trademark-policy/" + }, { "title": "ZDF", "hex": "FA7D19", "source": "https://www.zdf.de/" }, + { + "title": "Zebra Technologies", + "hex": "000000", + "source": "https://www.zebra.com/" + }, { "title": "Zelle", "hex": "6D1ED4", @@ -10294,6 +12395,12 @@ "hex": "3EA8FF", "source": "https://zenn.dev/mediakit" }, + { + "title": "Zenodo", + "hex": "1682D4", + "source": "https://about.zenodo.org", + "guidelines": "https://about.zenodo.org" + }, { "title": "Zerodha", "hex": "387ED1", @@ -10309,6 +12416,12 @@ "hex": "7BBB6E", "source": "https://zerply.com/about/resources" }, + { + "title": "Zettlr", + "hex": "1CB27E", + "source": "https://www.zettlr.com/", + "guidelines": "https://www.zettlr.com/press" + }, { "title": "Zhihu", "hex": "0084FF", @@ -10317,7 +12430,7 @@ { "title": "Zig", "hex": "F7A41D", - "source": "https://github.com/ziglang/logo", + "source": "https://github.com/ziglang/logo/tree/608770bf7303613c18a8c3faf284516fa31072f0", "license": { "type": "CC-BY-SA-4.0" } @@ -10371,6 +12484,11 @@ "title": "Zulip", "hex": "FFFFFF", "source": "https://github.com/zulip/zulip/blob/df9e40491dc77b658d943cff36a816d46e32ce1b/static/images/logo/zulip-org-logo.svg" + }, + { + "title": "Zyte", + "hex": "B02CCE", + "source": "https://www.zyte.com/" } ] } diff --git a/assets/readme/angular-white.svg b/assets/readme/angular-white.svg new file mode 100644 index 000000000000..7844c2771db0 --- /dev/null +++ b/assets/readme/angular-white.svg @@ -0,0 +1 @@ +<svg fill="white" role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Angular \ No newline at end of file diff --git a/assets/readme/blazor-white.svg b/assets/readme/blazor-white.svg new file mode 100644 index 000000000000..e1d1208ab7ae --- /dev/null +++ b/assets/readme/blazor-white.svg @@ -0,0 +1 @@ +Blazor \ No newline at end of file diff --git a/assets/readme/blender-white.svg b/assets/readme/blender-white.svg new file mode 100644 index 000000000000..bb4810a0e19d --- /dev/null +++ b/assets/readme/blender-white.svg @@ -0,0 +1 @@ +Blender \ No newline at end of file diff --git a/assets/readme/diagramsdotnet-white.svg b/assets/readme/diagramsdotnet-white.svg new file mode 100644 index 000000000000..d0fd50818133 --- /dev/null +++ b/assets/readme/diagramsdotnet-white.svg @@ -0,0 +1 @@ +diagrams.net \ No newline at end of file diff --git a/assets/readme/drupal-white.svg b/assets/readme/drupal-white.svg new file mode 100644 index 000000000000..d53a9986682e --- /dev/null +++ b/assets/readme/drupal-white.svg @@ -0,0 +1 @@ +Drupal \ No newline at end of file diff --git a/assets/readme/flutter-white.svg b/assets/readme/flutter-white.svg new file mode 100644 index 000000000000..3fd3bfb2e2da --- /dev/null +++ b/assets/readme/flutter-white.svg @@ -0,0 +1 @@ +Flutter \ No newline at end of file diff --git a/assets/readme/hexo-white.svg b/assets/readme/hexo-white.svg new file mode 100644 index 000000000000..ecbcdff1f4fe --- /dev/null +++ b/assets/readme/hexo-white.svg @@ -0,0 +1 @@ +Hexo \ No newline at end of file diff --git a/assets/readme/homeassistant-white.svg b/assets/readme/homeassistant-white.svg new file mode 100644 index 000000000000..ec9813d5b267 --- /dev/null +++ b/assets/readme/homeassistant-white.svg @@ -0,0 +1 @@ +Home Assistant \ No newline at end of file diff --git a/assets/readme/hugo-white.svg b/assets/readme/hugo-white.svg new file mode 100644 index 000000000000..18e5a1872c28 --- /dev/null +++ b/assets/readme/hugo-white.svg @@ -0,0 +1 @@ +Hugo \ No newline at end of file diff --git a/assets/readme/jetpackcompose-white.svg b/assets/readme/jetpackcompose-white.svg new file mode 100644 index 000000000000..80252ac01da1 --- /dev/null +++ b/assets/readme/jetpackcompose-white.svg @@ -0,0 +1 @@ +Jetpack Compose \ No newline at end of file diff --git a/assets/readme/kirby-white.svg b/assets/readme/kirby-white.svg new file mode 100644 index 000000000000..799588439262 --- /dev/null +++ b/assets/readme/kirby-white.svg @@ -0,0 +1 @@ +Kirby \ No newline at end of file diff --git a/assets/readme/laravel-white.svg b/assets/readme/laravel-white.svg new file mode 100644 index 000000000000..3edfcea56ae1 --- /dev/null +++ b/assets/readme/laravel-white.svg @@ -0,0 +1 @@ +Laravel \ No newline at end of file diff --git a/assets/readme/latex-white.svg b/assets/readme/latex-white.svg new file mode 100644 index 000000000000..87e4bb703e79 --- /dev/null +++ b/assets/readme/latex-white.svg @@ -0,0 +1 @@ +LaTeX \ No newline at end of file diff --git a/assets/readme/nodedotjs-white.svg b/assets/readme/nodedotjs-white.svg new file mode 100644 index 000000000000..ed8a6959b7da --- /dev/null +++ b/assets/readme/nodedotjs-white.svg @@ -0,0 +1 @@ +Node.js \ No newline at end of file diff --git a/assets/readme/openjdk-white.svg b/assets/readme/openjdk-white.svg new file mode 100644 index 000000000000..95379645af2c --- /dev/null +++ b/assets/readme/openjdk-white.svg @@ -0,0 +1 @@ +OpenJDK \ No newline at end of file diff --git a/assets/readme/php-white.svg b/assets/readme/php-white.svg new file mode 100644 index 000000000000..f20b708bda71 --- /dev/null +++ b/assets/readme/php-white.svg @@ -0,0 +1 @@ +PHP \ No newline at end of file diff --git a/assets/readme/python-white.svg b/assets/readme/python-white.svg new file mode 100644 index 000000000000..452d9b7e00aa --- /dev/null +++ b/assets/readme/python-white.svg @@ -0,0 +1 @@ +Python \ No newline at end of file diff --git a/assets/readme/react-white.svg b/assets/readme/react-white.svg new file mode 100644 index 000000000000..a1197a26878d --- /dev/null +++ b/assets/readme/react-white.svg @@ -0,0 +1 @@ +React \ No newline at end of file diff --git a/assets/readme/simpleicons-white.svg b/assets/readme/simpleicons-white.svg new file mode 100644 index 000000000000..21bd6b513492 --- /dev/null +++ b/assets/readme/simpleicons-white.svg @@ -0,0 +1 @@ +Simple Icons \ No newline at end of file diff --git a/assets/readme/svelte-white.svg b/assets/readme/svelte-white.svg new file mode 100644 index 000000000000..4a04412d6d36 --- /dev/null +++ b/assets/readme/svelte-white.svg @@ -0,0 +1 @@ +Svelte \ No newline at end of file diff --git a/assets/readme/typescript-white.svg b/assets/readme/typescript-white.svg new file mode 100644 index 000000000000..968ff97eafde --- /dev/null +++ b/assets/readme/typescript-white.svg @@ -0,0 +1 @@ +TypeScript \ No newline at end of file diff --git a/assets/readme/vuedotjs-white.svg b/assets/readme/vuedotjs-white.svg new file mode 100644 index 000000000000..1c9e2beef3b8 --- /dev/null +++ b/assets/readme/vuedotjs-white.svg @@ -0,0 +1 @@ +Vue.js \ No newline at end of file diff --git a/assets/readme/wordpress-white.svg b/assets/readme/wordpress-white.svg new file mode 100644 index 000000000000..25ed7792ab2c --- /dev/null +++ b/assets/readme/wordpress-white.svg @@ -0,0 +1 @@ +WordPress \ No newline at end of file diff --git a/composer.json b/composer.json index 2d6071c3ec3f..98b1cea17362 100644 --- a/composer.json +++ b/composer.json @@ -7,7 +7,15 @@ "icons" ], "support": { - "issues": "https://github.com/simple-icons/simple-icons/issues" + "issues": "https://github.com/simple-icons/simple-icons/issues", + "source": "https://github.com/simple-icons/simple-icons", + "docs": "https://github.com/simple-icons/simple-icons#php-usage-" }, - "license": "CC0-1.0" + "license": "CC0-1.0", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/simple-icons" + } + ] } diff --git a/icons/4chan.svg b/icons/4chan.svg new file mode 100644 index 000000000000..c5c2e7f18d8a --- /dev/null +++ b/icons/4chan.svg @@ -0,0 +1 @@ +4chan \ No newline at end of file diff --git a/icons/abbott.svg b/icons/abbott.svg new file mode 100644 index 000000000000..511b8a56addc --- /dev/null +++ b/icons/abbott.svg @@ -0,0 +1 @@ +Abbott \ No newline at end of file diff --git a/icons/adonisjs.svg b/icons/adonisjs.svg index e019c1a660a5..ef489fcb57c5 100644 --- a/icons/adonisjs.svg +++ b/icons/adonisjs.svg @@ -1 +1 @@ -AdonisJS \ No newline at end of file +AdonisJS \ No newline at end of file diff --git a/icons/adyen.svg b/icons/adyen.svg new file mode 100644 index 000000000000..b95739c5b007 --- /dev/null +++ b/icons/adyen.svg @@ -0,0 +1 @@ +Adyen \ No newline at end of file diff --git a/icons/aeromexico.svg b/icons/aeromexico.svg index f7d77e3e0925..a27f719963bf 100644 --- a/icons/aeromexico.svg +++ b/icons/aeromexico.svg @@ -1 +1 @@ -Aeroméxico \ No newline at end of file +Aeroméxico \ No newline at end of file diff --git a/icons/aib.svg b/icons/aib.svg new file mode 100644 index 000000000000..2e3f218567bf --- /dev/null +++ b/icons/aib.svg @@ -0,0 +1 @@ +AIB \ No newline at end of file diff --git a/icons/airbyte.svg b/icons/airbyte.svg new file mode 100644 index 000000000000..589d1fd8b9dc --- /dev/null +++ b/icons/airbyte.svg @@ -0,0 +1 @@ +Airbyte \ No newline at end of file diff --git a/icons/ajv.svg b/icons/ajv.svg new file mode 100644 index 000000000000..de8f0582c62a --- /dev/null +++ b/icons/ajv.svg @@ -0,0 +1 @@ +Ajv \ No newline at end of file diff --git a/icons/albertheijn.svg b/icons/albertheijn.svg new file mode 100644 index 000000000000..99d10e78ac71 --- /dev/null +++ b/icons/albertheijn.svg @@ -0,0 +1 @@ +Albert Heijn \ No newline at end of file diff --git a/icons/aldinord.svg b/icons/aldinord.svg new file mode 100644 index 000000000000..975a24dc9937 --- /dev/null +++ b/icons/aldinord.svg @@ -0,0 +1 @@ +Aldi Nord \ No newline at end of file diff --git a/icons/aldisud.svg b/icons/aldisud.svg new file mode 100644 index 000000000000..c42685112b64 --- /dev/null +++ b/icons/aldisud.svg @@ -0,0 +1 @@ +Aldi Süd \ No newline at end of file diff --git a/icons/alfred.svg b/icons/alfred.svg new file mode 100644 index 000000000000..67ec41e782d3 --- /dev/null +++ b/icons/alfred.svg @@ -0,0 +1 @@ +Alfred \ No newline at end of file diff --git a/icons/allegro.svg b/icons/allegro.svg new file mode 100644 index 000000000000..7c0f27ca92be --- /dev/null +++ b/icons/allegro.svg @@ -0,0 +1 @@ +Allegro \ No newline at end of file diff --git a/icons/allocine.svg b/icons/allocine.svg index 4a53441c5324..f55e4355095c 100644 --- a/icons/allocine.svg +++ b/icons/allocine.svg @@ -1 +1 @@ -AlloCiné \ No newline at end of file +AlloCiné \ No newline at end of file diff --git a/icons/amazonapigateway.svg b/icons/amazonapigateway.svg new file mode 100644 index 000000000000..1127550f275e --- /dev/null +++ b/icons/amazonapigateway.svg @@ -0,0 +1 @@ +Amazon API Gateway \ No newline at end of file diff --git a/icons/amazoncloudwatch.svg b/icons/amazoncloudwatch.svg new file mode 100644 index 000000000000..4b57d04ddc92 --- /dev/null +++ b/icons/amazoncloudwatch.svg @@ -0,0 +1 @@ +Amazon CloudWatch \ No newline at end of file diff --git a/icons/amazonec2.svg b/icons/amazonec2.svg new file mode 100644 index 000000000000..1206482caeaf --- /dev/null +++ b/icons/amazonec2.svg @@ -0,0 +1 @@ +Amazon EC2 \ No newline at end of file diff --git a/icons/amazonecs.svg b/icons/amazonecs.svg new file mode 100644 index 000000000000..afcb5ec43ce0 --- /dev/null +++ b/icons/amazonecs.svg @@ -0,0 +1 @@ +Amazon ECS \ No newline at end of file diff --git a/icons/amazoneks.svg b/icons/amazoneks.svg new file mode 100644 index 000000000000..fab8006a825a --- /dev/null +++ b/icons/amazoneks.svg @@ -0,0 +1 @@ +Amazon EKS \ No newline at end of file diff --git a/icons/amazonrds.svg b/icons/amazonrds.svg new file mode 100644 index 000000000000..6edfa849ea64 --- /dev/null +++ b/icons/amazonrds.svg @@ -0,0 +1 @@ +Amazon RDS \ No newline at end of file diff --git a/icons/amazonsqs.svg b/icons/amazonsqs.svg new file mode 100644 index 000000000000..483b4adea020 --- /dev/null +++ b/icons/amazonsqs.svg @@ -0,0 +1 @@ +Amazon SQS \ No newline at end of file diff --git a/icons/amg.svg b/icons/amg.svg new file mode 100644 index 000000000000..975ac4d04903 --- /dev/null +++ b/icons/amg.svg @@ -0,0 +1 @@ +AMG \ No newline at end of file diff --git a/icons/anta.svg b/icons/anta.svg new file mode 100644 index 000000000000..56bb41de743d --- /dev/null +++ b/icons/anta.svg @@ -0,0 +1 @@ +Anta \ No newline at end of file diff --git a/icons/apachecouchdb.svg b/icons/apachecouchdb.svg new file mode 100644 index 000000000000..a3fbda001b88 --- /dev/null +++ b/icons/apachecouchdb.svg @@ -0,0 +1 @@ +Apache CouchDB \ No newline at end of file diff --git a/icons/apachehadoop.svg b/icons/apachehadoop.svg new file mode 100644 index 000000000000..01fa5f2399db --- /dev/null +++ b/icons/apachehadoop.svg @@ -0,0 +1 @@ +Apache Hadoop \ No newline at end of file diff --git a/icons/apachejmeter.svg b/icons/apachejmeter.svg index d38d506614b9..814dbea5a85b 100644 --- a/icons/apachejmeter.svg +++ b/icons/apachejmeter.svg @@ -1 +1 @@ -Apache JMeter \ No newline at end of file +Apache JMeter \ No newline at end of file diff --git a/icons/appian.svg b/icons/appian.svg new file mode 100644 index 000000000000..8d211528d3ae --- /dev/null +++ b/icons/appian.svg @@ -0,0 +1 @@ +Appian \ No newline at end of file diff --git a/icons/appwrite.svg b/icons/appwrite.svg new file mode 100644 index 000000000000..64994f233972 --- /dev/null +++ b/icons/appwrite.svg @@ -0,0 +1 @@ +Appwrite \ No newline at end of file diff --git a/icons/aqua.svg b/icons/aqua.svg new file mode 100644 index 000000000000..3f38148904f3 --- /dev/null +++ b/icons/aqua.svg @@ -0,0 +1 @@ +Aqua \ No newline at end of file diff --git a/icons/argo.svg b/icons/argo.svg new file mode 100644 index 000000000000..fde6bb799edf --- /dev/null +++ b/icons/argo.svg @@ -0,0 +1 @@ +Argo \ No newline at end of file diff --git a/icons/argos.svg b/icons/argos.svg new file mode 100644 index 000000000000..2c298a2dc67b --- /dev/null +++ b/icons/argos.svg @@ -0,0 +1 @@ +Argos \ No newline at end of file diff --git a/icons/arm.svg b/icons/arm.svg new file mode 100644 index 000000000000..3f27667666e8 --- /dev/null +++ b/icons/arm.svg @@ -0,0 +1 @@ +Arm \ No newline at end of file diff --git a/icons/artifacthub.svg b/icons/artifacthub.svg new file mode 100644 index 000000000000..e2fb3627e5f9 --- /dev/null +++ b/icons/artifacthub.svg @@ -0,0 +1 @@ +Artifact Hub \ No newline at end of file diff --git a/icons/arxiv.svg b/icons/arxiv.svg index aad276212fe5..4d09be6964dd 100644 --- a/icons/arxiv.svg +++ b/icons/arxiv.svg @@ -1 +1 @@ -arXiv \ No newline at end of file +arXiv \ No newline at end of file diff --git a/icons/asda.svg b/icons/asda.svg new file mode 100644 index 000000000000..0bdb51d6d1c8 --- /dev/null +++ b/icons/asda.svg @@ -0,0 +1 @@ +ASDA \ No newline at end of file diff --git a/icons/astonmartin.svg b/icons/astonmartin.svg new file mode 100644 index 000000000000..5af9e60c6633 --- /dev/null +++ b/icons/astonmartin.svg @@ -0,0 +1 @@ +Aston Martin \ No newline at end of file diff --git a/icons/astro.svg b/icons/astro.svg new file mode 100644 index 000000000000..781213c606a7 --- /dev/null +++ b/icons/astro.svg @@ -0,0 +1 @@ +Astro \ No newline at end of file diff --git a/icons/auchan.svg b/icons/auchan.svg new file mode 100644 index 000000000000..b2eb6112ce86 --- /dev/null +++ b/icons/auchan.svg @@ -0,0 +1 @@ +Auchan \ No newline at end of file diff --git a/icons/autoprefixer.svg b/icons/autoprefixer.svg new file mode 100644 index 000000000000..b88cb1755d7f --- /dev/null +++ b/icons/autoprefixer.svg @@ -0,0 +1 @@ +Autoprefixer \ No newline at end of file diff --git a/icons/avajs.svg b/icons/avajs.svg new file mode 100644 index 000000000000..36584e61c2ee --- /dev/null +++ b/icons/avajs.svg @@ -0,0 +1 @@ +avajs \ No newline at end of file diff --git a/icons/avast.svg b/icons/avast.svg new file mode 100644 index 000000000000..e5f8e0666269 --- /dev/null +++ b/icons/avast.svg @@ -0,0 +1 @@ +Avast \ No newline at end of file diff --git a/icons/awsfargate.svg b/icons/awsfargate.svg new file mode 100644 index 000000000000..2b575c0ba173 --- /dev/null +++ b/icons/awsfargate.svg @@ -0,0 +1 @@ +AWS Fargate \ No newline at end of file diff --git a/icons/awslambda.svg b/icons/awslambda.svg new file mode 100644 index 000000000000..e02e27ee44fe --- /dev/null +++ b/icons/awslambda.svg @@ -0,0 +1 @@ +AWS Lambda \ No newline at end of file diff --git a/icons/backbonedotjs.svg b/icons/backbonedotjs.svg new file mode 100644 index 000000000000..dfe8da722c05 --- /dev/null +++ b/icons/backbonedotjs.svg @@ -0,0 +1 @@ +Backbone.js \ No newline at end of file diff --git a/icons/backendless.svg b/icons/backendless.svg new file mode 100644 index 000000000000..52808010a362 --- /dev/null +++ b/icons/backendless.svg @@ -0,0 +1 @@ +Backendless \ No newline at end of file diff --git a/icons/bandlab.svg b/icons/bandlab.svg index 9c8896a84158..5bf4eb13a139 100644 --- a/icons/bandlab.svg +++ b/icons/bandlab.svg @@ -1 +1 @@ -BandLab \ No newline at end of file +BandLab \ No newline at end of file diff --git a/icons/bem.svg b/icons/bem.svg new file mode 100644 index 000000000000..ddb699ad4a3e --- /dev/null +++ b/icons/bem.svg @@ -0,0 +1 @@ +BEM \ No newline at end of file diff --git a/icons/biolink.svg b/icons/biolink.svg new file mode 100644 index 000000000000..625e5aaa0f33 --- /dev/null +++ b/icons/biolink.svg @@ -0,0 +1 @@ +Bio Link \ No newline at end of file diff --git a/icons/boehringeringelheim.svg b/icons/boehringeringelheim.svg new file mode 100644 index 000000000000..c03ec373319c --- /dev/null +++ b/icons/boehringeringelheim.svg @@ -0,0 +1 @@ +Boehringer Ingelheim \ No newline at end of file diff --git a/icons/bookmyshow.svg b/icons/bookmyshow.svg new file mode 100644 index 000000000000..40b3d9ccd61a --- /dev/null +++ b/icons/bookmyshow.svg @@ -0,0 +1 @@ +BookMyShow \ No newline at end of file diff --git a/icons/boots.svg b/icons/boots.svg new file mode 100644 index 000000000000..676eb0283ad7 --- /dev/null +++ b/icons/boots.svg @@ -0,0 +1 @@ +Boots \ No newline at end of file diff --git a/icons/borgbackup.svg b/icons/borgbackup.svg new file mode 100644 index 000000000000..ebd656be1bf9 --- /dev/null +++ b/icons/borgbackup.svg @@ -0,0 +1 @@ +BorgBackup \ No newline at end of file diff --git a/icons/boulanger.svg b/icons/boulanger.svg new file mode 100644 index 000000000000..61095786530b --- /dev/null +++ b/icons/boulanger.svg @@ -0,0 +1 @@ +boulanger \ No newline at end of file diff --git a/icons/boxysvg.svg b/icons/boxysvg.svg new file mode 100644 index 000000000000..f59942f2963e --- /dev/null +++ b/icons/boxysvg.svg @@ -0,0 +1 @@ +Boxy SVG \ No newline at end of file diff --git a/icons/budibase.svg b/icons/budibase.svg new file mode 100644 index 000000000000..f137933d79e8 --- /dev/null +++ b/icons/budibase.svg @@ -0,0 +1 @@ +Budibase \ No newline at end of file diff --git a/icons/bukalapak.svg b/icons/bukalapak.svg new file mode 100644 index 000000000000..4b9f653f9953 --- /dev/null +++ b/icons/bukalapak.svg @@ -0,0 +1 @@ +Bukalapak \ No newline at end of file diff --git a/icons/burgerking.svg b/icons/burgerking.svg new file mode 100644 index 000000000000..31e9ed665286 --- /dev/null +++ b/icons/burgerking.svg @@ -0,0 +1 @@ +Burger King \ No newline at end of file diff --git a/icons/burton.svg b/icons/burton.svg new file mode 100644 index 000000000000..46131f642c88 --- /dev/null +++ b/icons/burton.svg @@ -0,0 +1 @@ +Burton \ No newline at end of file diff --git a/icons/byjus.svg b/icons/byjus.svg new file mode 100644 index 000000000000..c65f64a97811 --- /dev/null +++ b/icons/byjus.svg @@ -0,0 +1 @@ +Byju's \ No newline at end of file diff --git a/icons/caffeine.svg b/icons/caffeine.svg new file mode 100644 index 000000000000..f71e1ccf169b --- /dev/null +++ b/icons/caffeine.svg @@ -0,0 +1 @@ +Caffeine \ No newline at end of file diff --git a/icons/carrefour.svg b/icons/carrefour.svg new file mode 100644 index 000000000000..e47c4b222af6 --- /dev/null +++ b/icons/carrefour.svg @@ -0,0 +1 @@ +Carrefour \ No newline at end of file diff --git a/icons/chemex.svg b/icons/chemex.svg new file mode 100644 index 000000000000..4a1dfcfb92f0 --- /dev/null +++ b/icons/chemex.svg @@ -0,0 +1 @@ +Chemex \ No newline at end of file diff --git a/icons/chromecast.svg b/icons/chromecast.svg new file mode 100644 index 000000000000..6b251ed8a1e1 --- /dev/null +++ b/icons/chromecast.svg @@ -0,0 +1 @@ +Chromecast \ No newline at end of file diff --git a/icons/cilium.svg b/icons/cilium.svg new file mode 100644 index 000000000000..ae5132e70c9c --- /dev/null +++ b/icons/cilium.svg @@ -0,0 +1 @@ +Cilium \ No newline at end of file diff --git a/icons/citroen.svg b/icons/citroen.svg index 9794fcc56013..128db1771e56 100644 --- a/icons/citroen.svg +++ b/icons/citroen.svg @@ -1 +1 @@ -Citroën \ No newline at end of file +Citroën \ No newline at end of file diff --git a/icons/civo.svg b/icons/civo.svg new file mode 100644 index 000000000000..28b33a6592e9 --- /dev/null +++ b/icons/civo.svg @@ -0,0 +1 @@ +Civo \ No newline at end of file diff --git a/icons/clickhouse.svg b/icons/clickhouse.svg new file mode 100644 index 000000000000..689aca379156 --- /dev/null +++ b/icons/clickhouse.svg @@ -0,0 +1 @@ +ClickHouse \ No newline at end of file diff --git a/icons/cloudflarepages.svg b/icons/cloudflarepages.svg new file mode 100644 index 000000000000..6278cca6b669 --- /dev/null +++ b/icons/cloudflarepages.svg @@ -0,0 +1 @@ +Cloudflare Pages \ No newline at end of file diff --git a/icons/cncf.svg b/icons/cncf.svg new file mode 100644 index 000000000000..67c2ec17dc6e --- /dev/null +++ b/icons/cncf.svg @@ -0,0 +1 @@ +CNCF \ No newline at end of file diff --git a/icons/cockpit.svg b/icons/cockpit.svg new file mode 100644 index 000000000000..4bcff12bcdc3 --- /dev/null +++ b/icons/cockpit.svg @@ -0,0 +1 @@ +Cockpit \ No newline at end of file diff --git a/icons/cocos.svg b/icons/cocos.svg index 9662c939b3aa..233e347e3c70 100644 --- a/icons/cocos.svg +++ b/icons/cocos.svg @@ -1 +1 @@ -Cocos \ No newline at end of file +Cocos \ No newline at end of file diff --git a/icons/codereview.svg b/icons/codereview.svg new file mode 100644 index 000000000000..87079abdf586 --- /dev/null +++ b/icons/codereview.svg @@ -0,0 +1 @@ +Code Review \ No newline at end of file diff --git a/icons/coil.svg b/icons/coil.svg new file mode 100644 index 000000000000..37cc81b707ad --- /dev/null +++ b/icons/coil.svg @@ -0,0 +1 @@ +Coil \ No newline at end of file diff --git a/icons/coinmarketcap.svg b/icons/coinmarketcap.svg new file mode 100644 index 000000000000..7dd4943bc8d5 --- /dev/null +++ b/icons/coinmarketcap.svg @@ -0,0 +1 @@ +CoinMarketCap \ No newline at end of file diff --git a/icons/commitlint.svg b/icons/commitlint.svg new file mode 100644 index 000000000000..9496f6f6dc79 --- /dev/null +++ b/icons/commitlint.svg @@ -0,0 +1 @@ +commitlint \ No newline at end of file diff --git a/icons/comsol.svg b/icons/comsol.svg new file mode 100644 index 000000000000..71e662430257 --- /dev/null +++ b/icons/comsol.svg @@ -0,0 +1 @@ +Comsol \ No newline at end of file diff --git a/icons/conan.svg b/icons/conan.svg new file mode 100644 index 000000000000..990b1eb01762 --- /dev/null +++ b/icons/conan.svg @@ -0,0 +1 @@ +Conan \ No newline at end of file diff --git a/icons/containerd.svg b/icons/containerd.svg new file mode 100644 index 000000000000..40e170f92f4d --- /dev/null +++ b/icons/containerd.svg @@ -0,0 +1 @@ +containerd \ No newline at end of file diff --git a/icons/conventionalcommits.svg b/icons/conventionalcommits.svg new file mode 100644 index 000000000000..0ec669fb44e9 --- /dev/null +++ b/icons/conventionalcommits.svg @@ -0,0 +1 @@ +Conventional Commits \ No newline at end of file diff --git a/icons/cora.svg b/icons/cora.svg new file mode 100644 index 000000000000..7a184bbffa36 --- /dev/null +++ b/icons/cora.svg @@ -0,0 +1 @@ +Cora \ No newline at end of file diff --git a/icons/cratedb.svg b/icons/cratedb.svg new file mode 100644 index 000000000000..15d63d873f00 --- /dev/null +++ b/icons/cratedb.svg @@ -0,0 +1 @@ +CrateDB \ No newline at end of file diff --git a/icons/createreactapp.svg b/icons/createreactapp.svg new file mode 100644 index 000000000000..ceb1ecc7a337 --- /dev/null +++ b/icons/createreactapp.svg @@ -0,0 +1 @@ +Create React App \ No newline at end of file diff --git a/icons/credly.svg b/icons/credly.svg new file mode 100644 index 000000000000..3d46812f548d --- /dev/null +++ b/icons/credly.svg @@ -0,0 +1 @@ +Credly \ No newline at end of file diff --git a/icons/criticalrole.svg b/icons/criticalrole.svg new file mode 100644 index 000000000000..1e60bf7c1a2d --- /dev/null +++ b/icons/criticalrole.svg @@ -0,0 +1 @@ +Critical Role \ No newline at end of file diff --git a/icons/cssmodules.svg b/icons/cssmodules.svg new file mode 100644 index 000000000000..c0feaf01208a --- /dev/null +++ b/icons/cssmodules.svg @@ -0,0 +1 @@ +CSS Modules \ No newline at end of file diff --git a/icons/cytoscapedotjs.svg b/icons/cytoscapedotjs.svg index b71c7701d07c..fa4b8c9030f3 100644 --- a/icons/cytoscapedotjs.svg +++ b/icons/cytoscapedotjs.svg @@ -1 +1 @@ -Cytoscape.js +Cytoscape.js \ No newline at end of file diff --git a/icons/darty.svg b/icons/darty.svg new file mode 100644 index 000000000000..a965a11ca879 --- /dev/null +++ b/icons/darty.svg @@ -0,0 +1 @@ +Darty \ No newline at end of file diff --git a/icons/dask.svg b/icons/dask.svg new file mode 100644 index 000000000000..e71275c0acc9 --- /dev/null +++ b/icons/dask.svg @@ -0,0 +1 @@ +Dask \ No newline at end of file diff --git a/icons/dassaultsystemes.svg b/icons/dassaultsystemes.svg index 0a6e8cbba53c..14f4f654fc56 100644 --- a/icons/dassaultsystemes.svg +++ b/icons/dassaultsystemes.svg @@ -1 +1 @@ -Dassault Systèmes \ No newline at end of file +Dassault Systèmes \ No newline at end of file diff --git a/icons/datadotai.svg b/icons/datadotai.svg new file mode 100644 index 000000000000..87f5bc726a75 --- /dev/null +++ b/icons/datadotai.svg @@ -0,0 +1 @@ +data.ai \ No newline at end of file diff --git a/icons/datagrip.svg b/icons/datagrip.svg new file mode 100644 index 000000000000..2298a5310622 --- /dev/null +++ b/icons/datagrip.svg @@ -0,0 +1 @@ +DataGrip \ No newline at end of file diff --git a/icons/dataiku.svg b/icons/dataiku.svg new file mode 100644 index 000000000000..fd9556786b1b --- /dev/null +++ b/icons/dataiku.svg @@ -0,0 +1 @@ +Dataiku \ No newline at end of file diff --git a/icons/dedge.svg b/icons/dedge.svg new file mode 100644 index 000000000000..325b9533074c --- /dev/null +++ b/icons/dedge.svg @@ -0,0 +1 @@ +D-EDGE \ No newline at end of file diff --git a/icons/deno.svg b/icons/deno.svg index f58d7e079184..ea6459994a4d 100644 --- a/icons/deno.svg +++ b/icons/deno.svg @@ -1 +1 @@ -Deno \ No newline at end of file +Deno \ No newline at end of file diff --git a/icons/devexpress.svg b/icons/devexpress.svg new file mode 100644 index 000000000000..f1eec68d8853 --- /dev/null +++ b/icons/devexpress.svg @@ -0,0 +1 @@ +DevExpress \ No newline at end of file diff --git a/icons/dgraph.svg b/icons/dgraph.svg old mode 100755 new mode 100644 diff --git a/icons/disroot.svg b/icons/disroot.svg index 87857af656b5..db466bc60482 100644 --- a/icons/disroot.svg +++ b/icons/disroot.svg @@ -1 +1 @@ -Disroot \ No newline at end of file +Disroot \ No newline at end of file diff --git a/icons/django.svg b/icons/django.svg old mode 100755 new mode 100644 diff --git a/icons/dlib.svg b/icons/dlib.svg new file mode 100644 index 000000000000..1926ddf7a0cc --- /dev/null +++ b/icons/dlib.svg @@ -0,0 +1 @@ +Dlib \ No newline at end of file diff --git a/icons/dm.svg b/icons/dm.svg new file mode 100644 index 000000000000..78ae85b9ed32 --- /dev/null +++ b/icons/dm.svg @@ -0,0 +1 @@ +dm \ No newline at end of file diff --git a/icons/docsdotrs.svg b/icons/docsdotrs.svg new file mode 100644 index 000000000000..cebe3f33052b --- /dev/null +++ b/icons/docsdotrs.svg @@ -0,0 +1 @@ +Docs.rs \ No newline at end of file diff --git a/icons/doubanread.svg b/icons/doubanread.svg new file mode 100644 index 000000000000..38716794b06f --- /dev/null +++ b/icons/doubanread.svg @@ -0,0 +1 @@ +Douban Read \ No newline at end of file diff --git a/icons/dpd.svg b/icons/dpd.svg new file mode 100644 index 000000000000..9142ea5bc0e4 --- /dev/null +++ b/icons/dpd.svg @@ -0,0 +1 @@ +DPD \ No newline at end of file diff --git a/icons/dragonframe.svg b/icons/dragonframe.svg new file mode 100644 index 000000000000..7ee610c32d66 --- /dev/null +++ b/icons/dragonframe.svg @@ -0,0 +1 @@ +Dragonframe \ No newline at end of file diff --git a/icons/duckdb.svg b/icons/duckdb.svg new file mode 100644 index 000000000000..feaab85bc541 --- /dev/null +++ b/icons/duckdb.svg @@ -0,0 +1 @@ +DuckDB \ No newline at end of file diff --git a/icons/dungeonsanddragons.svg b/icons/dungeonsanddragons.svg new file mode 100644 index 000000000000..d4c0f2d625ec --- /dev/null +++ b/icons/dungeonsanddragons.svg @@ -0,0 +1 @@ +Dungeons & Dragons \ No newline at end of file diff --git a/icons/dvc.svg b/icons/dvc.svg new file mode 100644 index 000000000000..590ff7a340a4 --- /dev/null +++ b/icons/dvc.svg @@ -0,0 +1 @@ +DVC \ No newline at end of file diff --git a/icons/e.svg b/icons/e.svg new file mode 100644 index 000000000000..c9aa8ce8635c --- /dev/null +++ b/icons/e.svg @@ -0,0 +1 @@ +/e/ \ No newline at end of file diff --git a/icons/edeka.svg b/icons/edeka.svg new file mode 100644 index 000000000000..0cb733c4b6ef --- /dev/null +++ b/icons/edeka.svg @@ -0,0 +1 @@ +EDEKA \ No newline at end of file diff --git a/icons/edotleclerc.svg b/icons/edotleclerc.svg new file mode 100644 index 000000000000..131c491614ef --- /dev/null +++ b/icons/edotleclerc.svg @@ -0,0 +1 @@ +E.Leclerc \ No newline at end of file diff --git a/icons/electronbuilder.svg b/icons/electronbuilder.svg new file mode 100644 index 000000000000..728eaaf51215 --- /dev/null +++ b/icons/electronbuilder.svg @@ -0,0 +1 @@ +electron-builder \ No newline at end of file diff --git a/icons/elementor.svg b/icons/elementor.svg new file mode 100644 index 000000000000..6928d6ae711f --- /dev/null +++ b/icons/elementor.svg @@ -0,0 +1 @@ +Elementor \ No newline at end of file diff --git a/icons/enterprisedb.svg b/icons/enterprisedb.svg new file mode 100644 index 000000000000..9d087a0be13b --- /dev/null +++ b/icons/enterprisedb.svg @@ -0,0 +1 @@ +EnterpriseDB \ No newline at end of file diff --git a/icons/equinixmetal.svg b/icons/equinixmetal.svg new file mode 100644 index 000000000000..0dc9b6bd23ed --- /dev/null +++ b/icons/equinixmetal.svg @@ -0,0 +1 @@ +Equinix Metal \ No newline at end of file diff --git a/icons/esbuild.svg b/icons/esbuild.svg new file mode 100644 index 000000000000..06c1acc7aca8 --- /dev/null +++ b/icons/esbuild.svg @@ -0,0 +1 @@ +esbuild \ No newline at end of file diff --git a/icons/etcd.svg b/icons/etcd.svg new file mode 100644 index 000000000000..631736d8d113 --- /dev/null +++ b/icons/etcd.svg @@ -0,0 +1 @@ +etcd \ No newline at end of file diff --git a/icons/exordo.svg b/icons/exordo.svg new file mode 100644 index 000000000000..e7ae6577a646 --- /dev/null +++ b/icons/exordo.svg @@ -0,0 +1 @@ +Exordo \ No newline at end of file diff --git a/icons/exoscale.svg b/icons/exoscale.svg new file mode 100644 index 000000000000..8c482a3effea --- /dev/null +++ b/icons/exoscale.svg @@ -0,0 +1 @@ +Exoscale \ No newline at end of file diff --git a/icons/f1.svg b/icons/f1.svg new file mode 100644 index 000000000000..01e05d307f01 --- /dev/null +++ b/icons/f1.svg @@ -0,0 +1 @@ +F1 \ No newline at end of file diff --git a/icons/fandom.svg b/icons/fandom.svg index 1e63ba875ef1..0d1a71240e71 100644 --- a/icons/fandom.svg +++ b/icons/fandom.svg @@ -1 +1 @@ -Fandom \ No newline at end of file +Fandom \ No newline at end of file diff --git a/icons/fauna.svg b/icons/fauna.svg new file mode 100644 index 000000000000..9f3f776635ff --- /dev/null +++ b/icons/fauna.svg @@ -0,0 +1 @@ +Fauna \ No newline at end of file diff --git a/icons/fedora.svg b/icons/fedora.svg index 73b85bcf8338..7f461d0e6efd 100644 --- a/icons/fedora.svg +++ b/icons/fedora.svg @@ -1 +1 @@ -Fedora \ No newline at end of file +Fedora \ No newline at end of file diff --git a/icons/fivem.svg b/icons/fivem.svg new file mode 100644 index 000000000000..aa92a0e1ad1b --- /dev/null +++ b/icons/fivem.svg @@ -0,0 +1 @@ +FiveM \ No newline at end of file diff --git a/icons/flat.svg b/icons/flat.svg new file mode 100644 index 000000000000..a18078897586 --- /dev/null +++ b/icons/flat.svg @@ -0,0 +1 @@ +Flat \ No newline at end of file diff --git a/icons/flatpak.svg b/icons/flatpak.svg new file mode 100644 index 000000000000..ea7c292d4f4f --- /dev/null +++ b/icons/flatpak.svg @@ -0,0 +1 @@ +Flatpak \ No newline at end of file diff --git a/icons/fluentbit.svg b/icons/fluentbit.svg new file mode 100644 index 000000000000..c0fd3709f9cc --- /dev/null +++ b/icons/fluentbit.svg @@ -0,0 +1 @@ +Fluent Bit \ No newline at end of file diff --git a/icons/flyway.svg b/icons/flyway.svg new file mode 100644 index 000000000000..406c47c57b56 --- /dev/null +++ b/icons/flyway.svg @@ -0,0 +1 @@ +Flyway \ No newline at end of file diff --git a/icons/fnac.svg b/icons/fnac.svg index 4e48c8794462..b97d387477d2 100644 --- a/icons/fnac.svg +++ b/icons/fnac.svg @@ -1 +1 @@ -Fnac \ No newline at end of file +Fnac \ No newline at end of file diff --git a/icons/fonoma.svg b/icons/fonoma.svg new file mode 100644 index 000000000000..2be2bb16ab3c --- /dev/null +++ b/icons/fonoma.svg @@ -0,0 +1 @@ +Fonoma \ No newline at end of file diff --git a/icons/fontawesome.svg b/icons/fontawesome.svg index 5c8e2e772e7c..1c3ec6e8daba 100644 --- a/icons/fontawesome.svg +++ b/icons/fontawesome.svg @@ -1 +1 @@ -Font Awesome \ No newline at end of file +Font Awesome \ No newline at end of file diff --git a/icons/foursquare.svg b/icons/foursquare.svg index 426c64f9291a..b7add8c05853 100644 --- a/icons/foursquare.svg +++ b/icons/foursquare.svg @@ -1 +1 @@ -Foursquare \ No newline at end of file +Foursquare \ No newline at end of file diff --git a/icons/framework7.svg b/icons/framework7.svg new file mode 100644 index 000000000000..6c1ba05392ef --- /dev/null +++ b/icons/framework7.svg @@ -0,0 +1 @@ +Framework7 \ No newline at end of file diff --git a/icons/franprix.svg b/icons/franprix.svg new file mode 100644 index 000000000000..e224cc4df871 --- /dev/null +++ b/icons/franprix.svg @@ -0,0 +1 @@ +Franprix \ No newline at end of file diff --git a/icons/funimation.svg b/icons/funimation.svg new file mode 100644 index 000000000000..36c096f7292f --- /dev/null +++ b/icons/funimation.svg @@ -0,0 +1 @@ +Funimation \ No newline at end of file diff --git a/icons/furrynetwork.svg b/icons/furrynetwork.svg index 65fdd44be46d..2cb0ec2d582c 100644 --- a/icons/furrynetwork.svg +++ b/icons/furrynetwork.svg @@ -1 +1 @@ -Furry Network \ No newline at end of file +Furry Network \ No newline at end of file diff --git a/icons/g2.svg b/icons/g2.svg new file mode 100644 index 000000000000..d429b424f0aa --- /dev/null +++ b/icons/g2.svg @@ -0,0 +1 @@ +G2 \ No newline at end of file diff --git a/icons/gameandwatch.svg b/icons/gameandwatch.svg new file mode 100644 index 000000000000..cd295a9f38e3 --- /dev/null +++ b/icons/gameandwatch.svg @@ -0,0 +1 @@ +Game & Watch \ No newline at end of file diff --git a/icons/geant.svg b/icons/geant.svg new file mode 100644 index 000000000000..9f9d993f3d4f --- /dev/null +++ b/icons/geant.svg @@ -0,0 +1 @@ +Géant \ No newline at end of file diff --git a/icons/githubpages.svg b/icons/githubpages.svg new file mode 100644 index 000000000000..bd3d5167bb44 --- /dev/null +++ b/icons/githubpages.svg @@ -0,0 +1 @@ +GitHub Pages \ No newline at end of file diff --git a/icons/gitignoredotio.svg b/icons/gitignoredotio.svg new file mode 100644 index 000000000000..8e1aa81b6c04 --- /dev/null +++ b/icons/gitignoredotio.svg @@ -0,0 +1 @@ +gitignore.io \ No newline at end of file diff --git a/icons/gitlab.svg b/icons/gitlab.svg index d84a8e9db9f9..e4a29630f901 100644 --- a/icons/gitlab.svg +++ b/icons/gitlab.svg @@ -1 +1 @@ -GitLab \ No newline at end of file +GitLab \ No newline at end of file diff --git a/icons/globus.svg b/icons/globus.svg new file mode 100644 index 000000000000..fe987e706d2f --- /dev/null +++ b/icons/globus.svg @@ -0,0 +1 @@ +Globus \ No newline at end of file diff --git a/icons/gnometerminal.svg b/icons/gnometerminal.svg new file mode 100644 index 000000000000..c64a8b96cbca --- /dev/null +++ b/icons/gnometerminal.svg @@ -0,0 +1 @@ +GNOME Terminal \ No newline at end of file diff --git a/icons/gocd.svg b/icons/gocd.svg new file mode 100644 index 000000000000..5e5852654f26 --- /dev/null +++ b/icons/gocd.svg @@ -0,0 +1 @@ +GoCD \ No newline at end of file diff --git a/icons/godaddy.svg b/icons/godaddy.svg index 31bf2c16e318..8041083eb56b 100644 --- a/icons/godaddy.svg +++ b/icons/godaddy.svg @@ -1 +1 @@ -GoDaddy +GoDaddy \ No newline at end of file diff --git a/icons/goland.svg b/icons/goland.svg new file mode 100644 index 000000000000..b645be9f2022 --- /dev/null +++ b/icons/goland.svg @@ -0,0 +1 @@ +GoLand \ No newline at end of file diff --git a/icons/googleadmob.svg b/icons/googleadmob.svg new file mode 100644 index 000000000000..7c1695b04f7e --- /dev/null +++ b/icons/googleadmob.svg @@ -0,0 +1 @@ +Google AdMob \ No newline at end of file diff --git a/icons/googlecast.svg b/icons/googlecast.svg deleted file mode 100644 index 6c6519f843b8..000000000000 --- a/icons/googlecast.svg +++ /dev/null @@ -1 +0,0 @@ -Google Cast \ No newline at end of file diff --git a/icons/googledrive.svg b/icons/googledrive.svg index 6b8d63f9347a..9f44a5075751 100644 --- a/icons/googledrive.svg +++ b/icons/googledrive.svg @@ -1 +1 @@ -Google Drive \ No newline at end of file +Google Drive \ No newline at end of file diff --git a/icons/googlekeep.svg b/icons/googlekeep.svg index 99f094418180..4396782a9b48 100644 --- a/icons/googlekeep.svg +++ b/icons/googlekeep.svg @@ -1 +1 @@ -Google Keep \ No newline at end of file +Google Keep \ No newline at end of file diff --git a/icons/googlemarketingplatform.svg b/icons/googlemarketingplatform.svg new file mode 100644 index 000000000000..d95b245f4cfc --- /dev/null +++ b/icons/googlemarketingplatform.svg @@ -0,0 +1 @@ +Google Marketing Platform \ No newline at end of file diff --git a/icons/googlemeet.svg b/icons/googlemeet.svg index 948d32bd6141..344f1d003c13 100644 --- a/icons/googlemeet.svg +++ b/icons/googlemeet.svg @@ -1 +1 @@ -Google Meet \ No newline at end of file +Google Meet \ No newline at end of file diff --git a/icons/googlemessages.svg b/icons/googlemessages.svg index 9e005739a15e..dd72fda879a9 100644 --- a/icons/googlemessages.svg +++ b/icons/googlemessages.svg @@ -1 +1 @@ -Google Messages \ No newline at end of file +Google Messages \ No newline at end of file diff --git a/icons/grab.svg b/icons/grab.svg new file mode 100644 index 000000000000..5266c7e043c5 --- /dev/null +++ b/icons/grab.svg @@ -0,0 +1 @@ +Grab \ No newline at end of file diff --git a/icons/grandfrais.svg b/icons/grandfrais.svg new file mode 100644 index 000000000000..7984156d769c --- /dev/null +++ b/icons/grandfrais.svg @@ -0,0 +1 @@ +Grand Frais \ No newline at end of file diff --git a/icons/graphql.svg b/icons/graphql.svg index 3f67dc0e179a..213d5a0c01f8 100644 --- a/icons/graphql.svg +++ b/icons/graphql.svg @@ -1 +1 @@ -GraphQL \ No newline at end of file +GraphQL \ No newline at end of file diff --git a/icons/groupme.svg b/icons/groupme.svg new file mode 100644 index 000000000000..6b3bd1f9a62e --- /dev/null +++ b/icons/groupme.svg @@ -0,0 +1 @@ +GroupMe \ No newline at end of file diff --git a/icons/gtk.svg b/icons/gtk.svg new file mode 100644 index 000000000000..302429be0c82 --- /dev/null +++ b/icons/gtk.svg @@ -0,0 +1 @@ +GTK \ No newline at end of file diff --git a/icons/guangzhoumetro.svg b/icons/guangzhoumetro.svg index c0701b2bcb26..fcee3faa87fe 100644 --- a/icons/guangzhoumetro.svg +++ b/icons/guangzhoumetro.svg @@ -1 +1 @@ -Guangzhou Metro \ No newline at end of file +Guangzhou Metro \ No newline at end of file diff --git a/icons/guilded.svg b/icons/guilded.svg new file mode 100644 index 000000000000..9e2224e3f423 --- /dev/null +++ b/icons/guilded.svg @@ -0,0 +1 @@ +Guilded \ No newline at end of file diff --git a/icons/gunicorn.svg b/icons/gunicorn.svg new file mode 100644 index 000000000000..08eda3694550 --- /dev/null +++ b/icons/gunicorn.svg @@ -0,0 +1 @@ +Gunicorn \ No newline at end of file diff --git a/icons/gurobi.svg b/icons/gurobi.svg new file mode 100644 index 000000000000..4e8271f94752 --- /dev/null +++ b/icons/gurobi.svg @@ -0,0 +1 @@ +Gurobi \ No newline at end of file diff --git a/icons/handlebarsdotjs.svg b/icons/handlebarsdotjs.svg new file mode 100644 index 000000000000..2c88505f4dd8 --- /dev/null +++ b/icons/handlebarsdotjs.svg @@ -0,0 +1 @@ +Handlebars.js \ No newline at end of file diff --git a/icons/headlessui.svg b/icons/headlessui.svg new file mode 100644 index 000000000000..79cf3ff7e781 --- /dev/null +++ b/icons/headlessui.svg @@ -0,0 +1 @@ +Headless UI \ No newline at end of file diff --git a/icons/helpscout.svg b/icons/helpscout.svg new file mode 100644 index 000000000000..9c4202113011 --- /dev/null +++ b/icons/helpscout.svg @@ -0,0 +1 @@ +Help Scout \ No newline at end of file diff --git a/icons/hetzner.svg b/icons/hetzner.svg new file mode 100644 index 000000000000..b04c98f320cc --- /dev/null +++ b/icons/hetzner.svg @@ -0,0 +1 @@ +Hetzner \ No newline at end of file diff --git a/icons/hibob.svg b/icons/hibob.svg new file mode 100644 index 000000000000..4499dce488c0 --- /dev/null +++ b/icons/hibob.svg @@ -0,0 +1 @@ +Hi Bob \ No newline at end of file diff --git a/icons/homebrew.svg b/icons/homebrew.svg old mode 100755 new mode 100644 diff --git a/icons/httpie.svg b/icons/httpie.svg new file mode 100644 index 000000000000..51db2ef85387 --- /dev/null +++ b/icons/httpie.svg @@ -0,0 +1 @@ +HTTPie \ No newline at end of file diff --git a/icons/i18next.svg b/icons/i18next.svg new file mode 100644 index 000000000000..de5ca7c9e1b5 --- /dev/null +++ b/icons/i18next.svg @@ -0,0 +1 @@ +i18next \ No newline at end of file diff --git a/icons/ibmcloud.svg b/icons/ibmcloud.svg new file mode 100644 index 000000000000..86a258bfdd50 --- /dev/null +++ b/icons/ibmcloud.svg @@ -0,0 +1 @@ +IBM Cloud \ No newline at end of file diff --git a/icons/iceland.svg b/icons/iceland.svg new file mode 100644 index 000000000000..636c9734a415 --- /dev/null +++ b/icons/iceland.svg @@ -0,0 +1 @@ +Iceland \ No newline at end of file diff --git a/icons/inkdrop.svg b/icons/inkdrop.svg new file mode 100644 index 000000000000..cce8b8819c9a --- /dev/null +++ b/icons/inkdrop.svg @@ -0,0 +1 @@ +Inkdrop \ No newline at end of file diff --git a/icons/insomnia.svg b/icons/insomnia.svg index 4c1507fa5487..f542644f3298 100644 --- a/icons/insomnia.svg +++ b/icons/insomnia.svg @@ -1 +1 @@ -Insomnia \ No newline at end of file +Insomnia \ No newline at end of file diff --git a/icons/instatus.svg b/icons/instatus.svg new file mode 100644 index 000000000000..d3b88f80a13a --- /dev/null +++ b/icons/instatus.svg @@ -0,0 +1 @@ +Instatus \ No newline at end of file diff --git a/icons/interactjs.svg b/icons/interactjs.svg new file mode 100644 index 000000000000..54ba0e620dae --- /dev/null +++ b/icons/interactjs.svg @@ -0,0 +1 @@ +InteractJS \ No newline at end of file diff --git a/icons/intermarche.svg b/icons/intermarche.svg new file mode 100644 index 000000000000..785fb407ca95 --- /dev/null +++ b/icons/intermarche.svg @@ -0,0 +1 @@ +Intermarche \ No newline at end of file diff --git a/icons/ionos.svg b/icons/ionos.svg new file mode 100644 index 000000000000..5d381a5e599e --- /dev/null +++ b/icons/ionos.svg @@ -0,0 +1 @@ +Ionos \ No newline at end of file diff --git a/icons/istio.svg b/icons/istio.svg new file mode 100644 index 000000000000..a0339c81ddb9 --- /dev/null +++ b/icons/istio.svg @@ -0,0 +1 @@ +Istio \ No newline at end of file diff --git a/icons/iterm2.svg b/icons/iterm2.svg new file mode 100644 index 000000000000..fd0ddb87d07b --- /dev/null +++ b/icons/iterm2.svg @@ -0,0 +1 @@ +iTerm2 \ No newline at end of file diff --git a/icons/java.svg b/icons/java.svg deleted file mode 100644 index 9ec302f608f8..000000000000 --- a/icons/java.svg +++ /dev/null @@ -1 +0,0 @@ -Java \ No newline at end of file diff --git a/icons/jetpackcompose.svg b/icons/jetpackcompose.svg new file mode 100644 index 000000000000..53db7b4373ca --- /dev/null +++ b/icons/jetpackcompose.svg @@ -0,0 +1 @@ +Jetpack Compose \ No newline at end of file diff --git a/icons/joplin.svg b/icons/joplin.svg new file mode 100644 index 000000000000..f7753a3c968a --- /dev/null +++ b/icons/joplin.svg @@ -0,0 +1 @@ +Joplin \ No newline at end of file diff --git a/icons/k3s.svg b/icons/k3s.svg new file mode 100644 index 000000000000..4760e0d421ec --- /dev/null +++ b/icons/k3s.svg @@ -0,0 +1 @@ +K3s \ No newline at end of file diff --git a/icons/k6.svg b/icons/k6.svg new file mode 100644 index 000000000000..8c2da2107c83 --- /dev/null +++ b/icons/k6.svg @@ -0,0 +1 @@ +k6 \ No newline at end of file diff --git a/icons/kaggle.svg b/icons/kaggle.svg index 83ee2ce737b0..372d08658cc2 100644 --- a/icons/kaggle.svg +++ b/icons/kaggle.svg @@ -1 +1 @@ -Kaggle \ No newline at end of file +Kaggle \ No newline at end of file diff --git a/icons/kaniko.svg b/icons/kaniko.svg new file mode 100644 index 000000000000..83f2ce8f23da --- /dev/null +++ b/icons/kaniko.svg @@ -0,0 +1 @@ +Kaniko \ No newline at end of file diff --git a/icons/keepachangelog.svg b/icons/keepachangelog.svg new file mode 100644 index 000000000000..9e54f8183185 --- /dev/null +++ b/icons/keepachangelog.svg @@ -0,0 +1 @@ +Keep a Changelog \ No newline at end of file diff --git a/icons/kicad.svg b/icons/kicad.svg new file mode 100644 index 000000000000..f0ae28a4f156 --- /dev/null +++ b/icons/kicad.svg @@ -0,0 +1 @@ +KiCad \ No newline at end of file diff --git a/icons/kingstontechnology.svg b/icons/kingstontechnology.svg new file mode 100644 index 000000000000..99c150653936 --- /dev/null +++ b/icons/kingstontechnology.svg @@ -0,0 +1 @@ +Kingston Technology \ No newline at end of file diff --git a/icons/kinopoisk.svg b/icons/kinopoisk.svg new file mode 100644 index 000000000000..173bedf10b16 --- /dev/null +++ b/icons/kinopoisk.svg @@ -0,0 +1 @@ +KinoPoisk \ No newline at end of file diff --git a/icons/knative.svg b/icons/knative.svg new file mode 100644 index 000000000000..6d6221871593 --- /dev/null +++ b/icons/knative.svg @@ -0,0 +1 @@ +Knative \ No newline at end of file diff --git a/icons/koa.svg b/icons/koa.svg new file mode 100644 index 000000000000..4a99aae4d223 --- /dev/null +++ b/icons/koa.svg @@ -0,0 +1 @@ +Koa \ No newline at end of file diff --git a/icons/koc.svg b/icons/koc.svg new file mode 100644 index 000000000000..dac278af7ac3 --- /dev/null +++ b/icons/koc.svg @@ -0,0 +1 @@ +Koc \ No newline at end of file diff --git a/icons/koding.svg b/icons/koding.svg deleted file mode 100644 index 614c19ab1cb9..000000000000 --- a/icons/koding.svg +++ /dev/null @@ -1 +0,0 @@ -Koding \ No newline at end of file diff --git a/icons/konami.svg b/icons/konami.svg new file mode 100644 index 000000000000..c02efa6843bf --- /dev/null +++ b/icons/konami.svg @@ -0,0 +1 @@ +Konami \ No newline at end of file diff --git a/icons/kong.svg b/icons/kong.svg new file mode 100644 index 000000000000..e9e735f8f38e --- /dev/null +++ b/icons/kong.svg @@ -0,0 +1 @@ +Kong \ No newline at end of file diff --git a/icons/kotlin.svg b/icons/kotlin.svg index 3ddab7b759c0..adf2975b9616 100644 --- a/icons/kotlin.svg +++ b/icons/kotlin.svg @@ -1 +1 @@ -Kotlin \ No newline at end of file +Kotlin \ No newline at end of file diff --git a/icons/koyeb.svg b/icons/koyeb.svg new file mode 100644 index 000000000000..b8fed6e52263 --- /dev/null +++ b/icons/koyeb.svg @@ -0,0 +1 @@ +Koyeb \ No newline at end of file diff --git a/icons/kuaishou.svg b/icons/kuaishou.svg new file mode 100644 index 000000000000..d4b4beeed778 --- /dev/null +++ b/icons/kuaishou.svg @@ -0,0 +1 @@ +Kuaishou \ No newline at end of file diff --git a/icons/kuma.svg b/icons/kuma.svg new file mode 100644 index 000000000000..1f715f0d1f19 --- /dev/null +++ b/icons/kuma.svg @@ -0,0 +1 @@ +Kuma \ No newline at end of file diff --git a/icons/lapce.svg b/icons/lapce.svg new file mode 100644 index 000000000000..ba7328ec36a3 --- /dev/null +++ b/icons/lapce.svg @@ -0,0 +1 @@ +Lapce \ No newline at end of file diff --git a/icons/lazarus.svg b/icons/lazarus.svg new file mode 100644 index 000000000000..dc940f16f659 --- /dev/null +++ b/icons/lazarus.svg @@ -0,0 +1 @@ +Lazarus \ No newline at end of file diff --git a/icons/leaderprice.svg b/icons/leaderprice.svg new file mode 100644 index 000000000000..a02b886f7793 --- /dev/null +++ b/icons/leaderprice.svg @@ -0,0 +1 @@ +Leader Price \ No newline at end of file diff --git a/icons/lemmy.svg b/icons/lemmy.svg new file mode 100644 index 000000000000..95579546ca87 --- /dev/null +++ b/icons/lemmy.svg @@ -0,0 +1 @@ +Lemmy \ No newline at end of file diff --git a/icons/lens.svg b/icons/lens.svg new file mode 100644 index 000000000000..87739f9813d1 --- /dev/null +++ b/icons/lens.svg @@ -0,0 +1 @@ +Lens \ No newline at end of file diff --git a/icons/lerna.svg b/icons/lerna.svg new file mode 100644 index 000000000000..4cc1e56130ad --- /dev/null +++ b/icons/lerna.svg @@ -0,0 +1 @@ +Lerna \ No newline at end of file diff --git a/icons/leroymerlin.svg b/icons/leroymerlin.svg new file mode 100644 index 000000000000..66931a28e89c --- /dev/null +++ b/icons/leroymerlin.svg @@ -0,0 +1 @@ +Leroy Merlin \ No newline at end of file diff --git a/icons/letsencrypt.svg b/icons/letsencrypt.svg index c64bb501993d..6432a90435a6 100644 --- a/icons/letsencrypt.svg +++ b/icons/letsencrypt.svg @@ -1 +1 @@ -Let's Encrypt \ No newline at end of file +Let's Encrypt \ No newline at end of file diff --git a/icons/levelsdotfyi.svg b/icons/levelsdotfyi.svg new file mode 100644 index 000000000000..e4cbca011d8b --- /dev/null +++ b/icons/levelsdotfyi.svg @@ -0,0 +1 @@ +levels.fyi \ No newline at end of file diff --git a/icons/lidl.svg b/icons/lidl.svg new file mode 100644 index 000000000000..6d8dbefd4ee0 --- /dev/null +++ b/icons/lidl.svg @@ -0,0 +1 @@ +Lidl \ No newline at end of file diff --git a/icons/linear.svg b/icons/linear.svg new file mode 100644 index 000000000000..f3770d654ec5 --- /dev/null +++ b/icons/linear.svg @@ -0,0 +1 @@ +Linear \ No newline at end of file diff --git a/icons/linkerd.svg b/icons/linkerd.svg new file mode 100644 index 000000000000..767b6e4f24d0 --- /dev/null +++ b/icons/linkerd.svg @@ -0,0 +1 @@ +Linkerd \ No newline at end of file diff --git a/icons/linkfire.svg b/icons/linkfire.svg new file mode 100644 index 000000000000..0fcc7aea1c51 --- /dev/null +++ b/icons/linkfire.svg @@ -0,0 +1 @@ +Linkfire \ No newline at end of file diff --git a/icons/liquibase.svg b/icons/liquibase.svg new file mode 100644 index 000000000000..92e92ec3c853 --- /dev/null +++ b/icons/liquibase.svg @@ -0,0 +1 @@ +Liquibase \ No newline at end of file diff --git a/icons/livewire.svg b/icons/livewire.svg new file mode 100644 index 000000000000..0bfea59f07ed --- /dev/null +++ b/icons/livewire.svg @@ -0,0 +1 @@ +Livewire \ No newline at end of file diff --git a/icons/lodash.svg b/icons/lodash.svg new file mode 100644 index 000000000000..9f40bea25ba2 --- /dev/null +++ b/icons/lodash.svg @@ -0,0 +1 @@ +Lodash \ No newline at end of file diff --git a/icons/loopback.svg b/icons/loopback.svg new file mode 100644 index 000000000000..f011564d814a --- /dev/null +++ b/icons/loopback.svg @@ -0,0 +1 @@ +LoopBack \ No newline at end of file diff --git a/icons/ludwig.svg b/icons/ludwig.svg new file mode 100644 index 000000000000..dc41b46649c1 --- /dev/null +++ b/icons/ludwig.svg @@ -0,0 +1 @@ +Ludwig \ No newline at end of file diff --git a/icons/lunacy.svg b/icons/lunacy.svg new file mode 100644 index 000000000000..7176b3104fc6 --- /dev/null +++ b/icons/lunacy.svg @@ -0,0 +1 @@ +Lunacy \ No newline at end of file diff --git a/icons/macys.svg b/icons/macys.svg index 6f1e3215313f..876a67dd1c4f 100644 --- a/icons/macys.svg +++ b/icons/macys.svg @@ -1 +1 @@ -Macy’s \ No newline at end of file +Macy's \ No newline at end of file diff --git a/icons/magasinsu.svg b/icons/magasinsu.svg new file mode 100644 index 000000000000..358685122d29 --- /dev/null +++ b/icons/magasinsu.svg @@ -0,0 +1 @@ +Magasins U \ No newline at end of file diff --git a/icons/mailgun.svg b/icons/mailgun.svg new file mode 100644 index 000000000000..0bfde075b17d --- /dev/null +++ b/icons/mailgun.svg @@ -0,0 +1 @@ +Mailgun \ No newline at end of file diff --git a/icons/mamp.svg b/icons/mamp.svg new file mode 100644 index 000000000000..c08730418b2c --- /dev/null +++ b/icons/mamp.svg @@ -0,0 +1 @@ +MAMP \ No newline at end of file diff --git a/icons/marko.svg b/icons/marko.svg new file mode 100644 index 000000000000..083cde1a534e --- /dev/null +++ b/icons/marko.svg @@ -0,0 +1 @@ +Marko \ No newline at end of file diff --git a/icons/materialui.svg b/icons/materialui.svg deleted file mode 100644 index f3ac17fd4683..000000000000 --- a/icons/materialui.svg +++ /dev/null @@ -1 +0,0 @@ -Material-UI \ No newline at end of file diff --git a/icons/matterdotjs.svg b/icons/matterdotjs.svg new file mode 100644 index 000000000000..dc65006b1b49 --- /dev/null +++ b/icons/matterdotjs.svg @@ -0,0 +1 @@ +Matter.js \ No newline at end of file diff --git a/icons/matternet.svg b/icons/matternet.svg index 562ad3f5b5ae..fea6cbbc6ed8 100644 --- a/icons/matternet.svg +++ b/icons/matternet.svg @@ -1 +1 @@ -Matternet \ No newline at end of file +Matternet \ No newline at end of file diff --git a/icons/mdbook.svg b/icons/mdbook.svg new file mode 100644 index 000000000000..1727c21bc092 --- /dev/null +++ b/icons/mdbook.svg @@ -0,0 +1 @@ +mdBook \ No newline at end of file diff --git a/icons/mdnwebdocs.svg b/icons/mdnwebdocs.svg index 32063a0b6709..c1722010d4bd 100644 --- a/icons/mdnwebdocs.svg +++ b/icons/mdnwebdocs.svg @@ -1 +1 @@ -MDN Web Docs \ No newline at end of file +MDN Web Docs \ No newline at end of file diff --git a/icons/mdx.svg b/icons/mdx.svg new file mode 100644 index 000000000000..53fdf30b6455 --- /dev/null +++ b/icons/mdx.svg @@ -0,0 +1 @@ +MDX \ No newline at end of file diff --git a/icons/mediamarkt.svg b/icons/mediamarkt.svg new file mode 100644 index 000000000000..16d7e352a125 --- /dev/null +++ b/icons/mediamarkt.svg @@ -0,0 +1 @@ +MediaMarkt \ No newline at end of file diff --git a/icons/merck.svg b/icons/merck.svg new file mode 100644 index 000000000000..312445add45b --- /dev/null +++ b/icons/merck.svg @@ -0,0 +1 @@ +Merck \ No newline at end of file diff --git a/icons/meta.svg b/icons/meta.svg new file mode 100644 index 000000000000..d9a1631d1a70 --- /dev/null +++ b/icons/meta.svg @@ -0,0 +1 @@ +Meta \ No newline at end of file diff --git a/icons/metrodelaciudaddemexico.svg b/icons/metrodelaciudaddemexico.svg index 21b0fefda382..f1af123fdd18 100644 --- a/icons/metrodelaciudaddemexico.svg +++ b/icons/metrodelaciudaddemexico.svg @@ -1 +1 @@ -Metro de la Ciudad de México \ No newline at end of file +Metro de la Ciudad de México \ No newline at end of file diff --git a/icons/metrodeparis.svg b/icons/metrodeparis.svg index 0b4e39cd92f4..09081bb47afa 100644 --- a/icons/metrodeparis.svg +++ b/icons/metrodeparis.svg @@ -1 +1 @@ -Métro de Paris \ No newline at end of file +Métro de Paris \ No newline at end of file diff --git a/icons/microsofttranslator.svg b/icons/microsofttranslator.svg new file mode 100644 index 000000000000..45af3534be26 --- /dev/null +++ b/icons/microsofttranslator.svg @@ -0,0 +1 @@ +Microsoft Translator \ No newline at end of file diff --git a/icons/mlb.svg b/icons/mlb.svg new file mode 100644 index 000000000000..01bf2764f3b5 --- /dev/null +++ b/icons/mlb.svg @@ -0,0 +1 @@ +MLB \ No newline at end of file diff --git a/icons/mlflow.svg b/icons/mlflow.svg new file mode 100644 index 000000000000..b44c2eea9a2e --- /dev/null +++ b/icons/mlflow.svg @@ -0,0 +1 @@ +MLflow \ No newline at end of file diff --git a/icons/mobx.svg b/icons/mobx.svg index 2c6bf0c4b07b..28ba33fc9575 100644 --- a/icons/mobx.svg +++ b/icons/mobx.svg @@ -1 +1 @@ -MobX \ No newline at end of file +MobX \ No newline at end of file diff --git a/icons/moneygram.svg b/icons/moneygram.svg new file mode 100644 index 000000000000..63cef3f98614 --- /dev/null +++ b/icons/moneygram.svg @@ -0,0 +1 @@ +MoneyGram \ No newline at end of file diff --git a/icons/monogames.svg b/icons/monogames.svg new file mode 100644 index 000000000000..0a24e76c897d --- /dev/null +++ b/icons/monogames.svg @@ -0,0 +1 @@ +MonoGames \ No newline at end of file diff --git a/icons/monoprix.svg b/icons/monoprix.svg new file mode 100644 index 000000000000..1ba425ce0985 --- /dev/null +++ b/icons/monoprix.svg @@ -0,0 +1 @@ +Monoprix \ No newline at end of file diff --git a/icons/morrisons.svg b/icons/morrisons.svg new file mode 100644 index 000000000000..9eb7000b3a24 --- /dev/null +++ b/icons/morrisons.svg @@ -0,0 +1 @@ +Morrisons \ No newline at end of file diff --git a/icons/msi.svg b/icons/msi.svg new file mode 100644 index 000000000000..6261c8426828 --- /dev/null +++ b/icons/msi.svg @@ -0,0 +1 @@ +MSI \ No newline at end of file diff --git a/icons/msibusiness.svg b/icons/msibusiness.svg new file mode 100644 index 000000000000..710d3d9b25d0 --- /dev/null +++ b/icons/msibusiness.svg @@ -0,0 +1 @@ +MSI Business \ No newline at end of file diff --git a/icons/mui.svg b/icons/mui.svg new file mode 100644 index 000000000000..79a39ad0d702 --- /dev/null +++ b/icons/mui.svg @@ -0,0 +1 @@ +MUI \ No newline at end of file diff --git a/icons/mulesoft.svg b/icons/mulesoft.svg new file mode 100644 index 000000000000..2f3119f5302f --- /dev/null +++ b/icons/mulesoft.svg @@ -0,0 +1 @@ +Mulesoft \ No newline at end of file diff --git a/icons/muller.svg b/icons/muller.svg new file mode 100644 index 000000000000..529a59d6f58f --- /dev/null +++ b/icons/muller.svg @@ -0,0 +1 @@ +Müller \ No newline at end of file diff --git a/icons/naver.svg b/icons/naver.svg index 80e760a74e1a..611ad4b647c9 100644 --- a/icons/naver.svg +++ b/icons/naver.svg @@ -1 +1 @@ -Naver \ No newline at end of file +Naver \ No newline at end of file diff --git a/icons/netbsd.svg b/icons/netbsd.svg new file mode 100644 index 000000000000..511f066ed9fa --- /dev/null +++ b/icons/netbsd.svg @@ -0,0 +1 @@ +NetBSD \ No newline at end of file diff --git a/icons/nette.svg b/icons/nette.svg index 768955c6f170..304311cc2b5c 100644 --- a/icons/nette.svg +++ b/icons/nette.svg @@ -1 +1 @@ -Nette +Nette \ No newline at end of file diff --git a/icons/netto.svg b/icons/netto.svg new file mode 100644 index 000000000000..ade6b797d29f --- /dev/null +++ b/icons/netto.svg @@ -0,0 +1 @@ +Netto \ No newline at end of file diff --git a/icons/newbalance.svg b/icons/newbalance.svg new file mode 100644 index 000000000000..795de84bc208 --- /dev/null +++ b/icons/newbalance.svg @@ -0,0 +1 @@ +New Balance \ No newline at end of file diff --git a/icons/norco.svg b/icons/norco.svg new file mode 100644 index 000000000000..e1f0949f31ef --- /dev/null +++ b/icons/norco.svg @@ -0,0 +1 @@ +Norco \ No newline at end of file diff --git a/icons/now.svg b/icons/now.svg new file mode 100644 index 000000000000..685553d3f53f --- /dev/null +++ b/icons/now.svg @@ -0,0 +1 @@ +NOW \ No newline at end of file diff --git a/icons/nunjucks.svg b/icons/nunjucks.svg new file mode 100644 index 000000000000..6374253f421a --- /dev/null +++ b/icons/nunjucks.svg @@ -0,0 +1 @@ +Nunjucks \ No newline at end of file diff --git a/icons/nuxtdotjs.svg b/icons/nuxtdotjs.svg index 47f3a0e85fea..cdedb71ea93a 100644 --- a/icons/nuxtdotjs.svg +++ b/icons/nuxtdotjs.svg @@ -1 +1 @@ -Nuxt.js \ No newline at end of file +Nuxt.js \ No newline at end of file diff --git a/icons/nzxt.svg b/icons/nzxt.svg new file mode 100644 index 000000000000..e01d4cabbad3 --- /dev/null +++ b/icons/nzxt.svg @@ -0,0 +1 @@ +NZXT \ No newline at end of file diff --git a/icons/obsidian.svg b/icons/obsidian.svg new file mode 100644 index 000000000000..0bd9467c49a7 --- /dev/null +++ b/icons/obsidian.svg @@ -0,0 +1 @@ +Obsidian \ No newline at end of file diff --git a/icons/octanerender.svg b/icons/octanerender.svg new file mode 100644 index 000000000000..b2c12e16c133 --- /dev/null +++ b/icons/octanerender.svg @@ -0,0 +1 @@ +Octane Render \ No newline at end of file diff --git a/icons/octoprint.svg b/icons/octoprint.svg new file mode 100644 index 000000000000..5098f6b21146 --- /dev/null +++ b/icons/octoprint.svg @@ -0,0 +1 @@ +OctoPrint \ No newline at end of file diff --git a/icons/ohdear.svg b/icons/ohdear.svg new file mode 100644 index 000000000000..7513c83aea00 --- /dev/null +++ b/icons/ohdear.svg @@ -0,0 +1 @@ +Oh Dear \ No newline at end of file diff --git a/icons/onlyoffice.svg b/icons/onlyoffice.svg new file mode 100644 index 000000000000..ffbf41c2c045 --- /dev/null +++ b/icons/onlyoffice.svg @@ -0,0 +1 @@ +ONLYOFFICE \ No newline at end of file diff --git a/icons/openapiinitiative.svg b/icons/openapiinitiative.svg index cefb848924d3..8920671852f1 100644 --- a/icons/openapiinitiative.svg +++ b/icons/openapiinitiative.svg @@ -1 +1 @@ -OpenAPI Initiative \ No newline at end of file +OpenAPI Initiative \ No newline at end of file diff --git a/icons/openjdk.svg b/icons/openjdk.svg new file mode 100644 index 000000000000..9402ce9cf7ad --- /dev/null +++ b/icons/openjdk.svg @@ -0,0 +1 @@ +OpenJDK \ No newline at end of file diff --git a/icons/openmined.svg b/icons/openmined.svg new file mode 100644 index 000000000000..796498929bc1 --- /dev/null +++ b/icons/openmined.svg @@ -0,0 +1 @@ +OpenMined \ No newline at end of file diff --git a/icons/opensea.svg b/icons/opensea.svg new file mode 100644 index 000000000000..a26d986b1b27 --- /dev/null +++ b/icons/opensea.svg @@ -0,0 +1 @@ +OpenSea \ No newline at end of file diff --git a/icons/opensearch.svg b/icons/opensearch.svg new file mode 100644 index 000000000000..a00e87e2ddc4 --- /dev/null +++ b/icons/opensearch.svg @@ -0,0 +1 @@ +OpenSearch \ No newline at end of file diff --git a/icons/opentelemetry.svg b/icons/opentelemetry.svg new file mode 100644 index 000000000000..606165cf7886 --- /dev/null +++ b/icons/opentelemetry.svg @@ -0,0 +1 @@ +OpenTelemetry \ No newline at end of file diff --git a/icons/openverse.svg b/icons/openverse.svg new file mode 100644 index 000000000000..6d98bfda4e0d --- /dev/null +++ b/icons/openverse.svg @@ -0,0 +1 @@ +Openverse \ No newline at end of file diff --git a/icons/openzeppelin.svg b/icons/openzeppelin.svg new file mode 100644 index 000000000000..d5e94dd09324 --- /dev/null +++ b/icons/openzeppelin.svg @@ -0,0 +1 @@ +OpenZeppelin \ No newline at end of file diff --git a/icons/openzfs.svg b/icons/openzfs.svg new file mode 100644 index 000000000000..1d398bb0e5b6 --- /dev/null +++ b/icons/openzfs.svg @@ -0,0 +1 @@ +OpenZFS \ No newline at end of file diff --git a/icons/oreilly.svg b/icons/oreilly.svg new file mode 100644 index 000000000000..530f60057eda --- /dev/null +++ b/icons/oreilly.svg @@ -0,0 +1 @@ +O'Reilly \ No newline at end of file diff --git a/icons/otto.svg b/icons/otto.svg new file mode 100644 index 000000000000..1e6dc74522b1 --- /dev/null +++ b/icons/otto.svg @@ -0,0 +1 @@ +Otto \ No newline at end of file diff --git a/icons/packer.svg b/icons/packer.svg new file mode 100644 index 000000000000..a6ece2af64e7 --- /dev/null +++ b/icons/packer.svg @@ -0,0 +1 @@ +Packer \ No newline at end of file diff --git a/icons/pagekit.svg b/icons/pagekit.svg old mode 100755 new mode 100644 diff --git a/icons/paperspace.svg b/icons/paperspace.svg new file mode 100644 index 000000000000..bf61fc6b7872 --- /dev/null +++ b/icons/paperspace.svg @@ -0,0 +1 @@ +Paperspace \ No newline at end of file diff --git a/icons/pcgamingwiki.svg b/icons/pcgamingwiki.svg index c9bccaf53fd1..cd425f598cbb 100644 --- a/icons/pcgamingwiki.svg +++ b/icons/pcgamingwiki.svg @@ -1 +1 @@ -PCGamingWiki \ No newline at end of file +PCGamingWiki \ No newline at end of file diff --git a/icons/peakdesign.svg b/icons/peakdesign.svg new file mode 100644 index 000000000000..f1250cb9dfc2 --- /dev/null +++ b/icons/peakdesign.svg @@ -0,0 +1 @@ +Peak Design \ No newline at end of file diff --git a/icons/penny.svg b/icons/penny.svg new file mode 100644 index 000000000000..19c2e35c6038 --- /dev/null +++ b/icons/penny.svg @@ -0,0 +1 @@ +Penny \ No newline at end of file diff --git a/icons/percy.svg b/icons/percy.svg new file mode 100644 index 000000000000..5864e610a891 --- /dev/null +++ b/icons/percy.svg @@ -0,0 +1 @@ +Percy \ No newline at end of file diff --git a/icons/personio.svg b/icons/personio.svg new file mode 100644 index 000000000000..1d62594bffc9 --- /dev/null +++ b/icons/personio.svg @@ -0,0 +1 @@ +Personio \ No newline at end of file diff --git a/icons/petsathome.svg b/icons/petsathome.svg new file mode 100644 index 000000000000..92630f6cf8f1 --- /dev/null +++ b/icons/petsathome.svg @@ -0,0 +1 @@ +Pets at Home \ No newline at end of file diff --git a/icons/phpmyadmin.svg b/icons/phpmyadmin.svg new file mode 100644 index 000000000000..9b23e4069842 --- /dev/null +++ b/icons/phpmyadmin.svg @@ -0,0 +1 @@ +phpMyAdmin \ No newline at end of file diff --git a/icons/picardsurgeles.svg b/icons/picardsurgeles.svg new file mode 100644 index 000000000000..7e63d6234474 --- /dev/null +++ b/icons/picardsurgeles.svg @@ -0,0 +1 @@ +Picard Surgelés \ No newline at end of file diff --git a/icons/pix.svg b/icons/pix.svg new file mode 100644 index 000000000000..cda123f64b76 --- /dev/null +++ b/icons/pix.svg @@ -0,0 +1 @@ +Pix \ No newline at end of file diff --git a/icons/pjsip.svg b/icons/pjsip.svg deleted file mode 100644 index 9a847aa9dc58..000000000000 --- a/icons/pjsip.svg +++ /dev/null @@ -1 +0,0 @@ -PJSIP \ No newline at end of file diff --git a/icons/pkgsrc.svg b/icons/pkgsrc.svg new file mode 100644 index 000000000000..1208e9bf1ae8 --- /dev/null +++ b/icons/pkgsrc.svg @@ -0,0 +1 @@ +pkgsrc \ No newline at end of file diff --git a/icons/planetscale.svg b/icons/planetscale.svg new file mode 100644 index 000000000000..284eeb740b79 --- /dev/null +++ b/icons/planetscale.svg @@ -0,0 +1 @@ +PlanetScale \ No newline at end of file diff --git a/icons/plausibleanalytics.svg b/icons/plausibleanalytics.svg new file mode 100644 index 000000000000..22bf257fbdc5 --- /dev/null +++ b/icons/plausibleanalytics.svg @@ -0,0 +1 @@ +Plausible Analytics \ No newline at end of file diff --git a/icons/playwright.svg b/icons/playwright.svg new file mode 100644 index 000000000000..3d45a76393ec --- /dev/null +++ b/icons/playwright.svg @@ -0,0 +1 @@ +Playwright \ No newline at end of file diff --git a/icons/poetry.svg b/icons/poetry.svg new file mode 100644 index 000000000000..3289fa8ec94a --- /dev/null +++ b/icons/poetry.svg @@ -0,0 +1 @@ +Poetry \ No newline at end of file diff --git a/icons/pokemon.svg b/icons/pokemon.svg index c2849175f6d6..d19a290c7924 100644 --- a/icons/pokemon.svg +++ b/icons/pokemon.svg @@ -1 +1 @@ -Pokémon \ No newline at end of file +Pokémon \ No newline at end of file diff --git a/icons/polkadot.svg b/icons/polkadot.svg new file mode 100644 index 000000000000..d33c09e08c12 --- /dev/null +++ b/icons/polkadot.svg @@ -0,0 +1 @@ +Polkadot \ No newline at end of file diff --git a/icons/polywork.svg b/icons/polywork.svg index b17e6f9356a2..a28f39e75be3 100644 --- a/icons/polywork.svg +++ b/icons/polywork.svg @@ -1 +1 @@ -Polywork +Polywork \ No newline at end of file diff --git a/icons/powerapps.svg b/icons/powerapps.svg new file mode 100644 index 000000000000..0290ef2c1cca --- /dev/null +++ b/icons/powerapps.svg @@ -0,0 +1 @@ +Power Apps \ No newline at end of file diff --git a/icons/powerautomate.svg b/icons/powerautomate.svg new file mode 100644 index 000000000000..8143cb307832 --- /dev/null +++ b/icons/powerautomate.svg @@ -0,0 +1 @@ +Power Automate \ No newline at end of file diff --git a/icons/powervirtualagents.svg b/icons/powervirtualagents.svg new file mode 100644 index 000000000000..5f2d35e7c7e6 --- /dev/null +++ b/icons/powervirtualagents.svg @@ -0,0 +1 @@ +Power Virtual Agents \ No newline at end of file diff --git a/icons/preact.svg b/icons/preact.svg new file mode 100644 index 000000000000..3b6dd3ad514c --- /dev/null +++ b/icons/preact.svg @@ -0,0 +1 @@ +Preact \ No newline at end of file diff --git a/icons/prestashop.svg b/icons/prestashop.svg index 57649adf4ad8..bdc470197ad0 100644 --- a/icons/prestashop.svg +++ b/icons/prestashop.svg @@ -1 +1 @@ -PrestaShop \ No newline at end of file +PrestaShop \ No newline at end of file diff --git a/icons/pubg.svg b/icons/pubg.svg new file mode 100644 index 000000000000..219fcb06938a --- /dev/null +++ b/icons/pubg.svg @@ -0,0 +1 @@ +PUBG \ No newline at end of file diff --git a/icons/pulumi.svg b/icons/pulumi.svg new file mode 100644 index 000000000000..71f119bf4947 --- /dev/null +++ b/icons/pulumi.svg @@ -0,0 +1 @@ +Pulumi \ No newline at end of file diff --git a/icons/pwa.svg b/icons/pwa.svg new file mode 100644 index 000000000000..f6fb3ab7a111 --- /dev/null +++ b/icons/pwa.svg @@ -0,0 +1 @@ +PWA \ No newline at end of file diff --git a/icons/pyg.svg b/icons/pyg.svg new file mode 100644 index 000000000000..7371631aa2fb --- /dev/null +++ b/icons/pyg.svg @@ -0,0 +1 @@ +PyG \ No newline at end of file diff --git a/icons/pyscaffold.svg b/icons/pyscaffold.svg index b68d01a08226..198ced0f45bf 100644 --- a/icons/pyscaffold.svg +++ b/icons/pyscaffold.svg @@ -1 +1 @@ -PyScaffold +PyScaffold \ No newline at end of file diff --git a/icons/qualys.svg b/icons/qualys.svg new file mode 100644 index 000000000000..2f0bb40b680a --- /dev/null +++ b/icons/qualys.svg @@ -0,0 +1 @@ +Qualys \ No newline at end of file diff --git a/icons/quicklook.svg b/icons/quicklook.svg new file mode 100644 index 000000000000..0b3ad85470a6 --- /dev/null +++ b/icons/quicklook.svg @@ -0,0 +1 @@ +QuickLook \ No newline at end of file diff --git a/icons/quora.svg b/icons/quora.svg index 9d49e3a60f58..7d2888201447 100644 --- a/icons/quora.svg +++ b/icons/quora.svg @@ -1 +1 @@ -Quora \ No newline at end of file +Quora \ No newline at end of file diff --git a/icons/rarible.svg b/icons/rarible.svg new file mode 100644 index 000000000000..207525024994 --- /dev/null +++ b/icons/rarible.svg @@ -0,0 +1 @@ +Rarible \ No newline at end of file diff --git a/icons/rasa.svg b/icons/rasa.svg new file mode 100644 index 000000000000..7d7ca3263fbb --- /dev/null +++ b/icons/rasa.svg @@ -0,0 +1 @@ +Rasa \ No newline at end of file diff --git a/icons/ray.svg b/icons/ray.svg new file mode 100644 index 000000000000..048390834ca8 --- /dev/null +++ b/icons/ray.svg @@ -0,0 +1 @@ +Ray \ No newline at end of file diff --git a/icons/reacthookform.svg b/icons/reacthookform.svg new file mode 100644 index 000000000000..c2866fe34ff4 --- /dev/null +++ b/icons/reacthookform.svg @@ -0,0 +1 @@ +React Hook Form \ No newline at end of file diff --git a/icons/reactivex.svg b/icons/reactivex.svg index f9232b1991cb..923633ffe235 100644 --- a/icons/reactivex.svg +++ b/icons/reactivex.svg @@ -1 +1 @@ -ReactiveX \ No newline at end of file +ReactiveX \ No newline at end of file diff --git a/icons/reactquery.svg b/icons/reactquery.svg new file mode 100644 index 000000000000..b500b4f70421 --- /dev/null +++ b/icons/reactquery.svg @@ -0,0 +1 @@ +React Query \ No newline at end of file diff --git a/icons/reacttable.svg b/icons/reacttable.svg index e071a1379ded..0525afa49352 100644 --- a/icons/reacttable.svg +++ b/icons/reacttable.svg @@ -1 +1 @@ -React Table +React Table \ No newline at end of file diff --git a/icons/redmine.svg b/icons/redmine.svg new file mode 100644 index 000000000000..644894fa6181 --- /dev/null +++ b/icons/redmine.svg @@ -0,0 +1 @@ +Redmine \ No newline at end of file diff --git a/icons/remix.svg b/icons/remix.svg new file mode 100644 index 000000000000..f8b1f6c3a12f --- /dev/null +++ b/icons/remix.svg @@ -0,0 +1 @@ +Remix \ No newline at end of file diff --git a/icons/render.svg b/icons/render.svg new file mode 100644 index 000000000000..90e4e87eb5f3 --- /dev/null +++ b/icons/render.svg @@ -0,0 +1 @@ +Render \ No newline at end of file diff --git a/icons/renren.svg b/icons/renren.svg index 4f18ad463714..e77361bbe855 100644 --- a/icons/renren.svg +++ b/icons/renren.svg @@ -1 +1 @@ -Renren \ No newline at end of file +Renren \ No newline at end of file diff --git a/icons/republicofgamers.svg b/icons/republicofgamers.svg new file mode 100644 index 000000000000..3786f58dc8e1 --- /dev/null +++ b/icons/republicofgamers.svg @@ -0,0 +1 @@ +Republic of Gamers \ No newline at end of file diff --git a/icons/rescript.svg b/icons/rescript.svg new file mode 100644 index 000000000000..5af438eb5742 --- /dev/null +++ b/icons/rescript.svg @@ -0,0 +1 @@ +ReScript \ No newline at end of file diff --git a/icons/rescuetime.svg b/icons/rescuetime.svg new file mode 100644 index 000000000000..1a9f2ca6d295 --- /dev/null +++ b/icons/rescuetime.svg @@ -0,0 +1 @@ +RescueTime \ No newline at end of file diff --git a/icons/rimacautomobili.svg b/icons/rimacautomobili.svg new file mode 100644 index 000000000000..929be4fe04df --- /dev/null +++ b/icons/rimacautomobili.svg @@ -0,0 +1 @@ +Rimac Automobili \ No newline at end of file diff --git a/icons/rocksdb.svg b/icons/rocksdb.svg new file mode 100644 index 000000000000..830b9272e02d --- /dev/null +++ b/icons/rocksdb.svg @@ -0,0 +1 @@ +RocksDB \ No newline at end of file diff --git a/icons/rockylinux.svg b/icons/rockylinux.svg new file mode 100644 index 000000000000..af412a5321af --- /dev/null +++ b/icons/rockylinux.svg @@ -0,0 +1 @@ +Rocky Linux \ No newline at end of file diff --git a/icons/rome.svg b/icons/rome.svg new file mode 100644 index 000000000000..a1c24ac7364c --- /dev/null +++ b/icons/rome.svg @@ -0,0 +1 @@ +Rome \ No newline at end of file diff --git a/icons/rossmann.svg b/icons/rossmann.svg new file mode 100644 index 000000000000..32d498f50328 --- /dev/null +++ b/icons/rossmann.svg @@ -0,0 +1 @@ +Rossmann \ No newline at end of file diff --git a/icons/rotaryinternational.svg b/icons/rotaryinternational.svg new file mode 100644 index 000000000000..d94b5b32e56d --- /dev/null +++ b/icons/rotaryinternational.svg @@ -0,0 +1 @@ +Rotary International \ No newline at end of file diff --git a/icons/rte.svg b/icons/rte.svg index 1eb1922e55cc..9180bfbbce0d 100644 --- a/icons/rte.svg +++ b/icons/rte.svg @@ -1 +1 @@ -RTÉ \ No newline at end of file +RTÉ \ No newline at end of file diff --git a/icons/rubocop.svg b/icons/rubocop.svg new file mode 100644 index 000000000000..adc974fa3197 --- /dev/null +++ b/icons/rubocop.svg @@ -0,0 +1 @@ +RuboCop \ No newline at end of file diff --git a/icons/ruby.svg b/icons/ruby.svg index ed081698134a..8315f8257a6f 100644 --- a/icons/ruby.svg +++ b/icons/ruby.svg @@ -1 +1 @@ -Ruby \ No newline at end of file +Ruby \ No newline at end of file diff --git a/icons/rubysinatra.svg b/icons/rubysinatra.svg new file mode 100644 index 000000000000..5242a018ceaf --- /dev/null +++ b/icons/rubysinatra.svg @@ -0,0 +1 @@ +Ruby Sinatra \ No newline at end of file diff --git a/icons/sabanci.svg b/icons/sabanci.svg new file mode 100644 index 000000000000..1299b5398263 --- /dev/null +++ b/icons/sabanci.svg @@ -0,0 +1 @@ +Sabanci \ No newline at end of file diff --git a/icons/sailfishos.svg b/icons/sailfishos.svg new file mode 100644 index 000000000000..e67bc0123230 --- /dev/null +++ b/icons/sailfishos.svg @@ -0,0 +1 @@ +Sailfish OS \ No newline at end of file diff --git a/icons/saltproject.svg b/icons/saltproject.svg new file mode 100644 index 000000000000..3c8adee3f165 --- /dev/null +++ b/icons/saltproject.svg @@ -0,0 +1 @@ +Salt Project \ No newline at end of file diff --git a/icons/saltstack.svg b/icons/saltstack.svg deleted file mode 100644 index d61d23c1b12f..000000000000 --- a/icons/saltstack.svg +++ /dev/null @@ -1 +0,0 @@ -SaltStack \ No newline at end of file diff --git a/icons/samsungpay.svg b/icons/samsungpay.svg index b4e653adb05b..6066a11f2881 100644 --- a/icons/samsungpay.svg +++ b/icons/samsungpay.svg @@ -1 +1 @@ -Samsung Pay \ No newline at end of file +Samsung Pay \ No newline at end of file diff --git a/icons/sandisk.svg b/icons/sandisk.svg new file mode 100644 index 000000000000..b2662c55dd4c --- /dev/null +++ b/icons/sandisk.svg @@ -0,0 +1 @@ +SanDisk \ No newline at end of file diff --git a/icons/saopaulometro.svg b/icons/saopaulometro.svg index cea0c4659769..12d154cdbf01 100644 --- a/icons/saopaulometro.svg +++ b/icons/saopaulometro.svg @@ -1 +1 @@ -São Paulo Metro \ No newline at end of file +São Paulo Metro \ No newline at end of file diff --git a/icons/sat1.svg b/icons/sat1.svg index 4e046d02b78e..d8b7dd43a72e 100644 --- a/icons/sat1.svg +++ b/icons/sat1.svg @@ -1 +1 @@ -Sat.1 \ No newline at end of file +Sat.1 \ No newline at end of file diff --git a/icons/saturn.svg b/icons/saturn.svg new file mode 100644 index 000000000000..3ed9147d01a8 --- /dev/null +++ b/icons/saturn.svg @@ -0,0 +1 @@ +Saturn \ No newline at end of file diff --git a/icons/schneiderelectric.svg b/icons/schneiderelectric.svg new file mode 100644 index 000000000000..37a5f90a738c --- /dev/null +++ b/icons/schneiderelectric.svg @@ -0,0 +1 @@ +Schneider Electric \ No newline at end of file diff --git a/icons/scpfoundation.svg b/icons/scpfoundation.svg new file mode 100644 index 000000000000..10770696f310 --- /dev/null +++ b/icons/scpfoundation.svg @@ -0,0 +1 @@ +SCP Foundation \ No newline at end of file diff --git a/icons/semaphoreci.svg b/icons/semaphoreci.svg index ccf21378beff..a5daf1cbd377 100644 --- a/icons/semaphoreci.svg +++ b/icons/semaphoreci.svg @@ -1 +1 @@ -Semaphore CI \ No newline at end of file +Semaphore CI \ No newline at end of file diff --git a/icons/sequelize.svg b/icons/sequelize.svg index f8599b6c50f0..c483402b502f 100644 --- a/icons/sequelize.svg +++ b/icons/sequelize.svg @@ -1 +1 @@ -Sequelize +Sequelize \ No newline at end of file diff --git a/icons/serverfault.svg b/icons/serverfault.svg index a7350abbef27..573e7b967397 100644 --- a/icons/serverfault.svg +++ b/icons/serverfault.svg @@ -1 +1 @@ -Server Fault \ No newline at end of file +Server Fault \ No newline at end of file diff --git a/icons/shadow.svg b/icons/shadow.svg new file mode 100644 index 000000000000..d5be1b3af4cd --- /dev/null +++ b/icons/shadow.svg @@ -0,0 +1 @@ +Shadow \ No newline at end of file diff --git a/icons/showpad.svg b/icons/showpad.svg index 0905c8d3a46a..be69f482116a 100644 --- a/icons/showpad.svg +++ b/icons/showpad.svg @@ -1 +1 @@ -Showpad \ No newline at end of file +Showpad \ No newline at end of file diff --git a/icons/signal.svg b/icons/signal.svg index f79d6ecbaeee..5cb35b5193fc 100644 --- a/icons/signal.svg +++ b/icons/signal.svg @@ -1 +1 @@ -Signal \ No newline at end of file +Signal \ No newline at end of file diff --git a/icons/simplenote.svg b/icons/simplenote.svg new file mode 100644 index 000000000000..a98988699c3d --- /dev/null +++ b/icons/simplenote.svg @@ -0,0 +1 @@ +Simplenote \ No newline at end of file diff --git a/icons/skoda.svg b/icons/skoda.svg index ccbf36e601ff..6b36aa18ce5b 100644 --- a/icons/skoda.svg +++ b/icons/skoda.svg @@ -1 +1 @@ -ŠKODA \ No newline at end of file +ŠKODA \ No newline at end of file diff --git a/icons/skyliner.svg b/icons/skyliner.svg deleted file mode 100644 index 1f608af57864..000000000000 --- a/icons/skyliner.svg +++ /dev/null @@ -1 +0,0 @@ -Skyliner \ No newline at end of file diff --git a/icons/skynet.svg b/icons/skynet.svg new file mode 100644 index 000000000000..de95a2c77312 --- /dev/null +++ b/icons/skynet.svg @@ -0,0 +1 @@ +Skynet \ No newline at end of file diff --git a/icons/skypack.svg b/icons/skypack.svg new file mode 100644 index 000000000000..bb8e7649b63a --- /dev/null +++ b/icons/skypack.svg @@ -0,0 +1 @@ +Skypack \ No newline at end of file diff --git a/icons/snowpack.svg b/icons/snowpack.svg new file mode 100644 index 000000000000..03f6d34b2b5b --- /dev/null +++ b/icons/snowpack.svg @@ -0,0 +1 @@ +Snowpack \ No newline at end of file diff --git a/icons/socialblade.svg b/icons/socialblade.svg new file mode 100644 index 000000000000..a9f87c048413 --- /dev/null +++ b/icons/socialblade.svg @@ -0,0 +1 @@ +Social Blade \ No newline at end of file diff --git a/icons/solid.svg b/icons/solid.svg new file mode 100644 index 000000000000..73432258b7d0 --- /dev/null +++ b/icons/solid.svg @@ -0,0 +1 @@ +Solid \ No newline at end of file diff --git a/icons/sololearn.svg b/icons/sololearn.svg index 3ee3ad2ef340..2adf67e9a3a1 100644 --- a/icons/sololearn.svg +++ b/icons/sololearn.svg @@ -1 +1 @@ -SoloLearn \ No newline at end of file +Sololearn \ No newline at end of file diff --git a/icons/sony.svg b/icons/sony.svg new file mode 100644 index 000000000000..38d17e13dc12 --- /dev/null +++ b/icons/sony.svg @@ -0,0 +1 @@ +Sony \ No newline at end of file diff --git a/icons/soundcharts.svg b/icons/soundcharts.svg new file mode 100644 index 000000000000..df3b6d0dd11a --- /dev/null +++ b/icons/soundcharts.svg @@ -0,0 +1 @@ +Soundcharts \ No newline at end of file diff --git a/icons/sourcetree.svg b/icons/sourcetree.svg new file mode 100644 index 000000000000..1f2d56c0c6b8 --- /dev/null +++ b/icons/sourcetree.svg @@ -0,0 +1 @@ +Sourcetree \ No newline at end of file diff --git a/icons/spacy.svg b/icons/spacy.svg new file mode 100644 index 000000000000..974ae049b4b1 --- /dev/null +++ b/icons/spacy.svg @@ -0,0 +1 @@ +spaCy \ No newline at end of file diff --git a/icons/spond.svg b/icons/spond.svg index 2f1459749ab8..8a713741feff 100644 --- a/icons/spond.svg +++ b/icons/spond.svg @@ -1 +1 @@ -Spond +Spond \ No newline at end of file diff --git a/icons/spring_creators.svg b/icons/spring_creators.svg new file mode 100644 index 000000000000..6345d94602f8 --- /dev/null +++ b/icons/spring_creators.svg @@ -0,0 +1 @@ +Spring \ No newline at end of file diff --git a/icons/springsecurity.svg b/icons/springsecurity.svg new file mode 100644 index 000000000000..5416ba26869c --- /dev/null +++ b/icons/springsecurity.svg @@ -0,0 +1 @@ +Spring Security \ No newline at end of file diff --git a/icons/stackedit.svg b/icons/stackedit.svg new file mode 100644 index 000000000000..f342c43e1f49 --- /dev/null +++ b/icons/stackedit.svg @@ -0,0 +1 @@ +StackEdit \ No newline at end of file diff --git a/icons/stardock.svg b/icons/stardock.svg new file mode 100644 index 000000000000..a603188a9806 --- /dev/null +++ b/icons/stardock.svg @@ -0,0 +1 @@ +Stardock \ No newline at end of file diff --git a/icons/starlingbank.svg b/icons/starlingbank.svg index 64fa9a494841..266936d3f27c 100644 --- a/icons/starlingbank.svg +++ b/icons/starlingbank.svg @@ -1 +1 @@ -Starling Bank \ No newline at end of file +Starling Bank \ No newline at end of file diff --git a/icons/steamdeck.svg b/icons/steamdeck.svg new file mode 100644 index 000000000000..1d1562f24851 --- /dev/null +++ b/icons/steamdeck.svg @@ -0,0 +1 @@ +Steam Deck \ No newline at end of file diff --git a/icons/steelseries.svg b/icons/steelseries.svg new file mode 100644 index 000000000000..65c51ac2ed69 --- /dev/null +++ b/icons/steelseries.svg @@ -0,0 +1 @@ +Steelseries \ No newline at end of file diff --git a/icons/stopstalk.svg b/icons/stopstalk.svg new file mode 100644 index 000000000000..be344c0e871f --- /dev/null +++ b/icons/stopstalk.svg @@ -0,0 +1 @@ +StopStalk \ No newline at end of file diff --git a/icons/strongswan.svg b/icons/strongswan.svg index 01eefc0d9902..b83db9f42e96 100644 --- a/icons/strongswan.svg +++ b/icons/strongswan.svg @@ -1 +1 @@ -strongSwan \ No newline at end of file +strongSwan \ No newline at end of file diff --git a/icons/supermicro.svg b/icons/supermicro.svg new file mode 100644 index 000000000000..f87e0d145f9e --- /dev/null +++ b/icons/supermicro.svg @@ -0,0 +1 @@ +Supermicro \ No newline at end of file diff --git a/icons/swc.svg b/icons/swc.svg new file mode 100644 index 000000000000..d4c5e3077964 --- /dev/null +++ b/icons/swc.svg @@ -0,0 +1 @@ +SWC \ No newline at end of file diff --git a/icons/swift.svg b/icons/swift.svg index 60b4ac573c66..ffaf098efc7f 100644 --- a/icons/swift.svg +++ b/icons/swift.svg @@ -1 +1 @@ -Swift \ No newline at end of file +Swift \ No newline at end of file diff --git a/icons/tado.svg b/icons/tado.svg index f71561cf7ca9..90577e94edf0 100644 --- a/icons/tado.svg +++ b/icons/tado.svg @@ -1 +1 @@ -tado° \ No newline at end of file +tado° \ No newline at end of file diff --git a/icons/talend.svg b/icons/talend.svg index 7b4b7b6206d4..8f294ca31bfc 100644 --- a/icons/talend.svg +++ b/icons/talend.svg @@ -1 +1 @@ -Talend \ No newline at end of file +Talend \ No newline at end of file diff --git a/icons/talenthouse.svg b/icons/talenthouse.svg new file mode 100644 index 000000000000..304024a8ed90 --- /dev/null +++ b/icons/talenthouse.svg @@ -0,0 +1 @@ +Talenthouse \ No newline at end of file diff --git a/icons/target.svg b/icons/target.svg new file mode 100644 index 000000000000..77e07f8b4a28 --- /dev/null +++ b/icons/target.svg @@ -0,0 +1 @@ +Target \ No newline at end of file diff --git a/icons/task.svg b/icons/task.svg new file mode 100644 index 000000000000..c33d285e02aa --- /dev/null +++ b/icons/task.svg @@ -0,0 +1 @@ +Task \ No newline at end of file diff --git a/icons/tauri.svg b/icons/tauri.svg new file mode 100644 index 000000000000..73200eb435f8 --- /dev/null +++ b/icons/tauri.svg @@ -0,0 +1 @@ +Tauri \ No newline at end of file diff --git a/icons/teespring.svg b/icons/teespring.svg index a150a4be5972..4854b3d825d7 100644 --- a/icons/teespring.svg +++ b/icons/teespring.svg @@ -1 +1 @@ -Teespring \ No newline at end of file +Teespring \ No newline at end of file diff --git a/icons/temporal.svg b/icons/temporal.svg new file mode 100644 index 000000000000..3f9daa262139 --- /dev/null +++ b/icons/temporal.svg @@ -0,0 +1 @@ +Temporal \ No newline at end of file diff --git a/icons/tesco.svg b/icons/tesco.svg new file mode 100644 index 000000000000..ee78158595db --- /dev/null +++ b/icons/tesco.svg @@ -0,0 +1 @@ +Tesco \ No newline at end of file diff --git a/icons/testcafe.svg b/icons/testcafe.svg new file mode 100644 index 000000000000..2a8a320b848f --- /dev/null +++ b/icons/testcafe.svg @@ -0,0 +1 @@ +TestCafe \ No newline at end of file diff --git a/icons/tether.svg b/icons/tether.svg new file mode 100644 index 000000000000..758427f2cb8f --- /dev/null +++ b/icons/tether.svg @@ -0,0 +1 @@ +Tether \ No newline at end of file diff --git a/icons/thealgorithms.svg b/icons/thealgorithms.svg new file mode 100644 index 000000000000..39570eea4e89 --- /dev/null +++ b/icons/thealgorithms.svg @@ -0,0 +1 @@ +The Algorithms \ No newline at end of file diff --git a/icons/themoviedatabase.svg b/icons/themoviedatabase.svg index a51ecd6f6e2e..cf81a3d9b989 100644 --- a/icons/themoviedatabase.svg +++ b/icons/themoviedatabase.svg @@ -1 +1 @@ -The Movie Database \ No newline at end of file +The Movie Database \ No newline at end of file diff --git a/icons/thenorthface.svg b/icons/thenorthface.svg new file mode 100644 index 000000000000..9a98069c09af --- /dev/null +++ b/icons/thenorthface.svg @@ -0,0 +1 @@ +The North Face \ No newline at end of file diff --git a/icons/threadless.svg b/icons/threadless.svg new file mode 100644 index 000000000000..ca0430bf5608 --- /dev/null +++ b/icons/threadless.svg @@ -0,0 +1 @@ +Threadless \ No newline at end of file diff --git a/icons/tistory.svg b/icons/tistory.svg new file mode 100644 index 000000000000..9fdfe8572893 --- /dev/null +++ b/icons/tistory.svg @@ -0,0 +1 @@ +Tistory \ No newline at end of file diff --git a/icons/tmobile.svg b/icons/tmobile.svg index bd6b1f1d75c0..7a315388f7f0 100644 --- a/icons/tmobile.svg +++ b/icons/tmobile.svg @@ -1 +1 @@ -T-Mobile \ No newline at end of file +T-Mobile \ No newline at end of file diff --git a/icons/traefikmesh.svg b/icons/traefikmesh.svg new file mode 100644 index 000000000000..828147b70d48 --- /dev/null +++ b/icons/traefikmesh.svg @@ -0,0 +1 @@ +Traefik Mesh \ No newline at end of file diff --git a/icons/traefikproxy.svg b/icons/traefikproxy.svg new file mode 100644 index 000000000000..002b6913730e --- /dev/null +++ b/icons/traefikproxy.svg @@ -0,0 +1 @@ +Traefik Proxy \ No newline at end of file diff --git a/icons/trainerroad.svg b/icons/trainerroad.svg index bec451b14399..c8611bda9e3e 100644 --- a/icons/trainerroad.svg +++ b/icons/trainerroad.svg @@ -1 +1 @@ -TrainerRoad \ No newline at end of file +TrainerRoad \ No newline at end of file diff --git a/icons/transferwise.svg b/icons/transferwise.svg deleted file mode 100644 index 03babcef5d93..000000000000 --- a/icons/transferwise.svg +++ /dev/null @@ -1 +0,0 @@ -TransferWise \ No newline at end of file diff --git a/icons/trove.svg b/icons/trove.svg index 123784129fb0..e1f41ec98b73 100644 --- a/icons/trove.svg +++ b/icons/trove.svg @@ -1 +1 @@ -Trove \ No newline at end of file +Trove \ No newline at end of file diff --git a/icons/trpc.svg b/icons/trpc.svg new file mode 100644 index 000000000000..dd824ae0d70b --- /dev/null +++ b/icons/trpc.svg @@ -0,0 +1 @@ +tRPC \ No newline at end of file diff --git a/icons/trulia.svg b/icons/trulia.svg index b9be9d897b71..ffce2fcf2ccd 100644 --- a/icons/trulia.svg +++ b/icons/trulia.svg @@ -1 +1 @@ -Trulia \ No newline at end of file +trulia \ No newline at end of file diff --git a/icons/tubi.svg b/icons/tubi.svg new file mode 100644 index 000000000000..2c40a434bc21 --- /dev/null +++ b/icons/tubi.svg @@ -0,0 +1 @@ +Tubi \ No newline at end of file diff --git a/icons/tunein.svg b/icons/tunein.svg index 6b74705ed543..9530e5cabff0 100644 --- a/icons/tunein.svg +++ b/icons/tunein.svg @@ -1 +1 @@ -TuneIn \ No newline at end of file +TuneIn \ No newline at end of file diff --git a/icons/turborepo.svg b/icons/turborepo.svg new file mode 100644 index 000000000000..6d63cf7cdd63 --- /dev/null +++ b/icons/turborepo.svg @@ -0,0 +1 @@ +Turborepo \ No newline at end of file diff --git a/icons/typeform.svg b/icons/typeform.svg new file mode 100644 index 000000000000..5f3f29bc485a --- /dev/null +++ b/icons/typeform.svg @@ -0,0 +1 @@ +Typeform \ No newline at end of file diff --git a/icons/ubuntu.svg b/icons/ubuntu.svg index a2917063d4ac..227f86aa329d 100644 --- a/icons/ubuntu.svg +++ b/icons/ubuntu.svg @@ -1 +1 @@ -Ubuntu \ No newline at end of file +Ubuntu \ No newline at end of file diff --git a/icons/udemy.svg b/icons/udemy.svg index 365159189a42..efa25d640169 100644 --- a/icons/udemy.svg +++ b/icons/udemy.svg @@ -1 +1 @@ -Udemy \ No newline at end of file +Udemy \ No newline at end of file diff --git a/icons/uikit.svg b/icons/uikit.svg old mode 100755 new mode 100644 diff --git a/icons/underarmour.svg b/icons/underarmour.svg new file mode 100644 index 000000000000..c247a3420d2a --- /dev/null +++ b/icons/underarmour.svg @@ -0,0 +1 @@ +Under Armour \ No newline at end of file diff --git a/icons/underscoredotjs.svg b/icons/underscoredotjs.svg new file mode 100644 index 000000000000..ca7140d12a01 --- /dev/null +++ b/icons/underscoredotjs.svg @@ -0,0 +1 @@ +Underscore.js \ No newline at end of file diff --git a/icons/unity.svg b/icons/unity.svg index 135d234f0b9e..a373b95af7f9 100644 --- a/icons/unity.svg +++ b/icons/unity.svg @@ -1 +1 @@ -Unity \ No newline at end of file +Unity \ No newline at end of file diff --git a/icons/unlicense.svg b/icons/unlicense.svg new file mode 100644 index 000000000000..d6bf6ed11c4e --- /dev/null +++ b/icons/unlicense.svg @@ -0,0 +1 @@ +Unlicense \ No newline at end of file diff --git a/icons/unocss.svg b/icons/unocss.svg new file mode 100644 index 000000000000..b9ea80a8b07c --- /dev/null +++ b/icons/unocss.svg @@ -0,0 +1 @@ +UnoCSS \ No newline at end of file diff --git a/icons/unrealengine.svg b/icons/unrealengine.svg index db261c2685f0..330d76379aec 100644 --- a/icons/unrealengine.svg +++ b/icons/unrealengine.svg @@ -1 +1 @@ -Unreal Engine \ No newline at end of file +Unreal Engine \ No newline at end of file diff --git a/icons/upstash.svg b/icons/upstash.svg new file mode 100644 index 000000000000..accdfd63018c --- /dev/null +++ b/icons/upstash.svg @@ -0,0 +1 @@ +Upstash \ No newline at end of file diff --git a/icons/uptobox.svg b/icons/uptobox.svg new file mode 100644 index 000000000000..f751d39c9741 --- /dev/null +++ b/icons/uptobox.svg @@ -0,0 +1 @@ +Uptobox \ No newline at end of file diff --git a/icons/valorant.svg b/icons/valorant.svg new file mode 100644 index 000000000000..13674afad217 --- /dev/null +++ b/icons/valorant.svg @@ -0,0 +1 @@ +Valorant \ No newline at end of file diff --git a/icons/velog.svg b/icons/velog.svg new file mode 100644 index 000000000000..4d836c17b217 --- /dev/null +++ b/icons/velog.svg @@ -0,0 +1 @@ +Velog \ No newline at end of file diff --git a/icons/vexxhost.svg b/icons/vexxhost.svg new file mode 100644 index 000000000000..40db5f1bf48b --- /dev/null +++ b/icons/vexxhost.svg @@ -0,0 +1 @@ +VEXXHOST \ No newline at end of file diff --git a/icons/virgin.svg b/icons/virgin.svg new file mode 100644 index 000000000000..7f282082f25d --- /dev/null +++ b/icons/virgin.svg @@ -0,0 +1 @@ +Virgin \ No newline at end of file diff --git a/icons/virginmedia.svg b/icons/virginmedia.svg new file mode 100644 index 000000000000..2958c4f83d83 --- /dev/null +++ b/icons/virginmedia.svg @@ -0,0 +1 @@ +Virgin Media \ No newline at end of file diff --git a/icons/vitess.svg b/icons/vitess.svg new file mode 100644 index 000000000000..83675d081b53 --- /dev/null +++ b/icons/vitess.svg @@ -0,0 +1 @@ +Vitess \ No newline at end of file diff --git a/icons/vk.svg b/icons/vk.svg index 5ebad73b18f6..2eed8993d5dc 100644 --- a/icons/vk.svg +++ b/icons/vk.svg @@ -1 +1 @@ -VK \ No newline at end of file +VK \ No newline at end of file diff --git a/icons/vowpalwabbit.svg b/icons/vowpalwabbit.svg new file mode 100644 index 000000000000..e2d82d44e693 --- /dev/null +++ b/icons/vowpalwabbit.svg @@ -0,0 +1 @@ +Vowpal Wabbit \ No newline at end of file diff --git a/icons/vtex.svg b/icons/vtex.svg new file mode 100644 index 000000000000..f8e31fe1608e --- /dev/null +++ b/icons/vtex.svg @@ -0,0 +1 @@ +VTEX \ No newline at end of file diff --git a/icons/walmart.svg b/icons/walmart.svg new file mode 100644 index 000000000000..07c7764a4ff9 --- /dev/null +++ b/icons/walmart.svg @@ -0,0 +1 @@ +Walmart \ No newline at end of file diff --git a/icons/wasmcloud.svg b/icons/wasmcloud.svg new file mode 100644 index 000000000000..f5c983914bed --- /dev/null +++ b/icons/wasmcloud.svg @@ -0,0 +1 @@ +wasmCloud \ No newline at end of file diff --git a/icons/web3dotjs.svg b/icons/web3dotjs.svg index 2a900d7e0e04..b617387d4fe2 100644 --- a/icons/web3dotjs.svg +++ b/icons/web3dotjs.svg @@ -1 +1 @@ -Web3.js +Web3.js \ No newline at end of file diff --git a/icons/wegame.svg b/icons/wegame.svg new file mode 100644 index 000000000000..127601aa892e --- /dev/null +++ b/icons/wegame.svg @@ -0,0 +1 @@ +WeGame \ No newline at end of file diff --git a/icons/welcometothejungle.svg b/icons/welcometothejungle.svg new file mode 100644 index 000000000000..3f0ad61258fa --- /dev/null +++ b/icons/welcometothejungle.svg @@ -0,0 +1 @@ +Welcome to the Jungle \ No newline at end of file diff --git a/icons/westerndigital.svg b/icons/westerndigital.svg new file mode 100644 index 000000000000..935d670f8266 --- /dev/null +++ b/icons/westerndigital.svg @@ -0,0 +1 @@ +Western Digital \ No newline at end of file diff --git a/icons/wikidotjs.svg b/icons/wikidotjs.svg new file mode 100644 index 000000000000..fc131e4f359c --- /dev/null +++ b/icons/wikidotjs.svg @@ -0,0 +1 @@ +Wiki.js \ No newline at end of file diff --git a/icons/winamp.svg b/icons/winamp.svg new file mode 100644 index 000000000000..c02f7684190c --- /dev/null +++ b/icons/winamp.svg @@ -0,0 +1 @@ +Winamp \ No newline at end of file diff --git a/icons/windicss.svg b/icons/windicss.svg new file mode 100644 index 000000000000..0e17fdfb3e11 --- /dev/null +++ b/icons/windicss.svg @@ -0,0 +1 @@ +Windi CSS \ No newline at end of file diff --git a/icons/wise.svg b/icons/wise.svg new file mode 100644 index 000000000000..618f66490f8e --- /dev/null +++ b/icons/wise.svg @@ -0,0 +1 @@ +Wise \ No newline at end of file diff --git a/icons/yolo.svg b/icons/yolo.svg new file mode 100644 index 000000000000..b5e9e58d1862 --- /dev/null +++ b/icons/yolo.svg @@ -0,0 +1 @@ +YOLO \ No newline at end of file diff --git a/icons/yubico.svg b/icons/yubico.svg new file mode 100644 index 000000000000..6138152871bc --- /dev/null +++ b/icons/yubico.svg @@ -0,0 +1 @@ +Yubico \ No newline at end of file diff --git a/icons/zabka.svg b/icons/zabka.svg new file mode 100644 index 000000000000..46691573ceb9 --- /dev/null +++ b/icons/zabka.svg @@ -0,0 +1 @@ +Żabka \ No newline at end of file diff --git a/icons/zara.svg b/icons/zara.svg new file mode 100644 index 000000000000..3ce62197a80a --- /dev/null +++ b/icons/zara.svg @@ -0,0 +1 @@ +Zara \ No newline at end of file diff --git a/icons/zazzle.svg b/icons/zazzle.svg new file mode 100644 index 000000000000..93d8331e3c17 --- /dev/null +++ b/icons/zazzle.svg @@ -0,0 +1 @@ +Zazzle \ No newline at end of file diff --git a/icons/zcash.svg b/icons/zcash.svg new file mode 100644 index 000000000000..e4e7f1e808f9 --- /dev/null +++ b/icons/zcash.svg @@ -0,0 +1 @@ +Zcash \ No newline at end of file diff --git a/icons/zebratechnologies.svg b/icons/zebratechnologies.svg new file mode 100644 index 000000000000..907a2b5e186f --- /dev/null +++ b/icons/zebratechnologies.svg @@ -0,0 +1 @@ +Zebra Technologies \ No newline at end of file diff --git a/icons/zenodo.svg b/icons/zenodo.svg new file mode 100644 index 000000000000..986056fda30c --- /dev/null +++ b/icons/zenodo.svg @@ -0,0 +1 @@ +Zenodo \ No newline at end of file diff --git a/icons/zettlr.svg b/icons/zettlr.svg new file mode 100644 index 000000000000..3d7a2c696cb6 --- /dev/null +++ b/icons/zettlr.svg @@ -0,0 +1 @@ +Zettlr \ No newline at end of file diff --git a/icons/zig.svg b/icons/zig.svg index 935eba3daacf..e55ac8ca5e9b 100644 --- a/icons/zig.svg +++ b/icons/zig.svg @@ -1 +1 @@ -Zig +Zig \ No newline at end of file diff --git a/icons/zyte.svg b/icons/zyte.svg new file mode 100644 index 000000000000..882f57a18374 --- /dev/null +++ b/icons/zyte.svg @@ -0,0 +1 @@ +Zyte \ No newline at end of file diff --git a/index.d.ts b/index.d.ts new file mode 100644 index 000000000000..314f6c33611b --- /dev/null +++ b/index.d.ts @@ -0,0 +1,24 @@ +export interface SimpleIcon { + title: string; + slug: string; + svg: string; + path: string; + source: string; + hex: string; + guidelines?: string | undefined; + license?: + | { + type: string; + url: string; + } + | undefined; +} + +/** + * @deprecated The `simple-icons` entrypoint will be removed in the next major. Please switch to using `import * as icons from "simple-icons/icons"` if you need an object with all the icons. + */ +declare const icons: Record & { + Get(name: string): SimpleIcon; +}; + +export default icons; diff --git a/jest.config.js b/jest.config.js deleted file mode 100644 index 0699d7e7f119..000000000000 --- a/jest.config.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - cacheDirectory: "./.cache/jest", -}; diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 30ef173bbd4e..000000000000 --- a/package-lock.json +++ /dev/null @@ -1,4379 +0,0 @@ -{ - "name": "simple-icons", - "version": "5.5.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.14.5" - } - }, - "@babel/compat-data": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.7.tgz", - "integrity": "sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==", - "dev": true - }, - "@babel/core": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.6.tgz", - "integrity": "sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-compilation-targets": "^7.14.5", - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helpers": "^7.14.6", - "@babel/parser": "^7.14.6", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", - "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", - "dev": true, - "requires": { - "@babel/types": "^7.14.5", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "@babel/helper-compilation-targets": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", - "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.16.6", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", - "dev": true, - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", - "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", - "dev": true, - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", - "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", - "dev": true, - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-module-imports": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", - "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", - "dev": true, - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-module-transforms": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", - "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-simple-access": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", - "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", - "dev": true, - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "dev": true - }, - "@babel/helper-replace-supers": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", - "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-simple-access": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", - "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", - "dev": true, - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", - "dev": true, - "requires": { - "@babel/types": "^7.14.5" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", - "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", - "dev": true - }, - "@babel/helpers": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz", - "integrity": "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==", - "dev": true, - "requires": { - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", - "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", - "dev": true - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz", - "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" - } - }, - "@babel/traverse": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", - "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.7", - "@babel/types": "^7.14.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "to-fast-properties": "^2.0.0" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true - }, - "@jest/console": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.0.2.tgz", - "integrity": "sha512-/zYigssuHLImGeMAACkjI4VLAiiJznHgAl3xnFT19iWyct2LhrH3KXOjHRmxBGTkiPLZKKAJAgaPpiU9EZ9K+w==", - "dev": true, - "requires": { - "@jest/types": "^27.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^27.0.2", - "jest-util": "^27.0.2", - "slash": "^3.0.0" - } - }, - "@jest/core": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.0.5.tgz", - "integrity": "sha512-g73//jF0VwsOIrWUC9Cqg03lU3QoAMFxVjsm6n6yNmwZcQPN/o8w+gLWODw5VfKNFZT38otXHWxc6b8eGDUpEA==", - "dev": true, - "requires": { - "@jest/console": "^27.0.2", - "@jest/reporters": "^27.0.5", - "@jest/test-result": "^27.0.2", - "@jest/transform": "^27.0.5", - "@jest/types": "^27.0.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^27.0.2", - "jest-config": "^27.0.5", - "jest-haste-map": "^27.0.5", - "jest-message-util": "^27.0.2", - "jest-regex-util": "^27.0.1", - "jest-resolve": "^27.0.5", - "jest-resolve-dependencies": "^27.0.5", - "jest-runner": "^27.0.5", - "jest-runtime": "^27.0.5", - "jest-snapshot": "^27.0.5", - "jest-util": "^27.0.2", - "jest-validate": "^27.0.2", - "jest-watcher": "^27.0.2", - "micromatch": "^4.0.4", - "p-each-series": "^2.1.0", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "@jest/environment": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.0.5.tgz", - "integrity": "sha512-IAkJPOT7bqn0GiX5LPio6/e1YpcmLbrd8O5EFYpAOZ6V+9xJDsXjdgN2vgv9WOKIs/uA1kf5WeD96HhlBYO+FA==", - "dev": true, - "requires": { - "@jest/fake-timers": "^27.0.5", - "@jest/types": "^27.0.2", - "@types/node": "*", - "jest-mock": "^27.0.3" - } - }, - "@jest/fake-timers": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.0.5.tgz", - "integrity": "sha512-d6Tyf7iDoKqeUdwUKrOBV/GvEZRF67m7lpuWI0+SCD9D3aaejiOQZxAOxwH2EH/W18gnfYaBPLi0VeTGBHtQBg==", - "dev": true, - "requires": { - "@jest/types": "^27.0.2", - "@sinonjs/fake-timers": "^7.0.2", - "@types/node": "*", - "jest-message-util": "^27.0.2", - "jest-mock": "^27.0.3", - "jest-util": "^27.0.2" - } - }, - "@jest/globals": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.0.5.tgz", - "integrity": "sha512-qqKyjDXUaZwDuccpbMMKCCMBftvrbXzigtIsikAH/9ca+kaae8InP2MDf+Y/PdCSMuAsSpHS6q6M25irBBUh+Q==", - "dev": true, - "requires": { - "@jest/environment": "^27.0.5", - "@jest/types": "^27.0.2", - "expect": "^27.0.2" - } - }, - "@jest/reporters": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.0.5.tgz", - "integrity": "sha512-4uNg5+0eIfRafnpgu3jCZws3NNcFzhu5JdRd1mKQ4/53+vkIqwB6vfZ4gn5BdGqOaLtYhlOsPaL5ATkKzyBrJw==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.0.2", - "@jest/test-result": "^27.0.2", - "@jest/transform": "^27.0.5", - "@jest/types": "^27.0.2", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.4", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.3", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "jest-haste-map": "^27.0.5", - "jest-resolve": "^27.0.5", - "jest-util": "^27.0.2", - "jest-worker": "^27.0.2", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.0.0" - } - }, - "@jest/source-map": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.0.1.tgz", - "integrity": "sha512-yMgkF0f+6WJtDMdDYNavmqvbHtiSpwRN2U/W+6uztgfqgkq/PXdKPqjBTUF1RD/feth4rH5N3NW0T5+wIuln1A==", - "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - } - }, - "@jest/test-result": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.0.2.tgz", - "integrity": "sha512-gcdWwL3yP5VaIadzwQtbZyZMgpmes8ryBAJp70tuxghiA8qL4imJyZex+i+USQH2H4jeLVVszhwntgdQ97fccA==", - "dev": true, - "requires": { - "@jest/console": "^27.0.2", - "@jest/types": "^27.0.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.0.5.tgz", - "integrity": "sha512-opztnGs+cXzZ5txFG2+omBaV5ge/0yuJNKbhE3DREMiXE0YxBuzyEa6pNv3kk2JuucIlH2Xvgmn9kEEHSNt/SA==", - "dev": true, - "requires": { - "@jest/test-result": "^27.0.2", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.0.5", - "jest-runtime": "^27.0.5" - } - }, - "@jest/transform": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.0.5.tgz", - "integrity": "sha512-lBD6OwKXSc6JJECBNk4mVxtSVuJSBsQrJ9WCBisfJs7EZuYq4K6vM9HmoB7hmPiLIDGeyaerw3feBV/bC4z8tg==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.0.2", - "babel-plugin-istanbul": "^6.0.0", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.0.5", - "jest-regex-util": "^27.0.1", - "jest-util": "^27.0.2", - "micromatch": "^4.0.4", - "pirates": "^4.0.1", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - } - }, - "@jest/types": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.0.2.tgz", - "integrity": "sha512-XpjCtJ/99HB4PmyJ2vgmN7vT+JLP7RW1FBT9RgnMFS4Dt7cvIyBee8O3/j98aUZ34ZpenPZFqmaaObWSeL65dg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - } - }, - "@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz", - "integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true - }, - "@trysound/sax": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.1.1.tgz", - "integrity": "sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow==", - "dev": true - }, - "@types/babel__core": { - "version": "7.1.14", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.14.tgz", - "integrity": "sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", - "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", - "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.0.tgz", - "integrity": "sha512-IilJZ1hJBUZwMOVDNTdflOOLzJB/ZtljYVa7k3gEZN/jqIJIPkWHC6dvbX+DD2CwZDHB9wAKzZPzzqMIkW37/w==", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/node": { - "version": "15.12.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.5.tgz", - "integrity": "sha512-se3yX7UHv5Bscf8f1ERKvQOD6sTyycH3hdaoozvaLxgUiY5lIGEeH37AD0G0Qi9kPqihPn0HOfd2yaIEN9VwEg==", - "dev": true - }, - "@types/prettier": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.3.0.tgz", - "integrity": "sha512-hkc1DATxFLQo4VxPDpMH1gCkPpBbpOoJ/4nhuXw4n63/0R6bCpQECj4+K226UJ4JO/eJQz+1mC2I7JsWanAdQw==", - "dev": true - }, - "@types/stack-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", - "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", - "dev": true - }, - "@types/yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-YlFfTGS+zqCgXuXNV26rOIeETOkXnGQXP/pjjL9P0gO/EP9jTmc7pUBhx+jVEIxpq41RX33GQ7N3DzOSfZoglQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@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==", - "dev": true - }, - "abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "dev": true - }, - "acorn": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", - "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", - "dev": true - }, - "acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - } - } - }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - } - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "babel-jest": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.0.5.tgz", - "integrity": "sha512-bTMAbpCX7ldtfbca2llYLeSFsDM257aspyAOpsdrdSrBqoLkWCy4HPYTXtXWaSLgFPjrJGACL65rzzr4RFGadw==", - "dev": true, - "requires": { - "@jest/transform": "^27.0.5", - "@jest/types": "^27.0.2", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^27.0.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.0" - } - }, - "babel-plugin-istanbul": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", - "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^4.0.0", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-jest-hoist": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.0.1.tgz", - "integrity": "sha512-sqBF0owAcCDBVEDtxqfYr2F36eSHdx7lAVGyYuOBRnKdD6gzcy0I0XrAYCZgOA3CRrLhmR+Uae9nogPzmAtOfQ==", - "dev": true, - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - } - }, - "babel-preset-jest": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.0.1.tgz", - "integrity": "sha512-nIBIqCEpuiyhvjQs2mVNwTxQQa2xk70p9Dd/0obQGBf8FBzbnI8QhQKzLsWMN2i6q+5B0OcWDtrboBX5gmOLyA==", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^27.0.1", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "call-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", - "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.0" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "dev": true, - "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true - } - } - }, - "caniuse-lite": { - "version": "1.0.30001240", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001240.tgz", - "integrity": "sha512-nb8mDzfMdxBDN7ZKx8chWafAdBp5DAAlpWvNyUGe5tcDWd838zpzDN3Rah9cjCqhfOKkrvx40G2SDtP0qiWX/w==", - "dev": true - }, - "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true - }, - "cheerio": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", - "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", - "dev": true, - "requires": { - "cheerio-select": "^1.5.0", - "dom-serializer": "^1.3.2", - "domhandler": "^4.2.0", - "htmlparser2": "^6.1.0", - "parse5": "^6.0.1", - "parse5-htmlparser2-tree-adapter": "^6.0.1", - "tslib": "^2.2.0" - }, - "dependencies": { - "htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - } - } - }, - "cheerio-select": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.5.0.tgz", - "integrity": "sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg==", - "dev": true, - "requires": { - "css-select": "^4.1.3", - "css-what": "^5.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0", - "domutils": "^2.7.0" - } - }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true - }, - "ci-info": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.2.0.tgz", - "integrity": "sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==", - "dev": true - }, - "cjs-module-lexer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.1.tgz", - "integrity": "sha512-jVamGdJPDeuQilKhvVn1h3knuMOZzr8QDnpk+M9aMlCaMkTDd6fBWPhiDqFvFZ07pL0liqabAiuy8SY4jGHeaw==", - "dev": true - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "^2.0.0" - } - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "css-select": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", - "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^5.0.0", - "domhandler": "^4.2.0", - "domutils": "^2.6.0", - "nth-check": "^2.0.0" - } - }, - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dev": true, - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - } - }, - "css-what": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", - "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==", - "dev": true - }, - "csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dev": true, - "requires": { - "css-tree": "^1.1.2" - } - }, - "cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - } - } - }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true, - "requires": { - "array-find-index": "^1.0.1" - } - }, - "data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - } - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", - "dev": true - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true - }, - "diff-sequences": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.0.1.tgz", - "integrity": "sha512-XPLijkfJUh/PIBnfkcSHgvD6tlYixmcMAn3osTk6jt+H0v/mgURto1XUiD9DKuGX5NDoVS6dSlA23gd9FUaCFg==", - "dev": true - }, - "dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "dev": true - }, - "domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "dev": true, - "requires": { - "webidl-conversions": "^5.0.0" - }, - "dependencies": { - "webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true - } - } - }, - "domhandler": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", - "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", - "dev": true, - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", - "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", - "dev": true, - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "editorconfig-checker": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/editorconfig-checker/-/editorconfig-checker-4.0.2.tgz", - "integrity": "sha512-tUI7ABIzMB1kfwTUQmX+gaZGCMNuUgGuRHJ+Xu4Tk9T8lV8Vy5w/EaQsSZ7NKrOgLxbekptw6MUgrzHTvhceLw==", - "dev": true, - "requires": { - "https-proxy-agent": "^5.0.0", - "node-fetch": "^2.6.0", - "tar": "^6.0.0" - } - }, - "electron-to-chromium": { - "version": "1.3.759", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.759.tgz", - "integrity": "sha512-nM76xH0t2FBH5iMEZDVc3S/qbdKjGH7TThezxC8k1Q7w7WHvIAyJh8lAe2UamGfdRqBTjHfPDn82LJ0ksCiB9g==", - "dev": true - }, - "emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "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.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, - "expect": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.0.2.tgz", - "integrity": "sha512-YJFNJe2+P2DqH+ZrXy+ydRQYO87oxRUonZImpDodR1G7qo3NYd3pL+NQ9Keqpez3cehczYwZDBC3A7xk3n7M/w==", - "dev": true, - "requires": { - "@jest/types": "^27.0.2", - "ansi-styles": "^5.0.0", - "jest-get-type": "^27.0.1", - "jest-matcher-utils": "^27.0.2", - "jest-message-util": "^27.0.2", - "jest-regex-util": "^27.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - } - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fast-xml-parser": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.19.0.tgz", - "integrity": "sha512-4pXwmBplsCPv8FOY1WRakF970TjNGnGnfbOnLqjlYvMiF1SR3yOHyxMR/YCXpPTOspNF5gwudqktIP4VsWkvBg==", - "dev": true - }, - "fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "dev": true, - "requires": { - "bser": "2.1.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-intrinsic": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.1.tgz", - "integrity": "sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true - }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dev": true, - "requires": { - "whatwg-encoding": "^1.0.5" - } - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - }, - "dependencies": { - "domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "dev": true - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true - } - } - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - }, - "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dev": true, - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true - } - } - }, - "http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "import-local": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", - "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, - "requires": { - "repeating": "^2.0.0" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", - "dev": true - }, - "is-ci": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.0.tgz", - "integrity": "sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ==", - "dev": true, - "requires": { - "ci-info": "^3.1.1" - } - }, - "is-core-module": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.1.0.tgz", - "integrity": "sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "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==", - "dev": true - }, - "is-finite": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", - "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", - "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, - "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-stream": { - "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==", - "dev": true - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "istanbul-lib-coverage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", - "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "requires": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", - "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - } - }, - "istanbul-reports": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", - "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jest": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.0.5.tgz", - "integrity": "sha512-4NlVMS29gE+JOZvgmSAsz3eOjkSsHqjTajlIsah/4MVSmKvf3zFP/TvgcLoWe2UVHiE9KF741sReqhF0p4mqbQ==", - "dev": true, - "requires": { - "@jest/core": "^27.0.5", - "import-local": "^3.0.2", - "jest-cli": "^27.0.5" - }, - "dependencies": { - "jest-cli": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.0.5.tgz", - "integrity": "sha512-kZqY020QFOFQKVE2knFHirTBElw3/Q0kUbDc3nMfy/x+RQ7zUY89SUuzpHHJoSX1kX7Lq569ncvjNqU3Td/FCA==", - "dev": true, - "requires": { - "@jest/core": "^27.0.5", - "@jest/test-result": "^27.0.2", - "@jest/types": "^27.0.2", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "jest-config": "^27.0.5", - "jest-util": "^27.0.2", - "jest-validate": "^27.0.2", - "prompts": "^2.0.1", - "yargs": "^16.0.3" - } - } - } - }, - "jest-changed-files": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.0.2.tgz", - "integrity": "sha512-eMeb1Pn7w7x3wue5/vF73LPCJ7DKQuC9wQUR5ebP9hDPpk5hzcT/3Hmz3Q5BOFpR3tgbmaWhJcMTVgC8Z1NuMw==", - "dev": true, - "requires": { - "@jest/types": "^27.0.2", - "execa": "^5.0.0", - "throat": "^6.0.1" - } - }, - "jest-circus": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.0.5.tgz", - "integrity": "sha512-p5rO90o1RTh8LPOG6l0Fc9qgp5YGv+8M5CFixhMh7gGHtGSobD1AxX9cjFZujILgY8t30QZ7WVvxlnuG31r8TA==", - "dev": true, - "requires": { - "@jest/environment": "^27.0.5", - "@jest/test-result": "^27.0.2", - "@jest/types": "^27.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.0.2", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.0.2", - "jest-matcher-utils": "^27.0.2", - "jest-message-util": "^27.0.2", - "jest-runtime": "^27.0.5", - "jest-snapshot": "^27.0.5", - "jest-util": "^27.0.2", - "pretty-format": "^27.0.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" - } - }, - "jest-config": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.0.5.tgz", - "integrity": "sha512-zCUIXag7QIXKEVN4kUKbDBDi9Q53dV5o3eNhGqe+5zAbt1vLs4VE3ceWaYrOub0L4Y7E9pGfM84TX/0ARcE+Qw==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^27.0.5", - "@jest/types": "^27.0.2", - "babel-jest": "^27.0.5", - "chalk": "^4.0.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "is-ci": "^3.0.0", - "jest-circus": "^27.0.5", - "jest-environment-jsdom": "^27.0.5", - "jest-environment-node": "^27.0.5", - "jest-get-type": "^27.0.1", - "jest-jasmine2": "^27.0.5", - "jest-regex-util": "^27.0.1", - "jest-resolve": "^27.0.5", - "jest-runner": "^27.0.5", - "jest-util": "^27.0.2", - "jest-validate": "^27.0.2", - "micromatch": "^4.0.4", - "pretty-format": "^27.0.2" - } - }, - "jest-diff": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.0.2.tgz", - "integrity": "sha512-BFIdRb0LqfV1hBt8crQmw6gGQHVDhM87SpMIZ45FPYKReZYG5er1+5pIn2zKqvrJp6WNox0ylR8571Iwk2Dmgw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^27.0.1", - "jest-get-type": "^27.0.1", - "pretty-format": "^27.0.2" - } - }, - "jest-docblock": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.0.1.tgz", - "integrity": "sha512-TA4+21s3oebURc7VgFV4r7ltdIJ5rtBH1E3Tbovcg7AV+oLfD5DcJ2V2vJ5zFA9sL5CFd/d2D6IpsAeSheEdrA==", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.0.2.tgz", - "integrity": "sha512-OLMBZBZ6JkoXgUenDtseFRWA43wVl2BwmZYIWQws7eS7pqsIvePqj/jJmEnfq91ALk3LNphgwNK/PRFBYi7ITQ==", - "dev": true, - "requires": { - "@jest/types": "^27.0.2", - "chalk": "^4.0.0", - "jest-get-type": "^27.0.1", - "jest-util": "^27.0.2", - "pretty-format": "^27.0.2" - } - }, - "jest-environment-jsdom": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.0.5.tgz", - "integrity": "sha512-ToWhViIoTl5738oRaajTMgYhdQL73UWPoV4GqHGk2DPhs+olv8OLq5KoQW8Yf+HtRao52XLqPWvl46dPI88PdA==", - "dev": true, - "requires": { - "@jest/environment": "^27.0.5", - "@jest/fake-timers": "^27.0.5", - "@jest/types": "^27.0.2", - "@types/node": "*", - "jest-mock": "^27.0.3", - "jest-util": "^27.0.2", - "jsdom": "^16.6.0" - } - }, - "jest-environment-node": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.0.5.tgz", - "integrity": "sha512-47qqScV/WMVz5OKF5TWpAeQ1neZKqM3ySwNveEnLyd+yaE/KT6lSMx/0SOx60+ZUcVxPiESYS+Kt2JS9y4PpkQ==", - "dev": true, - "requires": { - "@jest/environment": "^27.0.5", - "@jest/fake-timers": "^27.0.5", - "@jest/types": "^27.0.2", - "@types/node": "*", - "jest-mock": "^27.0.3", - "jest-util": "^27.0.2" - } - }, - "jest-get-type": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.1.tgz", - "integrity": "sha512-9Tggo9zZbu0sHKebiAijyt1NM77Z0uO4tuWOxUCujAiSeXv30Vb5D4xVF4UR4YWNapcftj+PbByU54lKD7/xMg==", - "dev": true - }, - "jest-haste-map": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.0.5.tgz", - "integrity": "sha512-3LFryGSHxwPFHzKIs6W0BGA2xr6g1MvzSjR3h3D8K8Uqy4vbRm/grpGHzbPtIbOPLC6wFoViRrNEmd116QWSkw==", - "dev": true, - "requires": { - "@jest/types": "^27.0.2", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^27.0.1", - "jest-serializer": "^27.0.1", - "jest-util": "^27.0.2", - "jest-worker": "^27.0.2", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - } - }, - "jest-jasmine2": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.0.5.tgz", - "integrity": "sha512-m3TojR19sFmTn79QoaGy1nOHBcLvtLso6Zh7u+gYxZWGcza4rRPVqwk1hciA5ZOWWZIJOukAcore8JRX992FaA==", - "dev": true, - "requires": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^27.0.5", - "@jest/source-map": "^27.0.1", - "@jest/test-result": "^27.0.2", - "@jest/types": "^27.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.0.2", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.0.2", - "jest-matcher-utils": "^27.0.2", - "jest-message-util": "^27.0.2", - "jest-runtime": "^27.0.5", - "jest-snapshot": "^27.0.5", - "jest-util": "^27.0.2", - "pretty-format": "^27.0.2", - "throat": "^6.0.1" - } - }, - "jest-leak-detector": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.0.2.tgz", - "integrity": "sha512-TZA3DmCOfe8YZFIMD1GxFqXUkQnIoOGQyy4hFCA2mlHtnAaf+FeOMxi0fZmfB41ZL+QbFG6BVaZF5IeFIVy53Q==", - "dev": true, - "requires": { - "jest-get-type": "^27.0.1", - "pretty-format": "^27.0.2" - } - }, - "jest-matcher-utils": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.0.2.tgz", - "integrity": "sha512-Qczi5xnTNjkhcIB0Yy75Txt+Ez51xdhOxsukN7awzq2auZQGPHcQrJ623PZj0ECDEMOk2soxWx05EXdXGd1CbA==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^27.0.2", - "jest-get-type": "^27.0.1", - "pretty-format": "^27.0.2" - } - }, - "jest-message-util": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.0.2.tgz", - "integrity": "sha512-rTqWUX42ec2LdMkoUPOzrEd1Tcm+R1KfLOmFK+OVNo4MnLsEaxO5zPDb2BbdSmthdM/IfXxOZU60P/WbWF8BTw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.0.2", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.4", - "pretty-format": "^27.0.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - }, - "jest-mock": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.0.3.tgz", - "integrity": "sha512-O5FZn5XDzEp+Xg28mUz4ovVcdwBBPfAhW9+zJLO0Efn2qNbYcDaJvSlRiQ6BCZUCVOJjALicuJQI9mRFjv1o9Q==", - "dev": true, - "requires": { - "@jest/types": "^27.0.2", - "@types/node": "*" - } - }, - "jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true - }, - "jest-regex-util": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.0.1.tgz", - "integrity": "sha512-6nY6QVcpTgEKQy1L41P4pr3aOddneK17kn3HJw6SdwGiKfgCGTvH02hVXL0GU8GEKtPH83eD2DIDgxHXOxVohQ==", - "dev": true - }, - "jest-resolve": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.0.5.tgz", - "integrity": "sha512-Md65pngRh8cRuWVdWznXBB5eDt391OJpdBaJMxfjfuXCvOhM3qQBtLMCMTykhuUKiBMmy5BhqCW7AVOKmPrW+Q==", - "dev": true, - "requires": { - "@jest/types": "^27.0.2", - "chalk": "^4.0.0", - "escalade": "^3.1.1", - "graceful-fs": "^4.2.4", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.0.2", - "jest-validate": "^27.0.2", - "resolve": "^1.20.0", - "slash": "^3.0.0" - }, - "dependencies": { - "is-core-module": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", - "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - } - } - }, - "jest-resolve-dependencies": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.0.5.tgz", - "integrity": "sha512-xUj2dPoEEd59P+nuih4XwNa4nJ/zRd/g4rMvjHrZPEBWeWRq/aJnnM6mug+B+Nx+ILXGtfWHzQvh7TqNV/WbuA==", - "dev": true, - "requires": { - "@jest/types": "^27.0.2", - "jest-regex-util": "^27.0.1", - "jest-snapshot": "^27.0.5" - } - }, - "jest-runner": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.0.5.tgz", - "integrity": "sha512-HNhOtrhfKPArcECgBTcWOc+8OSL8GoFoa7RsHGnfZR1C1dFohxy9eLtpYBS+koybAHlJLZzNCx2Y/Ic3iEtJpQ==", - "dev": true, - "requires": { - "@jest/console": "^27.0.2", - "@jest/environment": "^27.0.5", - "@jest/test-result": "^27.0.2", - "@jest/transform": "^27.0.5", - "@jest/types": "^27.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-docblock": "^27.0.1", - "jest-environment-jsdom": "^27.0.5", - "jest-environment-node": "^27.0.5", - "jest-haste-map": "^27.0.5", - "jest-leak-detector": "^27.0.2", - "jest-message-util": "^27.0.2", - "jest-resolve": "^27.0.5", - "jest-runtime": "^27.0.5", - "jest-util": "^27.0.2", - "jest-worker": "^27.0.2", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" - } - }, - "jest-runtime": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.0.5.tgz", - "integrity": "sha512-V/w/+VasowPESbmhXn5AsBGPfb35T7jZPGZybYTHxZdP7Gwaa+A0EXE6rx30DshHKA98lVCODbCO8KZpEW3hiQ==", - "dev": true, - "requires": { - "@jest/console": "^27.0.2", - "@jest/environment": "^27.0.5", - "@jest/fake-timers": "^27.0.5", - "@jest/globals": "^27.0.5", - "@jest/source-map": "^27.0.1", - "@jest/test-result": "^27.0.2", - "@jest/transform": "^27.0.5", - "@jest/types": "^27.0.2", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^27.0.5", - "jest-message-util": "^27.0.2", - "jest-mock": "^27.0.3", - "jest-regex-util": "^27.0.1", - "jest-resolve": "^27.0.5", - "jest-snapshot": "^27.0.5", - "jest-util": "^27.0.2", - "jest-validate": "^27.0.2", - "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^16.0.3" - } - }, - "jest-serializer": { - "version": "27.0.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.0.1.tgz", - "integrity": "sha512-svy//5IH6bfQvAbkAEg1s7xhhgHTtXu0li0I2fdKHDsLP2P2MOiscPQIENQep8oU2g2B3jqLyxKKzotZOz4CwQ==", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - } - }, - "jest-snapshot": { - "version": "27.0.5", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.0.5.tgz", - "integrity": "sha512-H1yFYdgnL1vXvDqMrnDStH6yHFdMEuzYQYc71SnC/IJnuuhW6J16w8GWG1P+qGd3Ag3sQHjbRr0TcwEo/vGS+g==", - "dev": true, - "requires": { - "@babel/core": "^7.7.2", - "@babel/generator": "^7.7.2", - "@babel/parser": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.0.5", - "@jest/types": "^27.0.2", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^27.0.2", - "graceful-fs": "^4.2.4", - "jest-diff": "^27.0.2", - "jest-get-type": "^27.0.1", - "jest-haste-map": "^27.0.5", - "jest-matcher-utils": "^27.0.2", - "jest-message-util": "^27.0.2", - "jest-resolve": "^27.0.5", - "jest-util": "^27.0.2", - "natural-compare": "^1.4.0", - "pretty-format": "^27.0.2", - "semver": "^7.3.2" - }, - "dependencies": { - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "jest-util": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.0.2.tgz", - "integrity": "sha512-1d9uH3a00OFGGWSibpNYr+jojZ6AckOMCXV2Z4K3YXDnzpkAaXQyIpY14FOJPiUmil7CD+A6Qs+lnnh6ctRbIA==", - "dev": true, - "requires": { - "@jest/types": "^27.0.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^3.0.0", - "picomatch": "^2.2.3" - } - }, - "jest-validate": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.0.2.tgz", - "integrity": "sha512-UgBF6/oVu1ofd1XbaSotXKihi8nZhg0Prm8twQ9uCuAfo59vlxCXMPI/RKmrZEVgi3Nd9dS0I8A0wzWU48pOvg==", - "dev": true, - "requires": { - "@jest/types": "^27.0.2", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^27.0.1", - "leven": "^3.1.0", - "pretty-format": "^27.0.2" - }, - "dependencies": { - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true - } - } - }, - "jest-watcher": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.0.2.tgz", - "integrity": "sha512-8nuf0PGuTxWj/Ytfw5fyvNn/R80iXY8QhIT0ofyImUvdnoaBdT6kob0GmhXR+wO+ALYVnh8bQxN4Tjfez0JgkA==", - "dev": true, - "requires": { - "@jest/test-result": "^27.0.2", - "@jest/types": "^27.0.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^27.0.2", - "string-length": "^4.0.1" - } - }, - "jest-worker": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.2.tgz", - "integrity": "sha512-EoBdilOTTyOgmHXtw/cPc+ZrCA0KJMrkXzkrPGNwLmnvvlN1nj7MPrxpT7m+otSv2e1TLaVffzDnE/LB14zJMg==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsdom": { - "version": "16.6.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.6.0.tgz", - "integrity": "sha512-Ty1vmF4NHJkolaEmdjtxTfSfkdb8Ywarwf63f+F8/mDD1uLSSWDxDuMiZxiPhwunLrn9LOSVItWj4bLYsLN3Dg==", - "dev": true, - "requires": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.5", - "xml-name-validator": "^3.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "jsonschema": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.0.tgz", - "integrity": "sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw==", - "dev": true - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "log-update": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", - "integrity": "sha1-iDKP19HOeTiykoN0bwsbwSayRwg=", - "dev": true, - "requires": { - "ansi-escapes": "^3.0.0", - "cli-cursor": "^2.0.0", - "wrap-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "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=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "wrap-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz", - "integrity": "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=", - "dev": true, - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0" - } - } - } - }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "dev": true, - "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", - "dev": true, - "requires": { - "tmpl": "1.0.x" - } - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - }, - "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true - }, - "memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", - "dev": true - }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, - "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "mime-db": { - "version": "1.48.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", - "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", - "dev": true - }, - "mime-types": { - "version": "2.1.31", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", - "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", - "dev": true, - "requires": { - "mime-db": "1.48.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", - "dev": true - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true - }, - "node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true - }, - "node-releases": { - "version": "1.1.73", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", - "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==", - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "npm-run-all": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", - "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - }, - "dependencies": { - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - } - } - }, - "nth-check": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", - "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", - "dev": true, - "requires": { - "boolbase": "^1.0.0" - } - }, - "nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object-inspect": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "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" - } - }, - "p-each-series": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", - "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", - "dev": true - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", - "dev": true, - "requires": { - "parse5": "^6.0.1" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true - }, - "pidtree": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", - "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", - "dev": true - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "dev": true, - "requires": { - "node-modules-regexp": "^1.0.0" - } - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "pretty-format": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.0.2.tgz", - "integrity": "sha512-mXKbbBPnYTG7Yra9qFBtqj+IXcsvxsvOBco3QHxtxTl+hHKq6QdzMZ+q0CtL4ORHZgwGImRr2XZUX2EWzORxig==", - "dev": true, - "requires": { - "@jest/types": "^27.0.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - } - } - }, - "prompts": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz", - "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - }, - "dependencies": { - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - } - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - } - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true, - "requires": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" - } - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "^1.0.0" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", - "dev": true, - "requires": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, - "dependencies": { - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "^1.0.0" - } - } - } - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "requires": { - "xmlchars": "^2.2.0" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", - "dev": true - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz", - "integrity": "sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw==", - "dev": true - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "dev": true - }, - "stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - } - } - }, - "string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - } - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "string.prototype.padend": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.1.tgz", - "integrity": "sha512-eCzTASPnoCr5Ht+Vn1YXgm8SB015hHKgEIMu9Nr9bQmLhRBxKRfmzSj/IQsxDFc8JInJDDFA0qXwK+xxI7wDkg==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" - } - }, - "string.prototype.trimend": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", - "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz", - "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true, - "requires": { - "get-stdin": "^4.0.1" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dev": true, - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - } - }, - "svg-path-bbox": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/svg-path-bbox/-/svg-path-bbox-1.0.1.tgz", - "integrity": "sha512-ODByt4zCwa2lq6Nj/G+dgQjgP7YzsPbXO2hkm159kpFO+tieVw8vanaei2qEsMZDN6Yfpp25y9E0LTEXxYu4VQ==", - "dev": true, - "requires": { - "svgpath": "^2.3.0" - } - }, - "svg-path-segments": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/svg-path-segments/-/svg-path-segments-1.0.0.tgz", - "integrity": "sha512-17j8eeeKnKYBBbnmSSq0ml+e8dw24m5I7StIxZaj9ew0L9+R1SmBtSYWxtU9H6Xt2hBJZmljce78yyXcCG8DIw==", - "dev": true - }, - "svglint": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/svglint/-/svglint-1.0.8.tgz", - "integrity": "sha512-Kzny9/6z9YLlu+A1nQ8Pso5g3E5Cz9y1dXTrGwm9H0e0iSioDC3fdGz7e/te7Tqm/Bec9bUFOgiyQEGB9Dg76w==", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0", - "chalk": "^2.4.1", - "cheerio": "^1.0.0-rc.6", - "fast-xml-parser": "^3.12.13", - "glob": "^7.1.2", - "htmlparser2": "^3.9.1", - "log-update": "^2.3.0", - "meow": "^3.7.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "svgo": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.3.1.tgz", - "integrity": "sha512-riDDIQgXpEnn0BEl9Gvhh1LNLIyiusSpt64IR8upJu7MwxnzetmF/Y57pXQD2NMX2lVyMRzXt5f2M5rO4wG7Dw==", - "dev": true, - "requires": { - "@trysound/sax": "0.1.1", - "chalk": "^4.1.0", - "commander": "^7.1.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.2", - "csso": "^4.2.0", - "stable": "^0.1.8" - } - }, - "svgpath": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/svgpath/-/svgpath-2.3.1.tgz", - "integrity": "sha512-wNz6lCoj+99GMoyU7SozTfPqiLHz6WcJYZ30Z+F4lF/gPtxWHBCpZ4DhoDI0+oZ0dObKyYsJdSPGbL2mJq/qCg==", - "dev": true - }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "tar": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", - "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", - "dev": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - } - }, - "terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - } - }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, - "throat": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", - "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==", - "dev": true - }, - "tmpl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", - "dev": true, - "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.1.2" - } - }, - "tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "requires": { - "punycode": "^2.1.1" - } - }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true - }, - "tslib": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", - "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "uglify-js": { - "version": "3.13.10", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.10.tgz", - "integrity": "sha512-57H3ACYFXeo1IaZ1w02sfA71wI60MGco/IQFjOqK+WtKoprh7Go2/yvd2HPtoJILO2Or84ncLccI4xoHMTSbGg==", - "dev": true - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "v8-to-istanbul": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.0.0.tgz", - "integrity": "sha512-LkmXi8UUNxnCC+JlH7/fsfsKr5AU110l+SYGJimWNkWhxbN5EyeOtm1MJ0hhvqMMOhGwBj1Fp70Yv9i+hX0QAg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } - } - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "requires": { - "browser-process-hrtime": "^1.0.0" - } - }, - "w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dev": true, - "requires": { - "xml-name-validator": "^3.0.0" - } - }, - "walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", - "dev": true, - "requires": { - "makeerror": "1.0.x" - } - }, - "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true - }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "requires": { - "iconv-lite": "0.4.24" - } - }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dev": true, - "requires": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "word-wrap": { - "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==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "ws": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.0.tgz", - "integrity": "sha512-6ezXvzOZupqKj4jUqbQ9tXuJNo+BR2gU8fFRk3XCP3e0G6WT414u5ELe6Y0vtp7kmSJ3F7YWObSNr1ESsgi4vw==", - "dev": true - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true - } - } -} diff --git a/package.json b/package.json index e1c26dbd6099..5f67ee09ff13 100644 --- a/package.json +++ b/package.json @@ -1,13 +1,28 @@ { "name": "simple-icons", - "version": "5.5.0", + "version": "7.6.0", "description": "SVG icons for popular brands https://simpleicons.org", "homepage": "https://simpleicons.org", "keywords": [ "svg", "icons" ], + "type": "commonjs", "main": "index.js", + "types": "index.d.ts", + "exports": { + ".": "./index.js", + "./icons": { + "module": "./icons.mjs", + "import": "./icons.mjs", + "require": "./icons.js", + "default": "./icons.js" + }, + "./icons/*": [ + "./icons/*" + ] + }, + "sideEffects": false, "repository": { "type": "git", "url": "git+ssh://git@github.com/simple-icons/simple-icons.git" @@ -17,36 +32,48 @@ }, "author": "Simple Icons Collaborators", "license": "CC0-1.0", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/simple-icons" + }, "devDependencies": { "editorconfig-checker": "4.0.2", - "jest": "27.0.5", - "jest-diff": "27.0.2", - "jsonschema": "1.4.0", + "esbuild": "0.14.50", + "fake-diff": "1.0.0", + "husky": "8.0.1", + "is-ci": "3.0.1", + "jsonschema": "1.4.1", + "mocha": "10.0.0", + "named-html-entities-json": "1.0.0", "npm-run-all": "4.1.5", - "svg-path-bbox": "1.0.1", + "prettier": "2.7.1", + "rimraf": "3.0.2", + "svg-path-bbox": "1.2.2", "svg-path-segments": "1.0.0", - "svglint": "1.0.8", - "svgo": "2.3.1", - "svgpath": "2.3.1", - "uglify-js": "3.13.10" + "svglint": "2.1.0", + "svgo": "2.8.0", + "svgpath": "2.5.0" }, "scripts": { "build": "node scripts/build/package.js", - "clean": "rm -f icons/*.js index.js", - "lint": "run-s our-lint jsonlint svglint wslint", + "clean": "rimraf index.js icons.js icons.mjs icons.d.ts", + "format": "prettier --write .", + "lint": "run-s our-lint jslint jsonlint svglint wslint", "our-lint": "node scripts/lint/ourlint.js", + "jslint": "prettier --check .", "jsonlint": "node scripts/lint/jsonlint.js", - "svglint": "svglint icons/*.svg --ci", - "wslint": "editorconfig-checker -exclude \\.svg$", + "svglint": "svglint icons/*.svg --ci --config .svglintrc.mjs", + "wslint": "editorconfig-checker", + "prepare": "is-ci || husky install", "prepublishOnly": "npm run build", "postpublish": "npm run clean", - "test": "jest", + "test": "mocha tests --reporter tests/min-reporter.cjs --inline-diffs", "pretest": "npm run prepublishOnly", "posttest": "npm run postpublish", "svgo": "svgo --config svgo.config.js", "get-filename": "node scripts/get-filename.js" }, - "engine": { + "engines": { "node": ">=0.12.18" } } diff --git a/scripts/build/package.js b/scripts/build/package.js index a55e0e2187df..0088eac93427 100644 --- a/scripts/build/package.js +++ b/scripts/build/package.js @@ -7,80 +7,129 @@ * tree-shakeable */ -const fs = require("fs"); -const path = require("path"); -const util = require("util"); -const minify = require("uglify-js").minify; - -const UTF8 = "utf8"; - -const rootDir = path.resolve(__dirname, "..", ".."); -const dataFile = path.resolve(rootDir, "_data", "simple-icons.json"); -const indexFile = path.resolve(rootDir, "index.js"); -const iconsDir = path.resolve(rootDir, "icons"); - -const templatesDir = path.resolve(__dirname, "templates"); -const indexTemplateFile = path.resolve(templatesDir, "index.js"); -const iconObjectTemplateFile = path.resolve(templatesDir, "icon-object.js"); - -const indexTemplate = fs.readFileSync(indexTemplateFile, UTF8); -const iconObjectTemplate = fs.readFileSync(iconObjectTemplateFile, UTF8); - -const data = require(dataFile); -const { getIconSlug, titleToSlug } = require("../utils.js"); - -// Local helper functions -function escape(value) { - return value.replace(/(? { + const icons = await getIconsData(); + const indexTemplate = await fs.readFile(indexTemplateFile, UTF8); + const iconObjectTemplate = await fs.readFile(iconObjectTemplateFile, UTF8); + + // Local helper functions + const escape = (value) => { + return value.replace(/(? { + return `'${icon.slug}':${iconToObject(icon)}`; + }; + const licenseToObject = (license) => { + if (license === undefined) { + return; + } + + if (license.url === undefined) { + license.url = `https://spdx.org/licenses/${license.type}`; + } + return license; + }; + const iconToObject = (icon) => { + return util.format( + iconObjectTemplate, + escape(icon.title), + escape(icon.slug), + escape(titleToHtmlFriendly(icon.title)), + escape(icon.path), + escape(icon.source), + escape(icon.hex), + icon.guidelines ? `'${escape(icon.guidelines)}'` : undefined, + licenseToObject(icon.license), + ); + }; + const writeJs = async (filepath, rawJavaScript) => { + const { code } = await esbuildTransform(rawJavaScript, { + minify: true, + }); + await fs.writeFile(filepath, code); + }; + const writeTs = async (filepath, rawTypeScript) => { + await fs.writeFile(filepath, rawTypeScript); + }; + + // 'main' + const iconsBarrelMjs = []; + const iconsBarrelJs = []; + const iconsBarrelDts = []; + const buildIcons = []; + + await Promise.all( + icons.map(async (icon) => { + const filename = getIconSlug(icon); + const svgFilepath = path.resolve(iconsDir, `${filename}.svg`); + icon.svg = (await fs.readFile(svgFilepath, UTF8)).replace(/\r?\n/, ''); + icon.path = svgToPath(icon.svg); + icon.slug = filename; + buildIcons.push(icon); + + const iconObject = iconToObject(icon); + + const iconExportName = slugToVariableName(icon.slug); + + // add object to the barrel file + iconsBarrelJs.push(`${iconExportName}:${iconObject},`); + iconsBarrelMjs.push(`export const ${iconExportName}=${iconObject}`); + iconsBarrelDts.push(`export const ${iconExportName}:I;`); + }), + ); + + // constants used in templates to reduce package size + const constantsString = `const a='',b='';`; + + // write our generic index.js + const rawIndexJs = util.format( + indexTemplate, + constantsString, + buildIcons.map(iconToKeyValue).join(','), ); -} -function minifyAndWrite(filepath, rawJavaScript) { - const { error, code } = minify(rawJavaScript); - if (error) { - console.error(error); - process.exit(1); - } else { - fs.writeFileSync(filepath, code); - } -} - -// 'main' -const icons = []; -data.icons.forEach(icon => { - const filename = getIconSlug(icon); - const svgFilepath = path.resolve(iconsDir, `${filename}.svg`); - icon.svg = fs.readFileSync(svgFilepath, UTF8).replace(/\r?\n/, ''); - icon.slug = filename; - icons.push(icon); - - // write the static .js file for the icon - const jsFilepath = path.resolve(iconsDir, `${filename}.js`); - minifyAndWrite(jsFilepath, `module.exports=${iconToObject(icon)};`); -}); - -// write our generic index.js -const rawIndexJs = util.format(indexTemplate, icons.map(iconToKeyValue).join(',')); -minifyAndWrite(indexFile, rawIndexJs); + await writeJs(indexFile, rawIndexJs); + + // write our file containing the exports of all icons in CommonJS ... + const rawIconsJs = `${constantsString}module.exports={${iconsBarrelJs.join( + '', + )}};`; + await writeJs(iconsJsFile, rawIconsJs); + // and ESM + const rawIconsMjs = constantsString + iconsBarrelMjs.join(''); + await writeJs(iconsMjsFile, rawIconsMjs); + // and create a type declaration file + const rawIconsDts = `import {SimpleIcon} from ".";type I = SimpleIcon;${iconsBarrelDts.join( + '', + )}`; + await writeTs(iconsDtsFile, rawIconsDts); +}; + +build(); diff --git a/scripts/build/templates/icon-object.js b/scripts/build/templates/icon-object.js index 183da6aef735..bccadac2434b 100644 --- a/scripts/build/templates/icon-object.js +++ b/scripts/build/templates/icon-object.js @@ -1,10 +1,10 @@ { title: '%s', slug: '%s', - svg: '%s', - get path() { - return this.svg.match(/ `${acc} ${arg}`, process.argv[2]); const filename = titleToSlug(brandName); diff --git a/scripts/lint/jsonlint.js b/scripts/lint/jsonlint.js index b89e97de93d8..7e61515786d9 100644 --- a/scripts/lint/jsonlint.js +++ b/scripts/lint/jsonlint.js @@ -1,20 +1,33 @@ -const path = require("path"); -const Validator = require("jsonschema").Validator; +#!/usr/bin/env node +/** + * @fileoverview + * CLI tool to run jsonschema on the simple-icons.json data file. + */ -const rootDir = path.resolve(__dirname, "..", ".."); -const schemaFile = path.resolve(rootDir, ".jsonschema.json"); -const dataFile = path.resolve(rootDir, "_data", "simple-icons.json"); +import { promises as fs } from 'node:fs'; +import path from 'node:path'; +import { Validator } from 'jsonschema'; +import { getDirnameFromImportMeta, getIconsData } from '../utils.js'; -const schema = require(schemaFile); -const data = require(dataFile); +const __dirname = getDirnameFromImportMeta(import.meta.url); -const validator = new Validator(); -const result = validator.validate(data, schema); -if (result.errors.length > 0) { - result.errors.forEach((error) => { - console.error(error); - }); +const rootDir = path.resolve(__dirname, '..', '..'); +const schemaFile = path.resolve(rootDir, '.jsonschema.json'); - console.error(`Found ${result.errors.length} error(s) in simple-icons.json`); - process.exit(1); -} +(async () => { + const icons = await getIconsData(); + const schema = JSON.parse(await fs.readFile(schemaFile, 'utf8')); + + const validator = new Validator(); + const result = validator.validate({ icons }, schema); + if (result.errors.length > 0) { + result.errors.forEach((error) => { + console.error(error); + }); + + console.error( + `Found ${result.errors.length} error(s) in simple-icons.json`, + ); + process.exit(1); + } +})(); diff --git a/scripts/lint/ourlint.js b/scripts/lint/ourlint.js index d275a5d7fdd0..677775a4a7c3 100644 --- a/scripts/lint/ourlint.js +++ b/scripts/lint/ourlint.js @@ -5,16 +5,8 @@ * linters (e.g. jsonlint/svglint). */ -const fs = require("fs"); -const path = require("path"); - -const { diffLinesUnified } = require("jest-diff"); - -const UTF8 = "utf8"; - -const rootDir = path.resolve(__dirname, "..", ".."); -const dataFile = path.resolve(rootDir, "_data", "simple-icons.json"); -const data = require(dataFile); +import fakeDiff from 'fake-diff'; +import { getIconsDataString, normalizeNewlines } from '../utils.js'; /** * Contains our tests so they can be isolated from each other. @@ -22,7 +14,7 @@ const data = require(dataFile); */ const TESTS = { /* Tests whether our icons are in alphabetical order */ - alphabetical: function() { + alphabetical: (data) => { const collector = (invalidEntries, icon, index, array) => { if (index > 0) { const prev = array[index - 1]; @@ -39,7 +31,7 @@ const TESTS = { } return invalidEntries; }; - const format = icon => { + const format = (icon) => { if (icon.slug) { return `${icon.title} (${icon.slug})`; } @@ -49,35 +41,35 @@ const TESTS = { const invalids = data.icons.reduce(collector, []); if (invalids.length) { return `Some icons aren't in alphabetical order: - ${invalids.map(icon => format(icon)).join(", ")}`; + ${invalids.map((icon) => format(icon)).join(', ')}`; } }, /* Check the formatting of the data file */ - prettified: function() { - const dataString = fs.readFileSync(dataFile, UTF8).replace(/\r\n/g, '\n'); - const dataPretty = `${JSON.stringify(data, null, " ")}\n`; - if (dataString !== dataPretty) { - const dataDiff = diffLinesUnified( - dataString.split("\n"), - dataPretty.split("\n"), - { - expand: false, - omitAnnotationLines: true - }, - ); + prettified: async (data, dataString) => { + const normalizedDataString = normalizeNewlines(dataString); + const dataPretty = `${JSON.stringify(data, null, ' ')}\n`; + if (normalizedDataString !== dataPretty) { + const dataDiff = fakeDiff(normalizedDataString, dataPretty); return `Data file is formatted incorrectly:\n\n${dataDiff}`; } - } + }, }; // execute all tests and log all errors -const errors = Object.keys(TESTS) - .map(k => TESTS[k]()) - .filter(Boolean); +(async () => { + const dataString = await getIconsDataString(); + const data = JSON.parse(dataString); + + const errors = ( + await Promise.all( + Object.keys(TESTS).map((test) => TESTS[test](data, dataString)), + ) + ).filter(Boolean); -if (errors.length > 0) { - errors.forEach(error => console.error(`\u001b[31m${error}\u001b[0m`)); - process.exit(1); -} + if (errors.length > 0) { + errors.forEach((error) => console.error(`\u001b[31m${error}\u001b[0m`)); + process.exit(1); + } +})(); diff --git a/scripts/package.json b/scripts/package.json new file mode 100644 index 000000000000..3dbc1ca591c0 --- /dev/null +++ b/scripts/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/scripts/release/bump-version.js b/scripts/release/bump-version.js index 90c16cab2752..d19b7bb0eb5f 100644 --- a/scripts/release/bump-version.js +++ b/scripts/release/bump-version.js @@ -4,38 +4,37 @@ * Updates the version of this package to the CLI specified version. */ -const fs = require("fs"); -const path = require("path"); +import fs from 'node:fs'; +import path from 'node:path'; +import { getDirnameFromImportMeta } from '../utils.js'; -const rootDir = path.resolve(__dirname, "..", ".."); -const packageJsonFile = path.resolve(rootDir, "package.json"); -const packageLockFile = path.resolve(rootDir, "package-lock.json"); +const __dirname = getDirnameFromImportMeta(import.meta.url); -function readManifest(file) { - const manifestRaw = fs.readFileSync(file).toString(); +const rootDir = path.resolve(__dirname, '..', '..'); +const packageJsonFile = path.resolve(rootDir, 'package.json'); + +const readManifest = (file) => { + const manifestRaw = fs.readFileSync(file, 'utf-8'); const manifestJson = JSON.parse(manifestRaw); return manifestJson; -} +}; -function writeManifest(file, json) { - const manifestRaw = JSON.stringify(json, null, 2) + "\n"; +const writeManifest = (file, json) => { + const manifestRaw = JSON.stringify(json, null, 2) + '\n'; fs.writeFileSync(file, manifestRaw); -} +}; -function main(newVersion) { +const main = (newVersion) => { try { const manifest = readManifest(packageJsonFile); - const manifestLock = readManifest(packageLockFile); - manifest.version = newVersion - manifestLock.version = newVersion + manifest.version = newVersion; writeManifest(packageJsonFile, manifest); - writeManifest(packageLockFile, manifestLock); } catch (error) { console.error(`Failed to bump package version to ${newVersion}:`, error); process.exit(1); } -} +}; main(process.argv[2]); diff --git a/scripts/release/update-cdn-urls.js b/scripts/release/update-cdn-urls.js index adf967631e85..ed311a189dee 100644 --- a/scripts/release/update-cdn-urls.js +++ b/scripts/release/update-cdn-urls.js @@ -5,24 +5,27 @@ * NPM package manifest. Does nothing if the README.md is already up-to-date. */ -const fs = require("fs"); -const path = require("path"); +import fs from 'node:fs'; +import path from 'node:path'; +import { getDirnameFromImportMeta } from '../utils.js'; -const rootDir = path.resolve(__dirname, "..", ".."); -const packageJsonFile = path.resolve(rootDir, "package.json"); -const readmeFile = path.resolve(rootDir, "README.md"); +const __dirname = getDirnameFromImportMeta(import.meta.url); -function getMajorVersion(semVerVersion) { +const rootDir = path.resolve(__dirname, '..', '..'); +const packageJsonFile = path.resolve(rootDir, 'package.json'); +const readmeFile = path.resolve(rootDir, 'README.md'); + +const getMajorVersion = (semVerVersion) => { const majorVersionAsString = semVerVersion.split('.')[0]; return parseInt(majorVersionAsString); -} +}; -function getManifest() { - const manifestRaw = fs.readFileSync(packageJsonFile).toString(); +const getManifest = () => { + const manifestRaw = fs.readFileSync(packageJsonFile, 'utf-8'); return JSON.parse(manifestRaw); -} +}; -function updateVersionInReadmeIfNecessary(majorVersion) { +const updateVersionInReadmeIfNecessary = (majorVersion) => { let content = fs.readFileSync(readmeFile).toString(); content = content.replace( @@ -31,17 +34,17 @@ function updateVersionInReadmeIfNecessary(majorVersion) { ); fs.writeFileSync(readmeFile, content); -} +}; -function main() { +const main = () => { try { const manifest = getManifest(); const majorVersion = getMajorVersion(manifest.version); updateVersionInReadmeIfNecessary(majorVersion); } catch (error) { - console.error("Failed to update CDN version number:", error); + console.error('Failed to update CDN version number:', error); process.exit(1); } -} +}; main(); diff --git a/scripts/release/update-slugs-table.js b/scripts/release/update-slugs-table.js index 69657e8b2538..250c96d67837 100644 --- a/scripts/release/update-slugs-table.js +++ b/scripts/release/update-slugs-table.js @@ -4,15 +4,16 @@ * Generates a MarkDown file that lists every brand name and their slug. */ -const fs = require("fs"); -const path = require("path"); +import { promises as fs } from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { getIconsData, getIconSlug } from '../utils.js'; -const rootDir = path.resolve(__dirname, "..", ".."); -const dataFile = path.resolve(rootDir, "_data", "simple-icons.json"); -const slugsFile = path.resolve(rootDir, "slugs.md"); +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); -const data = require(dataFile); -const { getIconSlug } = require("../utils.js"); +const rootDir = path.resolve(__dirname, '..', '..'); +const slugsFile = path.resolve(rootDir, 'slugs.md'); let content = `