diff --git a/src/material-icons/.coderabbit.yaml b/src/material-icons/.coderabbit.yaml new file mode 100644 index 0000000..ef092f4 --- /dev/null +++ b/src/material-icons/.coderabbit.yaml @@ -0,0 +1,29 @@ +# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json +language: "en-US" +early_access: false +reviews: + profile: "chill" + request_changes_workflow: false + high_level_summary: false + poem: false + review_status: false + collapse_walkthrough: true + auto_review: + enabled: true + drafts: false + tools: + biome: + enabled: true + gitleaks: + enabled: true + path_instructions: + - path: "**/*.svg" + instructions: | + Ignore SVG files in the repository. There're already internal checks which ensure that SVG files are in a proper shape. + - path: "**/*.test.ts" + instructions: | + Review the following unit test code written using the Bun.js test library. Ensure that: + - The code adheres to best practices associated with Bun and Jest. + - Descriptive test names are used to clearly convey the intent of each test. +chat: + auto_reply: true diff --git a/src/material-icons/.devcontainer/devcontainer.json b/src/material-icons/.devcontainer/devcontainer.json new file mode 100644 index 0000000..666bddb --- /dev/null +++ b/src/material-icons/.devcontainer/devcontainer.json @@ -0,0 +1,33 @@ +{ + "name": "vscode-material-icon-theme", + + // Use Microsoft's Ubuntu Base image for the dev container + "image": "mcr.microsoft.com/devcontainers/base:ubuntu", + "features": { + "ghcr.io/michidk/devcontainers-features/bun:1": {} + }, + + "privileged": true, + + "onCreateCommand": { + // Install dependencies in the dev container + "install-bun-packages": "bun install" + }, + + "customizations": { + "vscode": { + "settings": { + // Define suggested settings for the dev container + "resmon.show.battery": false, + "resmon.show.cpufreq": false + }, + "extensions": [ + "biomejs.biome", + "jock.svg", + "EditorConfig.EditorConfig", + "oven.bun-vscode", + "DavidAnson.vscode-markdownlint" + ] + } + } +} diff --git a/src/material-icons/.editorconfig b/src/material-icons/.editorconfig new file mode 100644 index 0000000..5a85bb7 --- /dev/null +++ b/src/material-icons/.editorconfig @@ -0,0 +1,12 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_size = 2 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true + +[*.svg] +insert_final_newline = false diff --git a/src/material-icons/.gitattributes b/src/material-icons/.gitattributes new file mode 100644 index 0000000..59f21f9 --- /dev/null +++ b/src/material-icons/.gitattributes @@ -0,0 +1,6 @@ +# Normalize EOL for all files that Git considers text files +* text=auto eol=lf + +# Explicit binary files for older Git versions (<2.10) +*.png binary +*.gif binary diff --git a/src/material-icons/.github/FUNDING.yml b/src/material-icons/.github/FUNDING.yml new file mode 100644 index 0000000..d7a91db --- /dev/null +++ b/src/material-icons/.github/FUNDING.yml @@ -0,0 +1,4 @@ +# These are supported funding model platforms +github: [pkief] +buy_me_a_coffee: pkief +custom: ['https://paypal.me/philippkief'] diff --git a/src/material-icons/.github/ISSUE_TEMPLATE/1-icon-request.yml b/src/material-icons/.github/ISSUE_TEMPLATE/1-icon-request.yml new file mode 100644 index 0000000..c5a1ba6 --- /dev/null +++ b/src/material-icons/.github/ISSUE_TEMPLATE/1-icon-request.yml @@ -0,0 +1,63 @@ +name: ๐Ÿž๏ธ Icon Request +description: Ask for specific icons to be added +title: "[Icon Request]: " +labels: ["icon-request"] + +body: + - type: checkboxes + id: icon-type + attributes: + label: Icon Type + options: + - label: Folder + - label: File + required: true + + - type: textarea + id: folder-names + attributes: + label: Folder names + placeholder: | + - folder-name + - another-folder-name + - ... + validations: + required: false + + - type: textarea + id: file-names + attributes: + label: File names + placeholder: | + - file-name + - another-file-name + - ... + validations: + required: false + + - type: textarea + id: graphic-ideas + attributes: + label: Graphic ideas + description: A clear description of the icon you would like. If the icons are separate for folder and files, please create separate issues. + placeholder: Include a link to sample icons if possible + validations: + required: false + + - type: textarea + id: additional-context + attributes: + label: Additional context + description: Add any other context about the icons here. + placeholder: I consider these icons necessary because ... + validations: + required: false + + - type: checkboxes + id: terms + attributes: + label: Code of Conduct + description: By submitting this issue, you agree to follow our [Code of Conduct](../../CODE_OF_CONDUCT.md). + options: + - label: I agree to follow this project's **Code of Conduct** + required: true diff --git a/src/material-icons/.github/ISSUE_TEMPLATE/2-bug-report.yml b/src/material-icons/.github/ISSUE_TEMPLATE/2-bug-report.yml new file mode 100644 index 0000000..43e43e3 --- /dev/null +++ b/src/material-icons/.github/ISSUE_TEMPLATE/2-bug-report.yml @@ -0,0 +1,78 @@ +name: ๐Ÿ› Bug Report +description: Create a report to help us improve +title: "[Bug]: " +labels: ["bug"] + +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out this bug report! + + - type: textarea + id: description + attributes: + label: Describe the bug + description: Describe the bug clearly + validations: + required: true + + - type: textarea + id: reproduce + attributes: + label: To Reproduce + description: Steps to reproduce the behavior + placeholder: | + 1. Go to '...' + 2. Click on '....' + 3. Scroll down to '....' + 4. See error + validations: + required: true + + - type: textarea + id: expected + attributes: + label: Expected behavior + description: A clear and concise description of what you expected to happen + validations: + required: true + + - type: textarea + id: screenshots + attributes: + label: Screenshots + description: If applicable, add screenshots to help explain your problem + validations: + required: false + + - type: textarea + id: computer-info + attributes: + label: Computer information + description: | + Examples: + - **OS edition**: [e.g. Windows 11 Home] + - **Extension version**: [e.g. 5.6.0] + - **VSCode version**: [e.g. 1.91.1] + value: | + - **OS edition**: + - **Extension version**: + - **VSCode version**: + + - type: textarea + id: additional-context + attributes: + label: Additional context + description: Add any other context about the problem here. + validations: + required: false + + - type: checkboxes + id: terms + attributes: + label: Code of Conduct + description: By submitting this issue, you agree to follow our [Code of Conduct](../../CODE_OF_CONDUCT.md). + options: + - label: I agree to follow this project's **Code of Conduct** + required: true diff --git a/src/material-icons/.github/dependabot.yml b/src/material-icons/.github/dependabot.yml new file mode 100644 index 0000000..2a769f7 --- /dev/null +++ b/src/material-icons/.github/dependabot.yml @@ -0,0 +1,18 @@ +--- +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file + +version: 2 +updates: + - package-ecosystem: 'github-actions' # See documentation for possible values + directory: '/' # Location of package manifests + schedule: + interval: 'weekly' + assignees: + - 'PKief' + groups: + github-actions: + patterns: + - 'actions/*' diff --git a/src/material-icons/.github/labeler.yml b/src/material-icons/.github/labeler.yml new file mode 100644 index 0000000..0ac4e88 --- /dev/null +++ b/src/material-icons/.github/labeler.yml @@ -0,0 +1,24 @@ +# Add 'icons' label to any file changes within 'icons' folder or 'src/core/icons' typescript files +icons: +- changed-files: + - any-glob-to-any-file: ['icons/*', 'src/core/icons/*.ts'] + +# Add 'translations' label to any changes within 'package.nls*.json' files or 'src/core/i18n' folder +translations: +- changed-files: + - any-glob-to-any-file: ['package.nls*.json', 'src/core/i18n'] + +# Add 'docs' label to any changes to markdown files +docs: +- changed-files: + - any-glob-to-any-file: '*.md' + +# Add 'workflows' label to any changes within '.github/workflows' folder or '.github/labeler.yml' file +workflows: +- changed-files: + - any-glob-to-any-file: ['.github/workflows/*', '.github/labeler.yml'] + +# Add 'devcontainers' label to any changes within '.devcontainer' folder +devcontainers: +- changed-files: + - any-glob-to-any-file: '.devcontainer/*' diff --git a/src/material-icons/.github/pull_request_template.md b/src/material-icons/.github/pull_request_template.md new file mode 100644 index 0000000..eed5fae --- /dev/null +++ b/src/material-icons/.github/pull_request_template.md @@ -0,0 +1,8 @@ +# Description + + + +## Contribution Guidelines + +- [ ] By creating this pull request, I acknowledge that I have read the [Contribution Guidelines](https://github.com/material-extensions/vscode-material-icon-theme/blob/main/CONTRIBUTING.md) for this project. +- [ ] I have read the [Code Of Conduct](https://github.com/material-extensions/vscode-material-icon-theme/blob/main/CODE_OF_CONDUCT.md) and promise to abide by these rules diff --git a/src/material-icons/.github/workflows/build.yml b/src/material-icons/.github/workflows/build.yml new file mode 100644 index 0000000..ef423b3 --- /dev/null +++ b/src/material-icons/.github/workflows/build.yml @@ -0,0 +1,33 @@ +name: Build + Test + +on: + push: + pull_request: + +permissions: + contents: read + +jobs: + build: + runs-on: [ubuntu-latest] + + name: Build Material Icon Theme + + steps: + - name: Checkout ๐Ÿ›Ž๏ธ + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + with: + persist-credentials: false + + - name: Setup Platform ๐Ÿ› ๏ธ + uses: oven-sh/setup-bun@4bc047ad259df6fc24a6c9b0f9a0cb08cf17fbe5 # v2 + with: + bun-version: 1.1.18 + + - name: Install dependencies ๐Ÿ“ฆ + run: bun install --frozen-lockfile + + - name: Test + Build ๐Ÿš€ + run: | + bun test + bun run vscode:prepublish diff --git a/src/material-icons/.github/workflows/color-check.yml b/src/material-icons/.github/workflows/color-check.yml new file mode 100644 index 0000000..0377502 --- /dev/null +++ b/src/material-icons/.github/workflows/color-check.yml @@ -0,0 +1,28 @@ +name: Check SVG icon colors + +on: + pull_request: + paths: + - 'icons/*.svg' + +permissions: + contents: read + +jobs: + color-check: + name: SVG Color Check + runs-on: ubuntu-latest + env: + TARGET_BRANCH: ${{ github.event.pull_request.base.ref }} + + steps: + - name: Checkout ๐Ÿ›Ž๏ธ + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + with: + fetch-depth: 0 + persist-credentials: false + + - name: Check colors ๐ŸŽจ + run: | + svgFiles=$(git diff origin/${{ env.TARGET_BRANCH }} --diff-filter=ACMRTUX --name-only | grep '.svg$') + npx svg-color-linter --colors material-colors.yml ${svgFiles} diff --git a/src/material-icons/.github/workflows/icon-review.yml b/src/material-icons/.github/workflows/icon-review.yml new file mode 100644 index 0000000..561b6b8 --- /dev/null +++ b/src/material-icons/.github/workflows/icon-review.yml @@ -0,0 +1,109 @@ +name: Icon Review + +on: + pull_request_target: + paths: + - 'icons/*.svg' + +permissions: + contents: read + +jobs: + icon-review: + name: Icon Review + runs-on: ubuntu-latest + env: + TARGET_BRANCH: ${{ github.event.pull_request.base.ref }} + + permissions: + pull-requests: write + + steps: + - name: Setup Platform ๐Ÿ› ๏ธ + uses: oven-sh/setup-bun@4bc047ad259df6fc24a6c9b0f9a0cb08cf17fbe5 # v2 + with: + bun-version: 1.1.20 + + - name: Checkout Fork ๐Ÿ›Ž๏ธ + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + with: + ref: ${{ github.event.pull_request.head.ref }} + repository: ${{ github.event.pull_request.head.repo.full_name }} + fetch-depth: 0 + path: fork + persist-credentials: false + + - name: Checkout Original ๐Ÿ›Ž๏ธ + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + with: + fetch-depth: 0 + path: main + persist-credentials: false + + - name: Review SVG files ๐Ÿ” + working-directory: main + run: | + files=$(git diff --no-index ../main ../fork --diff-filter=ACMRTUX --name-only | grep '^\.\./fork/icons/.*\.svg$') + filesCount=$(echo "$files" | wc -l) + bunx --bun svg-icon-review@2.1.0 --bigIcon ${files} + echo svg_files_count=$filesCount >> $GITHUB_ENV + + - name: Upload PNG โฌ†๏ธ + env: + IMAGE_UPLOAD: ${{ secrets.IMAGE_UPLOAD }} + id: upload + run: | + IMAGE_URL=$(curl --location 'https://freeimage.host/json' --form 'source=@"./main/preview.png"' --form 'type="file"' --form 'action="upload"' --form 'auth_token="${{env.IMAGE_UPLOAD}}"' | jq -r '.image.url') + echo image_url=$IMAGE_URL >> $GITHUB_ENV + + - name: Generate text ๐Ÿ“ƒ + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + script: | + const iconsCount = parseInt("${{ env.svg_files_count }}"); + const imageURL = "${{ env.image_url }}"; + const image = `Generated preview`; + const pluralS = iconsCount > 1 ? "s" : ""; + + let preview = ""; + + if (iconsCount > 10) { + preview = `
๐Ÿž๏ธ Generated preview
${image}
`; + } else { + preview = image; + } + + const comment = ` + + ## Preview + + Thank you for creating a pull request. This preview shows you how your icon${pluralS} will look on the different themes: + + ${preview} + + Check how your icon${pluralS} fit${!pluralS ? 's' : ''} in a 16x16 grid with our **Pixel Perfect Checker** by following [this link](https://pixp.lucode.ar/material-extensions/vscode-material-icon-theme/pull/${{ github.event.pull_request.number }}). + + You can find more information on how to contribute in the [contribution guidelines](https://github.com/material-extensions/vscode-material-icon-theme/blob/main/CONTRIBUTING.md). + `; + + // Write comment to environment variable + core.exportVariable('comment', comment); + + - name: Find comment if exists ๐Ÿ•ต๏ธ + uses: peter-evans/find-comment@3eae4d37986fb5a8592848f6a574fdf654e61f9e # v3.1.0 + id: fc + with: + issue-number: ${{ github.event.pull_request.number }} + comment-author: 'github-actions[bot]' + body-includes: + + - name: Post or update comment in PR โœ๏ธ + uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4.0.0 + with: + comment-id: ${{ steps.fc.outputs.comment-id }} + issue-number: ${{ github.event.pull_request.number }} + body: | + ${{ env.comment }} + edit-mode: replace diff --git a/src/material-icons/.github/workflows/label.yml b/src/material-icons/.github/workflows/label.yml new file mode 100644 index 0000000..4dbe828 --- /dev/null +++ b/src/material-icons/.github/workflows/label.yml @@ -0,0 +1,18 @@ +# This workflow will triage pull requests and apply a label based on the +# paths that are modified in the pull request. + +name: Labeler +on: [pull_request_target] + +jobs: + label: + + runs-on: ubuntu-latest + permissions: + contents: read + pull-requests: write + + steps: + - uses: actions/labeler@8558fd74291d67161a8a78ce36a881fa63b766a9 # v5.0.0 + with: + repo-token: "${{ secrets.GITHUB_TOKEN }}" diff --git a/src/material-icons/.github/workflows/pr-closed.yml b/src/material-icons/.github/workflows/pr-closed.yml new file mode 100644 index 0000000..5347e80 --- /dev/null +++ b/src/material-icons/.github/workflows/pr-closed.yml @@ -0,0 +1,33 @@ +name: PR closed + +on: + pull_request_target: + types: + - closed + +permissions: + contents: read + +jobs: + thank_you: + runs-on: ubuntu-latest + if: github.event.pull_request.merged == true + + permissions: + pull-requests: write + + steps: + - name: Post Thank You Comment ๐Ÿ™ + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + with: + script: | + github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: `## Merge Successful + + Thanks for your contribution! ๐ŸŽ‰ + + The changes will be part of the upcoming update on the Marketplace.` + }) diff --git a/src/material-icons/.github/workflows/release.yml b/src/material-icons/.github/workflows/release.yml new file mode 100644 index 0000000..a90fabb --- /dev/null +++ b/src/material-icons/.github/workflows/release.yml @@ -0,0 +1,106 @@ +name: Release + Publish + +on: + workflow_dispatch: + inputs: + versionChange: + type: choice + description: Select the version change + required: true + default: 'minor' + options: + - major + - minor + - patch + +permissions: + id-token: write + contents: read + +jobs: + release: + runs-on: ubuntu-latest + env: + VERSION_CHANGE: ${{ github.event.inputs.versionChange }} + + permissions: + contents: write + id-token: write + attestations: write + + steps: + - uses: actions/create-github-app-token@31c86eb3b33c9b601a1f60f98dcbfd1d70f379b4 # v1.10.3 + id: app-token + with: + app-id: ${{ vars.BOT_APP_ID }} + private-key: ${{ secrets.BOT_PRIVATE_KEY }} + + - name: Checkout ๐Ÿ›Ž๏ธ + uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + with: + fetch-depth: 0 + token: ${{ steps.app-token.outputs.token }} + + - name: Setup Platform ๐Ÿ› ๏ธ + uses: oven-sh/setup-bun@4bc047ad259df6fc24a6c9b0f9a0cb08cf17fbe5 # v2 + with: + bun-version: 1.1.18 + + - name: Install dependencies ๐Ÿ“ฆ + run: | + bun install --frozen-lockfile + bun add -g npm + + - name: Update version โ†— + run: | + git config --global user.name 'Philipp Kief' + git config --global user.email 'PKief@users.noreply.github.com' + git config --global push.followTags true + npm version ${{ env.VERSION_CHANGE }} -m "Release %s" + + - name: Get metadata ๐Ÿ” + run: | + VERSION=$(bun --print "(await import('./package.json')).version") + NAME=$(bun --print "(await import('./package.json')).name") + DISPLAY_NAME=$(bun --print "(await import('./package.json')).displayName") + echo VERSION=$VERSION >> $GITHUB_ENV + echo NAME=$NAME >> $GITHUB_ENV + echo DISPLAY_NAME=$DISPLAY_NAME >> $GITHUB_ENV + + - name: Build โš’๏ธ + run: bunx @vscode/vsce package + + - name: Attest artifacts โœ… + uses: actions/attest-build-provenance@6149ea5740be74af77f260b9db67e633f6b0a9a1 # v1.4.2 + # Read: https://docs.github.com/en/actions/security-guides/using-artifact-attestations-to-establish-provenance-for-builds + with: + subject-path: '${{ env.NAME }}-${{ env.VERSION }}.vsix' + + - name: Push tags ๐Ÿ“Œ + run: git push + + - name: Release ${{ env.VERSION }} ๐Ÿ”† + uses: softprops/action-gh-release@c062e08bd532815e2082a85e87e3ef29c3e6d191 # v2.0.8 + with: + files: ${{ env.NAME }}-${{ env.VERSION }}.vsix + tag_name: v${{ env.VERSION }} + name: ${{ env.DISPLAY_NAME }} v${{ env.VERSION }} + generate_release_notes: true + + - name: Publish to Open VSX Registry ๐ŸŒ + uses: HaaLeo/publish-vscode-extension@28e2d3f5817fccf23c1f219eb0cecc903132d1a2 # v1.6.2 + with: + pat: ${{ secrets.OPEN_VSX_TOKEN }} + extensionFile: ${{ env.NAME }}-${{ env.VERSION }}.vsix + + - name: Publish to Visual Studio Marketplace ๐ŸŒ + uses: HaaLeo/publish-vscode-extension@28e2d3f5817fccf23c1f219eb0cecc903132d1a2 # v1.6.2 + with: + pat: ${{ secrets.VS_MARKETPLACE_TOKEN }} + registryUrl: https://marketplace.visualstudio.com + extensionFile: ${{ env.NAME }}-${{ env.VERSION }}.vsix + + - name: Publish to NPM Registry ๐ŸŒ + run: | + npm set "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" + npm publish --provenance --access public diff --git a/src/material-icons/.gitignore b/src/material-icons/.gitignore new file mode 100644 index 0000000..1a47c83 --- /dev/null +++ b/src/material-icons/.gitignore @@ -0,0 +1,18 @@ +out +dist + +node_modules + +.vscode-test/** +*.vsix + +icons/file.svg +icons/folder.svg +icons/folder-open.svg +icons/folder-root.svg +icons/folder-root-open.svg +icons/*.clone.svg +icons/clones + +src/scripts/preview/*.html +src/scripts/contributors/*.html diff --git a/src/material-icons/.npmignore b/src/material-icons/.npmignore new file mode 100644 index 0000000..ced09c1 --- /dev/null +++ b/src/material-icons/.npmignore @@ -0,0 +1,5 @@ +* +!icons/* +!dist/types/**/* +!dist/material-icons.json +!dist/module/index.cjs diff --git a/src/material-icons/.vscode/extensions.json b/src/material-icons/.vscode/extensions.json new file mode 100644 index 0000000..192fa55 --- /dev/null +++ b/src/material-icons/.vscode/extensions.json @@ -0,0 +1,9 @@ +{ + "recommendations": [ + "biomejs.biome", + "jock.svg", + "editorconfig.editorconfig", + "oven.bun-vscode", + "davidanson.vscode-markdownlint" + ] +} diff --git a/src/material-icons/.vscode/launch.json b/src/material-icons/.vscode/launch.json new file mode 100644 index 0000000..3f8a8b1 --- /dev/null +++ b/src/material-icons/.vscode/launch.json @@ -0,0 +1,29 @@ +// A launch configuration that compiles the extension and then opens it inside a new window +// Use IntelliSense to learn about possible attributes. +// Hover to view descriptions of existing attributes. +// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Run Extension", + "type": "extensionHost", + "request": "launch", + "args": ["--extensionDevelopmentPath=${workspaceFolder}"], + "outFiles": ["${workspaceFolder}/dist/**/*.cjs"], + "preLaunchTask": "${defaultBuildTask}" + }, + { + "name": "Run Web Extension in VS Code", + "type": "pwa-extensionHost", + "debugWebWorkerHost": true, + "request": "launch", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}", + "--extensionDevelopmentKind=web" + ], + "outFiles": ["${workspaceFolder}/dist/web/**/*.cjs"], + "preLaunchTask": "${defaultBuildTask}" + } + ] +} diff --git a/src/material-icons/.vscode/settings.json b/src/material-icons/.vscode/settings.json new file mode 100644 index 0000000..7cfbcc3 --- /dev/null +++ b/src/material-icons/.vscode/settings.json @@ -0,0 +1,16 @@ +{ + "files.exclude": { + "out": false + }, + "search.exclude": { + "out": true + }, + "[typescript]": { + "editor.codeActionsOnSave": { + "quickfix.biome": "explicit", + "source.organizeImports.biome": "explicit" + } + }, + "editor.defaultFormatter": "biomejs.biome", + "editor.formatOnSave": true +} diff --git a/src/material-icons/.vscode/tasks.json b/src/material-icons/.vscode/tasks.json new file mode 100644 index 0000000..14ab131 --- /dev/null +++ b/src/material-icons/.vscode/tasks.json @@ -0,0 +1,16 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "type": "bun", + "script": "bun run build", + "problemMatcher": [], + "label": "bun: build", + "detail": "bun run build", + "group": { + "kind": "build", + "isDefault": true + } + } + ] +} diff --git a/src/material-icons/.vscodeignore b/src/material-icons/.vscodeignore new file mode 100644 index 0000000..e27de63 --- /dev/null +++ b/src/material-icons/.vscodeignore @@ -0,0 +1,19 @@ +# Files to include in the extension package +# Documentation for this format: +# https://code.visualstudio.com/api/working-with-extensions/publishing-extension#using-.vscodeignore +!CHANGELOG.md +!LICENSE.md +!README.md +!logo.png + +!package.json +!package.nls.json +!package.nls.*.json + +!dist/extension +!dist/material-icons.json + +!icons + +# Exclude everything else +**/* diff --git a/src/material-icons/CHANGELOG.md b/src/material-icons/CHANGELOG.md new file mode 100644 index 0000000..1095fb5 --- /dev/null +++ b/src/material-icons/CHANGELOG.md @@ -0,0 +1,1749 @@ +### Changelog + + All notable changes to this project will be documented in this file. Dates are displayed in UTC. + + +#### [v5.10.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v5.9.0...v5.10.0) + +> August 29, 2024 + +- feat: โœจ github actions workflow file icon [`#2559`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2559) +- duc Binary file format [`#2212`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2212) +- Add icon association for UNLICENSE files [`#2556`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2556) +- build(deps): bump actions/attest-build-provenance [`#2554`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2554) +- Update marketplace message capitalization [`#2553`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2553) +- Added coderabbit icon [`#2549`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2549) +- chore: Improve branch protection [`7112da93`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7112da93) +- Added `gemini-ai` icon [`#2548`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2548) +- feat: โœจ gitea folder icon [`#2552`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2552) +- Changed issue templates order [`#2546`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2546) +- Add remote(s) folder icon association [`4a3c324f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/4a3c324f) +- Added emojis in issue template names [`#2532`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2532) +- Collapse the walkthrough of coderabbit [`c61a8d1e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c61a8d1e) +- Fixed pr template links [`#2531`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2531) +- Add config for coderabbit [`baf6202f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/baf6202f) +- Remove unused dependencies [`b167604c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b167604c) + +#### [v5.9.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v5.8.0...v5.9.0) + +> August 10, 2024 + +- Update release workflow [`1959aa1f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/1959aa1f) +- Include 'devtools' in the folder-icon for 'tools' [`#2528`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2528) +- Add VHDL file icon association [`#2522`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2522) +- Add cds icon [`#2520`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2520) +- Added folder-icon for snippet, snippets [`#2510`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2510) +- Add store folder icon [`#2518`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2518) +- feat: โœจ rocket/release icon [`#2519`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2519) +- Feat: Drizzle ORM [`#2127`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2127) +- Show nuxt folder icon without pack [`1c8513c9`](https://github.com/material-extensions/vscode-material-icon-theme/commit/1c8513c9) +- build(deps): bump actions/attest in the github-actions group [`#2517`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2517) +- Added folder-icon for flutter [`#2511`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2511) +- Made pixel-perfect (almost) icons [`#2449`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2449) +- Added artifact attestation [`#2486`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2486) +- Added folder-icon about development. [`#2501`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2501) +- Add Phorm AI badge [`#2508`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2508) +- docs: ๐Ÿ“ fix broken links [`#2507`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2507) +- Fix URL in CONTRIBUTING.md [`#2505`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2505) +- Add 'distribution' to folder-dist [`#2500`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2500) +- Added `jsr` icon [`#2493`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2493) +- Improve icon review workflow [`#2499`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2499) +- Improved hint comments [`#2496`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2496) +- Add conditionally active custom clones [`#2498`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2498) +- Add license field to package.json [`#2495`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2495) +- ci: ๐Ÿท๏ธ Add labels for PRs automatically [`#2490`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2490) +- feat: โœจ new rust icon [`#2489`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2489) +- Improve icon preview workflow [`#2485`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2485) +- Add inc64 folder icon [`#2484`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2484) +- Added clangd icon [`#2414`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2414) +- Reduced the size of the extension [`#2476`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2476) +- Added `devcontainer-lock.json` file icon [`#2478`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2478) +- Added `ipynb` folder icon [`#2479`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2479) +- Added `slint` icon [`#2480`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2480) +- fix: ๐Ÿš‘ review comment not being updated [`#2481`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2481) +- Improved text in icon-review [`#2467`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2467) +- Optimized `.vscodeignore` [`#2475`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2475) +- Add angular interceptor icon [`#2474`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2474) +- Add lib64 folder icon [`#2473`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2473) +- feat: add Just icon [`#1950`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1950) + +#### [v5.8.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v5.7.0...v5.8.0) + +> July 24, 2024 + +- feat: add remark support [`#2245`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2245) +- Add tape icon [`#2469`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2469) +- Added `hurl` icon [`#2465`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2465) +- Improve core functionality (Logging, Config comparison, Code Quality) [`#2464`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2464) +- Added alias for `.nuxtrc` [`#2466`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2466) +- Updated `svg-icon-review` version (1.1.0 -> 2.1.0) [`#2459`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2459) +- feat: adding icons to new configuration and envs files [`#2057`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2057) + +#### [v5.7.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v5.6.0...v5.7.0) + +> July 22, 2024 + +- Added markdownlint icon [`#2415`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2415) +- Use issue forms [`#2445`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2445) +- Added `ะฆั–ะปัŒ` icon [`#2424`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2424) +- Added snap folder icon [`#2439`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2439) +- Add liara cloud icon [`#2409`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2409) +- Added deepsource icon [`#2413`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2413) +- Added separate Buy Me a Coffee link in `FUNDING.yml` [`#2458`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2458) +- Added aliases for codecov icon [`#2440`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2440) +- Changed icon for `devcontainer.json` [`#2448`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2448) +- Added icon for `xlf` files [`#2455`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2455) +- Added `win32` folder icon [`#2456`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2456) +- build(deps): bump softprops/action-gh-release from 2.0.6 to 2.0.8 [`#2453`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2453) +- build(deps): bump oven-sh/setup-bun [`#2452`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2452) +- Moved PR template [`#2438`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2438) +- Allign with new requirements of vscode-vsce v2.31.0 [`b5552f41`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b5552f41) +- feat: mist file icon [`#2435`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2435) +- Provide option to analyse bundle size [`6186d685`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6186d685) +- Improve stability of code [`58c90cf0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/58c90cf0) + +#### [v5.6.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v5.5.1...v5.6.0) + +> July 16, 2024 + +- feat: โœจ update turbo repo file icon + .turbo folder icon [`#2425`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2425) +- Revert esbuild config (Related to #2428) [`c66fa64d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c66fa64d) +- feat: velite [`#2406`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2406) + +#### [v5.5.1](https://github.com/material-extensions/vscode-material-icon-theme/compare/v5.5.0...v5.5.1) + +> July 15, 2024 + +- Remove lodash as dependency [`#2422`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2422) +- Update tsconfig [`412da52e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/412da52e) + +#### [v5.5.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v5.4.2...v5.5.0) + +> July 15, 2024 + +- Expose generateManifest as reusable function [`#2411`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2411) +- Added osx folder icon [`#2418`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2418) +- ci(preview): ๐Ÿ”„ add link to check pixel perfectness [`#2405`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2405) +- Include `.cts` and `.mts` in `esbuild` icon configuration [`#2404`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2404) +- feat: update astro file icon and add astro folder icon [`#2228`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2228) +- Fixed all .md files to conform to markdownlint rules [`#2398`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2398) +- Added markdownlint to list of reccomended extensions [`#2400`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2400) +- Added cairo icon [`#2393`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2393) +- Exclude files from vscode extension bundle [`a3f42ed7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a3f42ed7) +- A new item has been added to the checklist in the PR template [`#2395`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2395) +- Remove jq as it's already part of the runner [`#2386`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2386) +- Improved preview text [`#2397`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2397) +- Added dockerhub folder [`#2399`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2399) +- Fixed color checking [`#2392`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2392) +- Added grafana alloy icon [`#2391`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2391) +- Cleaned icons [`#2383`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2383) +- Added labels for issues [`#2394`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2394) +- Replace generated image previews instead of creating new ones [`#2386`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2386) +- Add Helm folder icon [`#1181`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1181) +- Update workflow files [`b1ad1d28`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b1ad1d28) +- Add folder icons for Jupyter [`#2368`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2368) +- ci: ๐Ÿ”„ persist credentials in release action [`#2385`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2385) +- feat: update sentry files [`#2303`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2303) +- Remove plain black and white from allowed colors [`9b7100ed`](https://github.com/material-extensions/vscode-material-icon-theme/commit/9b7100ed) +- Update build directory [`4d71701d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/4d71701d) +- ui folder icon [`#2382`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2382) +- Added icon for kcl lang [`#2342`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2342) +- Added icon for `*.sigstore.json` files [`#2341`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2341) +- Add Bicep folder icons [`#2367`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2367) +- Update devcontainer settings [`175ad6f7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/175ad6f7) +- build(deps): bump oven-sh/setup-bun from 1.2.2 to 2 [`#2373`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2373) +- build(deps): bump softprops/action-gh-release from 2.0.5 to 2.0.6 [`#2374`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2374) +- Update CONTRIBUTING.md [`#2372`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2372) +- Transfer repository to organization [`1aaaaaf4`](https://github.com/material-extensions/vscode-material-icon-theme/commit/1aaaaaf4) +- Support for Prisma 5.15 multi-file schema (Closes #2354) [`de76f5a8`](https://github.com/material-extensions/vscode-material-icon-theme/commit/de76f5a8) +- Update biome js [`fa79975d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/fa79975d) +- add amplify logo (Closes #893) [`#1084`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1084) +- Update task json to improve debugging [`b860c846`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b860c846) +- chore: provenance [`#2365`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2365) + +#### [v5.4.2](https://github.com/material-extensions/vscode-material-icon-theme/compare/v5.4.1...v5.4.2) + +> June 13, 2024 + +- Update action workflows [`314aba7b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/314aba7b) +- fix: remove log information from console (Fixes #2362) [`0c4c0821`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0c4c0821) + +#### [v5.4.1](https://github.com/material-extensions/vscode-material-icon-theme/compare/v5.4.0...v5.4.1) + +> June 13, 2024 + +- Fix #2360 Issue with translation loader [`f11d3e51`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f11d3e51) + +#### [v5.4.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v5.3.0...v5.4.0) + +> June 12, 2024 + +- feat: improve build performance [`#2359`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2359) +- fix: dead README.md link [`#2355`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2355) +- Clone Advpl icon files [`#2353`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2353) +- feat: Migrate from `prettier`/`eslint` to `biome` [`#2349`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2349) +- feat: Added `screwdriver` icon [`#2328`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2328) +- Add harmonix icon [`#2348`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2348) +- Add bruno icon [`#2345`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2345) +- feat: update patterns support [`d8bdd337`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d8bdd337) +- Added icon for `py.typed` file [`#2343`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2343) +- fix: `pull_request_template.md` [`#2339`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2339) +- feat: โš™๏ธ Refactor pattern code structure [`#2326`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2326) +- Added icon for `devcontainer.json` [`#2332`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2332) +- Added icons for `.github/*_TEMPLATE` folders [`#2333`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2333) +- Added new filenames for `key` icon [`#2334`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2334) +- Added snapcraft icon [`#2318`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2318) +- Added `CODE_OF_CONDUCT.md` [`#2327`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2327) +- feat: update recommended extensions for development [`8af9bcdb`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8af9bcdb) + +#### [v5.3.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v5.2.0...v5.3.0) + +> May 13, 2024 + +- feat: select default version change value [`190092bf`](https://github.com/material-extensions/vscode-material-icon-theme/commit/190092bf) +- feat: โœจ .github/workflows folder icon [`#2324`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2324) +- fix: ๐Ÿš‘ interop between cloned icons and user associations [`#2323`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2323) +- feat: Rename custom attribute (use data prefix) [`#2322`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2322) +- Added `devcontainer.json` [`#2319`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2319) +- feat: update link in readme [`de998a76`](https://github.com/material-extensions/vscode-material-icon-theme/commit/de998a76) + +#### [v5.2.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v5.1.0...v5.2.0) + +> May 9, 2024 + +- Feat/update angular and nest icons [`#2314`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2314) +- feat: support biome.jsonc [`#2316`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2316) +- Modernize svgo config [`#2301`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2301) +- feat: โœจ clone and recolorize icons [`#2305`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2305) +- feat(i18n): Add missing japanese translate [`#2313`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2313) +- Add seeders folder icons [`#2298`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2298) +- Pseudo-wildcard support for folder icons [`#2292`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2292) +- Update CONTRIBUTING.md [`834e5aed`](https://github.com/material-extensions/vscode-material-icon-theme/commit/834e5aed) +- feat: โœจ c-family icons improvements [`#2299`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2299) +- feat: slnx file extension [`#2302`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2302) +- feat(filenames): add patterns support [`#2289`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2289) +- Add some missed attribute options [`#2300`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2300) +- Add aliases for platform folders [`#2288`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2288) +- feat: Add `.editorconfig` and `.gitattributes` [`#2290`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2290) + +#### [v5.1.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v5.0.0...v5.1.0) + +> April 20, 2024 + +- fix: ๐Ÿš‘ golang icon [`#2287`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2287) +- feat: add all syncpack cosmiconfig config [`#2282`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2282) +- feat: knip [`#2280`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2280) +- Updated ES translation [`#2286`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2286) + +#### [v5.0.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.34.0...v5.0.0) + +> April 18, 2024 + +- fix: update version [`0ae248de`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0ae248de) +- feat: add backend/backends folder icon (Closes #2276) [`c7fd9c9c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c7fd9c9c) +- feat: update typescript and javascript icons [`d10e0d14`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d10e0d14) +- feat: add `.cjs` extension support for `gruntfile` [`#2271`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2271) +- feat: update color of JSON icon [`d8d90fd6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d8d90fd6) +- Add Quokka icon and file-extension default config [`#2152`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2152) +- Add `mjs` to `postcss.config.*` [`#2269`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2269) +- feat: update icons [`75bdd37d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/75bdd37d) +- feat: update file icons for grid alignment [`a8095d5f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a8095d5f) +- feat: add capnp [`#2224`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2224) +- Update icon-review.yml [`5fa74251`](https://github.com/material-extensions/vscode-material-icon-theme/commit/5fa74251) +- feat: add lighthouserc .cjs extension support [`#2256`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2256) +- feat: add translation for Korean [`#2234`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2234) +- build(deps-dev): bump follow-redirects from 1.15.4 to 1.15.6 [`#2254`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2254) +- chore: add `svg-color-linter` to check-colors before requesting merge [`#2237`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2237) +- Remove duplicated language id definitions [`ff4bb608`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ff4bb608) +- Move objective c and cpp to language associations [`#2249`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2249) +- feat: enhance eslint flat config support [`#2247`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2247) +- feat: add commitlint .mjs extension support [`#2241`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2241) +- Add Controller, Television, and Desktop folder icons [`#2218`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2218) +- feat: add postcss .mjs extension support [`#2239`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2239) +- Support Bun's bunfig.toml file [`#2238`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2238) +- Cloudflare folder icon [`#2235`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2235) +- Add zon file extension to zig icon [`ca53a641`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ca53a641) +- Feature/openapi file extensions [`#2229`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2229) +- Pixel perfect icons at 16px [`#2226`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2226) + +#### [v4.34.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.33.0...v4.34.0) + +> February 19, 2024 + +- feat: add syncpack icon [`#1968`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1968) +- feat: payload cms [`#2222`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2222) +- feat: add `tsconfig.server.json` to file names [`#2223`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2223) +- Added swagger icon [`#1718`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1718) +- Add PKL icon [`#2217`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2217) +- feat: added vitest workspace file [`#2207`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2207) +- feat: add icons for PDM [`#2195`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2195) +- Replace AsciiDoc icon with the official one [`#2199`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2199) +- feat: add dynamic library (dll) icon [`#2198`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2198) +- add photo (and variants) to folderIcons.ts [`#2200`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2200) +- Update Biome logo [`#2188`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2188) +- Add .stylelintrc.mjs [`#2192`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2192) +- feat: add Huff icon [`#2190`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2190) +- build(deps-dev): bump follow-redirects from 1.15.2 to 1.15.4 [`#2187`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2187) + +#### [v4.33.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.32.0...v4.33.0) + +> January 9, 2024 + +- Adjust azure pipelines filename [`#2186`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2186) +- add file icon for `Vedic` Programming Language. [`#2111`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2111) +- Delete unused files [`0f5fd1be`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0f5fd1be) +- Update vscode settings [`e10f594e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/e10f594e) +- chore: add "protobuf" to proto folder names [`#2182`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2182) +- Concourse Icon [`#1947`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1947) +- feat: add postgres icon [`#2169`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2169) +- feat: add kubernetes file icon [`#2077`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2077) +- Add moon icons [`#2178`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2178) +- feat: add tooling folder [`#2167`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2167) +- Add RSpec file icon [`#2106`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2106) +- Simplify contribution guidelines [`7856d63e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7856d63e) +- feat: add the .config folder [`#2172`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2172) +- Update README.md [`a18fd923`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a18fd923) +- Add puppeteer file icons [`#2142`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2142) +- CRX file icon [`#2139`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2139) +- Additions to folder icons [`#2140`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2140) +- Update nuxt icons [`#2119`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2119) + +#### [v4.32.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.31.0...v4.32.0) + +> November 20, 2023 + +- [Icon Request] HJSON file icon [`#2136`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2136) +- Update workflow files [`d5912bb0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d5912bb0) +- Add Google App Script (*.gs) file icon [`#2143`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2143) +- build(deps-dev): bump axios from 1.4.0 to 1.6.0 [`#2141`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2141) +- Added Lottie Folder Icons aswell as the File Icon. [`#2073`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2073) +- [Icon Request] Add more textlintrc file names [`#2137`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2137) +- Update Angular icons [`#2134`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2134) +- Added mjs extension for stylelint [`#2129`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2129) +- Add history icon association [`71173fc2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/71173fc2) +- [Icon Request] Taskfile [`#1739`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1739) +- [Icon Request] ABAP [`#2123`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2123) +- Associate .whitesource file name with json file [`04e6cce6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/04e6cce6) +- feat: add tailwind config esm [`#2112`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2112) + +#### [v4.31.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.30.1...v4.31.0) + +> October 6, 2023 + +- added templ file icon [`#2102`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2102) +- Add .o and .zst extensions [`#2063`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2063) +- Add Biome icon [`#2075`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2075) +- Added .stan file icon [`#2050`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2050) +- [Icon Request] ESBuild [`#2104`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2104) +- add plural versions for manager, moderator, and admin folders [`#2098`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2098) +- Add SPWN file icon [`#2090`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2090) +- Support OWNERS files [`#2088`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2088) +- Remove sponsors badge from readme [`#2082`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2082) +- Add more panda file names (Closes #2065) [`afac99a5`](https://github.com/material-extensions/vscode-material-icon-theme/commit/afac99a5) +- Add csharp file extension (Closes #2080) [`411e1c91`](https://github.com/material-extensions/vscode-material-icon-theme/commit/411e1c91) +- feat: icons for desktop os [`#1635`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1635) +- Added disc file extensions (vmdk, qcow2, etc.) [`#2069`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2069) + +#### [v4.30.1](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.30.0...v4.30.1) + +> August 28, 2023 + +- Add missing language ids for yaml icon [`#2066`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2066) + +#### [v4.30.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.29.0...v4.30.0) + +> August 26, 2023 + +- [Icon Request] Add icon association to dockercompose language id [`#2059`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2059) +- [Icon Request] Secret Folder [`#2060`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2060) +- Add frontends folder icon [`379040f7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/379040f7) +- Associate `.tfbackend` files with Terraform [`#2055`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2055) +- Add jest file names [`43bde808`](https://github.com/material-extensions/vscode-material-icon-theme/commit/43bde808) +- feat: enum icon [`#1195`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1195) +- Add istanbul file names [`5ce97aea`](https://github.com/material-extensions/vscode-material-icon-theme/commit/5ce97aea) +- Add folder-robot icon [`#2039`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2039) +- czech translation [`#2040`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2040) +- [Icon Request] panda.config.ts [`#2034`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2034) +- Adding Roblox Studio icons [`#2029`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2029) +- Add .taurignore [`#2033`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2033) +- maint: `.containerfile` and `.containerignore` icon [`#2026`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2026) + +#### [v4.29.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.28.0...v4.29.0) + +> July 14, 2023 + +- Fix contributors script [`1d90a538`](https://github.com/material-extensions/vscode-material-icon-theme/commit/1d90a538) +- Prettier supports config files in ESM [`#2019`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2019) +- Add playwright file names [`df129a42`](https://github.com/material-extensions/vscode-material-icon-theme/commit/df129a42) +- Add .eslintrc.base.json file name [`1dcba8d0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/1dcba8d0) +- Add git icon to .keep [`#2010`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2010) +- fix: `nginx` file extensions typo [`#2002`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2002) +- fix: add semantic release as cjs extension [`#2000`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2000) +- feat: werf icon [`#1995`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1995) +- Use shields.io for marketplace badges in README [`#1996`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1996) +- feat: introduce support for semgrep files [`#1991`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1991) + +#### [v4.28.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.27.0...v4.28.0) + +> May 31, 2023 + +- feat: add "stores" (plural) to folder name [`#1965`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1965) +- feat: add UnoCSS icon and file mappings [`#1910`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1910) +- Add jest file names [`#1984`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1984) +- Add Mojo file and folder icons [`#1972`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1972) +- Add rbs file extension and .ruby-version file name [`#1978`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1978) +- Update folderIcons.ts for HTML FolderIcon [`#1974`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1974) +- feat: assign icons for electron process related configs [`#1963`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1963) +- Add .gitmessage file name [`8e599fe7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8e599fe7) + +#### [v4.27.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.26.0...v4.27.0) + +> April 30, 2023 + +- Add mermaid file icon [`#1957`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1957) +- Update package structure of npm module [`#1958`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1958) +- feat: support CommonJS file for semantic release [`#1954`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1954) +- Add qwik icon pack [`#1949`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1949) +- feat: support TSConfig icon for paths file [`#1953`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1953) +- feat: add ifanr cloud icon [`#1934`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1934) +- feat: enhance eslint flat config support [`#1935`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1935) +- Additional docker compose filenames [`#1933`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1933) + +#### [v4.26.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.25.0...v4.26.0) + +> April 8, 2023 + +- Remove sponsor logo [`#1929`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1929) +- feat: add mercurial icon [`#1898`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1898) +- feat: Add "Change File Color" functionality [`#1916`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1916) +- feat: add C/C++ resource icon [`#1897`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1897) +- feat: add deno icon [`#1896`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1896) +- Add typst file icon [`#1917`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1917) +- feat: add Plastic SCM icon [`#1877`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1877) +- Update folderIcons.ts [`#1914`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1914) +- add mctemplate and mcproject file extensions [`#1913`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1913) +- Godot optimizations, folder [`#1884`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1884) +- Update netlify icons [`#1908`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1908) +- Add all possible stryker config filenames [`#1907`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1907) +- Add support for all Serverless framework config extensions [`#1880`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1880) + +#### [v4.25.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.24.0...v4.25.0) + +> March 15, 2023 + +- Remove logo of sponsor [`#1893`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1893) +- build(deps-dev): bump webpack from 5.72.1 to 5.76.0 [`#1901`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1901) +- Additional git filenames [`#1891`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1891) +- Add type test file support [`#1874`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1874) +- Add folder name gulp-tasks [`#1875`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1875) +- Gatsby - add new supported file extensions [`#1886`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1886) +- Objective-C/C++ icons & associations [`#1888`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1888) +- Update bitbucket icon [`#1890`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1890) +- feat: :sparkles: Bun icon to bun.lockb [`#1709`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1709) +- feat: add GameMaker icon [`#1868`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1868) +- extend todo to more files [`#1879`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1879) +- Convert Pascal to Vector [`#1883`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1883) +- Expand godot-assets associations [`#1863`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1863) +- feat: add tldraw icon [`#1869`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1869) +- Add tsconfig.doc.json icon association [`c03e18d9`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c03e18d9) + +#### [v4.24.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.23.1...v4.24.0) + +> February 9, 2023 + +- Add folder icon for "angular" folder name [`#1859`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1859) +- Add icon for .git-blame-ignore-revs [`#1836`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1836) +- Update contributions guidelines [`#1833`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1833) +- Add icon for code_of_conduct [`#1759`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1759) +- Added icon support for typical jekyll folders [`#1832`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1832) +- Add .cjs and .mjs extensions to `plop` fileNames [`#1819`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1819) +- Add .cjs extension to `graphql.config` [`#1818`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1818) +- Add Toolkit (Toolkits) and Toolbox (Toolboxes) [`#1809`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1809) + +#### [v4.23.1](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.23.0...v4.23.1) + +> December 23, 2022 + +- Add support for vitest config files [`#1572`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1572) +- Add icons for vscode files [`#1803`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1803) +- Add manager / moderator folder icon [`#1802`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1802) +- Update release workflow [`68bc32f3`](https://github.com/material-extensions/vscode-material-icon-theme/commit/68bc32f3) +- Update badges in Readme [`#1796`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1796) +- add filename .env.uat into tune icon [`#1801`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1801) + +#### [v4.23.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.22.0...v4.23.0) + +> December 15, 2022 + +- feat: introduce icon folder for changesets [`#1603`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1603) +- Add icon for craco [`#1774`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1774) +- Add Angular icon to ng-package.json [`d6ea9c72`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d6ea9c72) +- Add tsconfig.lib.prod.json icon association [`72bd904e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/72bd904e) +- feat: support icns file type [`#1777`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1777) +- Add tsconfig.worker.json icon association [`90bfc9ea`](https://github.com/material-extensions/vscode-material-icon-theme/commit/90bfc9ea) +- feat: support `etc` folder [`#1762`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1762) +- Add tsconfig file names [`#1756`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1756) +- feat: ๐ŸŽจ add console icon for nushell [`#1761`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1761) + +#### [v4.22.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.21.0...v4.22.0) + +> November 5, 2022 + +- Update import in scripts [`66d9e483`](https://github.com/material-extensions/vscode-material-icon-theme/commit/66d9e483) +- feat: add support for Sonarcloud [`#1677`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1677) +- Update build script [`8b24b74d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8b24b74d) +- docs: add note to saturation section re: Toggle Grayscale setting [`#1747`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1747) +- Change explanation of `languageId` values [`#1753`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1753) +- rm unlinked "official icons" list entry [`#1752`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1752) +- harmonise/clarify wording of Toggle Explorer Arrows [`#1749`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1749) +- change error messages for Opacity and Saturation (value should be float) [`#1746`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1746) +- feat: decorators folder [`#1671`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1671) +- feat: add stylable icon [`#1724`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1724) +- feat: supabase [`#1516`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1516) +- Add proto folder icon association [`#1751`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1751) +- Optimize SVG icons [`#1741`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1741) +- Remove welcome and update messages [`#1740`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1740) +- feat(dependabot): Add missing filename dependabot.yaml [`#1615`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1615) +- Add missing `,` to `vue-config` fileNames [`#1743`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1743) +- Add `volar.config.js` to `vue-config` fileNames [`#1742`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1742) +- Associate `.mcpack` and `.mcaddon` files with Minecraft file icon [`#1734`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1734) +- Add rollup .mjs config file support [`#1733`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1733) +- Pine script file icon [`#1725`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1725) +- feat: enhance svgo icon support [`#1730`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1730) +- feat: add nano-staged icon [`#1722`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1722) +- Update replit.svg [`#1728`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1728) +- Add tsconfig file names [`0eba3084`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0eba3084) +- Update drone light icon [`2ad273ee`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2ad273ee) +- Update antrl icon [`93da3f98`](https://github.com/material-extensions/vscode-material-icon-theme/commit/93da3f98) +- [Icon Request] Antlr4's grammar files [`#1711`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1711) +- Add browser folder icon association [`0ddc6f4b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0ddc6f4b) +- Add .git-blame-ignore icon association [`14afac15`](https://github.com/material-extensions/vscode-material-icon-theme/commit/14afac15) + +#### [v4.21.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.20.0...v4.21.0) + +> October 7, 2022 + +- feat: add folder-pdf [`#1651`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1651) +- Added file association to docker-compose file extension [`#1706`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1706) +- Add support for gatsby config typescript files [`#1701`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1701) +- Add jrxml file extension to xml icon [`#1632`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1632) +- feat: Update drone icon [`#1698`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1698) +- Add support for other Netlify files and folders [`#582`](https://github.com/material-extensions/vscode-material-icon-theme/pull/582) +- Flow - Cadence Icon Addition [`#1686`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1686) +- Folder association `protobufs` [`#1691`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1691) +- chore: adds file-ending .stylelintcache as a stylelint file [`#1693`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1693) +- feat: Caddyfile (#1689) [`#1017`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1017) +- Add .env.alpha [`#1680`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1680) +- Add eslint.config.js [`#1678`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1678) +- fix: add support to gatsby-config.ts [`#1672`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1672) +- Support Dart language [`#1663`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1663) +- feat: support Svelte language [`#1662`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1662) + +#### [v4.20.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.19.0...v4.20.0) + +> August 20, 2022 + +- feat: mdsvex [`#1633`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1633) +- feat: add icon for ".tree" files [`#1653`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1653) +- add folderName fragments [`#1650`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1650) +- Update Gitlab icon [`#1649`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1649) +- fix: typo in release yaml [`#1647`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1647) +- add - folderName : bases [`#1644`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1644) +- feat: add `nginx` extensions [`#1641`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1641) +- build(deps): bump terser from 5.7.1 to 5.14.2 [`#1614`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1614) +- [Icon Request] compose [`#1610`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1610) +- Update fileIcons.ts with fbx and stp. [`#1570`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1570) +- feat: add web and webworker to tsconfig [`#1605`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1605) +- Add quasar.config.js [`#1600`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1600) +- feat: jwt folder [`#1566`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1566) +- feat: fixtures folder [`#1595`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1595) +- fix: tsconfig [`#1594`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1594) +- fix: add tauri.conf.json file [`#1590`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1590) +- Added `wgsl` extension [`#1592`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1592) + +#### [v4.19.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.18.1...v4.19.0) + +> July 2, 2022 + +- fix: added __integration-tests__ folder [`#1585`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1585) +- fix: update cypress files [`#1582`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1582) +- [Add] Cypress file name "cypress.config.js" in fileIcon.ts [`#1579`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1579) +- feat: add support for new type declaration files [`#1576`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1576) +- feat: add `tsconfig.node.json` [`#1575`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1575) +- Adds Cypress 10.x e2e extension [`#1573`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1573) +- Fixing non-object workspace settings bug [`#1565`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1565) + +#### [v4.18.1](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.18.0...v4.18.1) + +> June 9, 2022 + +- On-boarding to VS Code sponsor [`#1558`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1558) +- feat: introduce the icon for the config files of auto [`#1511`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1511) +- Fix: Workspace settings override user settings [`#1553`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1553) + +#### [v4.18.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.17.0...v4.18.0) + +> June 5, 2022 + +- Support workspace settings [`#1540`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1540) +- Add React and Jsx folder icon [`#1519`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1519) +- Feature: added folder for Lua language; [`#1542`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1542) +- feat: add go.work.sum to list of go-mod files [`#1512`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1512) +- Add new `.cts` and `.mts` file extensions [`#1541`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1541) +- feat: add site to folder-public [`#1544`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1544) +- Add separate file icon for rescript interface [`#1539`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1539) +- Add new extension for i18n and Minecraft icon. [`#1538`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1538) +- feat: add `.` possibility to kubernetes folders [`#1536`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1536) +- feat: Support Playwright component test config files [`#1527`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1527) +- associate xlsm with excel icon, closes #1493 [`#1521`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1521) +- feat: add support for the graphqlrc.cjs file [`#1513`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1513) +- feat: introduce support for the webpack config in mjs [`#1514`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1514) +- feat: improve postcss config icon [`#1507`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1507) + +#### [v4.17.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.16.0...v4.17.0) + +> May 6, 2022 + +- feat: add Otne icon [`#1431`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1431) +- Add support to plop file icon [`#1350`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1350) +- feat: shaders [`#1483`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1483) +- feat: buildkite [`#1486`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1486) +- Update nuxt folder icons [`#1490`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1490) +- Remove sponsor badge [`#1491`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1491) +- Update azure icon [`#1488`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1488) +- Dart generated files icon [`#1465`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1465) +- Replace Nuxt Icon [`#1481`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1481) +- feat: icon for the architecture.md file [`#1475`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1475) +- Add gulpfile.ts etc. as folder names [`#1479`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1479) +- feat: verdaccio [`#1476`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1476) + +#### [v4.16.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.15.0...v4.16.0) + +> April 19, 2022 + +- Add icons for figure(s) and fig(s) [`#1466`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1466) +- Bump minimist from 1.2.5 to 1.2.6 [`#1451`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1451) +- Support astro.config.ts [`#1460`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1460) +- Add license names commonly used in multi-license projects [`#1463`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1463) +- Associate pyproject.toml with python-misc file icon [`#1459`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1459) + +#### [v4.15.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.14.1...v4.15.0) + +> March 30, 2022 + +- Aligns Processing icon to Processing 4.x [`#1440`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1440) +- Update color check to ignore deleted SVG icons [`#1450`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1450) +- Several file extension, file name, and folder name icon associations [`#1447`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1447) +- feat: add 'commit'msg' as file name to display 'console' icon [`#1445`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1445) +- feat: psv alias [`#1442`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1442) +- Unity folder icon [`#1434`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1434) +- Update Gleam file icon [`#1433`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1433) +- feat: turborepo [`#1388`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1388) +- Add Poetry Python icon [`#1155`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1155) +- Update lang-ru.ts [`#1428`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1428) +- Update lang-ru.ts [`#1427`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1427) +- feat: support avif image file type [`#1424`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1424) +- feat: fileicon for steadybit configuration files [`#1399`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1399) + +#### [v4.14.1](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.14.0...v4.14.1) + +> March 8, 2022 + +- Hardhat icon is broken [`#1420`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1420) + +#### [v4.14.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.13.0...v4.14.0) + +> March 7, 2022 + +- Update vscodeignore [`a2b05b62`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a2b05b62) +- Support partials folders [`#1307`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1307) +- [Icon Request] Gleam language [`#1415`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1415) +- Update color check workflow [`4e0a4890`](https://github.com/material-extensions/vscode-material-icon-theme/commit/4e0a4890) +- feat: hardhat [`#1377`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1377) +- Add Parcel bundler icon [`#1414`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1414) +- Improve range of language `Makefile` [`#1409`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1409) +- Improve build workflow [`#1413`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1413) +- Adds second extension to the cucumber file type [`#1411`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1411) +- Add firebase as folder name [`#1410`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1410) +- Add Svelte-Kit to be included with the folder-svelte [`#1405`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1405) +- Add `pom.xml` to maven files [`#1398`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1398) +- Add TS support for capacitor config file [`#1396`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1396) + +#### [v4.13.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.12.1...v4.13.0) + +> February 11, 2022 + +- Improve release workflow [`#1378`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1378) +- Add new sponsor [`#1389`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1389) +- Add support for Eleventy's _layouts dir [`#585`](https://github.com/material-extensions/vscode-material-icon-theme/pull/585) +- Add support for pnpm files [`#584`](https://github.com/material-extensions/vscode-material-icon-theme/pull/584) +- Add support for Gridsome-related files [`#1383`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1383) +- Add NextJS folder icons [`#933`](https://github.com/material-extensions/vscode-material-icon-theme/pull/933) +- fileicon added for go.work file [`#1326`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1326) +- feat: integrations folder icon [`#1360`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1360) +- Add Translation for Japanese [`#1379`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1379) + +#### [v4.12.1](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.12.0...v4.12.1) + +> January 23, 2022 + +- Update release workflow [`6ed12b60`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6ed12b60) + +#### [v4.12.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.11.0...v4.12.0) + +> January 23, 2022 + +- Automate release process [`#1376`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1376) +- Add Translation for Traditional Chinese [`#1375`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1375) +- Refactor/enable strict type checking [`#1334`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1334) +- feat: blitz [`#1358`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1358) +- feat: added support for serverless file and folders [`#1352`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1352) +- feat: remix [`#1357`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1357) +- feat: cmd [`#1355`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1355) +- feat: figma [`#1354`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1354) +- feat: playwright [`#1353`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1353) +- Add `next.config.mjs` to next file icons [`#1369`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1369) +- feat: mailers [`#1359`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1359) +- Add `astro.config.*` files to astro file icons [`#1365`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1365) +- Add Tobilang icons [`#1337`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1337) +- Add "renovate-config.json" to renovate filenames [`#1348`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1348) +- Add target folder icon [`#1338`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1338) +- Adjust vscodeignore [`5c1d8508`](https://github.com/material-extensions/vscode-material-icon-theme/commit/5c1d8508) +- Add SiYuan icon [`#1313`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1313) +- Added Tauri icon [`#1312`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1312) +- Add handlers folder icon (Closes #1323) [`#1325`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1325) + +#### [v4.11.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.10.0...v4.11.0) + +> November 25, 2021 + +- Add file icon for Netin Diagnotic System Template file [`#1314`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1314) +- Add Angular folder icon [`90cc4628`](https://github.com/material-extensions/vscode-material-icon-theme/commit/90cc4628) +- Update color of dependabot icon [`b866f710`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b866f710) +- Support .cjs in stylelint [`#1315`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1315) +- feat: add cjs and ts endings to commitlint [`#1304`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1304) +- Add Resolver folder icon (Closes #1295) [`#1297`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1297) +- Resize sponsor logos [`f8301d10`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f8301d10) +- Add more combinations of nestjs e2e jest config filenames [`#1287`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1287) +- Add java folder icon [`#1285`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1285) +- add git icon to .gitinclude file [`#1286`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1286) +- Apply minecraft icon to all Minecraft files [`#1283`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1283) +- Add "tune" filename for .env.stage [`#1282`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1282) +- Fix code formatting issue [`953c3096`](https://github.com/material-extensions/vscode-material-icon-theme/commit/953c3096) +- Add .pubignore (Closes #1273) [`008de61e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/008de61e) +- Update lang-es.ts [`#1271`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1271) +- Add Redux selector icon and folder icon [`#1247`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1247) +- Fix linting issue [`d81b6177`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d81b6177) +- feat: added icon for the lighthouse config files [`#1215`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1215) +- Routes pkg to packages icon by default (4 Go devs) [`#1256`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1256) +- Added queue folder icon [`#1159`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1159) +- add dependabot icon [`#1248`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1248) +- Remove hardcoded 'm' file icon association from C (Closes #1243) [`135cce30`](https://github.com/material-extensions/vscode-material-icon-theme/commit/135cce30) +- Add nxignore icon association [`828083ec`](https://github.com/material-extensions/vscode-material-icon-theme/commit/828083ec) +- feat: svgr [`#1218`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1218) +- Update color of cypress icons [`464953cc`](https://github.com/material-extensions/vscode-material-icon-theme/commit/464953cc) +- Add heex file extension [`#1240`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1240) +- Add template file icon (Closes #1185) [`#1224`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1224) +- feat: cypress [`#1221`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1221) +- feat: feat: add graphql config file names [`#1231`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1231) +- Icon request template (Closes #1225) [`#1226`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1226) + +#### [v4.10.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.9.0...v4.10.0) + +> August 24, 2021 + +- Optimize extension for web usage [`#1219`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1219) +- Update dinophp file icon [`c4abb04a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c4abb04a) +- dinophp file icon [`#1186`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1186) +- Update odin color [`ef27d574`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ef27d574) +- Add support for the Odin programming language [`#1222`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1222) +- feat: rome.json [`#1214`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1214) +- Add Vercel folder icon [`#1211`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1211) +- feat: NextJS [`#1209`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1209) +- Add .mjmlconfig file support (Closes #1204) [`0b40fd80`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0b40fd80) +- Add wolfram language (Closes #1176) [`e0800956`](https://github.com/material-extensions/vscode-material-icon-theme/commit/e0800956) +- Add Artistic Style icon (Closes #1187) [`#1203`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1203) +- Optimize SVG icons with svgo [`cff00b43`](https://github.com/material-extensions/vscode-material-icon-theme/commit/cff00b43) +- Add tsconfig.lib.json [`5f2be65d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/5f2be65d) +- Svgo optimize - sample [`#1129`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1129) +- Add `mjs/cjs` to `vite.config.*` [`#1190`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1190) +- We need `.rubocop_todo.yml` as well... [`#1192`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1192) +- Update sponsor image source [`cb3ea94f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/cb3ea94f) +- Use material colors and minify SVG [`344e0fa1`](https://github.com/material-extensions/vscode-material-icon-theme/commit/344e0fa1) +- Minify SVG files [`3d06301d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3d06301d) +- Minify SVG files [`40630458`](https://github.com/material-extensions/vscode-material-icon-theme/commit/40630458) +- Bake transforms that SVGO cannot parse [`0e061aff`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0e061aff) + +#### [v4.9.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.8.0...v4.9.0) + +> August 5, 2021 + +- Update color of JSON icon [`cf837049`](https://github.com/material-extensions/vscode-material-icon-theme/commit/cf837049) +- Remove width and height properties of sentry icon [`15c4ed99`](https://github.com/material-extensions/vscode-material-icon-theme/commit/15c4ed99) +- Update sponsor link [`cd5f68ca`](https://github.com/material-extensions/vscode-material-icon-theme/commit/cd5f68ca) +- Add Teal file icon (Closes #1180) [`#1182`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1182) +- Reduce size of logo [`26d87fae`](https://github.com/material-extensions/vscode-material-icon-theme/commit/26d87fae) +- Add <br> tag [`def38ec0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/def38ec0) +- Add sponsor image to readme [`9e9e909a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/9e9e909a) +- Add XML support for phpcs.xml.dist.sample [`#1179`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1179) +- Update json icon [`#1175`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1175) +- Add interface folder icon (Closes #513) [`7286bbee`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7286bbee) +- Add dmn file extension [`7aa430c6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7aa430c6) +- More filenames support [`#1170`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1170) +- Add lerna.json icon [`#956`](https://github.com/material-extensions/vscode-material-icon-theme/pull/956) +- Add postcss.config.cjs file name [`#1168`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1168) +- Add more tsconfig file icon associations [`463d9194`](https://github.com/material-extensions/vscode-material-icon-theme/commit/463d9194) +- Add Rubocop [`#1141`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1141) +- Add Coala icon [`#1154`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1154) +- Allow folder icon for patches collection [`#1164`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1164) +- Add tsconfig.eslint.json to tsconfig.json [`#1147`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1147) +- Fix linting issue [`739badab`](https://github.com/material-extensions/vscode-material-icon-theme/commit/739badab) +- Add "module", "modules" to "folder-plugin" [`#1083`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1083) +- add vlang [`#1009`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1009) +- Update color of context folder icon [`8a982f91`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8a982f91) +- added icon for context [`#1106`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1106) +- Added renovate bot icon [`#1139`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1139) +- Update Flash and SWC icons [`#1157`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1157) +- Add PHPUnit icon [`#1053`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1053) +- Update color of yaml icon (Closes #1142) [`f0b4dbad`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f0b4dbad) +- Add Jest and TSConfig from Nest template [`#1144`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1144) +- Add support for git-hooks as console file icon [`#1138`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1138) + +#### [v4.8.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.7.0...v4.8.0) + +> July 4, 2021 + +- Extend prettier config file options (Closes #1067) [`23e9d6a6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/23e9d6a6) +- Add support for global git ignorance file [`#1131`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1131) +- Add sponsor logo [`45d40ba3`](https://github.com/material-extensions/vscode-material-icon-theme/commit/45d40ba3) +- Add Maven icon [`#1098`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1098) +- Add missing module prettier [`d80797a3`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d80797a3) +- Fix linting issues [`f06a8aaf`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f06a8aaf) +- Remove unused webpack plugin which causes error [`6e56040d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6e56040d) +- Update actions [`a7aa37c2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a7aa37c2) +- Improve generation of icon preview images [`cd91ac41`](https://github.com/material-extensions/vscode-material-icon-theme/commit/cd91ac41) +- Add yarn folder icon (Closes #998) [`bd77a62a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/bd77a62a) +- Format code on save [`590063c2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/590063c2) +- Add .env.dist file icon support [`#1126`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1126) +- Add PHP CS Fixer icon [`#1052`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1052) +- Add Ada icon [`#1099`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1099) +- Add folder `.wordpress-org` support [`#1114`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1114) +- Add support for `sample-data` folder [`#1115`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1115) +- Add XML support for PHP_CodeSniffer ruleset file [`#1116`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1116) +- Add support for storybook directory [`#1118`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1118) +- Add ESLint config for JSDoc documentation [`#1117`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1117) +- Add Ember icon [`#1097`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1097) +- Update folderIcons.ts [`#1113`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1113) +- Added horusec-config file icon [`#1081`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1081) +- Add snowpack [`#1112`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1112) +- Assign icon for `tsconfig.base.json` [`#1109`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1109) +- Add Babel transform and Jest config files support [`#1107`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1107) +- Add eslint config for markdown documentation [`#1103`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1103) +- Update for yaml consistency with xml [`#1049`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1049) +- Link RestApi folder icon [`#1093`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1093) +- Update docker file icon (Closes #1100) [`8b2a3bca`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8b2a3bca) +- Add pink elephant icon (Closes #1071) [`cc09a0d4`](https://github.com/material-extensions/vscode-material-icon-theme/commit/cc09a0d4) +- Add Robots icon [`#1054`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1054) +- Add Java '.jar' file icons [`#1074`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1074) +- Update FUNDING.yml [`72ecc5b5`](https://github.com/material-extensions/vscode-material-icon-theme/commit/72ecc5b5) +- Add picture(s) folder icon (References #1070) [`eb7cf6d7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/eb7cf6d7) +- Add vetur.config.* icon associations [`#1055`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1055) +- Add tsconfig icons (closes #499) [`#1066`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1066) +- Adding new extension of storybook CSF format for svelte [`#1064`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1064) +- Added __stories__ folder and .stories.mdx file [`#1048`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1048) +- Add artisan icon association [`#1057`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1057) +- Add webpack.mix.js icon association [`#1056`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1056) +- Add Hex file icon [`#1062`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1062) +- Add Java '.class' file icons [`#1060`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1060) + +#### [v4.7.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.6.0...v4.7.0) + +> May 24, 2021 + +- added .env.template to .env recognized filenames [`#1033`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1033) +- feat: recognize `.venv/` as env folder by default [`#1044`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1044) +- Update color of sentry file icon (References #1043) [`36888ce9`](https://github.com/material-extensions/vscode-material-icon-theme/commit/36888ce9) +- feat: :art: Add sentry icon for .sentryclirc file [`#1043`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1043) +- Set main as default branch [`068a3ccb`](https://github.com/material-extensions/vscode-material-icon-theme/commit/068a3ccb) +- Reducing the size of the Gitpod icon [`466780f2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/466780f2) +- Update Gitpod icon [`#1034`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1034) +- Add .bazelversion file icon association [`88cac752`](https://github.com/material-extensions/vscode-material-icon-theme/commit/88cac752) +- feat: add `.windi` file extension [`#1041`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1041) +- add tailwindcss icon to `tailwind.config.cjs` [`#1040`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1040) +- Add additional folder names for the contract folder icon [`a8768cef`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a8768cef) +- Support virtual workspaces (Closes #1036) [`026457b0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/026457b0) +- Add contract folder icon (Closes #1035) [`7fcd799a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7fcd799a) +- Add pl file extension to prolog file icon [`70cf73b4`](https://github.com/material-extensions/vscode-material-icon-theme/commit/70cf73b4) +- Support extension in untrusted workspaces (Closes #1032) [`8ec317e5`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8ec317e5) +- Add new folder icons (Closes #907) [`4b5b40da`](https://github.com/material-extensions/vscode-material-icon-theme/commit/4b5b40da) +- Update storybook and add folder-storybook [`#1020`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1020) +- Add `.astro` icon [`#1025`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1025) +- Fix unclosed bold tag [`21b6cdbe`](https://github.com/material-extensions/vscode-material-icon-theme/commit/21b6cdbe) +- Fix description of how to use custom icons (Closes #984, 1004) [`a06913f7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a06913f7) +- Fix description of how to use custom icons (Closes #1004) [`80c551ba`](https://github.com/material-extensions/vscode-material-icon-theme/commit/80c551ba) +- Align circleci folder with github [`#1021`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1021) +- svgo icon [`#1022`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1022) +- add 'inc' to 'folder-include' folder names [`#1018`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1018) +- Add chess icons [`#1010`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1010) +- Add Husky folder [`#990`](https://github.com/material-extensions/vscode-material-icon-theme/pull/990) +- Add gemini icon [`#1014`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1014) +- Add .lintstagedrc icon association [`d632c2c5`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d632c2c5) +- Vuepress [`#981`](https://github.com/material-extensions/vscode-material-icon-theme/pull/981) +- Add more android file extensions [`#1012`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1012) +- feat: new windicss icon [`#1007`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1007) +- Add icon association for copyright [`60dfe657`](https://github.com/material-extensions/vscode-material-icon-theme/commit/60dfe657) +- Add lilypond file icon (Closes #987) [`#1006`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1006) +- .pbm, .pgm, .ppm, .pnm extensions added as image files [`#989`](https://github.com/material-extensions/vscode-material-icon-theme/pull/989) +- Add wav file extension to audio icon [`a6b36189`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a6b36189) +- Add 'types' folder to folder-typescript [`#965`](https://github.com/material-extensions/vscode-material-icon-theme/pull/965) +- Add envs folder association (Closes #988) [`c02581ce`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c02581ce) +- Show `svelte.config.cjs` as svelte file [`#980`](https://github.com/material-extensions/vscode-material-icon-theme/pull/980) +- Add TS support for tailwind config file [`#985`](https://github.com/material-extensions/vscode-material-icon-theme/pull/985) +- Add sc file extension for scala file icon [`30ab89a9`](https://github.com/material-extensions/vscode-material-icon-theme/commit/30ab89a9) +- Add scala file extension (Fixes #976) [`a5ec66bb`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a5ec66bb) + +#### [v4.6.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.5.0...v4.6.0) + +> March 20, 2021 + +- Update Contributor guidance with a couple suggestions [`#970`](https://github.com/material-extensions/vscode-material-icon-theme/pull/970) +- Add proto icons (#963) [`#902`](https://github.com/material-extensions/vscode-material-icon-theme/pull/902) +- Nuxt icons [`#824`](https://github.com/material-extensions/vscode-material-icon-theme/pull/824) +- Add sponsor link to readme [`6604dfc1`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6604dfc1) +- Update FUNDING.yml [`215ef624`](https://github.com/material-extensions/vscode-material-icon-theme/commit/215ef624) +- Add textlint file icon (Closes #967) [`3ad84a1b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3ad84a1b) +- Add Kusto Query Language (KQL) [`#968`](https://github.com/material-extensions/vscode-material-icon-theme/pull/968) +- ADD: folder name for audio and docs [`#964`](https://github.com/material-extensions/vscode-material-icon-theme/pull/964) +- Add Icon for windicss [`#960`](https://github.com/material-extensions/vscode-material-icon-theme/pull/960) +- Add '.terraform' folder name support [`#957`](https://github.com/material-extensions/vscode-material-icon-theme/pull/957) +- Adding support for Vitejs [`#948`](https://github.com/material-extensions/vscode-material-icon-theme/pull/948) +- Add variations to docker compose [`#953`](https://github.com/material-extensions/vscode-material-icon-theme/pull/953) +- Allow language associations to override the js file extension (Fixes #943) [`d1931bee`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d1931bee) +- added support for OPA (Open Policy Agent) [`#949`](https://github.com/material-extensions/vscode-material-icon-theme/pull/949) +- Add webpack.prod.config.js [`97932ed0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/97932ed0) +- Added cobol folder icons [`#940`](https://github.com/material-extensions/vscode-material-icon-theme/pull/940) +- Add Elyra pipelines icon [`#941`](https://github.com/material-extensions/vscode-material-icon-theme/pull/941) +- Added pwa folder icons [`#939`](https://github.com/material-extensions/vscode-material-icon-theme/pull/939) +- Update CONTRIBUTING.md [`f244ed43`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f244ed43) +- Update CONTRIBUTING.md [`c9aac688`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c9aac688) +- Update file associations documentation (References #928) [`f0dc2238`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f0dc2238) +- Add .sqlite3 and .db3 extensions [`#929`](https://github.com/material-extensions/vscode-material-icon-theme/pull/929) + +#### [v4.5.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.4.0...v4.5.0) + +> January 10, 2021 + +- Update PostCSS file icon (Closes #926) [`472823f6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/472823f6) +- Add related extensions section [`47771730`](https://github.com/material-extensions/vscode-material-icon-theme/commit/47771730) +- Add folder-privileged [`#831`](https://github.com/material-extensions/vscode-material-icon-theme/pull/831) +- Add quasar file and folder icon (Closes #920) [`b8a1fc61`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b8a1fc61) +- Add idris file icon (Closes #915) [`17179257`](https://github.com/material-extensions/vscode-material-icon-theme/commit/17179257) +- Add lolcode icon (Closes #914) [`f55b4090`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f55b4090) +- Add pylintrc icon association (Closes #891) [`ef0506d0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ef0506d0) +- Add cjs.map icon association (Closes #912) [`23d2f66e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/23d2f66e) +- Updated robot icon to official CD #910 [`#911`](https://github.com/material-extensions/vscode-material-icon-theme/pull/911) +- Add jfif file extension to image icon [`3952f7a4`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3952f7a4) +- Add connection folder icon [`#903`](https://github.com/material-extensions/vscode-material-icon-theme/pull/903) +- add vim icon associations [`#904`](https://github.com/material-extensions/vscode-material-icon-theme/pull/904) +- Add .db extension [`#898`](https://github.com/material-extensions/vscode-material-icon-theme/pull/898) +- Sync version key value [`#897`](https://github.com/material-extensions/vscode-material-icon-theme/pull/897) +- Add Grain icon [`#892`](https://github.com/material-extensions/vscode-material-icon-theme/pull/892) +- Fix link to images [`503c3f55`](https://github.com/material-extensions/vscode-material-icon-theme/commit/503c3f55) +- Fix import of puppeteer (Closes #890) [`6f5f0842`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6f5f0842) +- add scala-folder [`#856`](https://github.com/material-extensions/vscode-material-icon-theme/pull/856) +- add cobol icon [`#889`](https://github.com/material-extensions/vscode-material-icon-theme/pull/889) +- Add exp file extension to console icon (Closes #875) [`0aee54c5`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0aee54c5) +- Add bicep icon (Closes #886) [`a634f5bb`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a634f5bb) +- add twine icon [`#873`](https://github.com/material-extensions/vscode-material-icon-theme/pull/873) +- Add cabal.project file to cabal file icons [`#883`](https://github.com/material-extensions/vscode-material-icon-theme/pull/883) +- Add meson_options.txt and meson wrapdb files [`ef4fc09f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ef4fc09f) +- Add dune-workspace file to dune file icons [`#881`](https://github.com/material-extensions/vscode-material-icon-theme/pull/881) +- Update dependencies [`7451b0d6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7451b0d6) +- add schemes to classes [`#880`](https://github.com/material-extensions/vscode-material-icon-theme/pull/880) +- Fix Typescript "hint" level warnings and trivial typing issue [`#877`](https://github.com/material-extensions/vscode-material-icon-theme/pull/877) + +#### [v4.4.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.3.0...v4.4.0) + +> November 1, 2020 + +- Remove animation from animation folder icon due to performance reasons (Closes #872) [`247d7210`](https://github.com/material-extensions/vscode-material-icon-theme/commit/247d7210) +- Update posthtml icon [`eeffbff6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/eeffbff6) +- Slightly update colors and size [`a46ddcc2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a46ddcc2) +- Add commitlintrc icon associations (Closes #870) [`fd9ea259`](https://github.com/material-extensions/vscode-material-icon-theme/commit/fd9ea259) +- Make filenames for license files more generic [`4d30abd2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/4d30abd2) +- Rename mcfunction to minecraft icon [`90752ac2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/90752ac2) +- Add NGRX selectors (Closes #861) [`c2e1d3d3`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c2e1d3d3) +- #864 Display docker icon on Dockerfile.* [`993ad6eb`](https://github.com/material-extensions/vscode-material-icon-theme/commit/993ad6eb) +- remove filters in svg [`48433564`](https://github.com/material-extensions/vscode-material-icon-theme/commit/48433564) +- remove filter on svgs [`27e20fd2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/27e20fd2) +- add snowpack config icons [`accebe6f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/accebe6f) +- Add brainfuck file icon (Closes #858) [`c00230a3`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c00230a3) +- Add brainfuck file icon (Closes #858) [`b12830b3`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b12830b3) +- Change the mcfunction icon. [`d9057c69`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d9057c69) +- Update size of rescript icon [`8fd0644c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8fd0644c) +- Update rescript icon [`a4e55200`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a4e55200) +- Update colors of replit icon [`0fff5e82`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0fff5e82) +- Add mcfunction_alt to the right file [`76b11f6a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/76b11f6a) +- Change size and add a alternative icon [`9a5728b0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/9a5728b0) +- Update gulp folder icon (motive color and size of motive) [`851ef815`](https://github.com/material-extensions/vscode-material-icon-theme/commit/851ef815) +- add replit config file icon [`4c8f80e6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/4c8f80e6) +- Add Minecraft Function Icon. [`74944db7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/74944db7) +- fix: gulp folder icon colors [`28511de4`](https://github.com/material-extensions/vscode-material-icon-theme/commit/28511de4) +- fix: simplify gulp folder names [`ba38f75a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ba38f75a) +- Folder icon for messaging [`637b13a8`](https://github.com/material-extensions/vscode-material-icon-theme/commit/637b13a8) +- Folder icon for messaging [`f901627d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f901627d) +- fix: remove trailing comma [`87766029`](https://github.com/material-extensions/vscode-material-icon-theme/commit/87766029) +- fix: remove trailing spaces [`5c2b690b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/5c2b690b) +- feature: gulpfile folder icon [`88c5d70a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/88c5d70a) +- Add version for light themes and update colors [`1100f1ef`](https://github.com/material-extensions/vscode-material-icon-theme/commit/1100f1ef) +- Update alignment of nginx icon [`8dfb4a29`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8dfb4a29) +- Update color of nginx icon to #43A047 [`0a91ce7e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0a91ce7e) +- add nginx configuration file icon [`b44e6da8`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b44e6da8) +- remove folder-support from folderIcons.ts in order to fix pipeline [`ce035260`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ce035260) +- Update descriptions of workflow file [`3d7b3d0a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3d7b3d0a) +- Add reports folder icon [`2d1e9f28`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2d1e9f28) +- Add passwd file icon (Closes #838) [`7798e4d6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7798e4d6) +- feat(svelte): support svelte.config.js [`a47c3eda`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a47c3eda) +- Update eslintignore [`27d727c7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/27d727c7) +- Update .vscode config [`1e31cc32`](https://github.com/material-extensions/vscode-material-icon-theme/commit/1e31cc32) +- Prettifiy source code [`9dfe4a17`](https://github.com/material-extensions/vscode-material-icon-theme/commit/9dfe4a17) +- Update workflow file [`952dc39e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/952dc39e) +- Revert image changes [`ba1e0631`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ba1e0631) +- Add search file icon [`5c502447`](https://github.com/material-extensions/vscode-material-icon-theme/commit/5c502447) +- Add language ids (Fixes #840) [`d3bcd697`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d3bcd697) +- Add preview images [`7859fdbf`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7859fdbf) +- Add Stitches Icon [`b97d1856`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b97d1856) +- Add description for custom folder icons [`5b7ca028`](https://github.com/material-extensions/vscode-material-icon-theme/commit/5b7ca028) +- Add "setting" names to folder-config [`21d2e222`](https://github.com/material-extensions/vscode-material-icon-theme/commit/21d2e222) +- remove dot from extension names [`cbb3fdcd`](https://github.com/material-extensions/vscode-material-icon-theme/commit/cbb3fdcd) +- Add rescript icon [`b7536eec`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b7536eec) +- add posthtml icon [`1dd5ac41`](https://github.com/material-extensions/vscode-material-icon-theme/commit/1dd5ac41) + +#### [v4.3.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.0.2...v4.3.0) + +> September 9, 2020 + +- Create FUNDING.yml [`c821e6cc`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c821e6cc) +- Update terraform folder and file icons [`23e4e36d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/23e4e36d) +- Updated saturation and opacity of custom icon files [`2ce832d1`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2ce832d1) +- Fix #827 [`5be67bab`](https://github.com/material-extensions/vscode-material-icon-theme/commit/5be67bab) +- Code Refactoring [`cd46788e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/cd46788e) +- Add mjml folder icon (Closes #435) [`8abf22b4`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8abf22b4) +- Adjusted secondary color [`775becaa`](https://github.com/material-extensions/vscode-material-icon-theme/commit/775becaa) +- Add www folder association [`b7082f5f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b7082f5f) +- Fixed icon configuration in folderIcons.ts due to broken checks [`ac170754`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ac170754) +- Added Terraform Folder Icons [`6392bb4b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6392bb4b) + +#### [v4.0.2](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.2.0...v4.0.2) + +> September 2, 2020 + +- Bump bl from 4.0.2 to 4.0.3 [`e8eaf1e6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/e8eaf1e6) +- feat: associate docker icon to Dockerfile.prod and Dockerfile.production [`bcc52b79`](https://github.com/material-extensions/vscode-material-icon-theme/commit/bcc52b79) +- Addition to utils folder icon [`464cc505`](https://github.com/material-extensions/vscode-material-icon-theme/commit/464cc505) +- Update description for custom SVG icons [`ff1aaab0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ff1aaab0) +- Add jsonl and ndjson file extensions [`0f495911`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0f495911) +- Add slug file icon (Closes #820) [`6542304f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6542304f) +- Always enable nuxt icons because there're no conflicts with other icon packages [`a31a1490`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a31a1490) +- Add jest.e2e file names [`76b32d99`](https://github.com/material-extensions/vscode-material-icon-theme/commit/76b32d99) +- Add description for custom SVG icons [`eee52d8b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/eee52d8b) +- Added "ace" [`988f24cb`](https://github.com/material-extensions/vscode-material-icon-theme/commit/988f24cb) +- Add jinja-html to jinja extension array [`4de95b74`](https://github.com/material-extensions/vscode-material-icon-theme/commit/4de95b74) +- Icon color changed to Material for Modernizr icon [`f47b150c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f47b150c) +- Update colors of apollo icons [`4b5f1554`](https://github.com/material-extensions/vscode-material-icon-theme/commit/4b5f1554) +- Fix security vulnerability in dev dependencies [`203f8125`](https://github.com/material-extensions/vscode-material-icon-theme/commit/203f8125) +- Add Modernizr file icon [`b16cce8f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b16cce8f) +- Add .cjs extension to ESLint icon [`7253c2fb`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7253c2fb) +- Add stryker file icon (Closes #784) [`7b2d0258`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7b2d0258) +- Changed colors to come from material ui design (indigo 900 for folder and indigo 100 for apollo logo; [`a223a6e0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a223a6e0) +- Add denizenscript (Closes #785) [`c6b7637c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c6b7637c) +- Alias gulpfile.js as gulpfile.mjs [`25adfab6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/25adfab6) +- Updated color of nuget icon [`47567393`](https://github.com/material-extensions/vscode-material-icon-theme/commit/47567393) +- Removed snake case in foldernames array [`457f0476`](https://github.com/material-extensions/vscode-material-icon-theme/commit/457f0476) +- Added apollo folder icon [`a4b48518`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a4b48518) +- Add command file icon (Closes #748) [`2ebf5110`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2ebf5110) +- Add NuGet file icon for nuget.config, .nuspec, nuget.exe, *.nupkg [`377f5bc6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/377f5bc6) +- Bump elliptic from 6.5.2 to 6.5.3 [`1e262f56`](https://github.com/material-extensions/vscode-material-icon-theme/commit/1e262f56) +- Add CNAME file name to http icon [`2e744e9b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2e744e9b) +- Update sas icon [`f24d5616`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f24d5616) +- change sas-icon.svg to sas.svg [`b2c899d7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b2c899d7) +- add SAS icon [`44028c69`](https://github.com/material-extensions/vscode-material-icon-theme/commit/44028c69) +- Add salesforce icon (Closes #779) [`34f7a529`](https://github.com/material-extensions/vscode-material-icon-theme/commit/34f7a529) +- Bump lodash from 4.17.15 to 4.17.19 [`ad47a81f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ad47a81f) +- Update color of azure pipelines folder icon [`c04fd92e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c04fd92e) +- Update color of the rocket [`916f1ddf`](https://github.com/material-extensions/vscode-material-icon-theme/commit/916f1ddf) +- Update color of the rocket [`f4ba7546`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f4ba7546) +- Add roadmap file icon (Closes #682) [`f7181676`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f7181676) +- Update so colors is from material design colors [`9bba8db1`](https://github.com/material-extensions/vscode-material-icon-theme/commit/9bba8db1) +- Add Azure Pipeline as a folder icon [`6bf39fc2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6bf39fc2) +- Update tcl icon [`c26f6f9a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c26f6f9a) +- Add security file names to existing lock icon [`f7c40411`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f7c40411) +- Remove security icon and use 'lock.svg' instead [`87ef79be`](https://github.com/material-extensions/vscode-material-icon-theme/commit/87ef79be) +- Remove database and storage rules from Firebase [`64e33eef`](https://github.com/material-extensions/vscode-material-icon-theme/commit/64e33eef) +- Update CI pipeline [`0f14ce1e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0f14ce1e) +- Fix CI pipeline [`7ca5d3a7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7ca5d3a7) +- Update CI pipeline [`ab9577a4`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ab9577a4) +- Add fileIcons.ts reference [`49346921`](https://github.com/material-extensions/vscode-material-icon-theme/commit/49346921) +- Rename and edit security.svg [`d536a9ca`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d536a9ca) +- Add security.svg [`20f35192`](https://github.com/material-extensions/vscode-material-icon-theme/commit/20f35192) +- Add additional Firebase filenames [`c8b8dab9`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c8b8dab9) +- feat: Add Tcl Icon [`e5aac1cd`](https://github.com/material-extensions/vscode-material-icon-theme/commit/e5aac1cd) + +#### [v4.2.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.1.0...v4.2.0) + +> June 17, 2020 + +- Updating forth and lisp icons [`17b773ff`](https://github.com/material-extensions/vscode-material-icon-theme/commit/17b773ff) +- Add update folder icon [`084320c3`](https://github.com/material-extensions/vscode-material-icon-theme/commit/084320c3) +- Add intellij folder icons [`19747e96`](https://github.com/material-extensions/vscode-material-icon-theme/commit/19747e96) +- Add svelte folder icon (Closes #756) [`9f8e6974`](https://github.com/material-extensions/vscode-material-icon-theme/commit/9f8e6974) +- Update color of vercel icons [`4be80ca4`](https://github.com/material-extensions/vscode-material-icon-theme/commit/4be80ca4) +- Switch vercel icons [`3aae82d9`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3aae82d9) +- Update pawn icon [`5b327a50`](https://github.com/material-extensions/vscode-material-icon-theme/commit/5b327a50) +- Update vercel icons (better contrast) [`a12fe318`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a12fe318) +- Add Pascal file icon (Closes #739) [`358c9650`](https://github.com/material-extensions/vscode-material-icon-theme/commit/358c9650) +- Update Vercel svgs (additional 2px whitespace) [`35bb92ef`](https://github.com/material-extensions/vscode-material-icon-theme/commit/35bb92ef) +- Added .unity extension to shaderlab icon [`8598a3e1`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8598a3e1) +- Update vercel.svg [`24146f20`](https://github.com/material-extensions/vscode-material-icon-theme/commit/24146f20) +- Update vercel_light.svg [`4368407c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/4368407c) +- Add unity icon [`413a94be`](https://github.com/material-extensions/vscode-material-icon-theme/commit/413a94be) +- Animate animation folder icon [`1d6c4d7e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/1d6c4d7e) +- feat(files): add .env.schema and env.defaults [`933b0e3f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/933b0e3f) +- Update vala icon [`4d2960ce`](https://github.com/material-extensions/vscode-material-icon-theme/commit/4d2960ce) +- Alias CHANGELOG as CHANGES [`45b6a9ef`](https://github.com/material-extensions/vscode-material-icon-theme/commit/45b6a9ef) +- Update ocaml icon (use same color as opam) [`7c165251`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7c165251) +- Add drawio icon [`4cc0ec3d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/4cc0ec3d) +- Update color [`9d25612b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/9d25612b) +- Use color of the Material Color Palette [`2455aa9b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2455aa9b) +- Remove specific/custom folder icons per review [`690ddcb2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/690ddcb2) +- Add ABC file icon [`4b8ccc22`](https://github.com/material-extensions/vscode-material-icon-theme/commit/4b8ccc22) +- Rename "now" to "vercel" (Closes #738) [`2d780381`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2d780381) +- added .node-version filetype to nodejs association [`1f73b438`](https://github.com/material-extensions/vscode-material-icon-theme/commit/1f73b438) +- Update color of components folder icon [`97744d3f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/97744d3f) +- Add folder icon for widgets (Closes #660 and Closes #726) [`f6ac11ac`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f6ac11ac) +- Update folderIcons.ts [`beb11a80`](https://github.com/material-extensions/vscode-material-icon-theme/commit/beb11a80) +- Add io, stdlib, portability folders (C/C++) [`4bf0ea24`](https://github.com/material-extensions/vscode-material-icon-theme/commit/4bf0ea24) +- Rename tilt icon [`3bd50680`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3bd50680) +- Add folder icon for "sounds" [`6837df48`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6837df48) +- Slightly decrease size of icon [`f23c8c69`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f23c8c69) +- Add GraphQL Resolver icon for Nest [`ad5b5648`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ad5b5648) +- add 'code' to 'folder-src' icon [`8ee2ddfb`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8ee2ddfb) +- tweak: map jest icon to jest.config.(m|c)js [`0214998c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0214998c) +- Update graphql icon [`c6877f53`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c6877f53) +- Add imba file icon (Closes #715) [`99c21cd0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/99c21cd0) +- Fix typo in comment [`7f69d992`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7f69d992) +- Remove Material Design box per PKief/vscode-material-icon-theme/pull/700#discussion_r416770170 [`61062c6c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/61062c6c) +- Add Opam and Dune support [`adf18656`](https://github.com/material-extensions/vscode-material-icon-theme/commit/adf18656) +- Update icon [`#2`](https://github.com/material-extensions/vscode-material-icon-theme/pull/2) +- Add eslintcache [`9883fbe4`](https://github.com/material-extensions/vscode-material-icon-theme/commit/9883fbe4) +- Added Dune and Opam icons [`0125f324`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0125f324) +- Update fileIcons.ts [`fc4ba300`](https://github.com/material-extensions/vscode-material-icon-theme/commit/fc4ba300) +- fix: change svg according guidelines (ty @lmn8!) [`ccd0296b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ccd0296b) +- Switch Pawn icons with SVG [`#1`](https://github.com/material-extensions/vscode-material-icon-theme/pull/1) +- Add ReasonML, Reason Lisp (reason-vscode) [`87ff07a4`](https://github.com/material-extensions/vscode-material-icon-theme/commit/87ff07a4) +- Cleanup of new icon [`ba0c40f8`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ba0c40f8) +- Add as SML [`58eb76f3`](https://github.com/material-extensions/vscode-material-icon-theme/commit/58eb76f3) +- Rename ml.svg to sml.svg [`200dffaf`](https://github.com/material-extensions/vscode-material-icon-theme/commit/200dffaf) +- Fix a syntax error [`65e12532`](https://github.com/material-extensions/vscode-material-icon-theme/commit/65e12532) +- Cleanup [`65ee8617`](https://github.com/material-extensions/vscode-material-icon-theme/commit/65ee8617) +- Add *.mlb and *.use extensions [`31f3e01a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/31f3e01a) +- Remove capitalised extension [`482d08e4`](https://github.com/material-extensions/vscode-material-icon-theme/commit/482d08e4) +- Attempt to resolve duplicate file extension [`93abdc4f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/93abdc4f) +- Prevent conflict with OCaml [`3ddc8a3e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3ddc8a3e) +- Add all ML file extensions [`6ba6e49c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6ba6e49c) +- Add ML family icon (inc. Standard ML) [`c7398ce5`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c7398ce5) +- Add Forth support Clean up SVG files [`dcfc98d7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/dcfc98d7) +- Add support for Lisp [`54e86277`](https://github.com/material-extensions/vscode-material-icon-theme/commit/54e86277) +- Update fileIcons.ts [`0ca6e45e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0ca6e45e) +- Update languageIcons.ts [`55981033`](https://github.com/material-extensions/vscode-material-icon-theme/commit/55981033) +- Create pawn.svg [`ba0f529d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ba0f529d) +- Add icon for Tiltfile (https://tilt.dev/) [`84e8d8fb`](https://github.com/material-extensions/vscode-material-icon-theme/commit/84e8d8fb) +- Add vala icon [`a4b535e4`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a4b535e4) + +#### [v4.1.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.0.1...v4.1.0) + +> April 26, 2020 + +- Remove trailing whitespace [`67f1fd5e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/67f1fd5e) +- Run linter with GitHub actions [`95671146`](https://github.com/material-extensions/vscode-material-icon-theme/commit/95671146) +- Update apollo file icon (References #695) [`f4626d9a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f4626d9a) +- Align nrwl icon [`574ab087`](https://github.com/material-extensions/vscode-material-icon-theme/commit/574ab087) +- Add nrwl icon for nx.json [`53533461`](https://github.com/material-extensions/vscode-material-icon-theme/commit/53533461) +- Merge dhall file extensions from PR #570 [`f4b0e82d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f4b0e82d) +- Add dhall file icon (Closes #662) [`1dffab95`](https://github.com/material-extensions/vscode-material-icon-theme/commit/1dffab95) +- Update commitlint icon [`84296617`](https://github.com/material-extensions/vscode-material-icon-theme/commit/84296617) +- Add commitlint file icon (Closes #638) [`3bcf866e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3bcf866e) +- Finalize UML file icon (References #392) [`ce05042f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ce05042f) +- Update laravel file icon (References #637) [`d001f34c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d001f34c) +- Add ipa file extension to applescript icon [`6bac54dc`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6bac54dc) +- Add perl icon to *.raku files (Closes #668) [`7d324df9`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7d324df9) +- Add buck file icon [`d5ef0310`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d5ef0310) +- Update folderIcons.png [`45d8bcdc`](https://github.com/material-extensions/vscode-material-icon-theme/commit/45d8bcdc) +- Update folderIcons.ts [`3edb5c8b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3edb5c8b) +- Update folderIcons.ts [`1cd705a6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/1cd705a6) +- Delete folder-emails.svg [`825cdccc`](https://github.com/material-extensions/vscode-material-icon-theme/commit/825cdccc) +- Delete folder-emails-open.svg [`cc273e9c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/cc273e9c) +- Fix django file extension association (Fixes #693) [`f3381211`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f3381211) +- Update laravel.svg [`abc5b065`](https://github.com/material-extensions/vscode-material-icon-theme/commit/abc5b065) +- Add "common" as an alias for "shared" [`19d2ac9e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/19d2ac9e) +- added apollo config icon [`af7736f7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/af7736f7) +- Add folder email icons [`f7660c0e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f7660c0e) +- Update fileIcons.ts [`18f251ee`](https://github.com/material-extensions/vscode-material-icon-theme/commit/18f251ee) +- Update rollup file icon [`e607049b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/e607049b) +- Add l10n folder icon (abr. localization) [`c40f9160`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c40f9160) +- Add Routers folder name to routers [`88a6c624`](https://github.com/material-extensions/vscode-material-icon-theme/commit/88a6c624) +- Slightly reduce size of meson file icon (References #678) [`6ca0ff6e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6ca0ff6e) +- Add margin on all sides [`2acb80a8`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2acb80a8) +- Apply material color and fix transparency [`4861d90d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/4861d90d) +- Remove file extension 'build' to make it specific to meson.build filename [`61d18566`](https://github.com/material-extensions/vscode-material-icon-theme/commit/61d18566) +- Add firebase folder icon (Closes #555) [`cafcc5ce`](https://github.com/material-extensions/vscode-material-icon-theme/commit/cafcc5ce) +- Update firebase file icon (References #555) [`bfb172ad`](https://github.com/material-extensions/vscode-material-icon-theme/commit/bfb172ad) +- Add meson icon [`a2a442da`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a2a442da) +- Fix dependency issue to vscode in preview script [`9831f58f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/9831f58f) +- Update Adonis file icon (References #658) [`1034fd45`](https://github.com/material-extensions/vscode-material-icon-theme/commit/1034fd45) +- Add more associations for functions folder icon [`79ffcabb`](https://github.com/material-extensions/vscode-material-icon-theme/commit/79ffcabb) +- Add .devcontainer folder icon association [`548928b0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/548928b0) +- Remove unnecessary file names [`1f04fd4e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/1f04fd4e) +- Remove unused code [`40881707`](https://github.com/material-extensions/vscode-material-icon-theme/commit/40881707) +- Refactor code [`a133ab0c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a133ab0c) +- Refactor code with nullish coalescing and optional chaining [`e4920f5a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/e4920f5a) +- Bump acorn from 6.4.0 to 6.4.1 [`1ef5eb6f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/1ef5eb6f) +- Update container folder icon [`7c5a5d62`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7c5a5d62) +- Add json file extension to babel file association [`3d0be815`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3d0be815) +- Add stencil folder icon (Closes #659) [`8f31e309`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8f31e309) +- Update stencil file icon (references #659) [`3e8f10f6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3e8f10f6) +- Add icon to fileicons [`b6c065ac`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b6c065ac) +- [Icon Request] AdonisJs icon [`a85a4676`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a85a4676) +- Add Dhall icon [`2ca9a8f0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2ca9a8f0) +- Remove comment [`3c52d453`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3c52d453) +- Add UML icon [`173e35ec`](https://github.com/material-extensions/vscode-material-icon-theme/commit/173e35ec) + +#### [v4.0.1](https://github.com/material-extensions/vscode-material-icon-theme/compare/v4.0.0...v4.0.1) + +> March 1, 2020 + +- Do not ignore CHANGELOG.md [`0a6fcf55`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0a6fcf55) + +#### [v4.0.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v3.9.3...v4.0.0) + +> March 1, 2020 + +- Ignore files to reduce extension size [`d9a6be01`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d9a6be01) +- Remove unused imports [`196293aa`](https://github.com/material-extensions/vscode-material-icon-theme/commit/196293aa) +- Remove outdated versioning support [`30d19cb1`](https://github.com/material-extensions/vscode-material-icon-theme/commit/30d19cb1) +- Add Sketch icon [`32f3e1d9`](https://github.com/material-extensions/vscode-material-icon-theme/commit/32f3e1d9) +- Update Ruby icon [`f533d23f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f533d23f) +- Remove open dependency (Closes #386) [`c41ca8bd`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c41ca8bd) +- Add "workspace" to extensionKind [`9f413ea0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/9f413ea0) +- Improve test setup and fix tests [`91b89d22`](https://github.com/material-extensions/vscode-material-icon-theme/commit/91b89d22) +- Fix test [`fd1b62e2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/fd1b62e2) +- Rename method for better semantic [`5cae039d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/5cae039d) +- Add capacitor icon [`a2274907`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a2274907) +- Prompt to reload dialog is not required anymore for the latest version [`696f0c0a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/696f0c0a) +- Handle overwriting conflicts with icon generator [`7cd213b7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7cd213b7) +- Append hash value to icon file name if content changes [`33a238ac`](https://github.com/material-extensions/vscode-material-icon-theme/commit/33a238ac) +- Remove side effects of getObjectPropertyValue method [`c803b434`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c803b434) +- Refactor code [`44f00310`](https://github.com/material-extensions/vscode-material-icon-theme/commit/44f00310) +- Add husky filename [`be1737ab`](https://github.com/material-extensions/vscode-material-icon-theme/commit/be1737ab) +- Add azure-pipeline icon to files ending with *.azure-pipelines.yaml [`57d67e88`](https://github.com/material-extensions/vscode-material-icon-theme/commit/57d67e88) +- Remove outdated build action of NodeJS v8 [`cfda11ef`](https://github.com/material-extensions/vscode-material-icon-theme/commit/cfda11ef) +- Add ESLint rules [`a850dda5`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a850dda5) +- Add VSCode extension recommendations [`96fe5fec`](https://github.com/material-extensions/vscode-material-icon-theme/commit/96fe5fec) +- Apply ESLint rules [`970544c5`](https://github.com/material-extensions/vscode-material-icon-theme/commit/970544c5) +- Migrate from TSLint to ESLint [`cd9930f5`](https://github.com/material-extensions/vscode-material-icon-theme/commit/cd9930f5) +- Add coconut icon (Closes #500) [`f76109ba`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f76109ba) + +#### [v3.9.3](https://github.com/material-extensions/vscode-material-icon-theme/compare/v3.9.2...v3.9.3) + +> February 9, 2020 + +- Use CSS variable for background color [`be33e5df`](https://github.com/material-extensions/vscode-material-icon-theme/commit/be33e5df) +- Update header and badges in Readme [`55aefa56`](https://github.com/material-extensions/vscode-material-icon-theme/commit/55aefa56) +- Add husky icon (Closes #355) [`d98e55d3`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d98e55d3) +- Add prolog icon (Closes #519) [`17dd6e5c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/17dd6e5c) +- Improve zig SVG icon file [`febfebd3`](https://github.com/material-extensions/vscode-material-icon-theme/commit/febfebd3) +- Add support for .env.staging.local file [`afa3dd8f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/afa3dd8f) +- Add prolog icon [`d28d2adf`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d28d2adf) +- Change font of Q# icon [`bec61068`](https://github.com/material-extensions/vscode-material-icon-theme/commit/bec61068) +- Add tune icon to qa env file [`8bcfd3eb`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8bcfd3eb) +- Add mobile folder (Closes #605) [`ab022cc8`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ab022cc8) +- Add icon association for .yarnrc.yml [`96b6990e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/96b6990e) +- Add pug icon to pug lint files [`af561d4c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/af561d4c) +- Add webpack.production and webpack.development to webpack detection [`2afed011`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2afed011) +- #594 Minimize icon size [`cd8110d3`](https://github.com/material-extensions/vscode-material-icon-theme/commit/cd8110d3) +- updade from shopify to liquid [`50996ee7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/50996ee7) +- Add zig icon [`3df31148`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3df31148) +- Add Q# icon [`509387c2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/509387c2) +- Set json5 icon to json icon [`cba9f085`](https://github.com/material-extensions/vscode-material-icon-theme/commit/cba9f085) +- Added ".env.sample" to the Tune icon [`4d329433`](https://github.com/material-extensions/vscode-material-icon-theme/commit/4d329433) +- Map azure-pipelines.yaml to azure-pipelines [`f00c2395`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f00c2395) +- Add Shopify .liquid file icon [`aabfaaf6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/aabfaaf6) +- Update kl icon [`a0f013f9`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a0f013f9) + +#### [v3.9.2](https://github.com/material-extensions/vscode-material-icon-theme/compare/v3.9.1...v3.9.2) + +> November 24, 2019 + +- Update netlify fileNames with new extensions (Closes #577) [`a6a04aa3`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a6a04aa3) +- Add file icon for .mjmlconfig [`8d29f972`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8d29f972) +- Add Fortran icon (Closes #368) [`7c5434fa`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7c5434fa) +- #534 Remove file extension which is already in use by another icon [`574f24ed`](https://github.com/material-extensions/vscode-material-icon-theme/commit/574f24ed) +- #534 Update colors and minify svg files [`59159624`](https://github.com/material-extensions/vscode-material-icon-theme/commit/59159624) +- #534 Add file extensions to prw [`221ce960`](https://github.com/material-extensions/vscode-material-icon-theme/commit/221ce960) +- Revert "Add MSIX to executable icon definition" [`91be037d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/91be037d) +- Add MSIX to executable icon definition [`ced792c1`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ced792c1) +- Add various 3D format [`8eebd043`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8eebd043) +- Add various raster image format [`7a474aa0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7a474aa0) +- Add githooks folder icon [`b5047d71`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b5047d71) +- Add disc (*.iso) icon [`3b08b211`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3b08b211) +- #537 Update codecov icon [`d057456f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d057456f) +- Add router folder name (Closes #564) [`dd80a8f5`](https://github.com/material-extensions/vscode-material-icon-theme/commit/dd80a8f5) +- Add .env.testing [`76fb3361`](https://github.com/material-extensions/vscode-material-icon-theme/commit/76fb3361) +- Add GCP icon (Closes #556) [`3ed2c9fc`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3ed2c9fc) +- Add apk file extension for android [`00ae57a7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/00ae57a7) +- #543 Update JSON folder icon [`50207177`](https://github.com/material-extensions/vscode-material-icon-theme/commit/50207177) +- Add file icon for CODEOWNERS [`bff275cb`](https://github.com/material-extensions/vscode-material-icon-theme/commit/bff275cb) +- add - icon : json folder [`96a2e9cf`](https://github.com/material-extensions/vscode-material-icon-theme/commit/96a2e9cf) +- add codecov icon [`4eabe245`](https://github.com/material-extensions/vscode-material-icon-theme/commit/4eabe245) +- added icons for advpl projects [`d9fd5426`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d9fd5426) + +#### [v3.9.1](https://github.com/material-extensions/vscode-material-icon-theme/compare/v3.9.0...v3.9.1) + +> October 7, 2019 + +- Fix #547 - Create image of contributors profile image list [`088fc539`](https://github.com/material-extensions/vscode-material-icon-theme/commit/088fc539) +- Update build workflow to support pull requests [`534737b2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/534737b2) +- Fixes #548 - Exception thrown when using Japanese display language [`16757906`](https://github.com/material-extensions/vscode-material-icon-theme/commit/16757906) +- Add more jest extensions [`611be50a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/611be50a) +- Create build.yml [`c4acbbb2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c4acbbb2) +- Add types for glob [`2cf7c89e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2cf7c89e) +- Add "databases" to "database" folder names [`3ee46c8c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3ee46c8c) +- Add build.yml [`a4291642`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a4291642) + +#### [v3.9.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v3.8.1...v3.9.0) + +> August 29, 2019 + +- Improve code quality of contributors script [`c8b9a4fb`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c8b9a4fb) +- Improve logging of check script [`2e2bb343`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2e2bb343) +- #514 Update color of event folder [`64a7a680`](https://github.com/material-extensions/vscode-material-icon-theme/commit/64a7a680) +- Add e2e-spec file extension [`00967715`](https://github.com/material-extensions/vscode-material-icon-theme/commit/00967715) +- #501 Update colors of nest and nest module icons [`52ad75c1`](https://github.com/material-extensions/vscode-material-icon-theme/commit/52ad75c1) +- #501 Sort enum alphabetically [`bcb29b2f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/bcb29b2f) +- #501 Update NestJS icons [`a5cf20f1`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a5cf20f1) +- #520 Remove unused function [`676cda1e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/676cda1e) +- Add bazel file names [`0558790c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0558790c) +- Remove appveyor build badge [`c66742a6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c66742a6) +- Added AC3D (.ac) file icon. [`e966f687`](https://github.com/material-extensions/vscode-material-icon-theme/commit/e966f687) +- Add gitpod file icon [`3c68d3b4`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3c68d3b4) +- #497 Update riot icon [`b458e50a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b458e50a) +- feat: Add `env` to environment folder list [`d279abd2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d279abd2) +- feat: Add folder-event icon [`d61d82be`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d61d82be) +- Update dependencies [`1baf5eb0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/1baf5eb0) +- Associate ".expo-shared" with the expo folder icon [`56c557b0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/56c557b0) +- Add inl file extension [`cc717489`](https://github.com/material-extensions/vscode-material-icon-theme/commit/cc717489) +- Add percy file icon (Closes #508) [`ccfd9979`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ccfd9979) +- Update appveyor build configuration [`4f34317c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/4f34317c) +- Remove azure pipelines [`c35be728`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c35be728) +- Remove unused vscode dependency [`c87193ad`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c87193ad) +- Add azure pipelines [`7665d279`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7665d279) +- Update test setup [`2f1e5d12`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2f1e5d12) +- #470 Update now icons [`5a3ff7e1`](https://github.com/material-extensions/vscode-material-icon-theme/commit/5a3ff7e1) +- Add jenkins file extensions [`1c36ac27`](https://github.com/material-extensions/vscode-material-icon-theme/commit/1c36ac27) +- NestJS Icons - add main filetypes to NestJS [`102bbad7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/102bbad7) +- Adjust check scripts to be case insensitive (Closes #494) [`9fa2dd27`](https://github.com/material-extensions/vscode-material-icon-theme/commit/9fa2dd27) +- Update riot.svg [`b31fb4de`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b31fb4de) +- add `.nowignore` to filenames [`4d861c21`](https://github.com/material-extensions/vscode-material-icon-theme/commit/4d861c21) +- use the `fileNames` attribute instead of `fileExtensions` for `now.json` [`6b21c47d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6b21c47d) +- fix now light version [`f94d8d91`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f94d8d91) +- add now icon for `now.json` [`f96527d6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f96527d6) + +#### [v3.8.1](https://github.com/material-extensions/vscode-material-icon-theme/compare/v3.8.0...v3.8.1) + +> July 17, 2019 + +- #490 Update folder color and change motive icon from outline to filled icon [`6b720d9a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6b720d9a) +- Update dependencies [`2efaf4f6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2efaf4f6) +- Removing HPP [`adc80af7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/adc80af7) +- Removing case sensitive conflicts [`8ff814d3`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8ff814d3) +- Add moonscript icon (Closes #485) [`ad315cba`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ad315cba) +- feat: Add jsx and tsx extensions to router icons. [`3c8e2ebe`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3c8e2ebe) +- feat: Add folder-error to icon map [`3c2594a0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3c2594a0) +- feat: Create folder-error icons [`8082ab16`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8082ab16) +- Add C/C++ cases based on GNU standards [`52f39101`](https://github.com/material-extensions/vscode-material-icon-theme/commit/52f39101) +- Add env file extension (Closes #484) [`ce9fcceb`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ce9fcceb) +- Refactor code in change detection [`22966c7f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/22966c7f) +- Add website folder icon [`a53205d3`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a53205d3) +- Use tex icon for .dtx and .ltx files [`87af29d2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/87af29d2) +- Add nest icon [`0212fe87`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0212fe87) +- Update Readme.md [`80998844`](https://github.com/material-extensions/vscode-material-icon-theme/commit/80998844) +- #475 Update color of go mod icon [`1aeb951a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/1aeb951a) +- Change icon name to underscore notation and removed languageIcons entry. [`bd3b0100`](https://github.com/material-extensions/vscode-material-icon-theme/commit/bd3b0100) +- Added go.mod and go.sum icons [`2a1afd9d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2a1afd9d) +- Added certificate icon to unlicense files [`2b0d0e56`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2b0d0e56) +- #448 Add non breaking spaces to improve layout in readme [`2465eb14`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2465eb14) +- Add PostCSS file names (Closes #461) [`0a61e12c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0a61e12c) +- #448 Remove whitespaces [`0b360d41`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0b360d41) +- #448 Update readme with contributor images [`02f8712f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/02f8712f) +- Update readme text [`441ca9f5`](https://github.com/material-extensions/vscode-material-icon-theme/commit/441ca9f5) +- #448 Update contributors URL [`baf2d52b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/baf2d52b) +- #448 Create image of contributors list [`bc9a97b3`](https://github.com/material-extensions/vscode-material-icon-theme/commit/bc9a97b3) +- #448 Add npm script [`25089950`](https://github.com/material-extensions/vscode-material-icon-theme/commit/25089950) +- #448 Remove output files [`9701f532`](https://github.com/material-extensions/vscode-material-icon-theme/commit/9701f532) +- remove leading dot [`c8daf321`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c8daf321) +- #448 Add contributors script [`0d4e02b5`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0d4e02b5) +- use fileExtensions for gitlab icon [`3b2847da`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3b2847da) +- Update vim icon color and size [`#458`](https://github.com/material-extensions/vscode-material-icon-theme/pull/458) +- Add icons for Brotli [`56c9d410`](https://github.com/material-extensions/vscode-material-icon-theme/commit/56c9d410) +- Add silverstripe icon (Closes #457) [`5b850a97`](https://github.com/material-extensions/vscode-material-icon-theme/commit/5b850a97) +- fix typo [`2a6bd74e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2a6bd74e) +- Add Vim icon [`fc4df5b0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/fc4df5b0) +- Add nodemon file name (nodemon-debug.json) [`dcb45130`](https://github.com/material-extensions/vscode-material-icon-theme/commit/dcb45130) + +#### [v3.8.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v3.7.0...v3.8.0) + +> May 25, 2019 + +- Updated translation keys [`490d2c2d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/490d2c2d) +- Updated command names [`e59aee94`](https://github.com/material-extensions/vscode-material-icon-theme/commit/e59aee94) +- Improved compatibility for older versions of VS Code [`3fedead6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3fedead6) +- Enable hot reload for hidesExplorerArrows configuration (Closes #454) [`c65d9a69`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c65d9a69) +- Update nuxt icons (Related to #450) [`42de81dd`](https://github.com/material-extensions/vscode-material-icon-theme/commit/42de81dd) +- Compress icons [`7dc5faa4`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7dc5faa4) +- Show language icons in preview (Fixes #421) [`05bde2bd`](https://github.com/material-extensions/vscode-material-icon-theme/commit/05bde2bd) +- Add Polish translation [`affaca88`](https://github.com/material-extensions/vscode-material-icon-theme/commit/affaca88) +- Update color of netlify icon [`d6da2f1d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d6da2f1d) +- Updated dependencies [`443586e2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/443586e2) +- Add directives icon [`62a52e01`](https://github.com/material-extensions/vscode-material-icon-theme/commit/62a52e01) +- Remove whitespace [`7f8553dc`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7f8553dc) +- Add nuxt icons [`70f053b7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/70f053b7) +- Updated open dependency [`dfa3c069`](https://github.com/material-extensions/vscode-material-icon-theme/commit/dfa3c069) +- adds .mocharc.js [`c7323071`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c7323071) +- adds .mocharc icons [`9e8dab08`](https://github.com/material-extensions/vscode-material-icon-theme/commit/9e8dab08) +- Add Dutch translation. [`2789ca81`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2789ca81) +- Set "extensionKind": "ui" to support remote development [`222f6edf`](https://github.com/material-extensions/vscode-material-icon-theme/commit/222f6edf) +- Added svelte file icon (Closes #439) [`22a83ed4`](https://github.com/material-extensions/vscode-material-icon-theme/commit/22a83ed4) +- Refactored code [`e7d12a58`](https://github.com/material-extensions/vscode-material-icon-theme/commit/e7d12a58) +- Added tsbuildinfo [`c408ac8b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c408ac8b) +- Added translations [`3e3abc7b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3e3abc7b) +- Updated vue icons [`3e5e7d56`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3e5e7d56) +- Add new 'leex' extension to elixir icon. [`6c0be766`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6c0be766) +- added tune icon to .env file names supported by Create React App [`b46932d8`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b46932d8) +- Remove whitespace add router icon for vue theme [`1bc44dd2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/1bc44dd2) +- Add vue and vuex_vuex theme [`fd6a171c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/fd6a171c) +- add netlify file icon [`8960ceac`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8960ceac) + +#### [v3.7.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v3.6.3...v3.7.0) + +> March 24, 2019 + +- Improved npm scripts [`85365f23`](https://github.com/material-extensions/vscode-material-icon-theme/commit/85365f23) +- feat: Add `.cson` and `.iced` CoffeeScript extensions [`3c3c819e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3c3c819e) +- Updated vscode ignore [`2863fd3f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2863fd3f) +- Updated vscode ignore [`5f04a9d7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/5f04a9d7) +- Added hot reload in change detection [`bee8e0c3`](https://github.com/material-extensions/vscode-material-icon-theme/commit/bee8e0c3) +- Added svg folder icon (Closes #358) [`94863f0f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/94863f0f) +- Added svg file icon (Closes #400) [`72663adf`](https://github.com/material-extensions/vscode-material-icon-theme/commit/72663adf) +- Updated travis-ci badge [`ba1fa2a6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ba1fa2a6) +- Updated generation of preview images [`d38de4e5`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d38de4e5) +- Updated build scripts [`760b3539`](https://github.com/material-extensions/vscode-material-icon-theme/commit/760b3539) +- Bundle code in production mode [`9f23ebf6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/9f23ebf6) +- Bundle extension with webpack [`6850337e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6850337e) +- Refactored code [`f21ca04c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f21ca04c) +- Added pipe folder icon (Closes #403) [`5fc86ecc`](https://github.com/material-extensions/vscode-material-icon-theme/commit/5fc86ecc) +- Remove extra dot [`74c48935`](https://github.com/material-extensions/vscode-material-icon-theme/commit/74c48935) +- Use clojure icon for .cljc files [`1295f3a5`](https://github.com/material-extensions/vscode-material-icon-theme/commit/1295f3a5) +- Update folderIcons.ts [`ae31aebc`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ae31aebc) +- Allow custom saturation values for icons [`aea186ae`](https://github.com/material-extensions/vscode-material-icon-theme/commit/aea186ae) +- Added .graphqlconfig [`c7ffad88`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c7ffad88) +- Add additional gatsby file names [`ed2a1d6a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ed2a1d6a) +- Updated badges [`ff560d8d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ff560d8d) +- Add config for grayscale icons [`f5a2e4cd`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f5a2e4cd) +- Add web folder icon [`f2b6a8b9`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f2b6a8b9) +- Join gatsby filenames to the single array [`21faf349`](https://github.com/material-extensions/vscode-material-icon-theme/commit/21faf349) +- Fix gatsby config fileName. Add gatsby-node fileName to existing gatsby icon [`79d8cda9`](https://github.com/material-extensions/vscode-material-icon-theme/commit/79d8cda9) + +#### [v3.6.3](https://github.com/material-extensions/vscode-material-icon-theme/compare/v3.6.2...v3.6.3) + +> February 8, 2019 + +- Add Prisma Folder Icons [`4d0fbcb4`](https://github.com/material-extensions/vscode-material-icon-theme/commit/4d0fbcb4) +- Updated buildkite icon (References #354) [`bf754960`](https://github.com/material-extensions/vscode-material-icon-theme/commit/bf754960) +- Updated buildkite icon (References #354) [`6df27fb2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6df27fb2) +- Updated size of graphql icon (References #380) [`128092c5`](https://github.com/material-extensions/vscode-material-icon-theme/commit/128092c5) +- Added GraphQL folder icon [`ada12853`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ada12853) +- Added Scheme icon (Closes #364) [`a9194769`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a9194769) +- Added crystal icon on .ecr ( Embedded Crystal ) [`9afc89c8`](https://github.com/material-extensions/vscode-material-icon-theme/commit/9afc89c8) +- Added crystal icon on .ecr ( Embedded Crystal ) [`af5eac85`](https://github.com/material-extensions/vscode-material-icon-theme/commit/af5eac85) +- Updated size and color (References #369) [`074bf180`](https://github.com/material-extensions/vscode-material-icon-theme/commit/074bf180) +- Added validation(s) folder association (Closes #375) [`b754d7a5`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b754d7a5) +- Added dot-file-style for AppVeyor [`b1251ae6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b1251ae6) +- Added PureScript file extension (Closes #365) [`0f345a37`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0f345a37) +- Add Tailwind CSS icon [`674fe790`](https://github.com/material-extensions/vscode-material-icon-theme/commit/674fe790) +- Corrected file [`7792e59b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7792e59b) +- added obj icon [`ee01d66c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ee01d66c) +- Updated buildkite icon [`00271210`](https://github.com/material-extensions/vscode-material-icon-theme/commit/00271210) +- add icon for Buildkite [`3e24d1b9`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3e24d1b9) + +#### [v3.6.2](https://github.com/material-extensions/vscode-material-icon-theme/compare/v3.6.1...v3.6.2) + +> December 20, 2018 + +- Updated expo folder icon (References #84) [`bc94e9f3`](https://github.com/material-extensions/vscode-material-icon-theme/commit/bc94e9f3) +- Added edge icon (Closes #359) [`2a27eb79`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2a27eb79) +- Added Istanbul icon (Closes #192) [`f9a32ca7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f9a32ca7) +- Added Angular related folder icons (References #350) [`49122b4f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/49122b4f) +- Updated icon name [`c056f2b3`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c056f2b3) +- Added asciidoc file icon (Closes #352) [`6b0a8bb5`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6b0a8bb5) +- Added folder icons: - animation - review - rules - syntax [`cfec8f13`](https://github.com/material-extensions/vscode-material-icon-theme/commit/cfec8f13) +- Added private and secure folder icons [`32f69b16`](https://github.com/material-extensions/vscode-material-icon-theme/commit/32f69b16) +- Updated folder icons - app - ngrx-state [`ed402f4b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ed402f4b) +- Added Ngrx store folder icon (Closes #349) [`45b8030b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/45b8030b) +- Updated log messages of scripts [`00e49784`](https://github.com/material-extensions/vscode-material-icon-theme/commit/00e49784) +- Updated screenshots script (References #319) [`61029939`](https://github.com/material-extensions/vscode-material-icon-theme/commit/61029939) +- Add some alias for build and python test [`e4d3d8f8`](https://github.com/material-extensions/vscode-material-icon-theme/commit/e4d3d8f8) +- Add alias .webpack for webpack [`cc226c69`](https://github.com/material-extensions/vscode-material-icon-theme/commit/cc226c69) +- Add .idea folder icon for intellij/jetbrain suite meta folder [`ac265ee1`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ac265ee1) +- Add alias to syntax folder, definition [`dd1970d9`](https://github.com/material-extensions/vscode-material-icon-theme/commit/dd1970d9) +- Add flow-typed folder icons [`54adacf9`](https://github.com/material-extensions/vscode-material-icon-theme/commit/54adacf9) +- Add some folder aliases [`f857ac27`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f857ac27) +- Reposition two folder icons [`f6aa4a10`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f6aa4a10) +- Add new folder icons storybook and stylus based on file icon [`fad7282d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/fad7282d) +- Add new folder icons: mock,syntax,styleguide,scenario,vm [`02febad7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/02febad7) +- Add a node js icon on filder node :art: [`3f3e520b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3f3e520b) +- Add the forgotten docker-compose.test.yml to the dockers file [`e1de3ba8`](https://github.com/material-extensions/vscode-material-icon-theme/commit/e1de3ba8) +- Add icon for grunt folder [`cdde91d6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/cdde91d6) +- Singularize screenshot and icon folder icons from images [`92954c65`](https://github.com/material-extensions/vscode-material-icon-theme/commit/92954c65) +- Add two new folder icon e2e for end to end test and custom [`95e6f7e4`](https://github.com/material-extensions/vscode-material-icon-theme/commit/95e6f7e4) +- Added file prefix to puppeteer page link [`a95d4b2e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a95d4b2e) + +#### [v3.6.1](https://github.com/material-extensions/vscode-material-icon-theme/compare/v3.6.0...v3.6.1) + +> November 21, 2018 + +- Updated functions folder icon [`61fbd226`](https://github.com/material-extensions/vscode-material-icon-theme/commit/61fbd226) +- Improved preview script [`c57466f7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c57466f7) +- Minor improvements [`73cea76c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/73cea76c) +- fix: add missing comma [`64ba4343`](https://github.com/material-extensions/vscode-material-icon-theme/commit/64ba4343) +- Adding Visual Studio config files & .clang-tidy [`3b817a5d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3b817a5d) +- Refined folder icons (References #339) [`86ec9ecb`](https://github.com/material-extensions/vscode-material-icon-theme/commit/86ec9ecb) +- Adding some docker compose aliases [`442cb337`](https://github.com/material-extensions/vscode-material-icon-theme/commit/442cb337) +- Refined Razor icon (References #342) [`85b7c635`](https://github.com/material-extensions/vscode-material-icon-theme/commit/85b7c635) +- Updated dependencies [`d2136472`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d2136472) +- Updated color of dump folder icon (Related to #339) [`8f1a267f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8f1a267f) +- Updated color of examples folder icon (Related to #339) [`ab4087ed`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ab4087ed) +- Updated generator icon (Related to #339) [`2c06a14f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2c06a14f) +- Updated folder icon associations (Related to #339) [`612a148c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/612a148c) +- Optimized icon colors (Related to #339) [`5ddc2d2c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/5ddc2d2c) +- Try to apply color guidelines =) [`d75083fd`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d75083fd) +- Add examples folder icon [`f85c6080`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f85c6080) +- Updated secondary file icons (vue.config, js.map, css.map) [`e47ad39c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/e47ad39c) +- Updated python-file (Related to #340) [`331c8e25`](https://github.com/material-extensions/vscode-material-icon-theme/commit/331c8e25) +- Added .env file icon associations (Fixes #261) [`bf0054ce`](https://github.com/material-extensions/vscode-material-icon-theme/commit/bf0054ce) +- Add a python-file icon that is assign to python related files [`281f5f88`](https://github.com/material-extensions/vscode-material-icon-theme/commit/281f5f88) +- Add some alias to existing folder directories [`43c97209`](https://github.com/material-extensions/vscode-material-icon-theme/commit/43c97209) +- Add mapping for the new icons [`a8b92bbd`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a8b92bbd) +- Add color to all the new icons :art: :rainbow: [`69ed51df`](https://github.com/material-extensions/vscode-material-icon-theme/commit/69ed51df) +- Generated all the open folder with a little cut&sed command :wink: [`757007ea`](https://github.com/material-extensions/vscode-material-icon-theme/commit/757007ea) +- Optimise with svgo and reformat xml [`5268c5db`](https://github.com/material-extensions/vscode-material-icon-theme/commit/5268c5db) +- Reposition icon with inkscape [`b70ef94a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b70ef94a) +- Add a last massive batch of folder icons, no positionning so far [`cf75ccab`](https://github.com/material-extensions/vscode-material-icon-theme/commit/cf75ccab) +- Declare the serverless folder icon [`71a180df`](https://github.com/material-extensions/vscode-material-icon-theme/commit/71a180df) +- Optimise serverless and set color [`60694585`](https://github.com/material-extensions/vscode-material-icon-theme/commit/60694585) +- Reformat all the news icons svg [`ed070795`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ed070795) +- Second Batch of icons without colors so far [`9c8ad583`](https://github.com/material-extensions/vscode-material-icon-theme/commit/9c8ad583) +- Add a bunch of new folder icons colorless for now [`d1b54e35`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d1b54e35) +- Added Procfile.windows [`dbaa5eb8`](https://github.com/material-extensions/vscode-material-icon-theme/commit/dbaa5eb8) +- Add "typings" and "@types" as a TypeScript folder (Resolves #337) [`ca0b5231`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ca0b5231) +- Lowercase file names [`69bee83c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/69bee83c) +- Add docker-compose.staging.yml to Docker icons [`0dd6d1c7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0dd6d1c7) +- Added Vagrantfile icon (Closes #324) [`559809f3`](https://github.com/material-extensions/vscode-material-icon-theme/commit/559809f3) +- Added .tsx icon (Closes #322) [`37938673`](https://github.com/material-extensions/vscode-material-icon-theme/commit/37938673) +- Added middleware folder icon [`6344e102`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6344e102) +- Updated powershell icon [`9f4f5de5`](https://github.com/material-extensions/vscode-material-icon-theme/commit/9f4f5de5) +- added icon for vue.config.js file [`a1adcdc2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a1adcdc2) +- Added Azure icons (Closes #321) [`22be92e8`](https://github.com/material-extensions/vscode-material-icon-theme/commit/22be92e8) +- Add Prisma folder and file icons [`37868e2c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/37868e2c) + +#### [v3.6.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v3.5.3...v3.6.0) + +> September 10, 2018 + +- Updated restore config command [`ec900d7a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ec900d7a) +- Fixed bugs - change detection must not trigger reload for invalid values [`8c6096cf`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8c6096cf) +- Adapting the extension to the new Settings GUI [`c4bb7af7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c4bb7af7) +- Adapting the extension to the new Settings GUI [`818f888f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/818f888f) +- Improved code quality [`6c1ddf41`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6c1ddf41) +- Fixed size of godot icons (References #316) [`622d1a59`](https://github.com/material-extensions/vscode-material-icon-theme/commit/622d1a59) +- Added godot icon [`c1a12bfe`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c1a12bfe) +- Added folder icons - android, ios (Closes #312) - client, server (References #296) - upload, dowload (References #218) - helpers - tasks (References #218) - tools - themes [`aba8cae7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/aba8cae7) +- Updated babel icon (Closes #315) [`bdac3d11`](https://github.com/material-extensions/vscode-material-icon-theme/commit/bdac3d11) +- Added: csx extension to csharp [`c481fe9f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c481fe9f) +- Added velocity icon (Closes #311) [`3e8f93bf`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3e8f93bf) +- Added mint icon (Closes #308) [`38f46abe`](https://github.com/material-extensions/vscode-material-icon-theme/commit/38f46abe) +- .clang-format + bazel icons [`24546999`](https://github.com/material-extensions/vscode-material-icon-theme/commit/24546999) +- Added authors icon (references #306) [`ca7c9401`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ca7c9401) +- Add `authors`, `authors.md`, and `authors.txt` to `credits` [`3de2107d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3de2107d) +- Removed bithound config file [`7b1c3f6b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7b1c3f6b) + +#### [v3.5.3](https://github.com/material-extensions/vscode-material-icon-theme/compare/v3.5.2...v3.5.3) + +> August 19, 2018 + +- Updated clojure icon [`93977cb9`](https://github.com/material-extensions/vscode-material-icon-theme/commit/93977cb9) +- Added racket icon (Closes #299) [`de87927c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/de87927c) +- Added ballerina icon (Closes #304) [`506c1a6a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/506c1a6a) +- Add 'stencil.config.ts' to fileIcons [`86409fb3`](https://github.com/material-extensions/vscode-material-icon-theme/commit/86409fb3) +- Updated dependencies [`b0972216`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b0972216) +- Added mdx icon (Closes #295) [`f35f38bf`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f35f38bf) +- Added docker-compose.prod.yml [`#294`](https://github.com/material-extensions/vscode-material-icon-theme/pull/294) +- Added d icon (Closes #291) [`d24a9914`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d24a9914) + +#### [v3.5.2](https://github.com/material-extensions/vscode-material-icon-theme/compare/v3.5.1...v3.5.2) + +> July 21, 2018 + +- Added Jekyll folder names (Closes #290) [`56a1829d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/56a1829d) +- Recognise gql extension as a GraphQL file [`#287`](https://github.com/material-extensions/vscode-material-icon-theme/pull/287) +- Added jupyter icon (Closes #285) [`eba7d7dc`](https://github.com/material-extensions/vscode-material-icon-theme/commit/eba7d7dc) +- Fixed bitbucket PR (Closes #283) [`66d4eaea`](https://github.com/material-extensions/vscode-material-icon-theme/commit/66d4eaea) +- Add babel.config.js to the babel association list [`#286`](https://github.com/material-extensions/vscode-material-icon-theme/pull/286) +- add bitbucket icon for bitbucket pipeline yaml files [`97f61fca`](https://github.com/material-extensions/vscode-material-icon-theme/commit/97f61fca) +- Added icon for semantic-release (Closes #279) [`f4de3973`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f4de3973) +- Added .luacheckrc (Closes #277) [`586b78a2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/586b78a2) +- Added webassembly icon [`8b407585`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8b407585) +- Added i18n icon (Closes #276) [`503fd114`](https://github.com/material-extensions/vscode-material-icon-theme/commit/503fd114) +- Updated dependencies [`b015bdc0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b015bdc0) +- Updated folder icons - node - test [`36cf5c79`](https://github.com/material-extensions/vscode-material-icon-theme/commit/36cf5c79) +- Added alternative node icon (Closes #262) [`0967da81`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0967da81) +- Updated translations [`7f7f716d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7f7f716d) + +#### [v3.5.1](https://github.com/material-extensions/vscode-material-icon-theme/compare/v3.5.0...v3.5.1) + +> June 28, 2018 + +- Added makefile icon (Closes #269) [`890665af`](https://github.com/material-extensions/vscode-material-icon-theme/commit/890665af) +- Added foxpro icon (Closes #239) [`6b743012`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6b743012) +- Added red lang icon (Closes #265) [`ac68c3e9`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ac68c3e9) +- Added Stencil icon (Closes #268) [`e3bbe96b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/e3bbe96b) +- Added Django icon (Closes #267) [`dd7f222c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/dd7f222c) +- Added wallaby icon (Closes #270) [`1545fd06`](https://github.com/material-extensions/vscode-material-icon-theme/commit/1545fd06) +- .env files for specific environments (Closes #261) [`8d60336b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8d60336b) +- Added san icon (Closes #260) [`97f97e70`](https://github.com/material-extensions/vscode-material-icon-theme/commit/97f97e70) +- Update Dart logo to match the official logo changes [`#259`](https://github.com/material-extensions/vscode-material-icon-theme/pull/259) + +#### [v3.5.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v3.4.0...v3.5.0) + +> May 31, 2018 + +- Improved folder HEX-color validation [`79c5fc00`](https://github.com/material-extensions/vscode-material-icon-theme/commit/79c5fc00) +- Compressed ansible folder icon References #254 [`ff0c95b5`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ff0c95b5) +- Add Ansible folder icon [`43d0723d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/43d0723d) +- Added controller folder icon (Closes #227) References #187 [`b1f1ae1a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b1f1ae1a) +- Generalize router file icon References #255 [`40a4a387`](https://github.com/material-extensions/vscode-material-icon-theme/commit/40a4a387) +- Improved folder icons - export - import [`93741b37`](https://github.com/material-extensions/vscode-material-icon-theme/commit/93741b37) +- Added command to change opacity [`e6c2c652`](https://github.com/material-extensions/vscode-material-icon-theme/commit/e6c2c652) +- Updated change detection - Fixed issue that new folder icons override the values of the opacity [`46695a9f`](https://github.com/material-extensions/vscode-material-icon-theme/commit/46695a9f) +- Updated opacity value type [`5fa8122d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/5fa8122d) +- Optimized icon sizes [`6d4bdedc`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6d4bdedc) +- Added helm icon (Closes #250) [`e8143f10`](https://github.com/material-extensions/vscode-material-icon-theme/commit/e8143f10) +- Added translations for opacity feature [`f844fafb`](https://github.com/material-extensions/vscode-material-icon-theme/commit/f844fafb) +- Improved generation of opacity attributes [`ca788af8`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ca788af8) +- Updated opacity value [`58d7a73e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/58d7a73e) +- Improved opacity feature [`cffaeea0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/cffaeea0) +- Set opacity of all icons [`6dcdac16`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6dcdac16) +- More React+Redux Ecosystem Icons (References #255) [`946a1d13`](https://github.com/material-extensions/vscode-material-icon-theme/commit/946a1d13) +- Storybook: associate typescript stories (Closes #258) [`8cdbcc0d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8cdbcc0d) +- Updated go icon (Closes #257) [`8a50a7c0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8a50a7c0) +- Updated todo icon (Closes #247) [`23b32b81`](https://github.com/material-extensions/vscode-material-icon-theme/commit/23b32b81) +- Assign the `console` icon to .fish files [`ec871e8e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ec871e8e) +- Updated hcl icons Closes #253 [`e6b1ecc5`](https://github.com/material-extensions/vscode-material-icon-theme/commit/e6b1ecc5) +- Add HashiCorp Configuration Language icon [`638b7217`](https://github.com/material-extensions/vscode-material-icon-theme/commit/638b7217) +- Added .htpasswd file icon mapping Closes #251 [`35057bfe`](https://github.com/material-extensions/vscode-material-icon-theme/commit/35057bfe) +- Adds docker-compose.yaml file association [`b6591416`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b6591416) +- Added angular.json - Closes #243 [`62aed590`](https://github.com/material-extensions/vscode-material-icon-theme/commit/62aed590) + +#### [v3.4.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v3.3.0...v3.4.0) + +> May 6, 2018 + +- Added plugins folder icon [`00e05a67`](https://github.com/material-extensions/vscode-material-icon-theme/commit/00e05a67) +- Force wildcards to overwrite file names if required - Closes #241 [`ae15ab58`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ae15ab58) +- Updated size and color of Ruby Gemfile icon References #240 [`9f4e8bc9`](https://github.com/material-extensions/vscode-material-icon-theme/commit/9f4e8bc9) +- โœจ add Ruby Gemfile icon [`0467aa30`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0467aa30) +- Improved fastlane icons References #237 [`8bb48448`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8bb48448) +- ๐Ÿ’„ add Fastlane icons [`85999f5c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/85999f5c) +- Updated dependencies [`b8ddd00b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b8ddd00b) +- Rearranged imports [`0b7a8b9b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0b7a8b9b) +- Added cfm icon mapping [`74d10557`](https://github.com/material-extensions/vscode-material-icon-theme/commit/74d10557) +- Added awk file icon mapping [`47fae343`](https://github.com/material-extensions/vscode-material-icon-theme/commit/47fae343) +- Added debug folder icon References #236 [`338782f2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/338782f2) +- Added .cache folder mapping [`9728bd5d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/9728bd5d) +- Updated version [`bb106bc4`](https://github.com/material-extensions/vscode-material-icon-theme/commit/bb106bc4) + +#### [v3.3.0](https://github.com/material-extensions/vscode-material-icon-theme/compare/v3.2.6...v3.3.0) + +> April 8, 2018 + +- Added __pycache__ folder icon mapping [`c13c060a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c13c060a) +- Added META-INF and manifest.mf icon associations [`58811d75`](https://github.com/material-extensions/vscode-material-icon-theme/commit/58811d75) +- Added option to disable restart message. References #225 [`08a0cbc9`](https://github.com/material-extensions/vscode-material-icon-theme/commit/08a0cbc9) +- Updated dependencies [`8bdabfde`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8bdabfde) +- Updated notification after update [`e378bd76`](https://github.com/material-extensions/vscode-material-icon-theme/commit/e378bd76) +- Added python folder icon [`5b96e34a`](https://github.com/material-extensions/vscode-material-icon-theme/commit/5b96e34a) +- Added wepy file icon (closes #226) [`07944764`](https://github.com/material-extensions/vscode-material-icon-theme/commit/07944764) +- Added less folder icon (closes #207) + Improved less file icon [`dcb4b8c4`](https://github.com/material-extensions/vscode-material-icon-theme/commit/dcb4b8c4) +- Added `jest.teardown.js` icon association Closes #230 [`fa26bbe2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/fa26bbe2) +- Added Storybook file icon Closes #235 [`8864d0a2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/8864d0a2) +- Updated html file icon mapping Added html icon for `*.xhtml`. [`92ffea70`](https://github.com/material-extensions/vscode-material-icon-theme/commit/92ffea70) +- Improved processing icon References #229 [`0c3277df`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0c3277df) +- added processing icon [`2c8ba32d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2c8ba32d) +- Improved Vue.js logo [`6eeb80c6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6eeb80c6) +- Fixes issue with config change detection References #225 [`50e40e8e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/50e40e8e) + +#### [v3.2.6](https://github.com/material-extensions/vscode-material-icon-theme/compare/v3.2.4...v3.2.6) + +> March 17, 2018 + +- Added '.vbs' file icon mapping [`6b374622`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6b374622) +- Added .nyc-output folder icon mapping #192 [`d275471c`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d275471c) +- Added jest icon #192 [`cac11bc0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/cac11bc0) +- added docker icon to the docker-compose.override.yml file [`2507e1be`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2507e1be) +- Updated tslint rules [`22233123`](https://github.com/material-extensions/vscode-material-icon-theme/commit/22233123) +- Fixed issue in change detection [`0c274589`](https://github.com/material-extensions/vscode-material-icon-theme/commit/0c274589) +- Added messages folder icon [`53f07f82`](https://github.com/material-extensions/vscode-material-icon-theme/commit/53f07f82) +- Added benchmark folder icon [`ff7bec01`](https://github.com/material-extensions/vscode-material-icon-theme/commit/ff7bec01) +- Fixed issue with wrong color of docker icon (Bugfix 3.2.5) [`cb8e074e`](https://github.com/material-extensions/vscode-material-icon-theme/commit/cb8e074e) + +#### [v3.2.4](https://github.com/material-extensions/vscode-material-icon-theme/compare/v3.2.3...v3.2.4) + +> March 10, 2018 + +- Added ci folder icon Closes #209 [`d025a378`](https://github.com/material-extensions/vscode-material-icon-theme/commit/d025a378) +- Updated grunt file References #213 [`80fe7bb1`](https://github.com/material-extensions/vscode-material-icon-theme/commit/80fe7bb1) +- Added another common settings extension [`66510004`](https://github.com/material-extensions/vscode-material-icon-theme/commit/66510004) +- added gruntfile icon [`c8ed7ce7`](https://github.com/material-extensions/vscode-material-icon-theme/commit/c8ed7ce7) +- Additional folder names [`03727fd2`](https://github.com/material-extensions/vscode-material-icon-theme/commit/03727fd2) +- Added routes folder icon References #112 [`83fe248b`](https://github.com/material-extensions/vscode-material-icon-theme/commit/83fe248b) +- Added i18n folder mappings Closes #206 [`67818469`](https://github.com/material-extensions/vscode-material-icon-theme/commit/67818469) +- Added class folder icon References #112 [`b53f307d`](https://github.com/material-extensions/vscode-material-icon-theme/commit/b53f307d) +- Updated scripts and dependencies [`bffeaaff`](https://github.com/material-extensions/vscode-material-icon-theme/commit/bffeaaff) +- Add .cfignore (Cloud Foundry) icon Closes #210 [`59aacd19`](https://github.com/material-extensions/vscode-material-icon-theme/commit/59aacd19) +- Updated change detection [`30e9b3bf`](https://github.com/material-extensions/vscode-material-icon-theme/commit/30e9b3bf) +- Optimized icons [`58476c52`](https://github.com/material-extensions/vscode-material-icon-theme/commit/58476c52) + +#### [v3.2.3](https://github.com/material-extensions/vscode-material-icon-theme/compare/v3.2.2...v3.2.3) + +> February 20, 2018 + +- Added typescript folder icons Improved current typescript file icons Closes #199 [`e8808a49`](https://github.com/material-extensions/vscode-material-icon-theme/commit/e8808a49) +- Improved folder icons: - Font - Git - Sass - Views [`a4747c32`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a4747c32) +- Updated mjml icon size #200 [`aa3658ea`](https://github.com/material-extensions/vscode-material-icon-theme/commit/aa3658ea) +- fix: add .postcssrc (JSON) to supported filenames. [`6b5338ca`](https://github.com/material-extensions/vscode-material-icon-theme/commit/6b5338ca) +- Added PostgreSQL icon mappings Closes #197 [`7fa96ec0`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7fa96ec0) +- Added mjml icon [`aabf8bbc`](https://github.com/material-extensions/vscode-material-icon-theme/commit/aabf8bbc) +- Added "other" folder icon References #187 #192 [`7f2c8393`](https://github.com/material-extensions/vscode-material-icon-theme/commit/7f2c8393) +- coverage folder icon #192 [`3961dac6`](https://github.com/material-extensions/vscode-material-icon-theme/commit/3961dac6) +- Added gradle folder icon #112 [`fed271e3`](https://github.com/material-extensions/vscode-material-icon-theme/commit/fed271e3) +- Updated colors of wordpress icons #194 [`a6ffe876`](https://github.com/material-extensions/vscode-material-icon-theme/commit/a6ffe876) +- Add Wordpress icons [`2ff2b2cd`](https://github.com/material-extensions/vscode-material-icon-theme/commit/2ff2b2cd) diff --git a/src/material-icons/CODE_OF_CONDUCT.md b/src/material-icons/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..897567a --- /dev/null +++ b/src/material-icons/CODE_OF_CONDUCT.md @@ -0,0 +1,127 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, religion, or sexual identity +and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our +community include: + +* Demonstrating empathy and kindness toward other people +* Being respectful of differing opinions, viewpoints, and experiences +* Giving and gracefully accepting constructive feedback +* Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience +* Focusing on what is best not just for us as individuals, but for the + overall community + +Examples of unacceptable behavior include: + +* The use of sexualized language or imagery, and sexual attention or + advances of any kind +* Trolling, insulting or derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or email + address, without their explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, and will communicate reasons for moderation +decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official e-mail address, +posting via an official social media account, or acting as an appointed +representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the community leaders responsible for enforcement at: . +All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the +reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed +unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing +clarity around the nature of the violation and an explanation of why the +behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series +of actions. + +**Consequence**: A warning with consequences for continued behavior. No +interaction with the people involved, including unsolicited interaction with +those enforcing the Code of Conduct, for a specified period of time. This +includes avoiding interactions in community spaces as well as external channels +like social media. Violating these terms may lead to a temporary or +permanent ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved, including unsolicited interaction +with those enforcing the Code of Conduct, is allowed during this period. +Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment of an +individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within +the community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 2.0, available at +. + +Community Impact Guidelines were inspired by [Mozilla's code of conduct +enforcement ladder](https://github.com/mozilla/diversity). + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see the FAQ at +. Translations are available at +. diff --git a/src/material-icons/CONTRIBUTING.md b/src/material-icons/CONTRIBUTING.md new file mode 100644 index 0000000..195affb --- /dev/null +++ b/src/material-icons/CONTRIBUTING.md @@ -0,0 +1,451 @@ + + +phorm.ai + +

How to contribute

+ +Glad you're here and interested in expanding this project ๐ŸŽ‰ In order to make this work in the best possible way, there are hints and tips for successful contributors on this page. Please read everything carefully and your contributions will be valuable and gratefully received. + + + +- [Icon Requests](#icon-requests) +- [Add new icons](#add-new-icons) +- [How-To's](#how-tos) + - [Create icon as SVG](#create-icon-as-svg) + - [Use Material Design colors](#material-design-colors) + - [Design folder icons](#design-folder-icons) + - [Icon spacing](#icon-spacing) + - [Icons for color themes](#icons-for-color-themes) + - [Unique assignment to file and folder names](#icon-assignments) + - [Create icon packs](#icon-packs) + - [Designing Pixel Perfect Icons](#pixel-perfect-icons) + - [Cloning existing icons](#icon-cloning) +- [Add translations](#add-translations) +- [Debug extension](#debug-extension-locally) + + + +## Icon Requests + +A new icon for a file name, file extension or folder name is needed? Please create an issue and follow the rules below: + +- Describe if a file and/or folder icon is needed +- List the file names/endings and folder names +- Mention some graphic ideas (how can the icon look like) +- Show an example image of the icon or provide a link to the related website + +## Add new icons + +It is always welcome to add new icons to the extension. However, there are a few things you should take into account so that the icon can be included in the extension. + +```mermaid +flowchart LR + B{Shape already exists\nwith different colors?} + B ---->|No| E + B ---->|Yes| C + C[Cloning Workflow] + E[Creating New Icons Workflow] +``` + +### Creating New Icons Workflow + +#### Checklist + +1. [ ] Create icon as SVG ([how to](#create-icon-as-svg)) +2. [ ] Icon color fits to Material Design ([how to](#material-design-colors)) +3. [ ] SVG has some space around the icon ([how to](#spacing)) +4. [ ] Unique assignment to file and folder names ([how to](#icon-assignments)) +5. [ ] Provide separate icons for color themes if necessary ([how to](#icons-for-color-themes)) + +### Cloning Workflow + +There are times when we just need to create a variant of an existing icon. + +For example, we might want to create an icon using the shape of the `typescript` icon, but we want it to be green and associated with the `library.ts` file name. In that case, we don't need to create a new svg. This can be done by configuration. + +#### Checklist + +1. [ ] Clone the existing icon adjusting its color ([how to](#icon-cloning)) + +## How tos + +

Create icon as SVG

+ +These free tools are recommended to create or edit new SVG icons: + +- [Inkscape](https://inkscape.org/en/) is a free, open source SVG editor +- There are tools available to convert PNG/JPG images to SVG - [Autotracer.org](https://autotracer.org) and [Vectorizer.io](https://vectorizer.io) are two examples. + +> **Note** +> It's important to produce fully _vectorized_ graphic (don't include a base64 image string in the svg). + +When you create a folder icon, please keep in mind that two SVG files are needed here: one that represents the folder closed and another that represents it open. + +```text +๐Ÿ“ folder-example.svg +๐Ÿ“‚ folder-example-open.svg +``` + +Of course, there is also the possibility to add existing SVGs. Mostly, however, the color has to be adjusted or the styling has to be changed, so that the other points from the above checklist are also fulfilled. + +

Known icon sources

+ +- [Material Design Icons](https://materialdesignicons.com/) + +

Use Material Design colors

+ +An important success factor of this icon extension is the fact that all colors fit together harmoniously. This is due to the fact that all icons exist only from colors of the [Material Design color palette](https://material.io/design/color/the-color-system.html#tools-for-picking-colors). This creates nice contrasts and the icons are easily recognizable. + +Now it often happens that many programming languages already have icons with their own colors. To find the matching color from the Material Design color palette based on a known color, there is the [Material Color Converter](https://pkief.github.io/material-color-converter/). With its help any color can be converted into a Material Design color. + +You can check if your changed (i.e. not yet committed) icon fits the Material Design color palette by running the following command: + +```sh +bun run check-colors +``` + +Installation of the dependencies is necessary before running the command, see [Debug extension locally](#debug-extension-locally). + +> **Note** +> The colors black (`#000000`) and white (`#ffffff`) are not allowed in the icons. These colors have too much contrast and do not fit into the overall picture of the icons. + +Continue reading [here](#design-folder-icons) to find out about colors for the folder icons. + +| โœ… | โŒ | +| :-: | :-: | +| Icon with right color | Icon with wrong color | + +

Design folder icons

+ +When designing folder icons there are also a few points to consider. A folder icon always consists of two icons - the folder in the background and a motive in the foreground: + +An example of a folder + +For the motive, only colors from the second row in the [color palette](https://pkief.github.io/material-color-converter/) are allowed. For the background choose a slightly darker hue (mostly in rows 4-6 in the palette). + +Material color palette + +This uniform color selection makes the folder icons look more consistent and fit well together. This ensures a good quality of the icons. + +| โœ… | โŒ | +| :-: | :-: | +| Folder icon with right colors | Folder icon with wrong colors | + +

Icon spacing

+ +All icons have a small distance to the edge. This way they don't seem so pressed together and have a little more air. It is not defined how much margin you have to leave them, because this is always a bit different. Just make sure that there is a space to the outside. + +| โœ… | โŒ | +| :-: | :-: | +| Icon with a spacing around | Icon without spacing | + +

Assignment to file and folder names and language ids

+ +Icons are assigned to file names, folder names or registered languages of VS Code in these files: + +- [fileIcons.ts](https://github.com/material-extensions/vscode-material-icon-theme/blob/main/src/core/icons/fileIcons.ts) +- [folderIcons.ts](https://github.com/material-extensions/vscode-material-icon-theme/blob/main/src/core/icons/folderIcons.ts) +- [languageIcons.ts](https://github.com/material-extensions/vscode-material-icon-theme/blob/main/src/core/icons/languageIcons.ts) + +Be careful when assigning icons to files and folders, as not everyone expects a file name to have a special icon based on a framework that is not used by them. A solution for this can be the usage of [Language icon definitions](#language-icons) or [icon packs](#icon-packs). + +### File icons + +Here's an example of how the SVG icon `sample.svg` is assigned to file names and extensions: + +```ts +{ + name: 'sample', + fileNames: ['sample.js', 'sample.ts', 'sample.html'], + fileExtensions: ['sample'], +} +``` + +This will apply an icon for the files 'sample.js', 'sample.ts' and 'sample.html' as well as for files that end with 'sample' like 'another-file.sample'. + +#### Apply patterns + +It is also possible to use patterns for file names and extensions. This is useful when you want to assign an icon to a group of files that have a common pattern. Here's an example: + +```ts +{ + name: 'graphql', + patterns: { + graphql: FileNamePattern.Ecmascript, + }, +} +``` + +In case of this example the generated file names are "graphql.js", "graphql.mjs", "graphql.cjs", "graphql.ts", "graphql.mts" and "graphql.cts". The pattern is defined in the [patterns.ts](https://github.com/material-extensions/vscode-material-icon-theme/blob/main/src/core/patterns/patterns.ts) file. + +Available patterns are right now: + +| Pattern | File extensions | +| ------------- | ---------------------------------------------------------------------------------------------------------- | +| ecmascript | `js`, `mjs`, `cjs`, `ts`, `mts`, `cts` | +| configuration | `json`, `jsonc`, `json5`, `yaml`, `yml`, `toml` | +| nodeEcosystem | Combination of ecmascript and configuration patterns | +| cosmiconfig | `.${fileName}rc`, `.config/${fileName}rc` and `${fileName}.config` with file extensions of `nodeEcosystem` | + +#### Folder icons + +Here's an example of how a folder icon can be assigned to folder icons: + +```ts +{ + name: 'folder-sample', + folderNames: ['sample', 'samples'], +} +``` + +This will apply a folder icon for the folders 'sample' and 'samples'. + +> **Note** +> The tool automatically creates generic "wildcard" variants of these folders, so only assign the base names. + +#### Language icons + +Here's an example of how a file icon can be assigned to language ids: + +```ts +{ icon: { name: 'sample' }, ids: ['css'] }, +``` + +This will apply the sample.svg icon to all files which could be associated by VS Code with the CSS programming language. + +

Icons for color themes

+ +VS Code can be customized so that the background color is either light or dark. This must also be considered for the icons, because a dark icon on a dark background does not provide the necessary contrast it needs to be recognizable. + +| โœ… | โŒ | +| :-: | :-: | +| Icon with good contrast | Icon with bad constrast | + +Preferably, the icon has a color that looks good on both backgrounds. If this is ever not possible because it would otherwise no longer match the icon's branding, different icons can be provided for the respective color scheme. + +This separation is possible by using the `light` attribute in the icon configuration: + +```ts +{ name: 'sample', fileNames: ['sample.txt'], light: true }, +``` + +If the `light` attribute is set to `true`, it is necessary to provide two icon files: + +- sample.svg +- sample_light.svg + +The icon with the ending '\_light' will be automatically chosen when VS Code is using a light background color. So the icon should then look a bit darker to have a good contrast on the lighter background. + +In addition, there's also the possibility to provide a separate icon for high contrast backgrounds like this: + +```ts +{ name: 'sample', fileNames: ['sample.txt'], highContrast: true }, +``` + +If the `highContrast` attribute is set to `true`, it is necessary to provide two icon files: + +- sample.svg +- sample_highContrast.svg + +

Create icon packs

+ +Sometimes it can happen that certain files or folders need an icon, but you cannot avoid that there could be different icons for them. An icon pack can bundle different icons and as an end user you can decide which icons to display. + +Here's an example that shows how two icons can be assigned to the same file name by using icon packs: + +```ts +{ + name: 'sample-blue', + fileNames: ['sample.txt'], + enabledFor: [IconPack.Blue], +}, +{ + name: 'sample-red', + fileNames: ['sample.txt'], + enabledFor: [IconPack.Red], +} +``` + +To create an icon pack, the following steps have to be completed: + +1. Add the name of the icon pack to the enum in [iconPack.ts](https://github.com/material-extensions/vscode-material-icon-theme/blob/e21e6b1b57f2ce0b6e7306178b26d11c60e2ca0f/src/core/models/icons/iconPack.ts) +2. Add translations to the package.nls.\*.json files under the section `configuration.activeIconPack` (at least to [package.nls.json](package.nls.json), the English translation file) +3. Adjust [package.json](package.json) under `configuration.properties.material-icon-theme.activeIconPack` +4. Use the icon pack inside the [fileIcons.ts](https://github.com/material-extensions/vscode-material-icon-theme/blob/main/src/core/icons/fileIcons.ts),[folderIcons.ts](https://github.com/material-extensions/vscode-material-icon-theme/blob/main/src/core/icons/folderIcons.ts) or [languageIcons.ts](https://github.com/material-extensions/vscode-material-icon-theme/blob/main/src/core/icons/languageIcons.ts) files in the `enabledFor` attribute + +

Designing Pixel-Perfect Icons

+ +At 100% zoom, VS Code displays icons at 16x16 pixels. This means that ideally, the icons should be designed in a way that they look good at this size. + +A known issue is that the icons can appear blurry after resizing them, even to the point where they are no longer easily recognizable, depending on the case. + +To avoid blurry icons, it is recommended to design them using a 16x16 grid and trying to align the edges of the icon to it. This will help ensure that the icons look sharp and clear, even at smaller sizes. + +An example of a pixel-perfect icon + +

Tips for Designing Pixel-Perfect Icons

+ +The following are some tips to help you design nice and sharp-looking icons. These tips are not rules but rather guidelines to help you achieve the best results possible: + +- **Use a grid**: This is the most important tip. Try to use a 16x16 grid to design the icons and snap the edges of the icon to the grid. Blurriness is often caused by misalignment of the edges and vertices, resulting in the icon trying to fit a pixel in between two pixels. As this is physically impossible, the engine will create two pixels with different opacity to simulate the in-between pixel, causing the blurriness. When a path is aligned to the grid, each pixel will be a solid color, and the icon will look sharp. + + The following example illustrates an icon with its paths aligned to a 16x16 grid: + + An example of a pixel-perfect folder icon + + On the other hand, this other example illustrates an icon with its paths not aligned to a 16x16 grid: + + An example of a missaligned folder icon + + Here is a comparison of both icons rendered at 16px: + + Comparison of the correctly positioned icon and the incorrect one + + As you can see, the misaligned icon (left) has blurry edges with "ghost pixels" that attempt to simulate "half a pixel". Additionally, the suitcase motif in it is slightly harder to recognize. On the other hand, the aligned icon (right) looks sharper and clearer. + + So, even though the difference between the two icons was subtle, the impact on the final result is quite significant. + +- **Decimals are not your friends**: Related to the previous tip, when designing icons, it's important to try to avoid using decimal values for the positions of the vertices. This is because, as previously mentioned, pixels are square, and there's no such thing as a fractionated pixel. If you keep the vertices aligned to the grid, it will be easier to avoid decimal coordinates. In short, try to keep the vertices on whole numbers. + +- **Sometimes less is more**: Detail is valuable, but attempting to incorporate too much detail in 16 pixels or less can pose a significant challenge. It might even be counterproductive, resulting in an icon that is difficult to recognize. Icons are primarily about communicating a concept. To effectively communicate a concept, it must be easily recognizable. + + Let's consider the following example: + + Elephant icon with too many details + + The icon is visually appealing, but it has some issues: the trunk, the tail and the negative space separating the ear from the body are too thin. Additionally, the eye is too small, and the shapes, in general, are somewhat complex. While this icon would look great if rendered at 24, 32, or 64 pixels, at 16 pixels, we lack sufficient resolution to effectively convey the concept. + + Now, let's explore a minimalistic approach to communicating the same concept: + + | Concept | Result | + | --- | --- | + | Elephant icon concept | Elephant ready icon | + + Indeed, the minimalistic version may lack the level of detail present in the first icon, particularly when viewed at a larger size. However, on the other hand, we are still effectively communicating the concept. It's unmistakably an elephant. Furthermore, all edges and paths are aligned to the grid. + + Now, let's examine both icons when rendered at 16px: + + Elephant result icon + +- **Curves vs straight lines**: Let's face it, pixels are square, there's nothing we can do about it. And since pixels are square, drawing a curve actually involves drawing a series of... squares. Consequently, when rendering a curve, we're essentially asking the display to render a fraction of a pixel, which is impossible. As a result, curves tend to appear blurry. This is normal. However, it's perfectly fine to use curves, circles, and rounded edges in your icons. Just keep in mind these limitations if you're wondering why your icon doesn't look as sharp as you'd like. + +

Cloning existing icons

+ +The extension allows you to clone existing icons and adjust their colors through configuration. This enables you to create new color variants of an existing icon without having to create new SVG files. + +As we mentioned previously, icons are assigned to filenames, file extensions, and folder names in the following files: + +- [fileIcons.ts](https://github.com/material-extensions/vscode-material-icon-theme/blob/main/src/core/icons/fileIcons.ts) +- [folderIcons.ts](https://github.com/material-extensions/vscode-material-icon-theme/blob/main/src/core/icons/folderIcons.ts) + +The following example demonstrates how the shapes of the `rust` file icon can be reused to create a clone of it, utilizing different colors and associated with different file names than the original icon. + +```ts +{ + name: 'rust-library', + fileNames: ['lib.rs'], + light: true, // needed if a `lightColor` is provided + clone: { + base: 'rust', + color: 'green-400', + lightColor: 'green-700', // optional + }, +}, +``` + +This will generate a new icon assignment for the file name `lib.rs` with the same shape as the already existing `rust` icon but with a green color instead. Additionally, it will create a light theme variant of the icon with a darker green color for better contrast when using a light theme. + +That's it. We don't need to create a new SVG file. The extension will automatically adjust the colors of the existing icon. + +Cloned Rust icon example + +The same technique can be applied to folder icons using the `clone` attribute in the configuration. + +You might have noticed that we are using aliases for the colors. These aliases correspond to the Material Design color palette. + +You can find a list of all available color aliases in the [materialPalette.ts](https://github.com/material-extensions/vscode-material-icon-theme/blob/main/src/core/generator/clones/utils/color/materialPalette.ts) file. + +#### Preventing recoloring in cloned icons + +When cloning icons, recoloring works by replacing each color attribute in each path/shape of the SVG with a new color, which is determined by the selected color in the configuration. + +However, there are cases where you might want to prevent certain parts of the icon from being recolored. + +Let's see an example: + +![gitlab icon](./images/how-tos/cloned-icon-no-recolor.png) + +In this example, we have the `folder-gitlab` folder icon. If we were to clone it, we should prevent recoloring from happening over the gitlab logo and only allow recoloring of the folder shape itself. + +To do this, we need to set the attribute `data-mit-no-recolor="true"` to the paths, shapes, or groups we do not want to be recolored. + +```svg + + + + + + + + + +``` + +Now if we create a clone of this icon, the paths, shapes, or groups marked with `data-mit-no-recolor="true"` will retain their original colors. Recoloring will only affect paths not marked with this attribute. + +```typescript +{ name: 'folder-gitlab', folderNames: ['gitlab'] }, +{ + name: 'folder-green-gitlab', + clone: { + base: 'folder-gitlab', + color: 'blue-300' + }, +} +``` + +This will result in the following: + +![the result of cloning gitlab icon with selective recoloring](./images/how-tos/cloned-icon-no-recolor-result.png) + +## Add translations + +This project offers translations into different languages. If you notice an error here, please help to fix it. You can do this as follows: + +- Create or edit the translations in the `src/i18n` directory. +- Create or edit the `package.nls.*.json` files in the root folder + +## Debug extension locally + +This icon extension consists not only of icons but also brings some code. This is necessary to simplify various things and enable multiple functionalities. If you want to change something here, the following steps are to be considered: + +1. Install [Bun](https://bun.sh/docs/installation) on your machine +2. Install dependencies with `bun install` +3. Open project with VS Code +4. Install required [VS Code extensions](.vscode/extensions.json) +5. Press `F5` or run `Launch Extension` in the debug window +6. Run tests with `bun test` + +You will find more information about the official extension API in the [extension guides of VS Code](https://code.visualstudio.com/api/extension-guides/file-icon-theme). + +### Enable logging + +Logging can be enabled with the following settings: + +```json +{ + "material-icon-theme.enableLogging": true, + "material-icon-theme.logLevel": "debug", +} +``` + +The available log levels are: + +- `error`: Only errors are logged +- `info`: Only info logs are logged +- `debug`: All logs are logged + +Per default the logging is disabled as it can slow down the extension. If logging is enabled, the logs can be found in the output panel of VS Code under "Material Icon Theme". + +> **Note** +> Please restart the extension after changing the logging settings to apply the changes. diff --git a/src/material-icons/LICENSE.md b/src/material-icons/LICENSE.md new file mode 100644 index 0000000..1645fc6 --- /dev/null +++ b/src/material-icons/LICENSE.md @@ -0,0 +1,8 @@ +The MIT License (MIT) +Copyright (c) 2021 Philipp Kief + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/src/material-icons/README.md b/src/material-icons/README.md new file mode 100644 index 0000000..dc9e80a --- /dev/null +++ b/src/material-icons/README.md @@ -0,0 +1,255 @@ + + +

+
+ logo +

+ Material Icon Theme +
+
+

+ +

Get the Material Design icons into your VS Code.

+ +

+ Version  + Rating  + Installs  + Downloads +

+ +### File icons + +file icons + +### Folder icons + +folder icons + +#### Customize file & folder color + +You can change the color of the default file and folder icons using the command palette: + +custom folder colors + +or via user settings: + +```json +"material-icon-theme.folders.color": "#ef5350", +"material-icon-theme.files.color": "#42a5f5", +``` + +#### Folder themes + +You can change the design of the folder icons using the command palette: + +folder themes + +or via user settings: + +```json +"material-icon-theme.folders.theme": "specific" +``` + +## Custom icon opacity + +You can set a custom opacity for the icons: + +```json +"material-icon-theme.opacity": 0.5 +``` + +## Custom icon saturation + +If colors do not make you happy you can change the icons to have less saturation making them look grayish or completely grayscale by setting saturation to 0: + +```json +"material-icon-theme.saturation": 0.5 +``` + +You can also achieve no saturation (i.e., grayscale) by setting **Toggle Grayscale** to ON. + +## Custom icon associations + +You can customize the icon associations directly in the user settings. + +### File associations + +With the `*.[extension]` pattern you can define custom file icon associations. For example you could define an icon for `*.sample` and every file that ends with `.sample` will have the defined icon. However, not all files with the same file extension always have the same icon. For some specific file names there is a special icon. In order to overwrite all the specific file icons as well, two asterisks must be set instead of one, i.e. `**.[extension]`. + +If there's no leading `*` it will be automatically configured as filename and not as file extension. + +```json +"material-icon-theme.files.associations": { + "*.ts": "typescript", + "**.json": "json", + "fileName.ts": "angular" +} +``` + +#### Custom SVG icons + +It's possible to add custom icons by adding a path to an SVG file which is located relative to the extension's dist folder. However, the restriction applies that the directory in which the custom icons are located must be within the `extensions` directory of the `.vscode` folder in the user directory. + +For example a custom SVG file called `sample.svg` can be placed in an `icons` folder inside of VS Code's `extensions` folder: + +```text +.vscode + โ”— extensions + โ”— icons + โ”— sample.svg +``` + +In the settings.json (User Settings only!) the icon can be associated to a file name or file extension like this: + +```json +"material-icon-theme.files.associations": { + "fileName.ts": "../../icons/sample" +} +``` + +_Note: The custom file name must be configured in the settings without the file ending `.svg` as shown in the example above._ + +#### Custom file icon clones + +It's also possible to clone existing file icons and change their colors to create new icons that can be associated with file names or file extensions. The following example shows how to clone the `rust` icon: + +```json +"material-icon-theme.files.customClones": [ + { + "name": "rust-mod", + "base": "rust", + "color": "blue-400", + "fileNames": ["mod.rs"] + }, + { + "name": "rust-lib", + "base": "rust", + "color": "light-green-300", + "lightColor": "light-green-600", + "fileNames": ["lib.rs"] + } +] +``` + +This will create two new icons called `rust-mod` and `rust-lib` that are associated with the file names `mod.rs` and `lib.rs` respectively. The `base` property defines the icon that should be cloned (in this case the `rust` icon). The `color` property defines the color of the new icon. The `lightColor` property is optional and defines the color of the icon when Visual Studio Code is running with a light color theme. The `fileNames` property defines the file names that should be associated with the new icon. There's also a `fileExtensions` property, which can be used to associate the new icon with file extensions (`"fileExtensions": ["ext", "ext2"]`). + +cloned file icons + +- Although you can use any `#RRGGBB` color for the `color` and `lightColor` properties, if you want to stick with colors from the material palette, you can check the full list of allowed aliases [here](https://github.com/material-extensions/vscode-material-icon-theme/blob/main/src/core/generator/clones/utils/color/materialPalette.ts). +- You can check the full list of available icons to be used as the `base` [here](https://github.com/material-extensions/vscode-material-icon-theme/blob/main/src/core/icons/fileIcons.ts). + +### Folder associations + +The following configuration can customize the folder icons. It is also possible to overwrite existing associations and create nice combinations. For example you could change the folder theme to "classic" and define icons only for the folder names you like. + +```json +"material-icon-theme.folders.associations": { + "customFolderName": "src", + "sample": "dist" +} +``` + +#### Custom SVG folder icons + +Similar to the files, it is also possible to reference your own SVG icons for folder icons. Here it's important to provide two SVG files: one for the folder if it's closed and another one for the opened state. These two files - let's call them "folder-sample.svg" and "folder-sample-open.svg" - have to be placed into a directory which is relative to the extensions dist folder. This directory has to be somewhere inside of the `.vscode/extensions` folder. + +In our example we place them into an `icons` folder inside of the `.vscode/extensions` folder: + +```text +.vscode + โ”— extensions + โ”— icons + โ”ฃ folder-sample.svg + โ”— folder-sample-open.svg +``` + +In the settings.json (User Settings only!) the folder icons can be associated to a folder name (e.g. "src") like this: + +```json +"material-icon-theme.folders.associations": { + "src": "../../../../icons/folder-sample" +} +``` + +#### Custom folder icon clones + +It's also possible to clone existing folder icons and change their colors to create new icons that can be associated with folder names. The following example shows how to clone the `admin` folder icon: + +```json +"material-icon-theme.folders.customClones": [ + { + "name": "users-admin", + "base": "admin", + "color": "light-green-500", + "lightColor": "light-green-700", + "folderNames": ["users"] + }, + { + "name": "roles-admin", + "base": "admin", + "color": "purple-400", + "folderNames": ["roles"] + } +] +``` + +This will create two new icons called `users-admin` and `roles-admin` that are associated with the folder names `users` and `roles` respectively. The `base` property defines the icon that should be cloned (in this case the `admin` folder icon). The `color` property defines the color of the new icon. The `lightColor` property is optional and defines the color of the icon when Visual Studio Code is running with a light color theme. The `folderNames` property defines the folder names that should be associated with the new icon. + +cloned folder icons + +- Although you can use any `#RRGGBB` color for the `color` and `lightColor` properties, if you want to stick with colors from the material palette, you can check the full list of allowed aliases [here](https://github.com/material-extensions/vscode-material-icon-theme/blob/main/src/core/generator/clones/utils/color/materialPalette.ts). +- You can check the full list of available icon to be used as the `base` [here](https://github.com/material-extensions/vscode-material-icon-theme/blob/main/src/core/icons/folderIcons.ts). + +### Language associations + +With the following configuration you can customize the language icons. It is also possible to overwrite existing associations. + +```json +"material-icon-theme.languages.associations": { + "languageId": "iconName", + "json": "json" +} +``` + +You can see the available icon names in the overview above. See "[Known language identifiers](https://code.visualstudio.com/docs/languages/identifiers#_known-language-identifiers)" in the VS Code documentation for a list of permitted values for `languageId`. + +## Commands + +Press `Ctrl-Shift-P` to open the command palette and type `Material Icons`. + +commands + +

+ +| Command | Description | +| --------------------------------- | ----------------------------------------------------------------------------------- | +| **Activate Icon Theme** | Activate the icon theme. | +| **Change File Color** | Change the color of the file icons. | +| **Change Folder Color** | Change the color of the folder icons. | +| **Change Folder Theme** | Change the design of the folder icons. | +| **Change Opacity** | Change the opacity of the icons. | +| **Change Saturation** | Change the saturation value of the icons. | +| **Configure Icon Packs** | Selects an icon pack that enables additional icons (e.g. for Angular, React, Ngrx). | +| **Toggle Explorer Arrows** | Show or hide the arrows next to the folder icons. | +| **Restore Default Configuration** | Reset to the default configuration. | +| **Toggle Grayscale** | Set icon saturation to `0` (grayscale), or `1` (color). | + +## Icon sources + +- [Material Design Icons](https://materialdesignicons.com/) + +## Contributors + + + Contributors + + +**Would you like to contribute?** + +Take a look at the [contribution guidelines](https://github.com/material-extensions/vscode-material-icon-theme/blob/main/CONTRIBUTING.md) and open a [new issue](https://github.com/material-extensions/vscode-material-icon-theme/issues) or [pull request](https://github.com/material-extensions/vscode-material-icon-theme/pulls) on GitHub. + +## Related extensions + +- [Material Icons for GitHub](https://github.com/Claudiohbsantos/github-material-icons-extension) +- [Material Product Icons](https://github.com/material-extensions/vscode-material-product-icons) diff --git a/src/material-icons/biome.jsonc b/src/material-icons/biome.jsonc new file mode 100644 index 0000000..1c88af2 --- /dev/null +++ b/src/material-icons/biome.jsonc @@ -0,0 +1,65 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.8.2/schema.json", + "formatter": { + "enabled": true, + "formatWithErrors": false, + "indentStyle": "space", + "indentWidth": 2, + "lineEnding": "lf", + "lineWidth": 80, + "attributePosition": "auto" + }, + "organizeImports": { "enabled": true }, + "linter": { + "enabled": true, + "rules": { + "recommended": false, + "complexity": { "useArrowFunction": "error" }, + "correctness": { + "noUnsafeFinally": "error", + "noUnusedVariables": "error", + "noUnusedImports": "error" + }, + "security": { "noGlobalEval": "error" }, + "style": { + "noVar": "error", + "useBlockStatements": "off", + "useConst": "error", + "useNamingConvention": { + "level": "error", + "options": { "strictCase": false } + } + }, + "suspicious": { + "noDoubleEquals": "error", + "noExplicitAny": "error", + "useNamespaceKeyword": "error" + } + } + }, + "javascript": { + "formatter": { + "jsxQuoteStyle": "single", + "quoteProperties": "asNeeded", + "trailingCommas": "es5", + "semicolons": "always", + "arrowParentheses": "always", + "bracketSpacing": true, + "bracketSameLine": false, + "quoteStyle": "single", + "attributePosition": "auto" + } + }, + "overrides": [ + { + "include": ["src/models/scripts/contributors/contributor.ts"], + "linter": { + "rules": { + "style": { + "useNamingConvention": "off" + } + } + } + } + ] +} diff --git a/src/material-icons/build/build-with-esbuild.ts b/src/material-icons/build/build-with-esbuild.ts new file mode 100644 index 0000000..1723615 --- /dev/null +++ b/src/material-icons/build/build-with-esbuild.ts @@ -0,0 +1,13 @@ +import { join } from 'node:path'; +import esbuild from 'esbuild'; +import config from './esbuild.config'; + +const output = await esbuild.build(config).catch(() => process.exit(1)); + +// If metafile is enabled, write it to dist/metafile.json +// Metafiles can be analyzed to determine the dependencies of the build +// https://esbuild.github.io/analyze/ +if (config.metafile) { + const path = join(process.cwd(), 'dist', 'metafile.json'); + await Bun.write(path, JSON.stringify(output.metafile, undefined, 2)); +} diff --git a/src/material-icons/build/esbuild.config.ts b/src/material-icons/build/esbuild.config.ts new file mode 100644 index 0000000..7169462 --- /dev/null +++ b/src/material-icons/build/esbuild.config.ts @@ -0,0 +1,28 @@ +import type { BuildOptions } from 'esbuild'; + +const config: BuildOptions = { + entryPoints: [ + './src/extension/desktop/extension.ts', + './src/extension/web/extension.ts', + './src/module/index.ts', + ], + minify: true, + bundle: true, + platform: 'node', + metafile: false, + target: 'node12', + outdir: './dist', + outbase: './src', + outExtension: { + '.js': '.cjs', + }, + format: 'cjs', + external: ['vscode'], + loader: { + '.ts': 'ts', + '.js': 'js', + }, + logLevel: 'info', +}; + +export default config; diff --git a/src/material-icons/build/watch-with-esbuild.ts b/src/material-icons/build/watch-with-esbuild.ts new file mode 100644 index 0000000..9cb41a8 --- /dev/null +++ b/src/material-icons/build/watch-with-esbuild.ts @@ -0,0 +1,10 @@ +import esbuild from 'esbuild'; +import config from './esbuild.config'; + +try { + const context = await esbuild.context(config); + await context.watch(); +} catch (e) { + console.error(e); + process.exit(1); +} diff --git a/src/material-icons/bun.lockb b/src/material-icons/bun.lockb new file mode 100644 index 0000000..99f36bd Binary files /dev/null and b/src/material-icons/bun.lockb differ diff --git a/src/material-icons/bunfig.toml b/src/material-icons/bunfig.toml new file mode 100644 index 0000000..1b02ffb --- /dev/null +++ b/src/material-icons/bunfig.toml @@ -0,0 +1,3 @@ +[test] +# Load these modules before running tests. +preload = ["./src/core/tests/mocks"] diff --git a/src/material-icons/changelog.config.json b/src/material-icons/changelog.config.json new file mode 100644 index 0000000..a68147b --- /dev/null +++ b/src/material-icons/changelog.config.json @@ -0,0 +1,4 @@ +{ + "repositoryUrl": "https://github.com/material-extensions/vscode-material-icon-theme", + "blacklistPattern": "^Release \\d+\\.\\d+\\.\\d+|^\\d+\\.\\d+\\.\\d+$" +} diff --git a/src/material-icons/icons/3d.svg b/src/material-icons/icons/3d.svg new file mode 100644 index 0000000..db90609 --- /dev/null +++ b/src/material-icons/icons/3d.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/abap.svg b/src/material-icons/icons/abap.svg new file mode 100644 index 0000000..0a9b083 --- /dev/null +++ b/src/material-icons/icons/abap.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/abc.svg b/src/material-icons/icons/abc.svg new file mode 100644 index 0000000..7754a1e --- /dev/null +++ b/src/material-icons/icons/abc.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/actionscript.svg b/src/material-icons/icons/actionscript.svg new file mode 100644 index 0000000..38452d9 --- /dev/null +++ b/src/material-icons/icons/actionscript.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/ada.svg b/src/material-icons/icons/ada.svg new file mode 100644 index 0000000..2b984e7 --- /dev/null +++ b/src/material-icons/icons/ada.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/adonis.svg b/src/material-icons/icons/adonis.svg new file mode 100644 index 0000000..f854f01 --- /dev/null +++ b/src/material-icons/icons/adonis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/advpl.svg b/src/material-icons/icons/advpl.svg new file mode 100644 index 0000000..54e493b --- /dev/null +++ b/src/material-icons/icons/advpl.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/amplify.svg b/src/material-icons/icons/amplify.svg new file mode 100644 index 0000000..89f4212 --- /dev/null +++ b/src/material-icons/icons/amplify.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/android.svg b/src/material-icons/icons/android.svg new file mode 100644 index 0000000..ee054ae --- /dev/null +++ b/src/material-icons/icons/android.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/angular.svg b/src/material-icons/icons/angular.svg new file mode 100644 index 0000000..a28075e --- /dev/null +++ b/src/material-icons/icons/angular.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/antlr.svg b/src/material-icons/icons/antlr.svg new file mode 100644 index 0000000..7999956 --- /dev/null +++ b/src/material-icons/icons/antlr.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/apiblueprint.svg b/src/material-icons/icons/apiblueprint.svg new file mode 100644 index 0000000..0846267 --- /dev/null +++ b/src/material-icons/icons/apiblueprint.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/apollo.svg b/src/material-icons/icons/apollo.svg new file mode 100644 index 0000000..f030fa6 --- /dev/null +++ b/src/material-icons/icons/apollo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/applescript.svg b/src/material-icons/icons/applescript.svg new file mode 100644 index 0000000..18b61d5 --- /dev/null +++ b/src/material-icons/icons/applescript.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/apps-script.svg b/src/material-icons/icons/apps-script.svg new file mode 100644 index 0000000..5f63d8a --- /dev/null +++ b/src/material-icons/icons/apps-script.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/appveyor.svg b/src/material-icons/icons/appveyor.svg new file mode 100644 index 0000000..eab0982 --- /dev/null +++ b/src/material-icons/icons/appveyor.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/architecture.svg b/src/material-icons/icons/architecture.svg new file mode 100644 index 0000000..9c04d2e --- /dev/null +++ b/src/material-icons/icons/architecture.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/arduino.svg b/src/material-icons/icons/arduino.svg new file mode 100644 index 0000000..188f20c --- /dev/null +++ b/src/material-icons/icons/arduino.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/asciidoc.svg b/src/material-icons/icons/asciidoc.svg new file mode 100644 index 0000000..815ee91 --- /dev/null +++ b/src/material-icons/icons/asciidoc.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/assembly.svg b/src/material-icons/icons/assembly.svg new file mode 100644 index 0000000..367d00e --- /dev/null +++ b/src/material-icons/icons/assembly.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/astro-config.svg b/src/material-icons/icons/astro-config.svg new file mode 100644 index 0000000..f5388f5 --- /dev/null +++ b/src/material-icons/icons/astro-config.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/astro.svg b/src/material-icons/icons/astro.svg new file mode 100644 index 0000000..a9a0dfa --- /dev/null +++ b/src/material-icons/icons/astro.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/astyle.svg b/src/material-icons/icons/astyle.svg new file mode 100644 index 0000000..b480f84 --- /dev/null +++ b/src/material-icons/icons/astyle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/audio.svg b/src/material-icons/icons/audio.svg new file mode 100644 index 0000000..b22e30a --- /dev/null +++ b/src/material-icons/icons/audio.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/aurelia.svg b/src/material-icons/icons/aurelia.svg new file mode 100644 index 0000000..1253d04 --- /dev/null +++ b/src/material-icons/icons/aurelia.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/authors.svg b/src/material-icons/icons/authors.svg new file mode 100644 index 0000000..5c47826 --- /dev/null +++ b/src/material-icons/icons/authors.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/auto.svg b/src/material-icons/icons/auto.svg new file mode 100644 index 0000000..f51adb4 --- /dev/null +++ b/src/material-icons/icons/auto.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/auto_light.svg b/src/material-icons/icons/auto_light.svg new file mode 100644 index 0000000..a46a21f --- /dev/null +++ b/src/material-icons/icons/auto_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/autohotkey.svg b/src/material-icons/icons/autohotkey.svg new file mode 100644 index 0000000..a2ae28c --- /dev/null +++ b/src/material-icons/icons/autohotkey.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/autoit.svg b/src/material-icons/icons/autoit.svg new file mode 100644 index 0000000..66b1a13 --- /dev/null +++ b/src/material-icons/icons/autoit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/azure-pipelines.svg b/src/material-icons/icons/azure-pipelines.svg new file mode 100644 index 0000000..25aa5f9 --- /dev/null +++ b/src/material-icons/icons/azure-pipelines.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/azure.svg b/src/material-icons/icons/azure.svg new file mode 100644 index 0000000..dd83d74 --- /dev/null +++ b/src/material-icons/icons/azure.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/babel.svg b/src/material-icons/icons/babel.svg new file mode 100644 index 0000000..7333de3 --- /dev/null +++ b/src/material-icons/icons/babel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/ballerina.svg b/src/material-icons/icons/ballerina.svg new file mode 100644 index 0000000..3c1341d --- /dev/null +++ b/src/material-icons/icons/ballerina.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/bazel.svg b/src/material-icons/icons/bazel.svg new file mode 100644 index 0000000..b38a90c --- /dev/null +++ b/src/material-icons/icons/bazel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/bicep.svg b/src/material-icons/icons/bicep.svg new file mode 100644 index 0000000..562b39a --- /dev/null +++ b/src/material-icons/icons/bicep.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/biome.svg b/src/material-icons/icons/biome.svg new file mode 100644 index 0000000..60027d7 --- /dev/null +++ b/src/material-icons/icons/biome.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/bitbucket.svg b/src/material-icons/icons/bitbucket.svg new file mode 100644 index 0000000..c4fa06d --- /dev/null +++ b/src/material-icons/icons/bitbucket.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/bithound.svg b/src/material-icons/icons/bithound.svg new file mode 100644 index 0000000..39c0b7b --- /dev/null +++ b/src/material-icons/icons/bithound.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/blink.svg b/src/material-icons/icons/blink.svg new file mode 100644 index 0000000..05e7708 --- /dev/null +++ b/src/material-icons/icons/blink.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/blink_light.svg b/src/material-icons/icons/blink_light.svg new file mode 100644 index 0000000..8db0238 --- /dev/null +++ b/src/material-icons/icons/blink_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/blitz.svg b/src/material-icons/icons/blitz.svg new file mode 100644 index 0000000..7693299 --- /dev/null +++ b/src/material-icons/icons/blitz.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/bower.svg b/src/material-icons/icons/bower.svg new file mode 100644 index 0000000..c71d7a3 --- /dev/null +++ b/src/material-icons/icons/bower.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/brainfuck.svg b/src/material-icons/icons/brainfuck.svg new file mode 100644 index 0000000..bb5c701 --- /dev/null +++ b/src/material-icons/icons/brainfuck.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/browserlist.svg b/src/material-icons/icons/browserlist.svg new file mode 100644 index 0000000..24441a3 --- /dev/null +++ b/src/material-icons/icons/browserlist.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/browserlist_light.svg b/src/material-icons/icons/browserlist_light.svg new file mode 100644 index 0000000..716ad95 --- /dev/null +++ b/src/material-icons/icons/browserlist_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/bruno.svg b/src/material-icons/icons/bruno.svg new file mode 100644 index 0000000..c44a351 --- /dev/null +++ b/src/material-icons/icons/bruno.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/buck.svg b/src/material-icons/icons/buck.svg new file mode 100644 index 0000000..c035571 --- /dev/null +++ b/src/material-icons/icons/buck.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/bucklescript.svg b/src/material-icons/icons/bucklescript.svg new file mode 100644 index 0000000..d67a784 --- /dev/null +++ b/src/material-icons/icons/bucklescript.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/buildkite.svg b/src/material-icons/icons/buildkite.svg new file mode 100644 index 0000000..88bf375 --- /dev/null +++ b/src/material-icons/icons/buildkite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/bun.svg b/src/material-icons/icons/bun.svg new file mode 100644 index 0000000..124fefd --- /dev/null +++ b/src/material-icons/icons/bun.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/bun_light.svg b/src/material-icons/icons/bun_light.svg new file mode 100644 index 0000000..739f668 --- /dev/null +++ b/src/material-icons/icons/bun_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/c.svg b/src/material-icons/icons/c.svg new file mode 100644 index 0000000..5bb84b6 --- /dev/null +++ b/src/material-icons/icons/c.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/cabal.svg b/src/material-icons/icons/cabal.svg new file mode 100644 index 0000000..fc7f922 --- /dev/null +++ b/src/material-icons/icons/cabal.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/caddy.svg b/src/material-icons/icons/caddy.svg new file mode 100644 index 0000000..5ab5f0c --- /dev/null +++ b/src/material-icons/icons/caddy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/cadence.svg b/src/material-icons/icons/cadence.svg new file mode 100644 index 0000000..d9d85e4 --- /dev/null +++ b/src/material-icons/icons/cadence.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/cairo.svg b/src/material-icons/icons/cairo.svg new file mode 100644 index 0000000..cd629cf --- /dev/null +++ b/src/material-icons/icons/cairo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/cake.svg b/src/material-icons/icons/cake.svg new file mode 100644 index 0000000..b0a6d14 --- /dev/null +++ b/src/material-icons/icons/cake.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/capacitor.svg b/src/material-icons/icons/capacitor.svg new file mode 100644 index 0000000..2a48c58 --- /dev/null +++ b/src/material-icons/icons/capacitor.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/capnp.svg b/src/material-icons/icons/capnp.svg new file mode 100644 index 0000000..8d5efa3 --- /dev/null +++ b/src/material-icons/icons/capnp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/cds.svg b/src/material-icons/icons/cds.svg new file mode 100644 index 0000000..e637c83 --- /dev/null +++ b/src/material-icons/icons/cds.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/certificate.svg b/src/material-icons/icons/certificate.svg new file mode 100644 index 0000000..f35e17e --- /dev/null +++ b/src/material-icons/icons/certificate.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/changelog.svg b/src/material-icons/icons/changelog.svg new file mode 100644 index 0000000..3d9031d --- /dev/null +++ b/src/material-icons/icons/changelog.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/chess.svg b/src/material-icons/icons/chess.svg new file mode 100644 index 0000000..8494be8 --- /dev/null +++ b/src/material-icons/icons/chess.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/chess_light.svg b/src/material-icons/icons/chess_light.svg new file mode 100644 index 0000000..a4e5939 --- /dev/null +++ b/src/material-icons/icons/chess_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/chrome.svg b/src/material-icons/icons/chrome.svg new file mode 100644 index 0000000..b27f241 --- /dev/null +++ b/src/material-icons/icons/chrome.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/circleci.svg b/src/material-icons/icons/circleci.svg new file mode 100644 index 0000000..9a03a3d --- /dev/null +++ b/src/material-icons/icons/circleci.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/circleci_light.svg b/src/material-icons/icons/circleci_light.svg new file mode 100644 index 0000000..19cdaec --- /dev/null +++ b/src/material-icons/icons/circleci_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/clangd.svg b/src/material-icons/icons/clangd.svg new file mode 100644 index 0000000..f6742e9 --- /dev/null +++ b/src/material-icons/icons/clangd.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/clojure.svg b/src/material-icons/icons/clojure.svg new file mode 100644 index 0000000..945fa06 --- /dev/null +++ b/src/material-icons/icons/clojure.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/cloudfoundry.svg b/src/material-icons/icons/cloudfoundry.svg new file mode 100644 index 0000000..277c957 --- /dev/null +++ b/src/material-icons/icons/cloudfoundry.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/cmake.svg b/src/material-icons/icons/cmake.svg new file mode 100644 index 0000000..b6d803d --- /dev/null +++ b/src/material-icons/icons/cmake.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/coala.svg b/src/material-icons/icons/coala.svg new file mode 100644 index 0000000..daf2bb4 --- /dev/null +++ b/src/material-icons/icons/coala.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/cobol.svg b/src/material-icons/icons/cobol.svg new file mode 100644 index 0000000..7c812dc --- /dev/null +++ b/src/material-icons/icons/cobol.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/coconut.svg b/src/material-icons/icons/coconut.svg new file mode 100644 index 0000000..91965a1 --- /dev/null +++ b/src/material-icons/icons/coconut.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/code-climate.svg b/src/material-icons/icons/code-climate.svg new file mode 100644 index 0000000..97cbb4e --- /dev/null +++ b/src/material-icons/icons/code-climate.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/code-climate_light.svg b/src/material-icons/icons/code-climate_light.svg new file mode 100644 index 0000000..dd18ba5 --- /dev/null +++ b/src/material-icons/icons/code-climate_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/codecov.svg b/src/material-icons/icons/codecov.svg new file mode 100644 index 0000000..48da2f2 --- /dev/null +++ b/src/material-icons/icons/codecov.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/codeowners.svg b/src/material-icons/icons/codeowners.svg new file mode 100644 index 0000000..1c7cdc3 --- /dev/null +++ b/src/material-icons/icons/codeowners.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/coderabbit-ai.svg b/src/material-icons/icons/coderabbit-ai.svg new file mode 100644 index 0000000..c5e4340 --- /dev/null +++ b/src/material-icons/icons/coderabbit-ai.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/coffee.svg b/src/material-icons/icons/coffee.svg new file mode 100644 index 0000000..72a0810 --- /dev/null +++ b/src/material-icons/icons/coffee.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/coldfusion.svg b/src/material-icons/icons/coldfusion.svg new file mode 100644 index 0000000..0596db7 --- /dev/null +++ b/src/material-icons/icons/coldfusion.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/command.svg b/src/material-icons/icons/command.svg new file mode 100644 index 0000000..a21c0da --- /dev/null +++ b/src/material-icons/icons/command.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/commitlint.svg b/src/material-icons/icons/commitlint.svg new file mode 100644 index 0000000..187429e --- /dev/null +++ b/src/material-icons/icons/commitlint.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/concourse.svg b/src/material-icons/icons/concourse.svg new file mode 100644 index 0000000..595cabc --- /dev/null +++ b/src/material-icons/icons/concourse.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/conduct.svg b/src/material-icons/icons/conduct.svg new file mode 100644 index 0000000..0e7659a --- /dev/null +++ b/src/material-icons/icons/conduct.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/console.svg b/src/material-icons/icons/console.svg new file mode 100644 index 0000000..572910a --- /dev/null +++ b/src/material-icons/icons/console.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/contributing.svg b/src/material-icons/icons/contributing.svg new file mode 100644 index 0000000..ff2a72c --- /dev/null +++ b/src/material-icons/icons/contributing.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/cpp.svg b/src/material-icons/icons/cpp.svg new file mode 100644 index 0000000..e0b01b9 --- /dev/null +++ b/src/material-icons/icons/cpp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/craco.svg b/src/material-icons/icons/craco.svg new file mode 100644 index 0000000..6fd97d8 --- /dev/null +++ b/src/material-icons/icons/craco.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/credits.svg b/src/material-icons/icons/credits.svg new file mode 100644 index 0000000..b67c55a --- /dev/null +++ b/src/material-icons/icons/credits.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/crystal.svg b/src/material-icons/icons/crystal.svg new file mode 100644 index 0000000..e3796bf --- /dev/null +++ b/src/material-icons/icons/crystal.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/crystal_light.svg b/src/material-icons/icons/crystal_light.svg new file mode 100644 index 0000000..ca387f4 --- /dev/null +++ b/src/material-icons/icons/crystal_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/csharp.svg b/src/material-icons/icons/csharp.svg new file mode 100644 index 0000000..02b1be3 --- /dev/null +++ b/src/material-icons/icons/csharp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/css-map.svg b/src/material-icons/icons/css-map.svg new file mode 100644 index 0000000..70f3163 --- /dev/null +++ b/src/material-icons/icons/css-map.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/css.svg b/src/material-icons/icons/css.svg new file mode 100644 index 0000000..2f178cf --- /dev/null +++ b/src/material-icons/icons/css.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/cucumber.svg b/src/material-icons/icons/cucumber.svg new file mode 100644 index 0000000..2e1c2c4 --- /dev/null +++ b/src/material-icons/icons/cucumber.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/cuda.svg b/src/material-icons/icons/cuda.svg new file mode 100644 index 0000000..d4a0f37 --- /dev/null +++ b/src/material-icons/icons/cuda.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/cypress.svg b/src/material-icons/icons/cypress.svg new file mode 100644 index 0000000..c9ca6cc --- /dev/null +++ b/src/material-icons/icons/cypress.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/d.svg b/src/material-icons/icons/d.svg new file mode 100644 index 0000000..ac053a0 --- /dev/null +++ b/src/material-icons/icons/d.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/dart.svg b/src/material-icons/icons/dart.svg new file mode 100644 index 0000000..f474c78 --- /dev/null +++ b/src/material-icons/icons/dart.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/dart_generated.svg b/src/material-icons/icons/dart_generated.svg new file mode 100644 index 0000000..d025abc --- /dev/null +++ b/src/material-icons/icons/dart_generated.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/database.svg b/src/material-icons/icons/database.svg new file mode 100644 index 0000000..731fe70 --- /dev/null +++ b/src/material-icons/icons/database.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/deepsource.svg b/src/material-icons/icons/deepsource.svg new file mode 100644 index 0000000..d70fd46 --- /dev/null +++ b/src/material-icons/icons/deepsource.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/denizenscript.svg b/src/material-icons/icons/denizenscript.svg new file mode 100644 index 0000000..f2deded --- /dev/null +++ b/src/material-icons/icons/denizenscript.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/deno.svg b/src/material-icons/icons/deno.svg new file mode 100644 index 0000000..1ce2a45 --- /dev/null +++ b/src/material-icons/icons/deno.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/deno_light.svg b/src/material-icons/icons/deno_light.svg new file mode 100644 index 0000000..d74ba83 --- /dev/null +++ b/src/material-icons/icons/deno_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/dependabot.svg b/src/material-icons/icons/dependabot.svg new file mode 100644 index 0000000..c497746 --- /dev/null +++ b/src/material-icons/icons/dependabot.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/dhall.svg b/src/material-icons/icons/dhall.svg new file mode 100644 index 0000000..d5a22bc --- /dev/null +++ b/src/material-icons/icons/dhall.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/diff.svg b/src/material-icons/icons/diff.svg new file mode 100644 index 0000000..5596f2e --- /dev/null +++ b/src/material-icons/icons/diff.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/dinophp.svg b/src/material-icons/icons/dinophp.svg new file mode 100644 index 0000000..d35ef49 --- /dev/null +++ b/src/material-icons/icons/dinophp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/disc.svg b/src/material-icons/icons/disc.svg new file mode 100644 index 0000000..dde6fd7 --- /dev/null +++ b/src/material-icons/icons/disc.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/django.svg b/src/material-icons/icons/django.svg new file mode 100644 index 0000000..b896de5 --- /dev/null +++ b/src/material-icons/icons/django.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/dll.svg b/src/material-icons/icons/dll.svg new file mode 100644 index 0000000..7d42654 --- /dev/null +++ b/src/material-icons/icons/dll.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/docker.svg b/src/material-icons/icons/docker.svg new file mode 100644 index 0000000..5b4da62 --- /dev/null +++ b/src/material-icons/icons/docker.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/document.svg b/src/material-icons/icons/document.svg new file mode 100644 index 0000000..e496b67 --- /dev/null +++ b/src/material-icons/icons/document.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/dotjs.svg b/src/material-icons/icons/dotjs.svg new file mode 100644 index 0000000..5ac893c --- /dev/null +++ b/src/material-icons/icons/dotjs.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/drawio.svg b/src/material-icons/icons/drawio.svg new file mode 100644 index 0000000..e3b8ba0 --- /dev/null +++ b/src/material-icons/icons/drawio.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/drizzle.svg b/src/material-icons/icons/drizzle.svg new file mode 100644 index 0000000..0de05d7 --- /dev/null +++ b/src/material-icons/icons/drizzle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/drone.svg b/src/material-icons/icons/drone.svg new file mode 100644 index 0000000..983a332 --- /dev/null +++ b/src/material-icons/icons/drone.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/drone_light.svg b/src/material-icons/icons/drone_light.svg new file mode 100644 index 0000000..5499244 --- /dev/null +++ b/src/material-icons/icons/drone_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/duc.svg b/src/material-icons/icons/duc.svg new file mode 100644 index 0000000..cfa947c --- /dev/null +++ b/src/material-icons/icons/duc.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/dune.svg b/src/material-icons/icons/dune.svg new file mode 100644 index 0000000..247cd36 --- /dev/null +++ b/src/material-icons/icons/dune.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/edge.svg b/src/material-icons/icons/edge.svg new file mode 100644 index 0000000..8275e40 --- /dev/null +++ b/src/material-icons/icons/edge.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/editorconfig.svg b/src/material-icons/icons/editorconfig.svg new file mode 100644 index 0000000..bfcfc42 --- /dev/null +++ b/src/material-icons/icons/editorconfig.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/ejs.svg b/src/material-icons/icons/ejs.svg new file mode 100644 index 0000000..6ead40e --- /dev/null +++ b/src/material-icons/icons/ejs.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/elixir.svg b/src/material-icons/icons/elixir.svg new file mode 100644 index 0000000..e086af6 --- /dev/null +++ b/src/material-icons/icons/elixir.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/elm.svg b/src/material-icons/icons/elm.svg new file mode 100644 index 0000000..973ded8 --- /dev/null +++ b/src/material-icons/icons/elm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/email.svg b/src/material-icons/icons/email.svg new file mode 100644 index 0000000..5c7de60 --- /dev/null +++ b/src/material-icons/icons/email.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/ember.svg b/src/material-icons/icons/ember.svg new file mode 100644 index 0000000..1091083 --- /dev/null +++ b/src/material-icons/icons/ember.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/erlang.svg b/src/material-icons/icons/erlang.svg new file mode 100644 index 0000000..63a2769 --- /dev/null +++ b/src/material-icons/icons/erlang.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/esbuild.svg b/src/material-icons/icons/esbuild.svg new file mode 100644 index 0000000..e682d6b --- /dev/null +++ b/src/material-icons/icons/esbuild.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/eslint.svg b/src/material-icons/icons/eslint.svg new file mode 100644 index 0000000..185da17 --- /dev/null +++ b/src/material-icons/icons/eslint.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/exe.svg b/src/material-icons/icons/exe.svg new file mode 100644 index 0000000..649fc58 --- /dev/null +++ b/src/material-icons/icons/exe.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/fastlane.svg b/src/material-icons/icons/fastlane.svg new file mode 100644 index 0000000..78cf188 --- /dev/null +++ b/src/material-icons/icons/fastlane.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/favicon.svg b/src/material-icons/icons/favicon.svg new file mode 100644 index 0000000..21abf66 --- /dev/null +++ b/src/material-icons/icons/favicon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/figma.svg b/src/material-icons/icons/figma.svg new file mode 100644 index 0000000..e54adb1 --- /dev/null +++ b/src/material-icons/icons/figma.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/firebase.svg b/src/material-icons/icons/firebase.svg new file mode 100644 index 0000000..7281691 --- /dev/null +++ b/src/material-icons/icons/firebase.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/flash.svg b/src/material-icons/icons/flash.svg new file mode 100644 index 0000000..4d52f1e --- /dev/null +++ b/src/material-icons/icons/flash.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/flow.svg b/src/material-icons/icons/flow.svg new file mode 100644 index 0000000..0591981 --- /dev/null +++ b/src/material-icons/icons/flow.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-admin-open.svg b/src/material-icons/icons/folder-admin-open.svg new file mode 100644 index 0000000..aac8a3d --- /dev/null +++ b/src/material-icons/icons/folder-admin-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-admin.svg b/src/material-icons/icons/folder-admin.svg new file mode 100644 index 0000000..27fc1ae --- /dev/null +++ b/src/material-icons/icons/folder-admin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-android-open.svg b/src/material-icons/icons/folder-android-open.svg new file mode 100644 index 0000000..c8b970a --- /dev/null +++ b/src/material-icons/icons/folder-android-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-android.svg b/src/material-icons/icons/folder-android.svg new file mode 100644 index 0000000..c8d1e70 --- /dev/null +++ b/src/material-icons/icons/folder-android.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-angular-open.svg b/src/material-icons/icons/folder-angular-open.svg new file mode 100644 index 0000000..5207d34 --- /dev/null +++ b/src/material-icons/icons/folder-angular-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-angular.svg b/src/material-icons/icons/folder-angular.svg new file mode 100644 index 0000000..496dc46 --- /dev/null +++ b/src/material-icons/icons/folder-angular.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-animation-open.svg b/src/material-icons/icons/folder-animation-open.svg new file mode 100644 index 0000000..1dedd76 --- /dev/null +++ b/src/material-icons/icons/folder-animation-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-animation.svg b/src/material-icons/icons/folder-animation.svg new file mode 100644 index 0000000..ec3bd17 --- /dev/null +++ b/src/material-icons/icons/folder-animation.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-ansible-open.svg b/src/material-icons/icons/folder-ansible-open.svg new file mode 100644 index 0000000..b729f8d --- /dev/null +++ b/src/material-icons/icons/folder-ansible-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-ansible.svg b/src/material-icons/icons/folder-ansible.svg new file mode 100644 index 0000000..b20a8ca --- /dev/null +++ b/src/material-icons/icons/folder-ansible.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-api-open.svg b/src/material-icons/icons/folder-api-open.svg new file mode 100644 index 0000000..ddf4b1c --- /dev/null +++ b/src/material-icons/icons/folder-api-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-api.svg b/src/material-icons/icons/folder-api.svg new file mode 100644 index 0000000..54bc5a2 --- /dev/null +++ b/src/material-icons/icons/folder-api.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-apollo-open.svg b/src/material-icons/icons/folder-apollo-open.svg new file mode 100644 index 0000000..b9e5be1 --- /dev/null +++ b/src/material-icons/icons/folder-apollo-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-apollo.svg b/src/material-icons/icons/folder-apollo.svg new file mode 100644 index 0000000..88794b7 --- /dev/null +++ b/src/material-icons/icons/folder-apollo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-app-open.svg b/src/material-icons/icons/folder-app-open.svg new file mode 100644 index 0000000..de52492 --- /dev/null +++ b/src/material-icons/icons/folder-app-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-app.svg b/src/material-icons/icons/folder-app.svg new file mode 100644 index 0000000..68083c7 --- /dev/null +++ b/src/material-icons/icons/folder-app.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-archive-open.svg b/src/material-icons/icons/folder-archive-open.svg new file mode 100644 index 0000000..4092ca7 --- /dev/null +++ b/src/material-icons/icons/folder-archive-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-archive.svg b/src/material-icons/icons/folder-archive.svg new file mode 100644 index 0000000..75ab518 --- /dev/null +++ b/src/material-icons/icons/folder-archive.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-astro-open.svg b/src/material-icons/icons/folder-astro-open.svg new file mode 100644 index 0000000..f2652fa --- /dev/null +++ b/src/material-icons/icons/folder-astro-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-astro.svg b/src/material-icons/icons/folder-astro.svg new file mode 100644 index 0000000..163dea4 --- /dev/null +++ b/src/material-icons/icons/folder-astro.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-audio-open.svg b/src/material-icons/icons/folder-audio-open.svg new file mode 100644 index 0000000..a80eeb4 --- /dev/null +++ b/src/material-icons/icons/folder-audio-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-audio.svg b/src/material-icons/icons/folder-audio.svg new file mode 100644 index 0000000..1acd9d7 --- /dev/null +++ b/src/material-icons/icons/folder-audio.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-aurelia-open.svg b/src/material-icons/icons/folder-aurelia-open.svg new file mode 100644 index 0000000..49fb3d8 --- /dev/null +++ b/src/material-icons/icons/folder-aurelia-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-aurelia.svg b/src/material-icons/icons/folder-aurelia.svg new file mode 100644 index 0000000..1d52a91 --- /dev/null +++ b/src/material-icons/icons/folder-aurelia.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-aws-open.svg b/src/material-icons/icons/folder-aws-open.svg new file mode 100644 index 0000000..acd1176 --- /dev/null +++ b/src/material-icons/icons/folder-aws-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-aws.svg b/src/material-icons/icons/folder-aws.svg new file mode 100644 index 0000000..48111a6 --- /dev/null +++ b/src/material-icons/icons/folder-aws.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-azure-pipelines-open.svg b/src/material-icons/icons/folder-azure-pipelines-open.svg new file mode 100644 index 0000000..4dc564c --- /dev/null +++ b/src/material-icons/icons/folder-azure-pipelines-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-azure-pipelines.svg b/src/material-icons/icons/folder-azure-pipelines.svg new file mode 100644 index 0000000..aa2be27 --- /dev/null +++ b/src/material-icons/icons/folder-azure-pipelines.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-base-open.svg b/src/material-icons/icons/folder-base-open.svg new file mode 100644 index 0000000..9f0fd46 --- /dev/null +++ b/src/material-icons/icons/folder-base-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-base.svg b/src/material-icons/icons/folder-base.svg new file mode 100644 index 0000000..938f34f --- /dev/null +++ b/src/material-icons/icons/folder-base.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-batch-open.svg b/src/material-icons/icons/folder-batch-open.svg new file mode 100644 index 0000000..84f30bc --- /dev/null +++ b/src/material-icons/icons/folder-batch-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-batch.svg b/src/material-icons/icons/folder-batch.svg new file mode 100644 index 0000000..b0a88e9 --- /dev/null +++ b/src/material-icons/icons/folder-batch.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-benchmark-open.svg b/src/material-icons/icons/folder-benchmark-open.svg new file mode 100644 index 0000000..b12b046 --- /dev/null +++ b/src/material-icons/icons/folder-benchmark-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-benchmark.svg b/src/material-icons/icons/folder-benchmark.svg new file mode 100644 index 0000000..147e1ad --- /dev/null +++ b/src/material-icons/icons/folder-benchmark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-bicep-open.svg b/src/material-icons/icons/folder-bicep-open.svg new file mode 100644 index 0000000..d315c56 --- /dev/null +++ b/src/material-icons/icons/folder-bicep-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-bicep.svg b/src/material-icons/icons/folder-bicep.svg new file mode 100644 index 0000000..9a529b1 --- /dev/null +++ b/src/material-icons/icons/folder-bicep.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-bower-open.svg b/src/material-icons/icons/folder-bower-open.svg new file mode 100644 index 0000000..186427a --- /dev/null +++ b/src/material-icons/icons/folder-bower-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-bower.svg b/src/material-icons/icons/folder-bower.svg new file mode 100644 index 0000000..785a4d7 --- /dev/null +++ b/src/material-icons/icons/folder-bower.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-buildkite-open.svg b/src/material-icons/icons/folder-buildkite-open.svg new file mode 100644 index 0000000..6b844ac --- /dev/null +++ b/src/material-icons/icons/folder-buildkite-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-buildkite.svg b/src/material-icons/icons/folder-buildkite.svg new file mode 100644 index 0000000..1f94ac0 --- /dev/null +++ b/src/material-icons/icons/folder-buildkite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-cart-open.svg b/src/material-icons/icons/folder-cart-open.svg new file mode 100644 index 0000000..edb4911 --- /dev/null +++ b/src/material-icons/icons/folder-cart-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-cart.svg b/src/material-icons/icons/folder-cart.svg new file mode 100644 index 0000000..8143c67 --- /dev/null +++ b/src/material-icons/icons/folder-cart.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-changesets-open.svg b/src/material-icons/icons/folder-changesets-open.svg new file mode 100644 index 0000000..4aa6a0f --- /dev/null +++ b/src/material-icons/icons/folder-changesets-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-changesets.svg b/src/material-icons/icons/folder-changesets.svg new file mode 100644 index 0000000..c66e9fa --- /dev/null +++ b/src/material-icons/icons/folder-changesets.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-ci-open.svg b/src/material-icons/icons/folder-ci-open.svg new file mode 100644 index 0000000..b133e6b --- /dev/null +++ b/src/material-icons/icons/folder-ci-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-ci.svg b/src/material-icons/icons/folder-ci.svg new file mode 100644 index 0000000..be5a49c --- /dev/null +++ b/src/material-icons/icons/folder-ci.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-circleci-open.svg b/src/material-icons/icons/folder-circleci-open.svg new file mode 100644 index 0000000..9d2d7ea --- /dev/null +++ b/src/material-icons/icons/folder-circleci-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-circleci.svg b/src/material-icons/icons/folder-circleci.svg new file mode 100644 index 0000000..2ddd48c --- /dev/null +++ b/src/material-icons/icons/folder-circleci.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-class-open.svg b/src/material-icons/icons/folder-class-open.svg new file mode 100644 index 0000000..4288031 --- /dev/null +++ b/src/material-icons/icons/folder-class-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-class.svg b/src/material-icons/icons/folder-class.svg new file mode 100644 index 0000000..7b013a6 --- /dev/null +++ b/src/material-icons/icons/folder-class.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-client-open.svg b/src/material-icons/icons/folder-client-open.svg new file mode 100644 index 0000000..051253e --- /dev/null +++ b/src/material-icons/icons/folder-client-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-client.svg b/src/material-icons/icons/folder-client.svg new file mode 100644 index 0000000..d0c40b9 --- /dev/null +++ b/src/material-icons/icons/folder-client.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-cloudflare-open.svg b/src/material-icons/icons/folder-cloudflare-open.svg new file mode 100644 index 0000000..32b1c08 --- /dev/null +++ b/src/material-icons/icons/folder-cloudflare-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-cloudflare.svg b/src/material-icons/icons/folder-cloudflare.svg new file mode 100644 index 0000000..7c56b16 --- /dev/null +++ b/src/material-icons/icons/folder-cloudflare.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-cluster-open.svg b/src/material-icons/icons/folder-cluster-open.svg new file mode 100644 index 0000000..09a4536 --- /dev/null +++ b/src/material-icons/icons/folder-cluster-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-cluster.svg b/src/material-icons/icons/folder-cluster.svg new file mode 100644 index 0000000..e8651b5 --- /dev/null +++ b/src/material-icons/icons/folder-cluster.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-cobol-open.svg b/src/material-icons/icons/folder-cobol-open.svg new file mode 100644 index 0000000..d2d0b94 --- /dev/null +++ b/src/material-icons/icons/folder-cobol-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-cobol.svg b/src/material-icons/icons/folder-cobol.svg new file mode 100644 index 0000000..a1a160d --- /dev/null +++ b/src/material-icons/icons/folder-cobol.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-command-open.svg b/src/material-icons/icons/folder-command-open.svg new file mode 100644 index 0000000..710d96d --- /dev/null +++ b/src/material-icons/icons/folder-command-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-command.svg b/src/material-icons/icons/folder-command.svg new file mode 100644 index 0000000..41fd0dd --- /dev/null +++ b/src/material-icons/icons/folder-command.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-components-open.svg b/src/material-icons/icons/folder-components-open.svg new file mode 100644 index 0000000..8501f56 --- /dev/null +++ b/src/material-icons/icons/folder-components-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-components.svg b/src/material-icons/icons/folder-components.svg new file mode 100644 index 0000000..d6924bb --- /dev/null +++ b/src/material-icons/icons/folder-components.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-config-open.svg b/src/material-icons/icons/folder-config-open.svg new file mode 100644 index 0000000..a1f2b15 --- /dev/null +++ b/src/material-icons/icons/folder-config-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-config.svg b/src/material-icons/icons/folder-config.svg new file mode 100644 index 0000000..34f4a8a --- /dev/null +++ b/src/material-icons/icons/folder-config.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-connection-open.svg b/src/material-icons/icons/folder-connection-open.svg new file mode 100644 index 0000000..dd3a93e --- /dev/null +++ b/src/material-icons/icons/folder-connection-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-connection.svg b/src/material-icons/icons/folder-connection.svg new file mode 100644 index 0000000..62183e8 --- /dev/null +++ b/src/material-icons/icons/folder-connection.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-console-open.svg b/src/material-icons/icons/folder-console-open.svg new file mode 100644 index 0000000..6e7fc8b --- /dev/null +++ b/src/material-icons/icons/folder-console-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-console.svg b/src/material-icons/icons/folder-console.svg new file mode 100644 index 0000000..4e2cafb --- /dev/null +++ b/src/material-icons/icons/folder-console.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-constant-open.svg b/src/material-icons/icons/folder-constant-open.svg new file mode 100644 index 0000000..57989fb --- /dev/null +++ b/src/material-icons/icons/folder-constant-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-constant.svg b/src/material-icons/icons/folder-constant.svg new file mode 100644 index 0000000..5b66078 --- /dev/null +++ b/src/material-icons/icons/folder-constant.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-container-open.svg b/src/material-icons/icons/folder-container-open.svg new file mode 100644 index 0000000..c27bb4f --- /dev/null +++ b/src/material-icons/icons/folder-container-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-container.svg b/src/material-icons/icons/folder-container.svg new file mode 100644 index 0000000..72456eb --- /dev/null +++ b/src/material-icons/icons/folder-container.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-content-open.svg b/src/material-icons/icons/folder-content-open.svg new file mode 100644 index 0000000..40ed89c --- /dev/null +++ b/src/material-icons/icons/folder-content-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-content.svg b/src/material-icons/icons/folder-content.svg new file mode 100644 index 0000000..aea422d --- /dev/null +++ b/src/material-icons/icons/folder-content.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-context-open.svg b/src/material-icons/icons/folder-context-open.svg new file mode 100644 index 0000000..434c434 --- /dev/null +++ b/src/material-icons/icons/folder-context-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-context.svg b/src/material-icons/icons/folder-context.svg new file mode 100644 index 0000000..05eb90a --- /dev/null +++ b/src/material-icons/icons/folder-context.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-contract-open.svg b/src/material-icons/icons/folder-contract-open.svg new file mode 100644 index 0000000..8732470 --- /dev/null +++ b/src/material-icons/icons/folder-contract-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-contract.svg b/src/material-icons/icons/folder-contract.svg new file mode 100644 index 0000000..a562b3f --- /dev/null +++ b/src/material-icons/icons/folder-contract.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-controller-open.svg b/src/material-icons/icons/folder-controller-open.svg new file mode 100644 index 0000000..efe0294 --- /dev/null +++ b/src/material-icons/icons/folder-controller-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-controller.svg b/src/material-icons/icons/folder-controller.svg new file mode 100644 index 0000000..3b19d1c --- /dev/null +++ b/src/material-icons/icons/folder-controller.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-core-open.svg b/src/material-icons/icons/folder-core-open.svg new file mode 100644 index 0000000..7e4b9bd --- /dev/null +++ b/src/material-icons/icons/folder-core-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-core.svg b/src/material-icons/icons/folder-core.svg new file mode 100644 index 0000000..0052d25 --- /dev/null +++ b/src/material-icons/icons/folder-core.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-coverage-open.svg b/src/material-icons/icons/folder-coverage-open.svg new file mode 100644 index 0000000..56e665c --- /dev/null +++ b/src/material-icons/icons/folder-coverage-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-coverage.svg b/src/material-icons/icons/folder-coverage.svg new file mode 100644 index 0000000..75d19ee --- /dev/null +++ b/src/material-icons/icons/folder-coverage.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-css-open.svg b/src/material-icons/icons/folder-css-open.svg new file mode 100644 index 0000000..37af187 --- /dev/null +++ b/src/material-icons/icons/folder-css-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-css.svg b/src/material-icons/icons/folder-css.svg new file mode 100644 index 0000000..2f65835 --- /dev/null +++ b/src/material-icons/icons/folder-css.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-custom-open.svg b/src/material-icons/icons/folder-custom-open.svg new file mode 100644 index 0000000..1481269 --- /dev/null +++ b/src/material-icons/icons/folder-custom-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-custom.svg b/src/material-icons/icons/folder-custom.svg new file mode 100644 index 0000000..042a961 --- /dev/null +++ b/src/material-icons/icons/folder-custom.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-cypress-open.svg b/src/material-icons/icons/folder-cypress-open.svg new file mode 100644 index 0000000..71d99b9 --- /dev/null +++ b/src/material-icons/icons/folder-cypress-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-cypress.svg b/src/material-icons/icons/folder-cypress.svg new file mode 100644 index 0000000..3825e3c --- /dev/null +++ b/src/material-icons/icons/folder-cypress.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-database-open.svg b/src/material-icons/icons/folder-database-open.svg new file mode 100644 index 0000000..5aab6ce --- /dev/null +++ b/src/material-icons/icons/folder-database-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-database.svg b/src/material-icons/icons/folder-database.svg new file mode 100644 index 0000000..94cb76f --- /dev/null +++ b/src/material-icons/icons/folder-database.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-debug-open.svg b/src/material-icons/icons/folder-debug-open.svg new file mode 100644 index 0000000..d0c234d --- /dev/null +++ b/src/material-icons/icons/folder-debug-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-debug.svg b/src/material-icons/icons/folder-debug.svg new file mode 100644 index 0000000..c378f5f --- /dev/null +++ b/src/material-icons/icons/folder-debug.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-decorators-open.svg b/src/material-icons/icons/folder-decorators-open.svg new file mode 100644 index 0000000..4781c3e --- /dev/null +++ b/src/material-icons/icons/folder-decorators-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-decorators.svg b/src/material-icons/icons/folder-decorators.svg new file mode 100644 index 0000000..22102e3 --- /dev/null +++ b/src/material-icons/icons/folder-decorators.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-delta-open.svg b/src/material-icons/icons/folder-delta-open.svg new file mode 100644 index 0000000..016e16f --- /dev/null +++ b/src/material-icons/icons/folder-delta-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-delta.svg b/src/material-icons/icons/folder-delta.svg new file mode 100644 index 0000000..94c8479 --- /dev/null +++ b/src/material-icons/icons/folder-delta.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-desktop-open.svg b/src/material-icons/icons/folder-desktop-open.svg new file mode 100644 index 0000000..905e422 --- /dev/null +++ b/src/material-icons/icons/folder-desktop-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-desktop.svg b/src/material-icons/icons/folder-desktop.svg new file mode 100644 index 0000000..eb6d4e7 --- /dev/null +++ b/src/material-icons/icons/folder-desktop.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-dist-open.svg b/src/material-icons/icons/folder-dist-open.svg new file mode 100644 index 0000000..fccb2b5 --- /dev/null +++ b/src/material-icons/icons/folder-dist-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-dist.svg b/src/material-icons/icons/folder-dist.svg new file mode 100644 index 0000000..da2236f --- /dev/null +++ b/src/material-icons/icons/folder-dist.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-docker-open.svg b/src/material-icons/icons/folder-docker-open.svg new file mode 100644 index 0000000..2f9c55f --- /dev/null +++ b/src/material-icons/icons/folder-docker-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-docker.svg b/src/material-icons/icons/folder-docker.svg new file mode 100644 index 0000000..dea7759 --- /dev/null +++ b/src/material-icons/icons/folder-docker.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-docs-open.svg b/src/material-icons/icons/folder-docs-open.svg new file mode 100644 index 0000000..b363412 --- /dev/null +++ b/src/material-icons/icons/folder-docs-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-docs.svg b/src/material-icons/icons/folder-docs.svg new file mode 100644 index 0000000..f2c9953 --- /dev/null +++ b/src/material-icons/icons/folder-docs.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-download-open.svg b/src/material-icons/icons/folder-download-open.svg new file mode 100644 index 0000000..f0d2908 --- /dev/null +++ b/src/material-icons/icons/folder-download-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-download.svg b/src/material-icons/icons/folder-download.svg new file mode 100644 index 0000000..e34e717 --- /dev/null +++ b/src/material-icons/icons/folder-download.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-drizzle-open.svg b/src/material-icons/icons/folder-drizzle-open.svg new file mode 100644 index 0000000..a62b0e0 --- /dev/null +++ b/src/material-icons/icons/folder-drizzle-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-drizzle.svg b/src/material-icons/icons/folder-drizzle.svg new file mode 100644 index 0000000..2e6a95b --- /dev/null +++ b/src/material-icons/icons/folder-drizzle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-dump-open.svg b/src/material-icons/icons/folder-dump-open.svg new file mode 100644 index 0000000..0809e0b --- /dev/null +++ b/src/material-icons/icons/folder-dump-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-dump.svg b/src/material-icons/icons/folder-dump.svg new file mode 100644 index 0000000..d78af10 --- /dev/null +++ b/src/material-icons/icons/folder-dump.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-enum-open.svg b/src/material-icons/icons/folder-enum-open.svg new file mode 100644 index 0000000..57df0fb --- /dev/null +++ b/src/material-icons/icons/folder-enum-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-enum.svg b/src/material-icons/icons/folder-enum.svg new file mode 100644 index 0000000..fb37913 --- /dev/null +++ b/src/material-icons/icons/folder-enum.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-environment-open.svg b/src/material-icons/icons/folder-environment-open.svg new file mode 100644 index 0000000..b582a5f --- /dev/null +++ b/src/material-icons/icons/folder-environment-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-environment.svg b/src/material-icons/icons/folder-environment.svg new file mode 100644 index 0000000..5c2702e --- /dev/null +++ b/src/material-icons/icons/folder-environment.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-error-open.svg b/src/material-icons/icons/folder-error-open.svg new file mode 100644 index 0000000..c69ec98 --- /dev/null +++ b/src/material-icons/icons/folder-error-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-error.svg b/src/material-icons/icons/folder-error.svg new file mode 100644 index 0000000..04ded91 --- /dev/null +++ b/src/material-icons/icons/folder-error.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-event-open.svg b/src/material-icons/icons/folder-event-open.svg new file mode 100644 index 0000000..cb080ca --- /dev/null +++ b/src/material-icons/icons/folder-event-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-event.svg b/src/material-icons/icons/folder-event.svg new file mode 100644 index 0000000..566199b --- /dev/null +++ b/src/material-icons/icons/folder-event.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-examples-open.svg b/src/material-icons/icons/folder-examples-open.svg new file mode 100644 index 0000000..e62efa7 --- /dev/null +++ b/src/material-icons/icons/folder-examples-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-examples.svg b/src/material-icons/icons/folder-examples.svg new file mode 100644 index 0000000..44186f2 --- /dev/null +++ b/src/material-icons/icons/folder-examples.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-expo-open.svg b/src/material-icons/icons/folder-expo-open.svg new file mode 100644 index 0000000..4f3b45a --- /dev/null +++ b/src/material-icons/icons/folder-expo-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-expo.svg b/src/material-icons/icons/folder-expo.svg new file mode 100644 index 0000000..bb3e31e --- /dev/null +++ b/src/material-icons/icons/folder-expo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-export-open.svg b/src/material-icons/icons/folder-export-open.svg new file mode 100644 index 0000000..aeef17b --- /dev/null +++ b/src/material-icons/icons/folder-export-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-export.svg b/src/material-icons/icons/folder-export.svg new file mode 100644 index 0000000..e0903c0 --- /dev/null +++ b/src/material-icons/icons/folder-export.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-fastlane-open.svg b/src/material-icons/icons/folder-fastlane-open.svg new file mode 100644 index 0000000..64da19f --- /dev/null +++ b/src/material-icons/icons/folder-fastlane-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-fastlane.svg b/src/material-icons/icons/folder-fastlane.svg new file mode 100644 index 0000000..638ebb5 --- /dev/null +++ b/src/material-icons/icons/folder-fastlane.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-firebase-open.svg b/src/material-icons/icons/folder-firebase-open.svg new file mode 100644 index 0000000..983370b --- /dev/null +++ b/src/material-icons/icons/folder-firebase-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-firebase.svg b/src/material-icons/icons/folder-firebase.svg new file mode 100644 index 0000000..f326421 --- /dev/null +++ b/src/material-icons/icons/folder-firebase.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-flow-open.svg b/src/material-icons/icons/folder-flow-open.svg new file mode 100644 index 0000000..9c0cd06 --- /dev/null +++ b/src/material-icons/icons/folder-flow-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-flow.svg b/src/material-icons/icons/folder-flow.svg new file mode 100644 index 0000000..54d0320 --- /dev/null +++ b/src/material-icons/icons/folder-flow.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-flutter-open.svg b/src/material-icons/icons/folder-flutter-open.svg new file mode 100644 index 0000000..9bff57b --- /dev/null +++ b/src/material-icons/icons/folder-flutter-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-flutter.svg b/src/material-icons/icons/folder-flutter.svg new file mode 100644 index 0000000..0f460b9 --- /dev/null +++ b/src/material-icons/icons/folder-flutter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-font-open.svg b/src/material-icons/icons/folder-font-open.svg new file mode 100644 index 0000000..b81ccdc --- /dev/null +++ b/src/material-icons/icons/folder-font-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-font.svg b/src/material-icons/icons/folder-font.svg new file mode 100644 index 0000000..6f69cfd --- /dev/null +++ b/src/material-icons/icons/folder-font.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-functions-open.svg b/src/material-icons/icons/folder-functions-open.svg new file mode 100644 index 0000000..0bfe001 --- /dev/null +++ b/src/material-icons/icons/folder-functions-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-functions.svg b/src/material-icons/icons/folder-functions.svg new file mode 100644 index 0000000..d6e8297 --- /dev/null +++ b/src/material-icons/icons/folder-functions.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-gamemaker-open.svg b/src/material-icons/icons/folder-gamemaker-open.svg new file mode 100644 index 0000000..706341e --- /dev/null +++ b/src/material-icons/icons/folder-gamemaker-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-gamemaker.svg b/src/material-icons/icons/folder-gamemaker.svg new file mode 100644 index 0000000..3deb6a3 --- /dev/null +++ b/src/material-icons/icons/folder-gamemaker.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-generator-open.svg b/src/material-icons/icons/folder-generator-open.svg new file mode 100644 index 0000000..c658b32 --- /dev/null +++ b/src/material-icons/icons/folder-generator-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-generator.svg b/src/material-icons/icons/folder-generator.svg new file mode 100644 index 0000000..ee9953a --- /dev/null +++ b/src/material-icons/icons/folder-generator.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-gh-workflows-open.svg b/src/material-icons/icons/folder-gh-workflows-open.svg new file mode 100644 index 0000000..86c5b53 --- /dev/null +++ b/src/material-icons/icons/folder-gh-workflows-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-gh-workflows.svg b/src/material-icons/icons/folder-gh-workflows.svg new file mode 100644 index 0000000..a4f925c --- /dev/null +++ b/src/material-icons/icons/folder-gh-workflows.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-git-open.svg b/src/material-icons/icons/folder-git-open.svg new file mode 100644 index 0000000..f3c4c04 --- /dev/null +++ b/src/material-icons/icons/folder-git-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-git.svg b/src/material-icons/icons/folder-git.svg new file mode 100644 index 0000000..1060c2f --- /dev/null +++ b/src/material-icons/icons/folder-git.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-gitea-open.svg b/src/material-icons/icons/folder-gitea-open.svg new file mode 100644 index 0000000..9969800 --- /dev/null +++ b/src/material-icons/icons/folder-gitea-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-gitea.svg b/src/material-icons/icons/folder-gitea.svg new file mode 100644 index 0000000..638d14b --- /dev/null +++ b/src/material-icons/icons/folder-gitea.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-github-open.svg b/src/material-icons/icons/folder-github-open.svg new file mode 100644 index 0000000..9ed164d --- /dev/null +++ b/src/material-icons/icons/folder-github-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-github.svg b/src/material-icons/icons/folder-github.svg new file mode 100644 index 0000000..f880d46 --- /dev/null +++ b/src/material-icons/icons/folder-github.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-gitlab-open.svg b/src/material-icons/icons/folder-gitlab-open.svg new file mode 100644 index 0000000..2ed8d81 --- /dev/null +++ b/src/material-icons/icons/folder-gitlab-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-gitlab.svg b/src/material-icons/icons/folder-gitlab.svg new file mode 100644 index 0000000..80d26e4 --- /dev/null +++ b/src/material-icons/icons/folder-gitlab.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-global-open.svg b/src/material-icons/icons/folder-global-open.svg new file mode 100644 index 0000000..08a331b --- /dev/null +++ b/src/material-icons/icons/folder-global-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-global.svg b/src/material-icons/icons/folder-global.svg new file mode 100644 index 0000000..a4bf653 --- /dev/null +++ b/src/material-icons/icons/folder-global.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-godot-open.svg b/src/material-icons/icons/folder-godot-open.svg new file mode 100644 index 0000000..6a8178c --- /dev/null +++ b/src/material-icons/icons/folder-godot-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-godot.svg b/src/material-icons/icons/folder-godot.svg new file mode 100644 index 0000000..62d1846 --- /dev/null +++ b/src/material-icons/icons/folder-godot.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-gradle-open.svg b/src/material-icons/icons/folder-gradle-open.svg new file mode 100644 index 0000000..3913693 --- /dev/null +++ b/src/material-icons/icons/folder-gradle-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-gradle.svg b/src/material-icons/icons/folder-gradle.svg new file mode 100644 index 0000000..1161a8c --- /dev/null +++ b/src/material-icons/icons/folder-gradle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-graphql-open.svg b/src/material-icons/icons/folder-graphql-open.svg new file mode 100644 index 0000000..5732abe --- /dev/null +++ b/src/material-icons/icons/folder-graphql-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-graphql.svg b/src/material-icons/icons/folder-graphql.svg new file mode 100644 index 0000000..32bff47 --- /dev/null +++ b/src/material-icons/icons/folder-graphql.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-guard-open.svg b/src/material-icons/icons/folder-guard-open.svg new file mode 100644 index 0000000..316f842 --- /dev/null +++ b/src/material-icons/icons/folder-guard-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-guard.svg b/src/material-icons/icons/folder-guard.svg new file mode 100644 index 0000000..685db5a --- /dev/null +++ b/src/material-icons/icons/folder-guard.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-gulp-open.svg b/src/material-icons/icons/folder-gulp-open.svg new file mode 100644 index 0000000..28be4be --- /dev/null +++ b/src/material-icons/icons/folder-gulp-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-gulp.svg b/src/material-icons/icons/folder-gulp.svg new file mode 100644 index 0000000..c2658f1 --- /dev/null +++ b/src/material-icons/icons/folder-gulp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-helm-open.svg b/src/material-icons/icons/folder-helm-open.svg new file mode 100644 index 0000000..c0a6179 --- /dev/null +++ b/src/material-icons/icons/folder-helm-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-helm.svg b/src/material-icons/icons/folder-helm.svg new file mode 100644 index 0000000..c236de8 --- /dev/null +++ b/src/material-icons/icons/folder-helm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-helper-open.svg b/src/material-icons/icons/folder-helper-open.svg new file mode 100644 index 0000000..67cec67 --- /dev/null +++ b/src/material-icons/icons/folder-helper-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-helper.svg b/src/material-icons/icons/folder-helper.svg new file mode 100644 index 0000000..121f98f --- /dev/null +++ b/src/material-icons/icons/folder-helper.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-home-open.svg b/src/material-icons/icons/folder-home-open.svg new file mode 100644 index 0000000..2288b50 --- /dev/null +++ b/src/material-icons/icons/folder-home-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-home.svg b/src/material-icons/icons/folder-home.svg new file mode 100644 index 0000000..e9c37eb --- /dev/null +++ b/src/material-icons/icons/folder-home.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-hook-open.svg b/src/material-icons/icons/folder-hook-open.svg new file mode 100644 index 0000000..13ed873 --- /dev/null +++ b/src/material-icons/icons/folder-hook-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-hook.svg b/src/material-icons/icons/folder-hook.svg new file mode 100644 index 0000000..70da648 --- /dev/null +++ b/src/material-icons/icons/folder-hook.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-husky-open.svg b/src/material-icons/icons/folder-husky-open.svg new file mode 100644 index 0000000..5332da1 --- /dev/null +++ b/src/material-icons/icons/folder-husky-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-husky.svg b/src/material-icons/icons/folder-husky.svg new file mode 100644 index 0000000..3df4c40 --- /dev/null +++ b/src/material-icons/icons/folder-husky.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-i18n-open.svg b/src/material-icons/icons/folder-i18n-open.svg new file mode 100644 index 0000000..e1f1202 --- /dev/null +++ b/src/material-icons/icons/folder-i18n-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-i18n.svg b/src/material-icons/icons/folder-i18n.svg new file mode 100644 index 0000000..b918697 --- /dev/null +++ b/src/material-icons/icons/folder-i18n.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-images-open.svg b/src/material-icons/icons/folder-images-open.svg new file mode 100644 index 0000000..e2e2744 --- /dev/null +++ b/src/material-icons/icons/folder-images-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-images.svg b/src/material-icons/icons/folder-images.svg new file mode 100644 index 0000000..c602929 --- /dev/null +++ b/src/material-icons/icons/folder-images.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-import-open.svg b/src/material-icons/icons/folder-import-open.svg new file mode 100644 index 0000000..acb0c11 --- /dev/null +++ b/src/material-icons/icons/folder-import-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-import.svg b/src/material-icons/icons/folder-import.svg new file mode 100644 index 0000000..50743a6 --- /dev/null +++ b/src/material-icons/icons/folder-import.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-include-open.svg b/src/material-icons/icons/folder-include-open.svg new file mode 100644 index 0000000..63b4cb7 --- /dev/null +++ b/src/material-icons/icons/folder-include-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-include.svg b/src/material-icons/icons/folder-include.svg new file mode 100644 index 0000000..f8ae678 --- /dev/null +++ b/src/material-icons/icons/folder-include.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-intellij-open.svg b/src/material-icons/icons/folder-intellij-open.svg new file mode 100644 index 0000000..6a5b472 --- /dev/null +++ b/src/material-icons/icons/folder-intellij-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-intellij-open_light.svg b/src/material-icons/icons/folder-intellij-open_light.svg new file mode 100644 index 0000000..bf50885 --- /dev/null +++ b/src/material-icons/icons/folder-intellij-open_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-intellij.svg b/src/material-icons/icons/folder-intellij.svg new file mode 100644 index 0000000..91d0fe7 --- /dev/null +++ b/src/material-icons/icons/folder-intellij.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-intellij_light.svg b/src/material-icons/icons/folder-intellij_light.svg new file mode 100644 index 0000000..ce01332 --- /dev/null +++ b/src/material-icons/icons/folder-intellij_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-interface-open.svg b/src/material-icons/icons/folder-interface-open.svg new file mode 100644 index 0000000..d762fb8 --- /dev/null +++ b/src/material-icons/icons/folder-interface-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-interface.svg b/src/material-icons/icons/folder-interface.svg new file mode 100644 index 0000000..74188df --- /dev/null +++ b/src/material-icons/icons/folder-interface.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-ios-open.svg b/src/material-icons/icons/folder-ios-open.svg new file mode 100644 index 0000000..d12bf17 --- /dev/null +++ b/src/material-icons/icons/folder-ios-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-ios.svg b/src/material-icons/icons/folder-ios.svg new file mode 100644 index 0000000..6b45ba1 --- /dev/null +++ b/src/material-icons/icons/folder-ios.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-java-open.svg b/src/material-icons/icons/folder-java-open.svg new file mode 100644 index 0000000..d70fb1b --- /dev/null +++ b/src/material-icons/icons/folder-java-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-java.svg b/src/material-icons/icons/folder-java.svg new file mode 100644 index 0000000..6ae16c0 --- /dev/null +++ b/src/material-icons/icons/folder-java.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-javascript-open.svg b/src/material-icons/icons/folder-javascript-open.svg new file mode 100644 index 0000000..18ff1c8 --- /dev/null +++ b/src/material-icons/icons/folder-javascript-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-javascript.svg b/src/material-icons/icons/folder-javascript.svg new file mode 100644 index 0000000..84d0609 --- /dev/null +++ b/src/material-icons/icons/folder-javascript.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-jinja-open.svg b/src/material-icons/icons/folder-jinja-open.svg new file mode 100644 index 0000000..65145fb --- /dev/null +++ b/src/material-icons/icons/folder-jinja-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-jinja-open_light.svg b/src/material-icons/icons/folder-jinja-open_light.svg new file mode 100644 index 0000000..499b228 --- /dev/null +++ b/src/material-icons/icons/folder-jinja-open_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-jinja.svg b/src/material-icons/icons/folder-jinja.svg new file mode 100644 index 0000000..a16a091 --- /dev/null +++ b/src/material-icons/icons/folder-jinja.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-jinja_light.svg b/src/material-icons/icons/folder-jinja_light.svg new file mode 100644 index 0000000..8f502a1 --- /dev/null +++ b/src/material-icons/icons/folder-jinja_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-job-open.svg b/src/material-icons/icons/folder-job-open.svg new file mode 100644 index 0000000..fbb9468 --- /dev/null +++ b/src/material-icons/icons/folder-job-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-job.svg b/src/material-icons/icons/folder-job.svg new file mode 100644 index 0000000..85ecf42 --- /dev/null +++ b/src/material-icons/icons/folder-job.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-json-open.svg b/src/material-icons/icons/folder-json-open.svg new file mode 100644 index 0000000..957bfa1 --- /dev/null +++ b/src/material-icons/icons/folder-json-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-json.svg b/src/material-icons/icons/folder-json.svg new file mode 100644 index 0000000..d53528a --- /dev/null +++ b/src/material-icons/icons/folder-json.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-jupyter-open.svg b/src/material-icons/icons/folder-jupyter-open.svg new file mode 100644 index 0000000..1f01791 --- /dev/null +++ b/src/material-icons/icons/folder-jupyter-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-jupyter.svg b/src/material-icons/icons/folder-jupyter.svg new file mode 100644 index 0000000..face4ce --- /dev/null +++ b/src/material-icons/icons/folder-jupyter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-keys-open.svg b/src/material-icons/icons/folder-keys-open.svg new file mode 100644 index 0000000..1f502bf --- /dev/null +++ b/src/material-icons/icons/folder-keys-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-keys.svg b/src/material-icons/icons/folder-keys.svg new file mode 100644 index 0000000..9879959 --- /dev/null +++ b/src/material-icons/icons/folder-keys.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-kubernetes-open.svg b/src/material-icons/icons/folder-kubernetes-open.svg new file mode 100644 index 0000000..27d1f39 --- /dev/null +++ b/src/material-icons/icons/folder-kubernetes-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-kubernetes.svg b/src/material-icons/icons/folder-kubernetes.svg new file mode 100644 index 0000000..76bbac5 --- /dev/null +++ b/src/material-icons/icons/folder-kubernetes.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-layout-open.svg b/src/material-icons/icons/folder-layout-open.svg new file mode 100644 index 0000000..a5c9d91 --- /dev/null +++ b/src/material-icons/icons/folder-layout-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-layout.svg b/src/material-icons/icons/folder-layout.svg new file mode 100644 index 0000000..5cbc218 --- /dev/null +++ b/src/material-icons/icons/folder-layout.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-less-open.svg b/src/material-icons/icons/folder-less-open.svg new file mode 100644 index 0000000..d4cd9af --- /dev/null +++ b/src/material-icons/icons/folder-less-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-less.svg b/src/material-icons/icons/folder-less.svg new file mode 100644 index 0000000..37536bb --- /dev/null +++ b/src/material-icons/icons/folder-less.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-lib-open.svg b/src/material-icons/icons/folder-lib-open.svg new file mode 100644 index 0000000..13061bc --- /dev/null +++ b/src/material-icons/icons/folder-lib-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-lib.svg b/src/material-icons/icons/folder-lib.svg new file mode 100644 index 0000000..560a183 --- /dev/null +++ b/src/material-icons/icons/folder-lib.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-linux-open.svg b/src/material-icons/icons/folder-linux-open.svg new file mode 100644 index 0000000..1950cbd --- /dev/null +++ b/src/material-icons/icons/folder-linux-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-linux.svg b/src/material-icons/icons/folder-linux.svg new file mode 100644 index 0000000..85c2b00 --- /dev/null +++ b/src/material-icons/icons/folder-linux.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-log-open.svg b/src/material-icons/icons/folder-log-open.svg new file mode 100644 index 0000000..7b66276 --- /dev/null +++ b/src/material-icons/icons/folder-log-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-log.svg b/src/material-icons/icons/folder-log.svg new file mode 100644 index 0000000..2aa1865 --- /dev/null +++ b/src/material-icons/icons/folder-log.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-lottie-open.svg b/src/material-icons/icons/folder-lottie-open.svg new file mode 100644 index 0000000..daced32 --- /dev/null +++ b/src/material-icons/icons/folder-lottie-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-lottie.svg b/src/material-icons/icons/folder-lottie.svg new file mode 100644 index 0000000..5c65ed5 --- /dev/null +++ b/src/material-icons/icons/folder-lottie.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-lua-open.svg b/src/material-icons/icons/folder-lua-open.svg new file mode 100644 index 0000000..3542ec8 --- /dev/null +++ b/src/material-icons/icons/folder-lua-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-lua.svg b/src/material-icons/icons/folder-lua.svg new file mode 100644 index 0000000..3473623 --- /dev/null +++ b/src/material-icons/icons/folder-lua.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-macos-open.svg b/src/material-icons/icons/folder-macos-open.svg new file mode 100644 index 0000000..f37abd4 --- /dev/null +++ b/src/material-icons/icons/folder-macos-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-macos.svg b/src/material-icons/icons/folder-macos.svg new file mode 100644 index 0000000..f91e713 --- /dev/null +++ b/src/material-icons/icons/folder-macos.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-mail-open.svg b/src/material-icons/icons/folder-mail-open.svg new file mode 100644 index 0000000..b0f5e14 --- /dev/null +++ b/src/material-icons/icons/folder-mail-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-mail.svg b/src/material-icons/icons/folder-mail.svg new file mode 100644 index 0000000..f70f8f2 --- /dev/null +++ b/src/material-icons/icons/folder-mail.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-mappings-open.svg b/src/material-icons/icons/folder-mappings-open.svg new file mode 100644 index 0000000..a4ea3c2 --- /dev/null +++ b/src/material-icons/icons/folder-mappings-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-mappings.svg b/src/material-icons/icons/folder-mappings.svg new file mode 100644 index 0000000..95d86c1 --- /dev/null +++ b/src/material-icons/icons/folder-mappings.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-markdown-open.svg b/src/material-icons/icons/folder-markdown-open.svg new file mode 100644 index 0000000..743e00f --- /dev/null +++ b/src/material-icons/icons/folder-markdown-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-markdown.svg b/src/material-icons/icons/folder-markdown.svg new file mode 100644 index 0000000..7e456da --- /dev/null +++ b/src/material-icons/icons/folder-markdown.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-mercurial-open.svg b/src/material-icons/icons/folder-mercurial-open.svg new file mode 100644 index 0000000..0ea9492 --- /dev/null +++ b/src/material-icons/icons/folder-mercurial-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-mercurial.svg b/src/material-icons/icons/folder-mercurial.svg new file mode 100644 index 0000000..e4fa198 --- /dev/null +++ b/src/material-icons/icons/folder-mercurial.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-messages-open.svg b/src/material-icons/icons/folder-messages-open.svg new file mode 100644 index 0000000..46baa14 --- /dev/null +++ b/src/material-icons/icons/folder-messages-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-messages.svg b/src/material-icons/icons/folder-messages.svg new file mode 100644 index 0000000..953318f --- /dev/null +++ b/src/material-icons/icons/folder-messages.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-meta-open.svg b/src/material-icons/icons/folder-meta-open.svg new file mode 100644 index 0000000..66d3f72 --- /dev/null +++ b/src/material-icons/icons/folder-meta-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-meta.svg b/src/material-icons/icons/folder-meta.svg new file mode 100644 index 0000000..bb587a2 --- /dev/null +++ b/src/material-icons/icons/folder-meta.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-middleware-open.svg b/src/material-icons/icons/folder-middleware-open.svg new file mode 100644 index 0000000..5a8d741 --- /dev/null +++ b/src/material-icons/icons/folder-middleware-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-middleware.svg b/src/material-icons/icons/folder-middleware.svg new file mode 100644 index 0000000..7ce815c --- /dev/null +++ b/src/material-icons/icons/folder-middleware.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-mjml-open.svg b/src/material-icons/icons/folder-mjml-open.svg new file mode 100644 index 0000000..bb23599 --- /dev/null +++ b/src/material-icons/icons/folder-mjml-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-mjml.svg b/src/material-icons/icons/folder-mjml.svg new file mode 100644 index 0000000..1575283 --- /dev/null +++ b/src/material-icons/icons/folder-mjml.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-mobile-open.svg b/src/material-icons/icons/folder-mobile-open.svg new file mode 100644 index 0000000..3bbd24c --- /dev/null +++ b/src/material-icons/icons/folder-mobile-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-mobile.svg b/src/material-icons/icons/folder-mobile.svg new file mode 100644 index 0000000..dfb6d95 --- /dev/null +++ b/src/material-icons/icons/folder-mobile.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-mock-open.svg b/src/material-icons/icons/folder-mock-open.svg new file mode 100644 index 0000000..2de289a --- /dev/null +++ b/src/material-icons/icons/folder-mock-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-mock.svg b/src/material-icons/icons/folder-mock.svg new file mode 100644 index 0000000..f00ac2f --- /dev/null +++ b/src/material-icons/icons/folder-mock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-mojo-open.svg b/src/material-icons/icons/folder-mojo-open.svg new file mode 100644 index 0000000..2b4e902 --- /dev/null +++ b/src/material-icons/icons/folder-mojo-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-mojo.svg b/src/material-icons/icons/folder-mojo.svg new file mode 100644 index 0000000..911d1c6 --- /dev/null +++ b/src/material-icons/icons/folder-mojo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-moon-open.svg b/src/material-icons/icons/folder-moon-open.svg new file mode 100644 index 0000000..3ee0f83 --- /dev/null +++ b/src/material-icons/icons/folder-moon-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-moon.svg b/src/material-icons/icons/folder-moon.svg new file mode 100644 index 0000000..c588c28 --- /dev/null +++ b/src/material-icons/icons/folder-moon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-netlify-open.svg b/src/material-icons/icons/folder-netlify-open.svg new file mode 100644 index 0000000..928d965 --- /dev/null +++ b/src/material-icons/icons/folder-netlify-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-netlify.svg b/src/material-icons/icons/folder-netlify.svg new file mode 100644 index 0000000..be9c059 --- /dev/null +++ b/src/material-icons/icons/folder-netlify.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-next-open.svg b/src/material-icons/icons/folder-next-open.svg new file mode 100644 index 0000000..5724528 --- /dev/null +++ b/src/material-icons/icons/folder-next-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-next.svg b/src/material-icons/icons/folder-next.svg new file mode 100644 index 0000000..24f0f4e --- /dev/null +++ b/src/material-icons/icons/folder-next.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-ngrx-actions-open.svg b/src/material-icons/icons/folder-ngrx-actions-open.svg new file mode 100644 index 0000000..a6f007e --- /dev/null +++ b/src/material-icons/icons/folder-ngrx-actions-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-ngrx-actions.svg b/src/material-icons/icons/folder-ngrx-actions.svg new file mode 100644 index 0000000..81f4b7f --- /dev/null +++ b/src/material-icons/icons/folder-ngrx-actions.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-ngrx-effects-open.svg b/src/material-icons/icons/folder-ngrx-effects-open.svg new file mode 100644 index 0000000..61f9006 --- /dev/null +++ b/src/material-icons/icons/folder-ngrx-effects-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-ngrx-effects.svg b/src/material-icons/icons/folder-ngrx-effects.svg new file mode 100644 index 0000000..c04eafe --- /dev/null +++ b/src/material-icons/icons/folder-ngrx-effects.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-ngrx-entities-open.svg b/src/material-icons/icons/folder-ngrx-entities-open.svg new file mode 100644 index 0000000..1c6f9df --- /dev/null +++ b/src/material-icons/icons/folder-ngrx-entities-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-ngrx-entities.svg b/src/material-icons/icons/folder-ngrx-entities.svg new file mode 100644 index 0000000..73576ee --- /dev/null +++ b/src/material-icons/icons/folder-ngrx-entities.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-ngrx-reducer-open.svg b/src/material-icons/icons/folder-ngrx-reducer-open.svg new file mode 100644 index 0000000..95eaef6 --- /dev/null +++ b/src/material-icons/icons/folder-ngrx-reducer-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-ngrx-reducer.svg b/src/material-icons/icons/folder-ngrx-reducer.svg new file mode 100644 index 0000000..2463607 --- /dev/null +++ b/src/material-icons/icons/folder-ngrx-reducer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-ngrx-selectors-open.svg b/src/material-icons/icons/folder-ngrx-selectors-open.svg new file mode 100644 index 0000000..b67b5ef --- /dev/null +++ b/src/material-icons/icons/folder-ngrx-selectors-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-ngrx-selectors.svg b/src/material-icons/icons/folder-ngrx-selectors.svg new file mode 100644 index 0000000..051d3f7 --- /dev/null +++ b/src/material-icons/icons/folder-ngrx-selectors.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-ngrx-state-open.svg b/src/material-icons/icons/folder-ngrx-state-open.svg new file mode 100644 index 0000000..4ba8f7a --- /dev/null +++ b/src/material-icons/icons/folder-ngrx-state-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-ngrx-state.svg b/src/material-icons/icons/folder-ngrx-state.svg new file mode 100644 index 0000000..6840d81 --- /dev/null +++ b/src/material-icons/icons/folder-ngrx-state.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-ngrx-store-open.svg b/src/material-icons/icons/folder-ngrx-store-open.svg new file mode 100644 index 0000000..7a075bf --- /dev/null +++ b/src/material-icons/icons/folder-ngrx-store-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-ngrx-store.svg b/src/material-icons/icons/folder-ngrx-store.svg new file mode 100644 index 0000000..778d6f3 --- /dev/null +++ b/src/material-icons/icons/folder-ngrx-store.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-node-open.svg b/src/material-icons/icons/folder-node-open.svg new file mode 100644 index 0000000..ae95a3f --- /dev/null +++ b/src/material-icons/icons/folder-node-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-node.svg b/src/material-icons/icons/folder-node.svg new file mode 100644 index 0000000..3e70a82 --- /dev/null +++ b/src/material-icons/icons/folder-node.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-nuxt-open.svg b/src/material-icons/icons/folder-nuxt-open.svg new file mode 100644 index 0000000..d84bdf1 --- /dev/null +++ b/src/material-icons/icons/folder-nuxt-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-nuxt.svg b/src/material-icons/icons/folder-nuxt.svg new file mode 100644 index 0000000..4945e10 --- /dev/null +++ b/src/material-icons/icons/folder-nuxt.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-other-open.svg b/src/material-icons/icons/folder-other-open.svg new file mode 100644 index 0000000..ff85854 --- /dev/null +++ b/src/material-icons/icons/folder-other-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-other.svg b/src/material-icons/icons/folder-other.svg new file mode 100644 index 0000000..3e1908c --- /dev/null +++ b/src/material-icons/icons/folder-other.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-packages-open.svg b/src/material-icons/icons/folder-packages-open.svg new file mode 100644 index 0000000..f64048f --- /dev/null +++ b/src/material-icons/icons/folder-packages-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-packages.svg b/src/material-icons/icons/folder-packages.svg new file mode 100644 index 0000000..6930f3a --- /dev/null +++ b/src/material-icons/icons/folder-packages.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-pdf-open.svg b/src/material-icons/icons/folder-pdf-open.svg new file mode 100644 index 0000000..5a7872c --- /dev/null +++ b/src/material-icons/icons/folder-pdf-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-pdf.svg b/src/material-icons/icons/folder-pdf.svg new file mode 100644 index 0000000..d4eda05 --- /dev/null +++ b/src/material-icons/icons/folder-pdf.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-pdm-open.svg b/src/material-icons/icons/folder-pdm-open.svg new file mode 100644 index 0000000..8a4a1ab --- /dev/null +++ b/src/material-icons/icons/folder-pdm-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-pdm.svg b/src/material-icons/icons/folder-pdm.svg new file mode 100644 index 0000000..345857e --- /dev/null +++ b/src/material-icons/icons/folder-pdm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-php-open.svg b/src/material-icons/icons/folder-php-open.svg new file mode 100644 index 0000000..48de71f --- /dev/null +++ b/src/material-icons/icons/folder-php-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-php.svg b/src/material-icons/icons/folder-php.svg new file mode 100644 index 0000000..d6fbeac --- /dev/null +++ b/src/material-icons/icons/folder-php.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-phpmailer-open.svg b/src/material-icons/icons/folder-phpmailer-open.svg new file mode 100644 index 0000000..d8b6ab4 --- /dev/null +++ b/src/material-icons/icons/folder-phpmailer-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-phpmailer.svg b/src/material-icons/icons/folder-phpmailer.svg new file mode 100644 index 0000000..fd32430 --- /dev/null +++ b/src/material-icons/icons/folder-phpmailer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-pipe-open.svg b/src/material-icons/icons/folder-pipe-open.svg new file mode 100644 index 0000000..67ca722 --- /dev/null +++ b/src/material-icons/icons/folder-pipe-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-pipe.svg b/src/material-icons/icons/folder-pipe.svg new file mode 100644 index 0000000..26a258c --- /dev/null +++ b/src/material-icons/icons/folder-pipe.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-plastic-open.svg b/src/material-icons/icons/folder-plastic-open.svg new file mode 100644 index 0000000..f84ab33 --- /dev/null +++ b/src/material-icons/icons/folder-plastic-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-plastic.svg b/src/material-icons/icons/folder-plastic.svg new file mode 100644 index 0000000..f0493b3 --- /dev/null +++ b/src/material-icons/icons/folder-plastic.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-plugin-open.svg b/src/material-icons/icons/folder-plugin-open.svg new file mode 100644 index 0000000..b57eb5f --- /dev/null +++ b/src/material-icons/icons/folder-plugin-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-plugin.svg b/src/material-icons/icons/folder-plugin.svg new file mode 100644 index 0000000..a20d9b2 --- /dev/null +++ b/src/material-icons/icons/folder-plugin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-prisma-open.svg b/src/material-icons/icons/folder-prisma-open.svg new file mode 100644 index 0000000..8155f18 --- /dev/null +++ b/src/material-icons/icons/folder-prisma-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-prisma.svg b/src/material-icons/icons/folder-prisma.svg new file mode 100644 index 0000000..cee8727 --- /dev/null +++ b/src/material-icons/icons/folder-prisma.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-private-open.svg b/src/material-icons/icons/folder-private-open.svg new file mode 100644 index 0000000..438c5d4 --- /dev/null +++ b/src/material-icons/icons/folder-private-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-private.svg b/src/material-icons/icons/folder-private.svg new file mode 100644 index 0000000..45b31fd --- /dev/null +++ b/src/material-icons/icons/folder-private.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-project-open.svg b/src/material-icons/icons/folder-project-open.svg new file mode 100644 index 0000000..b6cb1a8 --- /dev/null +++ b/src/material-icons/icons/folder-project-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-project.svg b/src/material-icons/icons/folder-project.svg new file mode 100644 index 0000000..a9f8c06 --- /dev/null +++ b/src/material-icons/icons/folder-project.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-proto-open.svg b/src/material-icons/icons/folder-proto-open.svg new file mode 100644 index 0000000..c6561ff --- /dev/null +++ b/src/material-icons/icons/folder-proto-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-proto.svg b/src/material-icons/icons/folder-proto.svg new file mode 100644 index 0000000..bb0681a --- /dev/null +++ b/src/material-icons/icons/folder-proto.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-public-open.svg b/src/material-icons/icons/folder-public-open.svg new file mode 100644 index 0000000..7e8d30f --- /dev/null +++ b/src/material-icons/icons/folder-public-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-public.svg b/src/material-icons/icons/folder-public.svg new file mode 100644 index 0000000..f35ec61 --- /dev/null +++ b/src/material-icons/icons/folder-public.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-python-open.svg b/src/material-icons/icons/folder-python-open.svg new file mode 100644 index 0000000..effc3f9 --- /dev/null +++ b/src/material-icons/icons/folder-python-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-python.svg b/src/material-icons/icons/folder-python.svg new file mode 100644 index 0000000..cd85c5c --- /dev/null +++ b/src/material-icons/icons/folder-python.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-quasar-open.svg b/src/material-icons/icons/folder-quasar-open.svg new file mode 100644 index 0000000..47646c9 --- /dev/null +++ b/src/material-icons/icons/folder-quasar-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-quasar.svg b/src/material-icons/icons/folder-quasar.svg new file mode 100644 index 0000000..68b08e4 --- /dev/null +++ b/src/material-icons/icons/folder-quasar.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-queue-open.svg b/src/material-icons/icons/folder-queue-open.svg new file mode 100644 index 0000000..434c638 --- /dev/null +++ b/src/material-icons/icons/folder-queue-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-queue.svg b/src/material-icons/icons/folder-queue.svg new file mode 100644 index 0000000..a80dcb5 --- /dev/null +++ b/src/material-icons/icons/folder-queue.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-react-components-open.svg b/src/material-icons/icons/folder-react-components-open.svg new file mode 100644 index 0000000..d7352cd --- /dev/null +++ b/src/material-icons/icons/folder-react-components-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-react-components.svg b/src/material-icons/icons/folder-react-components.svg new file mode 100644 index 0000000..35c17e1 --- /dev/null +++ b/src/material-icons/icons/folder-react-components.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-redux-actions-open.svg b/src/material-icons/icons/folder-redux-actions-open.svg new file mode 100644 index 0000000..5600e06 --- /dev/null +++ b/src/material-icons/icons/folder-redux-actions-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-redux-actions.svg b/src/material-icons/icons/folder-redux-actions.svg new file mode 100644 index 0000000..3e836b8 --- /dev/null +++ b/src/material-icons/icons/folder-redux-actions.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-redux-reducer-open.svg b/src/material-icons/icons/folder-redux-reducer-open.svg new file mode 100644 index 0000000..9a16c51 --- /dev/null +++ b/src/material-icons/icons/folder-redux-reducer-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-redux-reducer.svg b/src/material-icons/icons/folder-redux-reducer.svg new file mode 100644 index 0000000..3711bec --- /dev/null +++ b/src/material-icons/icons/folder-redux-reducer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-redux-selector-open.svg b/src/material-icons/icons/folder-redux-selector-open.svg new file mode 100644 index 0000000..39dfeea --- /dev/null +++ b/src/material-icons/icons/folder-redux-selector-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-redux-selector.svg b/src/material-icons/icons/folder-redux-selector.svg new file mode 100644 index 0000000..37964a9 --- /dev/null +++ b/src/material-icons/icons/folder-redux-selector.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-redux-store-open.svg b/src/material-icons/icons/folder-redux-store-open.svg new file mode 100644 index 0000000..37e28b1 --- /dev/null +++ b/src/material-icons/icons/folder-redux-store-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-redux-store.svg b/src/material-icons/icons/folder-redux-store.svg new file mode 100644 index 0000000..9d506f6 --- /dev/null +++ b/src/material-icons/icons/folder-redux-store.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-resolver-open.svg b/src/material-icons/icons/folder-resolver-open.svg new file mode 100644 index 0000000..bfd7ff6 --- /dev/null +++ b/src/material-icons/icons/folder-resolver-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-resolver.svg b/src/material-icons/icons/folder-resolver.svg new file mode 100644 index 0000000..8ee8bad --- /dev/null +++ b/src/material-icons/icons/folder-resolver.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-resource-open.svg b/src/material-icons/icons/folder-resource-open.svg new file mode 100644 index 0000000..d030c0c --- /dev/null +++ b/src/material-icons/icons/folder-resource-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-resource.svg b/src/material-icons/icons/folder-resource.svg new file mode 100644 index 0000000..95f39aa --- /dev/null +++ b/src/material-icons/icons/folder-resource.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-review-open.svg b/src/material-icons/icons/folder-review-open.svg new file mode 100644 index 0000000..c86f915 --- /dev/null +++ b/src/material-icons/icons/folder-review-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-review.svg b/src/material-icons/icons/folder-review.svg new file mode 100644 index 0000000..584bcef --- /dev/null +++ b/src/material-icons/icons/folder-review.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-robot-open.svg b/src/material-icons/icons/folder-robot-open.svg new file mode 100644 index 0000000..2958448 --- /dev/null +++ b/src/material-icons/icons/folder-robot-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-robot.svg b/src/material-icons/icons/folder-robot.svg new file mode 100644 index 0000000..3690374 --- /dev/null +++ b/src/material-icons/icons/folder-robot.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-routes-open.svg b/src/material-icons/icons/folder-routes-open.svg new file mode 100644 index 0000000..033d656 --- /dev/null +++ b/src/material-icons/icons/folder-routes-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-routes.svg b/src/material-icons/icons/folder-routes.svg new file mode 100644 index 0000000..c7f21fe --- /dev/null +++ b/src/material-icons/icons/folder-routes.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-rules-open.svg b/src/material-icons/icons/folder-rules-open.svg new file mode 100644 index 0000000..3d95e39 --- /dev/null +++ b/src/material-icons/icons/folder-rules-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-rules.svg b/src/material-icons/icons/folder-rules.svg new file mode 100644 index 0000000..9b2415d --- /dev/null +++ b/src/material-icons/icons/folder-rules.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-sass-open.svg b/src/material-icons/icons/folder-sass-open.svg new file mode 100644 index 0000000..e1ae0f6 --- /dev/null +++ b/src/material-icons/icons/folder-sass-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-sass.svg b/src/material-icons/icons/folder-sass.svg new file mode 100644 index 0000000..528c3ee --- /dev/null +++ b/src/material-icons/icons/folder-sass.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-scala-open.svg b/src/material-icons/icons/folder-scala-open.svg new file mode 100644 index 0000000..0213800 --- /dev/null +++ b/src/material-icons/icons/folder-scala-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-scala.svg b/src/material-icons/icons/folder-scala.svg new file mode 100644 index 0000000..0c490a7 --- /dev/null +++ b/src/material-icons/icons/folder-scala.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-scripts-open.svg b/src/material-icons/icons/folder-scripts-open.svg new file mode 100644 index 0000000..9446b5a --- /dev/null +++ b/src/material-icons/icons/folder-scripts-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-scripts.svg b/src/material-icons/icons/folder-scripts.svg new file mode 100644 index 0000000..948e393 --- /dev/null +++ b/src/material-icons/icons/folder-scripts.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-secure-open.svg b/src/material-icons/icons/folder-secure-open.svg new file mode 100644 index 0000000..9f49f94 --- /dev/null +++ b/src/material-icons/icons/folder-secure-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-secure.svg b/src/material-icons/icons/folder-secure.svg new file mode 100644 index 0000000..08117c9 --- /dev/null +++ b/src/material-icons/icons/folder-secure.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-seeders-open.svg b/src/material-icons/icons/folder-seeders-open.svg new file mode 100644 index 0000000..7863989 --- /dev/null +++ b/src/material-icons/icons/folder-seeders-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-seeders.svg b/src/material-icons/icons/folder-seeders.svg new file mode 100644 index 0000000..4573a49 --- /dev/null +++ b/src/material-icons/icons/folder-seeders.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-server-open.svg b/src/material-icons/icons/folder-server-open.svg new file mode 100644 index 0000000..f57d27d --- /dev/null +++ b/src/material-icons/icons/folder-server-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-server.svg b/src/material-icons/icons/folder-server.svg new file mode 100644 index 0000000..20319e1 --- /dev/null +++ b/src/material-icons/icons/folder-server.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-serverless-open.svg b/src/material-icons/icons/folder-serverless-open.svg new file mode 100644 index 0000000..7e0859e --- /dev/null +++ b/src/material-icons/icons/folder-serverless-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-serverless.svg b/src/material-icons/icons/folder-serverless.svg new file mode 100644 index 0000000..213b494 --- /dev/null +++ b/src/material-icons/icons/folder-serverless.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-shader-open.svg b/src/material-icons/icons/folder-shader-open.svg new file mode 100644 index 0000000..2c51b26 --- /dev/null +++ b/src/material-icons/icons/folder-shader-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-shader.svg b/src/material-icons/icons/folder-shader.svg new file mode 100644 index 0000000..242e58b --- /dev/null +++ b/src/material-icons/icons/folder-shader.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-shared-open.svg b/src/material-icons/icons/folder-shared-open.svg new file mode 100644 index 0000000..402c9a4 --- /dev/null +++ b/src/material-icons/icons/folder-shared-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-shared.svg b/src/material-icons/icons/folder-shared.svg new file mode 100644 index 0000000..e48f9de --- /dev/null +++ b/src/material-icons/icons/folder-shared.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-snapcraft-open.svg b/src/material-icons/icons/folder-snapcraft-open.svg new file mode 100644 index 0000000..cdc2722 --- /dev/null +++ b/src/material-icons/icons/folder-snapcraft-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-snapcraft.svg b/src/material-icons/icons/folder-snapcraft.svg new file mode 100644 index 0000000..69ee2c3 --- /dev/null +++ b/src/material-icons/icons/folder-snapcraft.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-snippet-open.svg b/src/material-icons/icons/folder-snippet-open.svg new file mode 100644 index 0000000..0d8f282 --- /dev/null +++ b/src/material-icons/icons/folder-snippet-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-snippet.svg b/src/material-icons/icons/folder-snippet.svg new file mode 100644 index 0000000..0aa5935 --- /dev/null +++ b/src/material-icons/icons/folder-snippet.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-src-open.svg b/src/material-icons/icons/folder-src-open.svg new file mode 100644 index 0000000..c5a9d54 --- /dev/null +++ b/src/material-icons/icons/folder-src-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-src.svg b/src/material-icons/icons/folder-src.svg new file mode 100644 index 0000000..78eff93 --- /dev/null +++ b/src/material-icons/icons/folder-src.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-stack-open.svg b/src/material-icons/icons/folder-stack-open.svg new file mode 100644 index 0000000..2ab6c87 --- /dev/null +++ b/src/material-icons/icons/folder-stack-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-stack.svg b/src/material-icons/icons/folder-stack.svg new file mode 100644 index 0000000..68e81b3 --- /dev/null +++ b/src/material-icons/icons/folder-stack.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-stencil-open.svg b/src/material-icons/icons/folder-stencil-open.svg new file mode 100644 index 0000000..2a58ff4 --- /dev/null +++ b/src/material-icons/icons/folder-stencil-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-stencil.svg b/src/material-icons/icons/folder-stencil.svg new file mode 100644 index 0000000..0eeab32 --- /dev/null +++ b/src/material-icons/icons/folder-stencil.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-store-open.svg b/src/material-icons/icons/folder-store-open.svg new file mode 100644 index 0000000..9b64a68 --- /dev/null +++ b/src/material-icons/icons/folder-store-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-store.svg b/src/material-icons/icons/folder-store.svg new file mode 100644 index 0000000..7e10ad4 --- /dev/null +++ b/src/material-icons/icons/folder-store.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-storybook-open.svg b/src/material-icons/icons/folder-storybook-open.svg new file mode 100644 index 0000000..eaca781 --- /dev/null +++ b/src/material-icons/icons/folder-storybook-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-storybook.svg b/src/material-icons/icons/folder-storybook.svg new file mode 100644 index 0000000..278c79a --- /dev/null +++ b/src/material-icons/icons/folder-storybook.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-stylus-open.svg b/src/material-icons/icons/folder-stylus-open.svg new file mode 100644 index 0000000..023f4df --- /dev/null +++ b/src/material-icons/icons/folder-stylus-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-stylus.svg b/src/material-icons/icons/folder-stylus.svg new file mode 100644 index 0000000..38cc9a6 --- /dev/null +++ b/src/material-icons/icons/folder-stylus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-sublime-open.svg b/src/material-icons/icons/folder-sublime-open.svg new file mode 100644 index 0000000..cb77f55 --- /dev/null +++ b/src/material-icons/icons/folder-sublime-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-sublime.svg b/src/material-icons/icons/folder-sublime.svg new file mode 100644 index 0000000..d0d63a1 --- /dev/null +++ b/src/material-icons/icons/folder-sublime.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-supabase-open.svg b/src/material-icons/icons/folder-supabase-open.svg new file mode 100644 index 0000000..23cbc59 --- /dev/null +++ b/src/material-icons/icons/folder-supabase-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-supabase.svg b/src/material-icons/icons/folder-supabase.svg new file mode 100644 index 0000000..57a449f --- /dev/null +++ b/src/material-icons/icons/folder-supabase.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-svelte-open.svg b/src/material-icons/icons/folder-svelte-open.svg new file mode 100644 index 0000000..40d5ffe --- /dev/null +++ b/src/material-icons/icons/folder-svelte-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-svelte.svg b/src/material-icons/icons/folder-svelte.svg new file mode 100644 index 0000000..0ce64fb --- /dev/null +++ b/src/material-icons/icons/folder-svelte.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-svg-open.svg b/src/material-icons/icons/folder-svg-open.svg new file mode 100644 index 0000000..288ddac --- /dev/null +++ b/src/material-icons/icons/folder-svg-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-svg.svg b/src/material-icons/icons/folder-svg.svg new file mode 100644 index 0000000..a11cb04 --- /dev/null +++ b/src/material-icons/icons/folder-svg.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-syntax-open.svg b/src/material-icons/icons/folder-syntax-open.svg new file mode 100644 index 0000000..f79fc2d --- /dev/null +++ b/src/material-icons/icons/folder-syntax-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-syntax.svg b/src/material-icons/icons/folder-syntax.svg new file mode 100644 index 0000000..5124527 --- /dev/null +++ b/src/material-icons/icons/folder-syntax.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-target-open.svg b/src/material-icons/icons/folder-target-open.svg new file mode 100644 index 0000000..ef45df5 --- /dev/null +++ b/src/material-icons/icons/folder-target-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-target.svg b/src/material-icons/icons/folder-target.svg new file mode 100644 index 0000000..19ca85b --- /dev/null +++ b/src/material-icons/icons/folder-target.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-taskfile-open.svg b/src/material-icons/icons/folder-taskfile-open.svg new file mode 100644 index 0000000..7100f2f --- /dev/null +++ b/src/material-icons/icons/folder-taskfile-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-taskfile.svg b/src/material-icons/icons/folder-taskfile.svg new file mode 100644 index 0000000..8fc9b22 --- /dev/null +++ b/src/material-icons/icons/folder-taskfile.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-tasks-open.svg b/src/material-icons/icons/folder-tasks-open.svg new file mode 100644 index 0000000..e4e3707 --- /dev/null +++ b/src/material-icons/icons/folder-tasks-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-tasks.svg b/src/material-icons/icons/folder-tasks.svg new file mode 100644 index 0000000..20d2b93 --- /dev/null +++ b/src/material-icons/icons/folder-tasks.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-television-open.svg b/src/material-icons/icons/folder-television-open.svg new file mode 100644 index 0000000..4339be8 --- /dev/null +++ b/src/material-icons/icons/folder-television-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-television.svg b/src/material-icons/icons/folder-television.svg new file mode 100644 index 0000000..4896ccb --- /dev/null +++ b/src/material-icons/icons/folder-television.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-temp-open.svg b/src/material-icons/icons/folder-temp-open.svg new file mode 100644 index 0000000..35912d9 --- /dev/null +++ b/src/material-icons/icons/folder-temp-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-temp.svg b/src/material-icons/icons/folder-temp.svg new file mode 100644 index 0000000..60867a9 --- /dev/null +++ b/src/material-icons/icons/folder-temp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-template-open.svg b/src/material-icons/icons/folder-template-open.svg new file mode 100644 index 0000000..f42da86 --- /dev/null +++ b/src/material-icons/icons/folder-template-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-template.svg b/src/material-icons/icons/folder-template.svg new file mode 100644 index 0000000..12eac68 --- /dev/null +++ b/src/material-icons/icons/folder-template.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-terraform-open.svg b/src/material-icons/icons/folder-terraform-open.svg new file mode 100644 index 0000000..388e44b --- /dev/null +++ b/src/material-icons/icons/folder-terraform-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-terraform.svg b/src/material-icons/icons/folder-terraform.svg new file mode 100644 index 0000000..1705351 --- /dev/null +++ b/src/material-icons/icons/folder-terraform.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-test-open.svg b/src/material-icons/icons/folder-test-open.svg new file mode 100644 index 0000000..bacd5e3 --- /dev/null +++ b/src/material-icons/icons/folder-test-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-test.svg b/src/material-icons/icons/folder-test.svg new file mode 100644 index 0000000..58abf0c --- /dev/null +++ b/src/material-icons/icons/folder-test.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-theme-open.svg b/src/material-icons/icons/folder-theme-open.svg new file mode 100644 index 0000000..cf6b1b3 --- /dev/null +++ b/src/material-icons/icons/folder-theme-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-theme.svg b/src/material-icons/icons/folder-theme.svg new file mode 100644 index 0000000..93247eb --- /dev/null +++ b/src/material-icons/icons/folder-theme.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-tools-open.svg b/src/material-icons/icons/folder-tools-open.svg new file mode 100644 index 0000000..838ed2a --- /dev/null +++ b/src/material-icons/icons/folder-tools-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-tools.svg b/src/material-icons/icons/folder-tools.svg new file mode 100644 index 0000000..34423d3 --- /dev/null +++ b/src/material-icons/icons/folder-tools.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-turborepo-open.svg b/src/material-icons/icons/folder-turborepo-open.svg new file mode 100644 index 0000000..d6f98d7 --- /dev/null +++ b/src/material-icons/icons/folder-turborepo-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-turborepo.svg b/src/material-icons/icons/folder-turborepo.svg new file mode 100644 index 0000000..bc5e347 --- /dev/null +++ b/src/material-icons/icons/folder-turborepo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-typescript-open.svg b/src/material-icons/icons/folder-typescript-open.svg new file mode 100644 index 0000000..f484fdb --- /dev/null +++ b/src/material-icons/icons/folder-typescript-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-typescript.svg b/src/material-icons/icons/folder-typescript.svg new file mode 100644 index 0000000..924d7f4 --- /dev/null +++ b/src/material-icons/icons/folder-typescript.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-ui-open.svg b/src/material-icons/icons/folder-ui-open.svg new file mode 100644 index 0000000..6a4de38 --- /dev/null +++ b/src/material-icons/icons/folder-ui-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-ui.svg b/src/material-icons/icons/folder-ui.svg new file mode 100644 index 0000000..51773ec --- /dev/null +++ b/src/material-icons/icons/folder-ui.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-unity-open.svg b/src/material-icons/icons/folder-unity-open.svg new file mode 100644 index 0000000..e716085 --- /dev/null +++ b/src/material-icons/icons/folder-unity-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-unity.svg b/src/material-icons/icons/folder-unity.svg new file mode 100644 index 0000000..0079878 --- /dev/null +++ b/src/material-icons/icons/folder-unity.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-update-open.svg b/src/material-icons/icons/folder-update-open.svg new file mode 100644 index 0000000..a7100fc --- /dev/null +++ b/src/material-icons/icons/folder-update-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-update.svg b/src/material-icons/icons/folder-update.svg new file mode 100644 index 0000000..659415b --- /dev/null +++ b/src/material-icons/icons/folder-update.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-upload-open.svg b/src/material-icons/icons/folder-upload-open.svg new file mode 100644 index 0000000..b1eeef7 --- /dev/null +++ b/src/material-icons/icons/folder-upload-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-upload.svg b/src/material-icons/icons/folder-upload.svg new file mode 100644 index 0000000..e4b0035 --- /dev/null +++ b/src/material-icons/icons/folder-upload.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-utils-open.svg b/src/material-icons/icons/folder-utils-open.svg new file mode 100644 index 0000000..64baa67 --- /dev/null +++ b/src/material-icons/icons/folder-utils-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-utils.svg b/src/material-icons/icons/folder-utils.svg new file mode 100644 index 0000000..9b69e61 --- /dev/null +++ b/src/material-icons/icons/folder-utils.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-vercel-open.svg b/src/material-icons/icons/folder-vercel-open.svg new file mode 100644 index 0000000..3ce64f3 --- /dev/null +++ b/src/material-icons/icons/folder-vercel-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-vercel.svg b/src/material-icons/icons/folder-vercel.svg new file mode 100644 index 0000000..a5a4537 --- /dev/null +++ b/src/material-icons/icons/folder-vercel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-verdaccio-open.svg b/src/material-icons/icons/folder-verdaccio-open.svg new file mode 100644 index 0000000..9df900e --- /dev/null +++ b/src/material-icons/icons/folder-verdaccio-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-verdaccio.svg b/src/material-icons/icons/folder-verdaccio.svg new file mode 100644 index 0000000..2850a51 --- /dev/null +++ b/src/material-icons/icons/folder-verdaccio.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-video-open.svg b/src/material-icons/icons/folder-video-open.svg new file mode 100644 index 0000000..74d9151 --- /dev/null +++ b/src/material-icons/icons/folder-video-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-video.svg b/src/material-icons/icons/folder-video.svg new file mode 100644 index 0000000..aefea14 --- /dev/null +++ b/src/material-icons/icons/folder-video.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-views-open.svg b/src/material-icons/icons/folder-views-open.svg new file mode 100644 index 0000000..99cf6b6 --- /dev/null +++ b/src/material-icons/icons/folder-views-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-views.svg b/src/material-icons/icons/folder-views.svg new file mode 100644 index 0000000..d674c8f --- /dev/null +++ b/src/material-icons/icons/folder-views.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-vm-open.svg b/src/material-icons/icons/folder-vm-open.svg new file mode 100644 index 0000000..258af2c --- /dev/null +++ b/src/material-icons/icons/folder-vm-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-vm.svg b/src/material-icons/icons/folder-vm.svg new file mode 100644 index 0000000..82fcf71 --- /dev/null +++ b/src/material-icons/icons/folder-vm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-vscode-open.svg b/src/material-icons/icons/folder-vscode-open.svg new file mode 100644 index 0000000..b2f1417 --- /dev/null +++ b/src/material-icons/icons/folder-vscode-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-vscode.svg b/src/material-icons/icons/folder-vscode.svg new file mode 100644 index 0000000..1d1d45b --- /dev/null +++ b/src/material-icons/icons/folder-vscode.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-vue-directives-open.svg b/src/material-icons/icons/folder-vue-directives-open.svg new file mode 100644 index 0000000..94c7f1a --- /dev/null +++ b/src/material-icons/icons/folder-vue-directives-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-vue-directives.svg b/src/material-icons/icons/folder-vue-directives.svg new file mode 100644 index 0000000..6962d8f --- /dev/null +++ b/src/material-icons/icons/folder-vue-directives.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-vue-open.svg b/src/material-icons/icons/folder-vue-open.svg new file mode 100644 index 0000000..13904c4 --- /dev/null +++ b/src/material-icons/icons/folder-vue-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-vue.svg b/src/material-icons/icons/folder-vue.svg new file mode 100644 index 0000000..79e6c4d --- /dev/null +++ b/src/material-icons/icons/folder-vue.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-vuepress-open.svg b/src/material-icons/icons/folder-vuepress-open.svg new file mode 100644 index 0000000..423586a --- /dev/null +++ b/src/material-icons/icons/folder-vuepress-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-vuepress.svg b/src/material-icons/icons/folder-vuepress.svg new file mode 100644 index 0000000..2035d6e --- /dev/null +++ b/src/material-icons/icons/folder-vuepress.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-vuex-store-open.svg b/src/material-icons/icons/folder-vuex-store-open.svg new file mode 100644 index 0000000..c981cb3 --- /dev/null +++ b/src/material-icons/icons/folder-vuex-store-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-vuex-store.svg b/src/material-icons/icons/folder-vuex-store.svg new file mode 100644 index 0000000..24b3d9d --- /dev/null +++ b/src/material-icons/icons/folder-vuex-store.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-wakatime-open.svg b/src/material-icons/icons/folder-wakatime-open.svg new file mode 100644 index 0000000..2bfe44d --- /dev/null +++ b/src/material-icons/icons/folder-wakatime-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-wakatime.svg b/src/material-icons/icons/folder-wakatime.svg new file mode 100644 index 0000000..1d095ea --- /dev/null +++ b/src/material-icons/icons/folder-wakatime.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-webpack-open.svg b/src/material-icons/icons/folder-webpack-open.svg new file mode 100644 index 0000000..fae650f --- /dev/null +++ b/src/material-icons/icons/folder-webpack-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-webpack.svg b/src/material-icons/icons/folder-webpack.svg new file mode 100644 index 0000000..17243ae --- /dev/null +++ b/src/material-icons/icons/folder-webpack.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-windows-open.svg b/src/material-icons/icons/folder-windows-open.svg new file mode 100644 index 0000000..e0bd129 --- /dev/null +++ b/src/material-icons/icons/folder-windows-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-windows.svg b/src/material-icons/icons/folder-windows.svg new file mode 100644 index 0000000..81b3ca6 --- /dev/null +++ b/src/material-icons/icons/folder-windows.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-wordpress-open.svg b/src/material-icons/icons/folder-wordpress-open.svg new file mode 100644 index 0000000..e285f7e --- /dev/null +++ b/src/material-icons/icons/folder-wordpress-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-wordpress.svg b/src/material-icons/icons/folder-wordpress.svg new file mode 100644 index 0000000..164a3a7 --- /dev/null +++ b/src/material-icons/icons/folder-wordpress.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-yarn-open.svg b/src/material-icons/icons/folder-yarn-open.svg new file mode 100644 index 0000000..c79cdb4 --- /dev/null +++ b/src/material-icons/icons/folder-yarn-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/folder-yarn.svg b/src/material-icons/icons/folder-yarn.svg new file mode 100644 index 0000000..b0ee472 --- /dev/null +++ b/src/material-icons/icons/folder-yarn.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/font.svg b/src/material-icons/icons/font.svg new file mode 100644 index 0000000..961586d --- /dev/null +++ b/src/material-icons/icons/font.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/forth.svg b/src/material-icons/icons/forth.svg new file mode 100644 index 0000000..50b66af --- /dev/null +++ b/src/material-icons/icons/forth.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/fortran.svg b/src/material-icons/icons/fortran.svg new file mode 100644 index 0000000..235db1a --- /dev/null +++ b/src/material-icons/icons/fortran.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/foxpro.svg b/src/material-icons/icons/foxpro.svg new file mode 100644 index 0000000..95e914a --- /dev/null +++ b/src/material-icons/icons/foxpro.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/fsharp.svg b/src/material-icons/icons/fsharp.svg new file mode 100644 index 0000000..df4c476 --- /dev/null +++ b/src/material-icons/icons/fsharp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/fusebox.svg b/src/material-icons/icons/fusebox.svg new file mode 100644 index 0000000..21068bb --- /dev/null +++ b/src/material-icons/icons/fusebox.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/gamemaker.svg b/src/material-icons/icons/gamemaker.svg new file mode 100644 index 0000000..79fddf7 --- /dev/null +++ b/src/material-icons/icons/gamemaker.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/gatsby.svg b/src/material-icons/icons/gatsby.svg new file mode 100644 index 0000000..a7326d0 --- /dev/null +++ b/src/material-icons/icons/gatsby.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/gcp.svg b/src/material-icons/icons/gcp.svg new file mode 100644 index 0000000..fc5928b --- /dev/null +++ b/src/material-icons/icons/gcp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/gemfile.svg b/src/material-icons/icons/gemfile.svg new file mode 100644 index 0000000..3e32b53 --- /dev/null +++ b/src/material-icons/icons/gemfile.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/gemini-ai.svg b/src/material-icons/icons/gemini-ai.svg new file mode 100644 index 0000000..eb0aae4 --- /dev/null +++ b/src/material-icons/icons/gemini-ai.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/gemini.svg b/src/material-icons/icons/gemini.svg new file mode 100644 index 0000000..c529a97 --- /dev/null +++ b/src/material-icons/icons/gemini.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/git.svg b/src/material-icons/icons/git.svg new file mode 100644 index 0000000..b4ba5e0 --- /dev/null +++ b/src/material-icons/icons/git.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/github-actions-workflow.svg b/src/material-icons/icons/github-actions-workflow.svg new file mode 100644 index 0000000..0dd1e5b --- /dev/null +++ b/src/material-icons/icons/github-actions-workflow.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/gitlab.svg b/src/material-icons/icons/gitlab.svg new file mode 100644 index 0000000..e1a0294 --- /dev/null +++ b/src/material-icons/icons/gitlab.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/gitpod.svg b/src/material-icons/icons/gitpod.svg new file mode 100644 index 0000000..3c8455c --- /dev/null +++ b/src/material-icons/icons/gitpod.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/gleam.svg b/src/material-icons/icons/gleam.svg new file mode 100644 index 0000000..2e53ccd --- /dev/null +++ b/src/material-icons/icons/gleam.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/go-mod.svg b/src/material-icons/icons/go-mod.svg new file mode 100644 index 0000000..3dbbd14 --- /dev/null +++ b/src/material-icons/icons/go-mod.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/go.svg b/src/material-icons/icons/go.svg new file mode 100644 index 0000000..56e0403 --- /dev/null +++ b/src/material-icons/icons/go.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/go_gopher.svg b/src/material-icons/icons/go_gopher.svg new file mode 100644 index 0000000..6de198c --- /dev/null +++ b/src/material-icons/icons/go_gopher.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/godot-assets.svg b/src/material-icons/icons/godot-assets.svg new file mode 100644 index 0000000..0fce8a8 --- /dev/null +++ b/src/material-icons/icons/godot-assets.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/godot.svg b/src/material-icons/icons/godot.svg new file mode 100644 index 0000000..c43a616 --- /dev/null +++ b/src/material-icons/icons/godot.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/gradle.svg b/src/material-icons/icons/gradle.svg new file mode 100644 index 0000000..f169520 --- /dev/null +++ b/src/material-icons/icons/gradle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/grafana-alloy.svg b/src/material-icons/icons/grafana-alloy.svg new file mode 100644 index 0000000..b199ede --- /dev/null +++ b/src/material-icons/icons/grafana-alloy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/grain.svg b/src/material-icons/icons/grain.svg new file mode 100644 index 0000000..f96d46b --- /dev/null +++ b/src/material-icons/icons/grain.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/graphcool.svg b/src/material-icons/icons/graphcool.svg new file mode 100644 index 0000000..8ff3be7 --- /dev/null +++ b/src/material-icons/icons/graphcool.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/graphql.svg b/src/material-icons/icons/graphql.svg new file mode 100644 index 0000000..252b0f7 --- /dev/null +++ b/src/material-icons/icons/graphql.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/gridsome.svg b/src/material-icons/icons/gridsome.svg new file mode 100644 index 0000000..024d26a --- /dev/null +++ b/src/material-icons/icons/gridsome.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/groovy.svg b/src/material-icons/icons/groovy.svg new file mode 100644 index 0000000..bf6d543 --- /dev/null +++ b/src/material-icons/icons/groovy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/grunt.svg b/src/material-icons/icons/grunt.svg new file mode 100644 index 0000000..c43b73d --- /dev/null +++ b/src/material-icons/icons/grunt.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/gulp.svg b/src/material-icons/icons/gulp.svg new file mode 100644 index 0000000..bc6a77f --- /dev/null +++ b/src/material-icons/icons/gulp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/h.svg b/src/material-icons/icons/h.svg new file mode 100644 index 0000000..5e6fbef --- /dev/null +++ b/src/material-icons/icons/h.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/hack.svg b/src/material-icons/icons/hack.svg new file mode 100644 index 0000000..7094ced --- /dev/null +++ b/src/material-icons/icons/hack.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/haml.svg b/src/material-icons/icons/haml.svg new file mode 100644 index 0000000..19483b2 --- /dev/null +++ b/src/material-icons/icons/haml.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/handlebars.svg b/src/material-icons/icons/handlebars.svg new file mode 100644 index 0000000..96a4669 --- /dev/null +++ b/src/material-icons/icons/handlebars.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/hardhat.svg b/src/material-icons/icons/hardhat.svg new file mode 100644 index 0000000..ea76464 --- /dev/null +++ b/src/material-icons/icons/hardhat.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/harmonix.svg b/src/material-icons/icons/harmonix.svg new file mode 100644 index 0000000..299fa47 --- /dev/null +++ b/src/material-icons/icons/harmonix.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/haskell.svg b/src/material-icons/icons/haskell.svg new file mode 100644 index 0000000..ae44927 --- /dev/null +++ b/src/material-icons/icons/haskell.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/haxe.svg b/src/material-icons/icons/haxe.svg new file mode 100644 index 0000000..94cb5ac --- /dev/null +++ b/src/material-icons/icons/haxe.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/hcl.svg b/src/material-icons/icons/hcl.svg new file mode 100644 index 0000000..b8bb1b6 --- /dev/null +++ b/src/material-icons/icons/hcl.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/hcl_light.svg b/src/material-icons/icons/hcl_light.svg new file mode 100644 index 0000000..117f8d4 --- /dev/null +++ b/src/material-icons/icons/hcl_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/helm.svg b/src/material-icons/icons/helm.svg new file mode 100644 index 0000000..43b2a87 --- /dev/null +++ b/src/material-icons/icons/helm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/heroku.svg b/src/material-icons/icons/heroku.svg new file mode 100644 index 0000000..f7c4328 --- /dev/null +++ b/src/material-icons/icons/heroku.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/hex.svg b/src/material-icons/icons/hex.svg new file mode 100644 index 0000000..9fdba49 --- /dev/null +++ b/src/material-icons/icons/hex.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/hjson.svg b/src/material-icons/icons/hjson.svg new file mode 100644 index 0000000..c151f93 --- /dev/null +++ b/src/material-icons/icons/hjson.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/horusec.svg b/src/material-icons/icons/horusec.svg new file mode 100644 index 0000000..4d96097 --- /dev/null +++ b/src/material-icons/icons/horusec.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/hpp.svg b/src/material-icons/icons/hpp.svg new file mode 100644 index 0000000..6efda42 --- /dev/null +++ b/src/material-icons/icons/hpp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/html.svg b/src/material-icons/icons/html.svg new file mode 100644 index 0000000..5012d79 --- /dev/null +++ b/src/material-icons/icons/html.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/http.svg b/src/material-icons/icons/http.svg new file mode 100644 index 0000000..e9f7b9f --- /dev/null +++ b/src/material-icons/icons/http.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/huff.svg b/src/material-icons/icons/huff.svg new file mode 100644 index 0000000..ed2ad38 --- /dev/null +++ b/src/material-icons/icons/huff.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/huff_light.svg b/src/material-icons/icons/huff_light.svg new file mode 100644 index 0000000..3c04dc9 --- /dev/null +++ b/src/material-icons/icons/huff_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/hurl.svg b/src/material-icons/icons/hurl.svg new file mode 100644 index 0000000..a6fa021 --- /dev/null +++ b/src/material-icons/icons/hurl.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/husky.svg b/src/material-icons/icons/husky.svg new file mode 100644 index 0000000..3bf1661 --- /dev/null +++ b/src/material-icons/icons/husky.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/i18n.svg b/src/material-icons/icons/i18n.svg new file mode 100644 index 0000000..3f6af90 --- /dev/null +++ b/src/material-icons/icons/i18n.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/idris.svg b/src/material-icons/icons/idris.svg new file mode 100644 index 0000000..67be8f7 --- /dev/null +++ b/src/material-icons/icons/idris.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/ifanr-cloud.svg b/src/material-icons/icons/ifanr-cloud.svg new file mode 100644 index 0000000..79259c1 --- /dev/null +++ b/src/material-icons/icons/ifanr-cloud.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/image.svg b/src/material-icons/icons/image.svg new file mode 100644 index 0000000..0db4085 --- /dev/null +++ b/src/material-icons/icons/image.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/imba.svg b/src/material-icons/icons/imba.svg new file mode 100644 index 0000000..ff8b8be --- /dev/null +++ b/src/material-icons/icons/imba.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/ionic.svg b/src/material-icons/icons/ionic.svg new file mode 100644 index 0000000..e70fcbd --- /dev/null +++ b/src/material-icons/icons/ionic.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/istanbul.svg b/src/material-icons/icons/istanbul.svg new file mode 100644 index 0000000..6e622b0 --- /dev/null +++ b/src/material-icons/icons/istanbul.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/jar.svg b/src/material-icons/icons/jar.svg new file mode 100644 index 0000000..b59988e --- /dev/null +++ b/src/material-icons/icons/jar.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/java.svg b/src/material-icons/icons/java.svg new file mode 100644 index 0000000..469f398 --- /dev/null +++ b/src/material-icons/icons/java.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/javaclass.svg b/src/material-icons/icons/javaclass.svg new file mode 100644 index 0000000..9e20db7 --- /dev/null +++ b/src/material-icons/icons/javaclass.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/javascript-map.svg b/src/material-icons/icons/javascript-map.svg new file mode 100644 index 0000000..f9df1ae --- /dev/null +++ b/src/material-icons/icons/javascript-map.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/javascript.svg b/src/material-icons/icons/javascript.svg new file mode 100644 index 0000000..33f9df1 --- /dev/null +++ b/src/material-icons/icons/javascript.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/jenkins.svg b/src/material-icons/icons/jenkins.svg new file mode 100644 index 0000000..27bc704 --- /dev/null +++ b/src/material-icons/icons/jenkins.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/jest.svg b/src/material-icons/icons/jest.svg new file mode 100644 index 0000000..57146be --- /dev/null +++ b/src/material-icons/icons/jest.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/jinja.svg b/src/material-icons/icons/jinja.svg new file mode 100644 index 0000000..bf55231 --- /dev/null +++ b/src/material-icons/icons/jinja.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/jinja_light.svg b/src/material-icons/icons/jinja_light.svg new file mode 100644 index 0000000..712c1ab --- /dev/null +++ b/src/material-icons/icons/jinja_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/jsconfig.svg b/src/material-icons/icons/jsconfig.svg new file mode 100644 index 0000000..5aef481 --- /dev/null +++ b/src/material-icons/icons/jsconfig.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/json.svg b/src/material-icons/icons/json.svg new file mode 100644 index 0000000..578eb7c --- /dev/null +++ b/src/material-icons/icons/json.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/jsr.svg b/src/material-icons/icons/jsr.svg new file mode 100644 index 0000000..739f657 --- /dev/null +++ b/src/material-icons/icons/jsr.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/jsr_light.svg b/src/material-icons/icons/jsr_light.svg new file mode 100644 index 0000000..c93d452 --- /dev/null +++ b/src/material-icons/icons/jsr_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/julia.svg b/src/material-icons/icons/julia.svg new file mode 100644 index 0000000..f9bb791 --- /dev/null +++ b/src/material-icons/icons/julia.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/jupyter.svg b/src/material-icons/icons/jupyter.svg new file mode 100644 index 0000000..0540317 --- /dev/null +++ b/src/material-icons/icons/jupyter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/just.svg b/src/material-icons/icons/just.svg new file mode 100644 index 0000000..cd949b6 --- /dev/null +++ b/src/material-icons/icons/just.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/karma.svg b/src/material-icons/icons/karma.svg new file mode 100644 index 0000000..42f1c84 --- /dev/null +++ b/src/material-icons/icons/karma.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/kcl.svg b/src/material-icons/icons/kcl.svg new file mode 100644 index 0000000..4f10c60 --- /dev/null +++ b/src/material-icons/icons/kcl.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/key.svg b/src/material-icons/icons/key.svg new file mode 100644 index 0000000..8ea9398 --- /dev/null +++ b/src/material-icons/icons/key.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/kivy.svg b/src/material-icons/icons/kivy.svg new file mode 100644 index 0000000..2a1a35c --- /dev/null +++ b/src/material-icons/icons/kivy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/kl.svg b/src/material-icons/icons/kl.svg new file mode 100644 index 0000000..c43dfc6 --- /dev/null +++ b/src/material-icons/icons/kl.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/knip.svg b/src/material-icons/icons/knip.svg new file mode 100644 index 0000000..51a7cc2 --- /dev/null +++ b/src/material-icons/icons/knip.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/kotlin.svg b/src/material-icons/icons/kotlin.svg new file mode 100644 index 0000000..f64f8ab --- /dev/null +++ b/src/material-icons/icons/kotlin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/kubernetes.svg b/src/material-icons/icons/kubernetes.svg new file mode 100644 index 0000000..48c625f --- /dev/null +++ b/src/material-icons/icons/kubernetes.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/kusto.svg b/src/material-icons/icons/kusto.svg new file mode 100644 index 0000000..e579a11 --- /dev/null +++ b/src/material-icons/icons/kusto.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/laravel.svg b/src/material-icons/icons/laravel.svg new file mode 100644 index 0000000..2e6cfbe --- /dev/null +++ b/src/material-icons/icons/laravel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/lerna.svg b/src/material-icons/icons/lerna.svg new file mode 100644 index 0000000..20d3b95 --- /dev/null +++ b/src/material-icons/icons/lerna.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/less.svg b/src/material-icons/icons/less.svg new file mode 100644 index 0000000..997df45 --- /dev/null +++ b/src/material-icons/icons/less.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/liara.svg b/src/material-icons/icons/liara.svg new file mode 100644 index 0000000..2738bec --- /dev/null +++ b/src/material-icons/icons/liara.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/lib.svg b/src/material-icons/icons/lib.svg new file mode 100644 index 0000000..447aab5 --- /dev/null +++ b/src/material-icons/icons/lib.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/lighthouse.svg b/src/material-icons/icons/lighthouse.svg new file mode 100644 index 0000000..5041f35 --- /dev/null +++ b/src/material-icons/icons/lighthouse.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/lilypond.svg b/src/material-icons/icons/lilypond.svg new file mode 100644 index 0000000..a12aa2c --- /dev/null +++ b/src/material-icons/icons/lilypond.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/liquid.svg b/src/material-icons/icons/liquid.svg new file mode 100644 index 0000000..5111ab6 --- /dev/null +++ b/src/material-icons/icons/liquid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/lisp.svg b/src/material-icons/icons/lisp.svg new file mode 100644 index 0000000..05d7e06 --- /dev/null +++ b/src/material-icons/icons/lisp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/livescript.svg b/src/material-icons/icons/livescript.svg new file mode 100644 index 0000000..ccca801 --- /dev/null +++ b/src/material-icons/icons/livescript.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/lock.svg b/src/material-icons/icons/lock.svg new file mode 100644 index 0000000..f6a1c44 --- /dev/null +++ b/src/material-icons/icons/lock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/log.svg b/src/material-icons/icons/log.svg new file mode 100644 index 0000000..a44f7e2 --- /dev/null +++ b/src/material-icons/icons/log.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/lolcode.svg b/src/material-icons/icons/lolcode.svg new file mode 100644 index 0000000..ffc9786 --- /dev/null +++ b/src/material-icons/icons/lolcode.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/lottie.svg b/src/material-icons/icons/lottie.svg new file mode 100644 index 0000000..4917f32 --- /dev/null +++ b/src/material-icons/icons/lottie.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/lua.svg b/src/material-icons/icons/lua.svg new file mode 100644 index 0000000..d3fb0b1 --- /dev/null +++ b/src/material-icons/icons/lua.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/makefile.svg b/src/material-icons/icons/makefile.svg new file mode 100644 index 0000000..f886fb5 --- /dev/null +++ b/src/material-icons/icons/makefile.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/markdown.svg b/src/material-icons/icons/markdown.svg new file mode 100644 index 0000000..b45321c --- /dev/null +++ b/src/material-icons/icons/markdown.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/markdownlint.svg b/src/material-icons/icons/markdownlint.svg new file mode 100644 index 0000000..37daf0d --- /dev/null +++ b/src/material-icons/icons/markdownlint.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/markojs.svg b/src/material-icons/icons/markojs.svg new file mode 100644 index 0000000..7ec0bc4 --- /dev/null +++ b/src/material-icons/icons/markojs.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/mathematica.svg b/src/material-icons/icons/mathematica.svg new file mode 100644 index 0000000..08c2508 --- /dev/null +++ b/src/material-icons/icons/mathematica.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/matlab.svg b/src/material-icons/icons/matlab.svg new file mode 100644 index 0000000..a2166f8 --- /dev/null +++ b/src/material-icons/icons/matlab.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/maven.svg b/src/material-icons/icons/maven.svg new file mode 100644 index 0000000..c8d62a7 --- /dev/null +++ b/src/material-icons/icons/maven.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/mdsvex.svg b/src/material-icons/icons/mdsvex.svg new file mode 100644 index 0000000..89e9d83 --- /dev/null +++ b/src/material-icons/icons/mdsvex.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/mdx.svg b/src/material-icons/icons/mdx.svg new file mode 100644 index 0000000..c1e1769 --- /dev/null +++ b/src/material-icons/icons/mdx.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/mercurial.svg b/src/material-icons/icons/mercurial.svg new file mode 100644 index 0000000..41f701e --- /dev/null +++ b/src/material-icons/icons/mercurial.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/merlin.svg b/src/material-icons/icons/merlin.svg new file mode 100644 index 0000000..96b29d3 --- /dev/null +++ b/src/material-icons/icons/merlin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/mermaid.svg b/src/material-icons/icons/mermaid.svg new file mode 100644 index 0000000..23060d4 --- /dev/null +++ b/src/material-icons/icons/mermaid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/meson.svg b/src/material-icons/icons/meson.svg new file mode 100644 index 0000000..ba1ceae --- /dev/null +++ b/src/material-icons/icons/meson.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/minecraft.svg b/src/material-icons/icons/minecraft.svg new file mode 100644 index 0000000..219af8a --- /dev/null +++ b/src/material-icons/icons/minecraft.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/mint.svg b/src/material-icons/icons/mint.svg new file mode 100644 index 0000000..659340a --- /dev/null +++ b/src/material-icons/icons/mint.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/mjml.svg b/src/material-icons/icons/mjml.svg new file mode 100644 index 0000000..0ca04c9 --- /dev/null +++ b/src/material-icons/icons/mjml.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/mocha.svg b/src/material-icons/icons/mocha.svg new file mode 100644 index 0000000..854c7af --- /dev/null +++ b/src/material-icons/icons/mocha.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/modernizr.svg b/src/material-icons/icons/modernizr.svg new file mode 100644 index 0000000..ece6219 --- /dev/null +++ b/src/material-icons/icons/modernizr.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/mojo.svg b/src/material-icons/icons/mojo.svg new file mode 100644 index 0000000..8481fe6 --- /dev/null +++ b/src/material-icons/icons/mojo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/moon.svg b/src/material-icons/icons/moon.svg new file mode 100644 index 0000000..2359bf0 --- /dev/null +++ b/src/material-icons/icons/moon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/moonscript.svg b/src/material-icons/icons/moonscript.svg new file mode 100644 index 0000000..40cf981 --- /dev/null +++ b/src/material-icons/icons/moonscript.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/mxml.svg b/src/material-icons/icons/mxml.svg new file mode 100644 index 0000000..c6b9bf2 --- /dev/null +++ b/src/material-icons/icons/mxml.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/nano-staged.svg b/src/material-icons/icons/nano-staged.svg new file mode 100644 index 0000000..9534bbd --- /dev/null +++ b/src/material-icons/icons/nano-staged.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/nano-staged_light.svg b/src/material-icons/icons/nano-staged_light.svg new file mode 100644 index 0000000..c8ef74a --- /dev/null +++ b/src/material-icons/icons/nano-staged_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/ndst.svg b/src/material-icons/icons/ndst.svg new file mode 100644 index 0000000..bd4ce54 --- /dev/null +++ b/src/material-icons/icons/ndst.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/nest.svg b/src/material-icons/icons/nest.svg new file mode 100644 index 0000000..a454a83 --- /dev/null +++ b/src/material-icons/icons/nest.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/netlify.svg b/src/material-icons/icons/netlify.svg new file mode 100644 index 0000000..4162013 --- /dev/null +++ b/src/material-icons/icons/netlify.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/netlify_light.svg b/src/material-icons/icons/netlify_light.svg new file mode 100644 index 0000000..127fed5 --- /dev/null +++ b/src/material-icons/icons/netlify_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/next.svg b/src/material-icons/icons/next.svg new file mode 100644 index 0000000..2372407 --- /dev/null +++ b/src/material-icons/icons/next.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/next_light.svg b/src/material-icons/icons/next_light.svg new file mode 100644 index 0000000..208d55b --- /dev/null +++ b/src/material-icons/icons/next_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/nginx.svg b/src/material-icons/icons/nginx.svg new file mode 100644 index 0000000..658ad22 --- /dev/null +++ b/src/material-icons/icons/nginx.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/ngrx-actions.svg b/src/material-icons/icons/ngrx-actions.svg new file mode 100644 index 0000000..de418d4 --- /dev/null +++ b/src/material-icons/icons/ngrx-actions.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/ngrx-effects.svg b/src/material-icons/icons/ngrx-effects.svg new file mode 100644 index 0000000..8f7dc89 --- /dev/null +++ b/src/material-icons/icons/ngrx-effects.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/ngrx-entity.svg b/src/material-icons/icons/ngrx-entity.svg new file mode 100644 index 0000000..af0dd05 --- /dev/null +++ b/src/material-icons/icons/ngrx-entity.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/ngrx-reducer.svg b/src/material-icons/icons/ngrx-reducer.svg new file mode 100644 index 0000000..db7a553 --- /dev/null +++ b/src/material-icons/icons/ngrx-reducer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/ngrx-selectors.svg b/src/material-icons/icons/ngrx-selectors.svg new file mode 100644 index 0000000..af03c40 --- /dev/null +++ b/src/material-icons/icons/ngrx-selectors.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/ngrx-state.svg b/src/material-icons/icons/ngrx-state.svg new file mode 100644 index 0000000..258c0ac --- /dev/null +++ b/src/material-icons/icons/ngrx-state.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/nim.svg b/src/material-icons/icons/nim.svg new file mode 100644 index 0000000..8b5f3a1 --- /dev/null +++ b/src/material-icons/icons/nim.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/nix.svg b/src/material-icons/icons/nix.svg new file mode 100644 index 0000000..8d629a4 --- /dev/null +++ b/src/material-icons/icons/nix.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/nodejs.svg b/src/material-icons/icons/nodejs.svg new file mode 100644 index 0000000..ba73901 --- /dev/null +++ b/src/material-icons/icons/nodejs.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/nodejs_alt.svg b/src/material-icons/icons/nodejs_alt.svg new file mode 100644 index 0000000..d652712 --- /dev/null +++ b/src/material-icons/icons/nodejs_alt.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/nodemon.svg b/src/material-icons/icons/nodemon.svg new file mode 100644 index 0000000..bc17051 --- /dev/null +++ b/src/material-icons/icons/nodemon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/npm.svg b/src/material-icons/icons/npm.svg new file mode 100644 index 0000000..9878c6e --- /dev/null +++ b/src/material-icons/icons/npm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/nuget.svg b/src/material-icons/icons/nuget.svg new file mode 100644 index 0000000..ced7200 --- /dev/null +++ b/src/material-icons/icons/nuget.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/nunjucks.svg b/src/material-icons/icons/nunjucks.svg new file mode 100644 index 0000000..f3c85b9 --- /dev/null +++ b/src/material-icons/icons/nunjucks.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/nuxt.svg b/src/material-icons/icons/nuxt.svg new file mode 100644 index 0000000..7c24e0a --- /dev/null +++ b/src/material-icons/icons/nuxt.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/nx.svg b/src/material-icons/icons/nx.svg new file mode 100644 index 0000000..3efdc1b --- /dev/null +++ b/src/material-icons/icons/nx.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/objective-c.svg b/src/material-icons/icons/objective-c.svg new file mode 100644 index 0000000..7a69f91 --- /dev/null +++ b/src/material-icons/icons/objective-c.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/objective-cpp.svg b/src/material-icons/icons/objective-cpp.svg new file mode 100644 index 0000000..262ee28 --- /dev/null +++ b/src/material-icons/icons/objective-cpp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/ocaml.svg b/src/material-icons/icons/ocaml.svg new file mode 100644 index 0000000..1d20d08 --- /dev/null +++ b/src/material-icons/icons/ocaml.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/odin.svg b/src/material-icons/icons/odin.svg new file mode 100644 index 0000000..b7904fc --- /dev/null +++ b/src/material-icons/icons/odin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/opa.svg b/src/material-icons/icons/opa.svg new file mode 100644 index 0000000..8957625 --- /dev/null +++ b/src/material-icons/icons/opa.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/opam.svg b/src/material-icons/icons/opam.svg new file mode 100644 index 0000000..7e4d358 --- /dev/null +++ b/src/material-icons/icons/opam.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/openapi.svg b/src/material-icons/icons/openapi.svg new file mode 100644 index 0000000..4c111bc --- /dev/null +++ b/src/material-icons/icons/openapi.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/openapi_light.svg b/src/material-icons/icons/openapi_light.svg new file mode 100644 index 0000000..7176991 --- /dev/null +++ b/src/material-icons/icons/openapi_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/otne.svg b/src/material-icons/icons/otne.svg new file mode 100644 index 0000000..06fee91 --- /dev/null +++ b/src/material-icons/icons/otne.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/panda.svg b/src/material-icons/icons/panda.svg new file mode 100644 index 0000000..dde4122 --- /dev/null +++ b/src/material-icons/icons/panda.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/parcel.svg b/src/material-icons/icons/parcel.svg new file mode 100644 index 0000000..5289c30 --- /dev/null +++ b/src/material-icons/icons/parcel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/pascal.svg b/src/material-icons/icons/pascal.svg new file mode 100644 index 0000000..076b2da --- /dev/null +++ b/src/material-icons/icons/pascal.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/pawn.svg b/src/material-icons/icons/pawn.svg new file mode 100644 index 0000000..cfffdc8 --- /dev/null +++ b/src/material-icons/icons/pawn.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/payload.svg b/src/material-icons/icons/payload.svg new file mode 100644 index 0000000..a5392c0 --- /dev/null +++ b/src/material-icons/icons/payload.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/payload_light.svg b/src/material-icons/icons/payload_light.svg new file mode 100644 index 0000000..4be3386 --- /dev/null +++ b/src/material-icons/icons/payload_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/pdf.svg b/src/material-icons/icons/pdf.svg new file mode 100644 index 0000000..cb27a01 --- /dev/null +++ b/src/material-icons/icons/pdf.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/pdm.svg b/src/material-icons/icons/pdm.svg new file mode 100644 index 0000000..7bb5728 --- /dev/null +++ b/src/material-icons/icons/pdm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/percy.svg b/src/material-icons/icons/percy.svg new file mode 100644 index 0000000..136a51f --- /dev/null +++ b/src/material-icons/icons/percy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/perl.svg b/src/material-icons/icons/perl.svg new file mode 100644 index 0000000..1791923 --- /dev/null +++ b/src/material-icons/icons/perl.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/php-cs-fixer.svg b/src/material-icons/icons/php-cs-fixer.svg new file mode 100644 index 0000000..2ec1781 --- /dev/null +++ b/src/material-icons/icons/php-cs-fixer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/php.svg b/src/material-icons/icons/php.svg new file mode 100644 index 0000000..75516c2 --- /dev/null +++ b/src/material-icons/icons/php.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/php_elephant.svg b/src/material-icons/icons/php_elephant.svg new file mode 100644 index 0000000..77a8ff9 --- /dev/null +++ b/src/material-icons/icons/php_elephant.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/php_elephant_pink.svg b/src/material-icons/icons/php_elephant_pink.svg new file mode 100644 index 0000000..74a28c8 --- /dev/null +++ b/src/material-icons/icons/php_elephant_pink.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/phpunit.svg b/src/material-icons/icons/phpunit.svg new file mode 100644 index 0000000..986dfa4 --- /dev/null +++ b/src/material-icons/icons/phpunit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/pinejs.svg b/src/material-icons/icons/pinejs.svg new file mode 100644 index 0000000..6fce738 --- /dev/null +++ b/src/material-icons/icons/pinejs.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/pipeline.svg b/src/material-icons/icons/pipeline.svg new file mode 100644 index 0000000..5eb804d --- /dev/null +++ b/src/material-icons/icons/pipeline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/pkl.svg b/src/material-icons/icons/pkl.svg new file mode 100644 index 0000000..8d2e8f2 --- /dev/null +++ b/src/material-icons/icons/pkl.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/plastic.svg b/src/material-icons/icons/plastic.svg new file mode 100644 index 0000000..f9f3f26 --- /dev/null +++ b/src/material-icons/icons/plastic.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/playwright.svg b/src/material-icons/icons/playwright.svg new file mode 100644 index 0000000..f135236 --- /dev/null +++ b/src/material-icons/icons/playwright.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/plop.svg b/src/material-icons/icons/plop.svg new file mode 100644 index 0000000..d2daee4 --- /dev/null +++ b/src/material-icons/icons/plop.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/pnpm.svg b/src/material-icons/icons/pnpm.svg new file mode 100644 index 0000000..fc52c6e --- /dev/null +++ b/src/material-icons/icons/pnpm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/pnpm_light.svg b/src/material-icons/icons/pnpm_light.svg new file mode 100644 index 0000000..4236956 --- /dev/null +++ b/src/material-icons/icons/pnpm_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/poetry.svg b/src/material-icons/icons/poetry.svg new file mode 100644 index 0000000..ee026ba --- /dev/null +++ b/src/material-icons/icons/poetry.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/postcss.svg b/src/material-icons/icons/postcss.svg new file mode 100644 index 0000000..eb9e123 --- /dev/null +++ b/src/material-icons/icons/postcss.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/posthtml.svg b/src/material-icons/icons/posthtml.svg new file mode 100644 index 0000000..9176f8f --- /dev/null +++ b/src/material-icons/icons/posthtml.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/powerpoint.svg b/src/material-icons/icons/powerpoint.svg new file mode 100644 index 0000000..b4d9403 --- /dev/null +++ b/src/material-icons/icons/powerpoint.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/powershell.svg b/src/material-icons/icons/powershell.svg new file mode 100644 index 0000000..79da813 --- /dev/null +++ b/src/material-icons/icons/powershell.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/prettier.svg b/src/material-icons/icons/prettier.svg new file mode 100644 index 0000000..55b87a6 --- /dev/null +++ b/src/material-icons/icons/prettier.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/prisma.svg b/src/material-icons/icons/prisma.svg new file mode 100644 index 0000000..1d0e169 --- /dev/null +++ b/src/material-icons/icons/prisma.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/processing.svg b/src/material-icons/icons/processing.svg new file mode 100644 index 0000000..8a960ab --- /dev/null +++ b/src/material-icons/icons/processing.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/prolog.svg b/src/material-icons/icons/prolog.svg new file mode 100644 index 0000000..fe7546f --- /dev/null +++ b/src/material-icons/icons/prolog.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/proto.svg b/src/material-icons/icons/proto.svg new file mode 100644 index 0000000..c3e4d85 --- /dev/null +++ b/src/material-icons/icons/proto.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/protractor.svg b/src/material-icons/icons/protractor.svg new file mode 100644 index 0000000..a9f99b3 --- /dev/null +++ b/src/material-icons/icons/protractor.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/pug.svg b/src/material-icons/icons/pug.svg new file mode 100644 index 0000000..bb51dca --- /dev/null +++ b/src/material-icons/icons/pug.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/puppet.svg b/src/material-icons/icons/puppet.svg new file mode 100644 index 0000000..3e1e9c1 --- /dev/null +++ b/src/material-icons/icons/puppet.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/puppeteer.svg b/src/material-icons/icons/puppeteer.svg new file mode 100644 index 0000000..b553df3 --- /dev/null +++ b/src/material-icons/icons/puppeteer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/purescript.svg b/src/material-icons/icons/purescript.svg new file mode 100644 index 0000000..d23da88 --- /dev/null +++ b/src/material-icons/icons/purescript.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/python-misc.svg b/src/material-icons/icons/python-misc.svg new file mode 100644 index 0000000..3d59b25 --- /dev/null +++ b/src/material-icons/icons/python-misc.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/python.svg b/src/material-icons/icons/python.svg new file mode 100644 index 0000000..311703a --- /dev/null +++ b/src/material-icons/icons/python.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/qsharp.svg b/src/material-icons/icons/qsharp.svg new file mode 100644 index 0000000..de9838d --- /dev/null +++ b/src/material-icons/icons/qsharp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/quasar.svg b/src/material-icons/icons/quasar.svg new file mode 100644 index 0000000..b1434fa --- /dev/null +++ b/src/material-icons/icons/quasar.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/quokka.svg b/src/material-icons/icons/quokka.svg new file mode 100644 index 0000000..b03d9f8 --- /dev/null +++ b/src/material-icons/icons/quokka.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/qwik.svg b/src/material-icons/icons/qwik.svg new file mode 100644 index 0000000..fcad5ad --- /dev/null +++ b/src/material-icons/icons/qwik.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/r.svg b/src/material-icons/icons/r.svg new file mode 100644 index 0000000..91bad33 --- /dev/null +++ b/src/material-icons/icons/r.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/racket.svg b/src/material-icons/icons/racket.svg new file mode 100644 index 0000000..04ca144 --- /dev/null +++ b/src/material-icons/icons/racket.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/raml.svg b/src/material-icons/icons/raml.svg new file mode 100644 index 0000000..d35d561 --- /dev/null +++ b/src/material-icons/icons/raml.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/razor.svg b/src/material-icons/icons/razor.svg new file mode 100644 index 0000000..55a7406 --- /dev/null +++ b/src/material-icons/icons/razor.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/rc.svg b/src/material-icons/icons/rc.svg new file mode 100644 index 0000000..9d2b8d8 --- /dev/null +++ b/src/material-icons/icons/rc.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/react.svg b/src/material-icons/icons/react.svg new file mode 100644 index 0000000..b6fd2e0 --- /dev/null +++ b/src/material-icons/icons/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/react_ts.svg b/src/material-icons/icons/react_ts.svg new file mode 100644 index 0000000..ae197bb --- /dev/null +++ b/src/material-icons/icons/react_ts.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/readme.svg b/src/material-icons/icons/readme.svg new file mode 100644 index 0000000..d377df9 --- /dev/null +++ b/src/material-icons/icons/readme.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/reason.svg b/src/material-icons/icons/reason.svg new file mode 100644 index 0000000..0f4b3e1 --- /dev/null +++ b/src/material-icons/icons/reason.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/red.svg b/src/material-icons/icons/red.svg new file mode 100644 index 0000000..6084231 --- /dev/null +++ b/src/material-icons/icons/red.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/redux-action.svg b/src/material-icons/icons/redux-action.svg new file mode 100644 index 0000000..bd7dec8 --- /dev/null +++ b/src/material-icons/icons/redux-action.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/redux-reducer.svg b/src/material-icons/icons/redux-reducer.svg new file mode 100644 index 0000000..d50acde --- /dev/null +++ b/src/material-icons/icons/redux-reducer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/redux-selector.svg b/src/material-icons/icons/redux-selector.svg new file mode 100644 index 0000000..31c8df7 --- /dev/null +++ b/src/material-icons/icons/redux-selector.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/redux-store.svg b/src/material-icons/icons/redux-store.svg new file mode 100644 index 0000000..524e4f9 --- /dev/null +++ b/src/material-icons/icons/redux-store.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/remark.svg b/src/material-icons/icons/remark.svg new file mode 100644 index 0000000..9c4d8d2 --- /dev/null +++ b/src/material-icons/icons/remark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/remix.svg b/src/material-icons/icons/remix.svg new file mode 100644 index 0000000..748c8c6 --- /dev/null +++ b/src/material-icons/icons/remix.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/remix_light.svg b/src/material-icons/icons/remix_light.svg new file mode 100644 index 0000000..8168815 --- /dev/null +++ b/src/material-icons/icons/remix_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/renovate.svg b/src/material-icons/icons/renovate.svg new file mode 100644 index 0000000..bc63cbb --- /dev/null +++ b/src/material-icons/icons/renovate.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/replit.svg b/src/material-icons/icons/replit.svg new file mode 100644 index 0000000..57845b2 --- /dev/null +++ b/src/material-icons/icons/replit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/rescript-interface.svg b/src/material-icons/icons/rescript-interface.svg new file mode 100644 index 0000000..ae8aecb --- /dev/null +++ b/src/material-icons/icons/rescript-interface.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/rescript.svg b/src/material-icons/icons/rescript.svg new file mode 100644 index 0000000..c118cf3 --- /dev/null +++ b/src/material-icons/icons/rescript.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/restql.svg b/src/material-icons/icons/restql.svg new file mode 100644 index 0000000..a4a9f97 --- /dev/null +++ b/src/material-icons/icons/restql.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/riot.svg b/src/material-icons/icons/riot.svg new file mode 100644 index 0000000..209e40a --- /dev/null +++ b/src/material-icons/icons/riot.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/roadmap.svg b/src/material-icons/icons/roadmap.svg new file mode 100644 index 0000000..629ecff --- /dev/null +++ b/src/material-icons/icons/roadmap.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/roblox.svg b/src/material-icons/icons/roblox.svg new file mode 100644 index 0000000..56cc378 --- /dev/null +++ b/src/material-icons/icons/roblox.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/robot.svg b/src/material-icons/icons/robot.svg new file mode 100644 index 0000000..2be7388 --- /dev/null +++ b/src/material-icons/icons/robot.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/robots.svg b/src/material-icons/icons/robots.svg new file mode 100644 index 0000000..5f9a794 --- /dev/null +++ b/src/material-icons/icons/robots.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/rocket.svg b/src/material-icons/icons/rocket.svg new file mode 100644 index 0000000..bb4fda9 --- /dev/null +++ b/src/material-icons/icons/rocket.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/rollup.svg b/src/material-icons/icons/rollup.svg new file mode 100644 index 0000000..7fa0153 --- /dev/null +++ b/src/material-icons/icons/rollup.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/rome.svg b/src/material-icons/icons/rome.svg new file mode 100644 index 0000000..87f73b4 --- /dev/null +++ b/src/material-icons/icons/rome.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/routing.svg b/src/material-icons/icons/routing.svg new file mode 100644 index 0000000..ea02c90 --- /dev/null +++ b/src/material-icons/icons/routing.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/rspec.svg b/src/material-icons/icons/rspec.svg new file mode 100644 index 0000000..783eb62 --- /dev/null +++ b/src/material-icons/icons/rspec.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/rubocop.svg b/src/material-icons/icons/rubocop.svg new file mode 100644 index 0000000..2cdff99 --- /dev/null +++ b/src/material-icons/icons/rubocop.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/rubocop_light.svg b/src/material-icons/icons/rubocop_light.svg new file mode 100644 index 0000000..b8cb9df --- /dev/null +++ b/src/material-icons/icons/rubocop_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/ruby.svg b/src/material-icons/icons/ruby.svg new file mode 100644 index 0000000..f434e05 --- /dev/null +++ b/src/material-icons/icons/ruby.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/rust.svg b/src/material-icons/icons/rust.svg new file mode 100644 index 0000000..16a404f --- /dev/null +++ b/src/material-icons/icons/rust.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/salesforce.svg b/src/material-icons/icons/salesforce.svg new file mode 100644 index 0000000..281b0e8 --- /dev/null +++ b/src/material-icons/icons/salesforce.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/san.svg b/src/material-icons/icons/san.svg new file mode 100644 index 0000000..8ec6be1 --- /dev/null +++ b/src/material-icons/icons/san.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/sas.svg b/src/material-icons/icons/sas.svg new file mode 100644 index 0000000..d8df9a7 --- /dev/null +++ b/src/material-icons/icons/sas.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/sass.svg b/src/material-icons/icons/sass.svg new file mode 100644 index 0000000..cc8bb80 --- /dev/null +++ b/src/material-icons/icons/sass.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/sbt.svg b/src/material-icons/icons/sbt.svg new file mode 100644 index 0000000..37587c5 --- /dev/null +++ b/src/material-icons/icons/sbt.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/scala.svg b/src/material-icons/icons/scala.svg new file mode 100644 index 0000000..3469205 --- /dev/null +++ b/src/material-icons/icons/scala.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/scheme.svg b/src/material-icons/icons/scheme.svg new file mode 100644 index 0000000..c8f986e --- /dev/null +++ b/src/material-icons/icons/scheme.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/screwdriver.svg b/src/material-icons/icons/screwdriver.svg new file mode 100644 index 0000000..f4c263c --- /dev/null +++ b/src/material-icons/icons/screwdriver.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/search.svg b/src/material-icons/icons/search.svg new file mode 100644 index 0000000..202fd60 --- /dev/null +++ b/src/material-icons/icons/search.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/semantic-release.svg b/src/material-icons/icons/semantic-release.svg new file mode 100644 index 0000000..26a2271 --- /dev/null +++ b/src/material-icons/icons/semantic-release.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/semantic-release_light.svg b/src/material-icons/icons/semantic-release_light.svg new file mode 100644 index 0000000..82f5683 --- /dev/null +++ b/src/material-icons/icons/semantic-release_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/semgrep.svg b/src/material-icons/icons/semgrep.svg new file mode 100644 index 0000000..f2e17c1 --- /dev/null +++ b/src/material-icons/icons/semgrep.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/sentry.svg b/src/material-icons/icons/sentry.svg new file mode 100644 index 0000000..56cb402 --- /dev/null +++ b/src/material-icons/icons/sentry.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/sequelize.svg b/src/material-icons/icons/sequelize.svg new file mode 100644 index 0000000..8b238e0 --- /dev/null +++ b/src/material-icons/icons/sequelize.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/serverless.svg b/src/material-icons/icons/serverless.svg new file mode 100644 index 0000000..f3ea14c --- /dev/null +++ b/src/material-icons/icons/serverless.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/settings.svg b/src/material-icons/icons/settings.svg new file mode 100644 index 0000000..b4307dc --- /dev/null +++ b/src/material-icons/icons/settings.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/shader.svg b/src/material-icons/icons/shader.svg new file mode 100644 index 0000000..fa7546c --- /dev/null +++ b/src/material-icons/icons/shader.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/shaderlab.svg b/src/material-icons/icons/shaderlab.svg new file mode 100644 index 0000000..014acf5 --- /dev/null +++ b/src/material-icons/icons/shaderlab.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/silverstripe.svg b/src/material-icons/icons/silverstripe.svg new file mode 100644 index 0000000..0e00d9b --- /dev/null +++ b/src/material-icons/icons/silverstripe.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/siyuan.svg b/src/material-icons/icons/siyuan.svg new file mode 100644 index 0000000..7a7488d --- /dev/null +++ b/src/material-icons/icons/siyuan.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/sketch.svg b/src/material-icons/icons/sketch.svg new file mode 100644 index 0000000..0d75406 --- /dev/null +++ b/src/material-icons/icons/sketch.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/slim.svg b/src/material-icons/icons/slim.svg new file mode 100644 index 0000000..9644235 --- /dev/null +++ b/src/material-icons/icons/slim.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/slint.svg b/src/material-icons/icons/slint.svg new file mode 100644 index 0000000..b6434ec --- /dev/null +++ b/src/material-icons/icons/slint.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/slug.svg b/src/material-icons/icons/slug.svg new file mode 100644 index 0000000..a68b81c --- /dev/null +++ b/src/material-icons/icons/slug.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/smarty.svg b/src/material-icons/icons/smarty.svg new file mode 100644 index 0000000..0a2d6c6 --- /dev/null +++ b/src/material-icons/icons/smarty.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/sml.svg b/src/material-icons/icons/sml.svg new file mode 100644 index 0000000..576c779 --- /dev/null +++ b/src/material-icons/icons/sml.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/snapcraft.svg b/src/material-icons/icons/snapcraft.svg new file mode 100644 index 0000000..17bf8d8 --- /dev/null +++ b/src/material-icons/icons/snapcraft.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/snowpack.svg b/src/material-icons/icons/snowpack.svg new file mode 100644 index 0000000..454449d --- /dev/null +++ b/src/material-icons/icons/snowpack.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/snowpack_light.svg b/src/material-icons/icons/snowpack_light.svg new file mode 100644 index 0000000..bb1571e --- /dev/null +++ b/src/material-icons/icons/snowpack_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/snyk.svg b/src/material-icons/icons/snyk.svg new file mode 100644 index 0000000..c79c147 --- /dev/null +++ b/src/material-icons/icons/snyk.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/solidity.svg b/src/material-icons/icons/solidity.svg new file mode 100644 index 0000000..6ae9873 --- /dev/null +++ b/src/material-icons/icons/solidity.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/sonarcloud.svg b/src/material-icons/icons/sonarcloud.svg new file mode 100644 index 0000000..7d39133 --- /dev/null +++ b/src/material-icons/icons/sonarcloud.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/spwn.svg b/src/material-icons/icons/spwn.svg new file mode 100644 index 0000000..08a1394 --- /dev/null +++ b/src/material-icons/icons/spwn.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/stan.svg b/src/material-icons/icons/stan.svg new file mode 100644 index 0000000..b61fb15 --- /dev/null +++ b/src/material-icons/icons/stan.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/steadybit.svg b/src/material-icons/icons/steadybit.svg new file mode 100644 index 0000000..84935db --- /dev/null +++ b/src/material-icons/icons/steadybit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/stencil.svg b/src/material-icons/icons/stencil.svg new file mode 100644 index 0000000..2cf19f6 --- /dev/null +++ b/src/material-icons/icons/stencil.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/stitches.svg b/src/material-icons/icons/stitches.svg new file mode 100644 index 0000000..6b1142f --- /dev/null +++ b/src/material-icons/icons/stitches.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/stitches_light.svg b/src/material-icons/icons/stitches_light.svg new file mode 100644 index 0000000..bd9986d --- /dev/null +++ b/src/material-icons/icons/stitches_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/storybook.svg b/src/material-icons/icons/storybook.svg new file mode 100644 index 0000000..f8fdaa4 --- /dev/null +++ b/src/material-icons/icons/storybook.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/stryker.svg b/src/material-icons/icons/stryker.svg new file mode 100644 index 0000000..69b05e4 --- /dev/null +++ b/src/material-icons/icons/stryker.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/stylable.svg b/src/material-icons/icons/stylable.svg new file mode 100644 index 0000000..4be70bb --- /dev/null +++ b/src/material-icons/icons/stylable.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/stylelint.svg b/src/material-icons/icons/stylelint.svg new file mode 100644 index 0000000..9f71342 --- /dev/null +++ b/src/material-icons/icons/stylelint.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/stylelint_light.svg b/src/material-icons/icons/stylelint_light.svg new file mode 100644 index 0000000..f36493b --- /dev/null +++ b/src/material-icons/icons/stylelint_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/stylus.svg b/src/material-icons/icons/stylus.svg new file mode 100644 index 0000000..ae61b48 --- /dev/null +++ b/src/material-icons/icons/stylus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/sublime.svg b/src/material-icons/icons/sublime.svg new file mode 100644 index 0000000..ebb3c92 --- /dev/null +++ b/src/material-icons/icons/sublime.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/supabase.svg b/src/material-icons/icons/supabase.svg new file mode 100644 index 0000000..63f6327 --- /dev/null +++ b/src/material-icons/icons/supabase.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/svelte.svg b/src/material-icons/icons/svelte.svg new file mode 100644 index 0000000..62f2b7b --- /dev/null +++ b/src/material-icons/icons/svelte.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/svg.svg b/src/material-icons/icons/svg.svg new file mode 100644 index 0000000..cc90391 --- /dev/null +++ b/src/material-icons/icons/svg.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/svgo.svg b/src/material-icons/icons/svgo.svg new file mode 100644 index 0000000..85c5da2 --- /dev/null +++ b/src/material-icons/icons/svgo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/svgr.svg b/src/material-icons/icons/svgr.svg new file mode 100644 index 0000000..9398528 --- /dev/null +++ b/src/material-icons/icons/svgr.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/swagger.svg b/src/material-icons/icons/swagger.svg new file mode 100644 index 0000000..85ee815 --- /dev/null +++ b/src/material-icons/icons/swagger.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/swc.svg b/src/material-icons/icons/swc.svg new file mode 100644 index 0000000..b61c4c5 --- /dev/null +++ b/src/material-icons/icons/swc.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/swift.svg b/src/material-icons/icons/swift.svg new file mode 100644 index 0000000..e485d01 --- /dev/null +++ b/src/material-icons/icons/swift.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/syncpack.svg b/src/material-icons/icons/syncpack.svg new file mode 100644 index 0000000..3c4f07c --- /dev/null +++ b/src/material-icons/icons/syncpack.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/table.svg b/src/material-icons/icons/table.svg new file mode 100644 index 0000000..92f46a5 --- /dev/null +++ b/src/material-icons/icons/table.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/tailwindcss.svg b/src/material-icons/icons/tailwindcss.svg new file mode 100644 index 0000000..31eeb86 --- /dev/null +++ b/src/material-icons/icons/tailwindcss.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/taskfile.svg b/src/material-icons/icons/taskfile.svg new file mode 100644 index 0000000..7da15bf --- /dev/null +++ b/src/material-icons/icons/taskfile.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/tauri.svg b/src/material-icons/icons/tauri.svg new file mode 100644 index 0000000..b5fe7d9 --- /dev/null +++ b/src/material-icons/icons/tauri.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/tcl.svg b/src/material-icons/icons/tcl.svg new file mode 100644 index 0000000..3c196a6 --- /dev/null +++ b/src/material-icons/icons/tcl.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/teal.svg b/src/material-icons/icons/teal.svg new file mode 100644 index 0000000..4720763 --- /dev/null +++ b/src/material-icons/icons/teal.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/templ.svg b/src/material-icons/icons/templ.svg new file mode 100644 index 0000000..ce385d0 --- /dev/null +++ b/src/material-icons/icons/templ.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/template.svg b/src/material-icons/icons/template.svg new file mode 100644 index 0000000..0698e73 --- /dev/null +++ b/src/material-icons/icons/template.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/terraform.svg b/src/material-icons/icons/terraform.svg new file mode 100644 index 0000000..0c2edbc --- /dev/null +++ b/src/material-icons/icons/terraform.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/test-js.svg b/src/material-icons/icons/test-js.svg new file mode 100644 index 0000000..752b8ff --- /dev/null +++ b/src/material-icons/icons/test-js.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/test-jsx.svg b/src/material-icons/icons/test-jsx.svg new file mode 100644 index 0000000..dbcc37a --- /dev/null +++ b/src/material-icons/icons/test-jsx.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/test-ts.svg b/src/material-icons/icons/test-ts.svg new file mode 100644 index 0000000..69ec233 --- /dev/null +++ b/src/material-icons/icons/test-ts.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/tex.svg b/src/material-icons/icons/tex.svg new file mode 100644 index 0000000..620c7f7 --- /dev/null +++ b/src/material-icons/icons/tex.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/textlint.svg b/src/material-icons/icons/textlint.svg new file mode 100644 index 0000000..42af689 --- /dev/null +++ b/src/material-icons/icons/textlint.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/tilt.svg b/src/material-icons/icons/tilt.svg new file mode 100644 index 0000000..d2c8e9e --- /dev/null +++ b/src/material-icons/icons/tilt.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/tldraw.svg b/src/material-icons/icons/tldraw.svg new file mode 100644 index 0000000..745d1cf --- /dev/null +++ b/src/material-icons/icons/tldraw.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/tldraw_light.svg b/src/material-icons/icons/tldraw_light.svg new file mode 100644 index 0000000..a0150a1 --- /dev/null +++ b/src/material-icons/icons/tldraw_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/tobi.svg b/src/material-icons/icons/tobi.svg new file mode 100644 index 0000000..1a576a1 --- /dev/null +++ b/src/material-icons/icons/tobi.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/tobimake.svg b/src/material-icons/icons/tobimake.svg new file mode 100644 index 0000000..0ba3b3e --- /dev/null +++ b/src/material-icons/icons/tobimake.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/todo.svg b/src/material-icons/icons/todo.svg new file mode 100644 index 0000000..9a5843e --- /dev/null +++ b/src/material-icons/icons/todo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/travis.svg b/src/material-icons/icons/travis.svg new file mode 100644 index 0000000..059cca1 --- /dev/null +++ b/src/material-icons/icons/travis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/tree.svg b/src/material-icons/icons/tree.svg new file mode 100644 index 0000000..34031ca --- /dev/null +++ b/src/material-icons/icons/tree.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/tsconfig.svg b/src/material-icons/icons/tsconfig.svg new file mode 100644 index 0000000..817fb8d --- /dev/null +++ b/src/material-icons/icons/tsconfig.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/tsil.svg b/src/material-icons/icons/tsil.svg new file mode 100644 index 0000000..261d7cd --- /dev/null +++ b/src/material-icons/icons/tsil.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/tune.svg b/src/material-icons/icons/tune.svg new file mode 100644 index 0000000..ecbde06 --- /dev/null +++ b/src/material-icons/icons/tune.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/turborepo.svg b/src/material-icons/icons/turborepo.svg new file mode 100644 index 0000000..8da0ec5 --- /dev/null +++ b/src/material-icons/icons/turborepo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/turborepo_light.svg b/src/material-icons/icons/turborepo_light.svg new file mode 100644 index 0000000..c631e25 --- /dev/null +++ b/src/material-icons/icons/turborepo_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/twig.svg b/src/material-icons/icons/twig.svg new file mode 100644 index 0000000..b16b12c --- /dev/null +++ b/src/material-icons/icons/twig.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/twine.svg b/src/material-icons/icons/twine.svg new file mode 100644 index 0000000..ac1bc55 --- /dev/null +++ b/src/material-icons/icons/twine.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/typescript-def.svg b/src/material-icons/icons/typescript-def.svg new file mode 100644 index 0000000..cdd898f --- /dev/null +++ b/src/material-icons/icons/typescript-def.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/typescript.svg b/src/material-icons/icons/typescript.svg new file mode 100644 index 0000000..2fe9ba3 --- /dev/null +++ b/src/material-icons/icons/typescript.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/typst.svg b/src/material-icons/icons/typst.svg new file mode 100644 index 0000000..5312f92 --- /dev/null +++ b/src/material-icons/icons/typst.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/uml.svg b/src/material-icons/icons/uml.svg new file mode 100644 index 0000000..92eb9c6 --- /dev/null +++ b/src/material-icons/icons/uml.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/uml_light.svg b/src/material-icons/icons/uml_light.svg new file mode 100644 index 0000000..4efcd6a --- /dev/null +++ b/src/material-icons/icons/uml_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/unocss.svg b/src/material-icons/icons/unocss.svg new file mode 100644 index 0000000..7f28101 --- /dev/null +++ b/src/material-icons/icons/unocss.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/url.svg b/src/material-icons/icons/url.svg new file mode 100644 index 0000000..798c887 --- /dev/null +++ b/src/material-icons/icons/url.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/vagrant.svg b/src/material-icons/icons/vagrant.svg new file mode 100644 index 0000000..78c19f9 --- /dev/null +++ b/src/material-icons/icons/vagrant.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/vala.svg b/src/material-icons/icons/vala.svg new file mode 100644 index 0000000..85fbe68 --- /dev/null +++ b/src/material-icons/icons/vala.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/vedic.svg b/src/material-icons/icons/vedic.svg new file mode 100644 index 0000000..9ae47a1 --- /dev/null +++ b/src/material-icons/icons/vedic.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/velite.svg b/src/material-icons/icons/velite.svg new file mode 100644 index 0000000..5f5aadb --- /dev/null +++ b/src/material-icons/icons/velite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/velocity.svg b/src/material-icons/icons/velocity.svg new file mode 100644 index 0000000..00b4aa0 --- /dev/null +++ b/src/material-icons/icons/velocity.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/vercel.svg b/src/material-icons/icons/vercel.svg new file mode 100644 index 0000000..8ff6e49 --- /dev/null +++ b/src/material-icons/icons/vercel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/vercel_light.svg b/src/material-icons/icons/vercel_light.svg new file mode 100644 index 0000000..314b78c --- /dev/null +++ b/src/material-icons/icons/vercel_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/verdaccio.svg b/src/material-icons/icons/verdaccio.svg new file mode 100644 index 0000000..3b5f1d4 --- /dev/null +++ b/src/material-icons/icons/verdaccio.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/verified.svg b/src/material-icons/icons/verified.svg new file mode 100644 index 0000000..1b9edb2 --- /dev/null +++ b/src/material-icons/icons/verified.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/verilog.svg b/src/material-icons/icons/verilog.svg new file mode 100644 index 0000000..d0b3b93 --- /dev/null +++ b/src/material-icons/icons/verilog.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/vfl.svg b/src/material-icons/icons/vfl.svg new file mode 100644 index 0000000..8cce143 --- /dev/null +++ b/src/material-icons/icons/vfl.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/video.svg b/src/material-icons/icons/video.svg new file mode 100644 index 0000000..2ade126 --- /dev/null +++ b/src/material-icons/icons/video.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/vim.svg b/src/material-icons/icons/vim.svg new file mode 100644 index 0000000..0a0da99 --- /dev/null +++ b/src/material-icons/icons/vim.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/virtual.svg b/src/material-icons/icons/virtual.svg new file mode 100644 index 0000000..0fdb620 --- /dev/null +++ b/src/material-icons/icons/virtual.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/visualstudio.svg b/src/material-icons/icons/visualstudio.svg new file mode 100644 index 0000000..63dec2e --- /dev/null +++ b/src/material-icons/icons/visualstudio.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/vite.svg b/src/material-icons/icons/vite.svg new file mode 100644 index 0000000..d66cd5e --- /dev/null +++ b/src/material-icons/icons/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/vitest.svg b/src/material-icons/icons/vitest.svg new file mode 100644 index 0000000..587491e --- /dev/null +++ b/src/material-icons/icons/vitest.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/vlang.svg b/src/material-icons/icons/vlang.svg new file mode 100644 index 0000000..42e2398 --- /dev/null +++ b/src/material-icons/icons/vlang.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/vscode.svg b/src/material-icons/icons/vscode.svg new file mode 100644 index 0000000..fe0e636 --- /dev/null +++ b/src/material-icons/icons/vscode.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/vue-config.svg b/src/material-icons/icons/vue-config.svg new file mode 100644 index 0000000..bfe01c2 --- /dev/null +++ b/src/material-icons/icons/vue-config.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/vue.svg b/src/material-icons/icons/vue.svg new file mode 100644 index 0000000..359f899 --- /dev/null +++ b/src/material-icons/icons/vue.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/vuex-store.svg b/src/material-icons/icons/vuex-store.svg new file mode 100644 index 0000000..c98a851 --- /dev/null +++ b/src/material-icons/icons/vuex-store.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/wakatime.svg b/src/material-icons/icons/wakatime.svg new file mode 100644 index 0000000..46f5031 --- /dev/null +++ b/src/material-icons/icons/wakatime.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/wakatime_light.svg b/src/material-icons/icons/wakatime_light.svg new file mode 100644 index 0000000..e4bf771 --- /dev/null +++ b/src/material-icons/icons/wakatime_light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/wallaby.svg b/src/material-icons/icons/wallaby.svg new file mode 100644 index 0000000..58c74cb --- /dev/null +++ b/src/material-icons/icons/wallaby.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/watchman.svg b/src/material-icons/icons/watchman.svg new file mode 100644 index 0000000..a5e5227 --- /dev/null +++ b/src/material-icons/icons/watchman.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/webassembly.svg b/src/material-icons/icons/webassembly.svg new file mode 100644 index 0000000..69a43aa --- /dev/null +++ b/src/material-icons/icons/webassembly.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/webhint.svg b/src/material-icons/icons/webhint.svg new file mode 100644 index 0000000..59e004f --- /dev/null +++ b/src/material-icons/icons/webhint.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/webpack.svg b/src/material-icons/icons/webpack.svg new file mode 100644 index 0000000..95c2d4b --- /dev/null +++ b/src/material-icons/icons/webpack.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/wepy.svg b/src/material-icons/icons/wepy.svg new file mode 100644 index 0000000..4c8baef --- /dev/null +++ b/src/material-icons/icons/wepy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/werf.svg b/src/material-icons/icons/werf.svg new file mode 100644 index 0000000..8a6323e --- /dev/null +++ b/src/material-icons/icons/werf.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/windicss.svg b/src/material-icons/icons/windicss.svg new file mode 100644 index 0000000..4f31c55 --- /dev/null +++ b/src/material-icons/icons/windicss.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/wolframlanguage.svg b/src/material-icons/icons/wolframlanguage.svg new file mode 100644 index 0000000..2f0b5aa --- /dev/null +++ b/src/material-icons/icons/wolframlanguage.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/word.svg b/src/material-icons/icons/word.svg new file mode 100644 index 0000000..a0baf46 --- /dev/null +++ b/src/material-icons/icons/word.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/xaml.svg b/src/material-icons/icons/xaml.svg new file mode 100644 index 0000000..ed496af --- /dev/null +++ b/src/material-icons/icons/xaml.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/xml.svg b/src/material-icons/icons/xml.svg new file mode 100644 index 0000000..ce7ae58 --- /dev/null +++ b/src/material-icons/icons/xml.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/yaml.svg b/src/material-icons/icons/yaml.svg new file mode 100644 index 0000000..03a8a79 --- /dev/null +++ b/src/material-icons/icons/yaml.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/yang.svg b/src/material-icons/icons/yang.svg new file mode 100644 index 0000000..5574008 --- /dev/null +++ b/src/material-icons/icons/yang.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/yarn.svg b/src/material-icons/icons/yarn.svg new file mode 100644 index 0000000..bf25ad2 --- /dev/null +++ b/src/material-icons/icons/yarn.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/zig.svg b/src/material-icons/icons/zig.svg new file mode 100644 index 0000000..79c51da --- /dev/null +++ b/src/material-icons/icons/zig.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/icons/zip.svg b/src/material-icons/icons/zip.svg new file mode 100644 index 0000000..39db327 --- /dev/null +++ b/src/material-icons/icons/zip.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/images/commandPalette.png b/src/material-icons/images/commandPalette.png new file mode 100644 index 0000000..49ca1c1 Binary files /dev/null and b/src/material-icons/images/commandPalette.png differ diff --git a/src/material-icons/images/contributors.png b/src/material-icons/images/contributors.png new file mode 100644 index 0000000..4ef7480 Binary files /dev/null and b/src/material-icons/images/contributors.png differ diff --git a/src/material-icons/images/fileIcons.png b/src/material-icons/images/fileIcons.png new file mode 100644 index 0000000..d81521e Binary files /dev/null and b/src/material-icons/images/fileIcons.png differ diff --git a/src/material-icons/images/folderIcons.png b/src/material-icons/images/folderIcons.png new file mode 100644 index 0000000..01b0c81 Binary files /dev/null and b/src/material-icons/images/folderIcons.png differ diff --git a/src/material-icons/images/how-tos/aligned-vs-missaligned.png b/src/material-icons/images/how-tos/aligned-vs-missaligned.png new file mode 100644 index 0000000..4394577 Binary files /dev/null and b/src/material-icons/images/how-tos/aligned-vs-missaligned.png differ diff --git a/src/material-icons/images/how-tos/blurry-issue.png b/src/material-icons/images/how-tos/blurry-issue.png new file mode 100644 index 0000000..33120a2 Binary files /dev/null and b/src/material-icons/images/how-tos/blurry-issue.png differ diff --git a/src/material-icons/images/how-tos/cloned-file-icons-example.png b/src/material-icons/images/how-tos/cloned-file-icons-example.png new file mode 100644 index 0000000..90278c0 Binary files /dev/null and b/src/material-icons/images/how-tos/cloned-file-icons-example.png differ diff --git a/src/material-icons/images/how-tos/cloned-folder-icons-example.png b/src/material-icons/images/how-tos/cloned-folder-icons-example.png new file mode 100644 index 0000000..18c31b1 Binary files /dev/null and b/src/material-icons/images/how-tos/cloned-folder-icons-example.png differ diff --git a/src/material-icons/images/how-tos/cloned-icon-no-recolor-result.png b/src/material-icons/images/how-tos/cloned-icon-no-recolor-result.png new file mode 100644 index 0000000..1c0cd3f Binary files /dev/null and b/src/material-icons/images/how-tos/cloned-icon-no-recolor-result.png differ diff --git a/src/material-icons/images/how-tos/cloned-icon-no-recolor.png b/src/material-icons/images/how-tos/cloned-icon-no-recolor.png new file mode 100644 index 0000000..8adf272 Binary files /dev/null and b/src/material-icons/images/how-tos/cloned-icon-no-recolor.png differ diff --git a/src/material-icons/images/how-tos/cloned-rust-icon-example.png b/src/material-icons/images/how-tos/cloned-rust-icon-example.png new file mode 100644 index 0000000..ec96106 Binary files /dev/null and b/src/material-icons/images/how-tos/cloned-rust-icon-example.png differ diff --git a/src/material-icons/images/how-tos/elephant-less-detail.svg b/src/material-icons/images/how-tos/elephant-less-detail.svg new file mode 100644 index 0000000..f414e3f --- /dev/null +++ b/src/material-icons/images/how-tos/elephant-less-detail.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/material-icons/images/how-tos/elephant-result.png b/src/material-icons/images/how-tos/elephant-result.png new file mode 100644 index 0000000..706c8d5 Binary files /dev/null and b/src/material-icons/images/how-tos/elephant-result.png differ diff --git a/src/material-icons/images/how-tos/elephant-too-much-detail.svg b/src/material-icons/images/how-tos/elephant-too-much-detail.svg new file mode 100644 index 0000000..6eff008 --- /dev/null +++ b/src/material-icons/images/how-tos/elephant-too-much-detail.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/images/how-tos/elephant-with-grid.svg b/src/material-icons/images/how-tos/elephant-with-grid.svg new file mode 100644 index 0000000..3c5a033 --- /dev/null +++ b/src/material-icons/images/how-tos/elephant-with-grid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/images/how-tos/folder-icon-parts.svg b/src/material-icons/images/how-tos/folder-icon-parts.svg new file mode 100644 index 0000000..8586783 --- /dev/null +++ b/src/material-icons/images/how-tos/folder-icon-parts.svg @@ -0,0 +1 @@ +BackgroundMotive \ No newline at end of file diff --git a/src/material-icons/images/how-tos/missaligned-icon.svg b/src/material-icons/images/how-tos/missaligned-icon.svg new file mode 100644 index 0000000..ade4f49 --- /dev/null +++ b/src/material-icons/images/how-tos/missaligned-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/images/how-tos/missaligned-result.svg b/src/material-icons/images/how-tos/missaligned-result.svg new file mode 100644 index 0000000..3c6a03c --- /dev/null +++ b/src/material-icons/images/how-tos/missaligned-result.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/images/how-tos/pick-folder-colors.png b/src/material-icons/images/how-tos/pick-folder-colors.png new file mode 100644 index 0000000..3c7c725 Binary files /dev/null and b/src/material-icons/images/how-tos/pick-folder-colors.png differ diff --git a/src/material-icons/images/how-tos/pick-folder-colors.svg b/src/material-icons/images/how-tos/pick-folder-colors.svg new file mode 100644 index 0000000..8df5e9b --- /dev/null +++ b/src/material-icons/images/how-tos/pick-folder-colors.svg @@ -0,0 +1,301 @@ + + + +MotiveBackground diff --git a/src/material-icons/images/how-tos/pixel-perfect-icon.svg b/src/material-icons/images/how-tos/pixel-perfect-icon.svg new file mode 100644 index 0000000..fe85f73 --- /dev/null +++ b/src/material-icons/images/how-tos/pixel-perfect-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/images/how-tos/svg-folder-icon-with-correct-colors.svg b/src/material-icons/images/how-tos/svg-folder-icon-with-correct-colors.svg new file mode 100644 index 0000000..a60c715 --- /dev/null +++ b/src/material-icons/images/how-tos/svg-folder-icon-with-correct-colors.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/images/how-tos/svg-folder-icon-with-wrong-colors.svg b/src/material-icons/images/how-tos/svg-folder-icon-with-wrong-colors.svg new file mode 100644 index 0000000..56b1494 --- /dev/null +++ b/src/material-icons/images/how-tos/svg-folder-icon-with-wrong-colors.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/material-icons/images/how-tos/svg-with-light-color.png b/src/material-icons/images/how-tos/svg-with-light-color.png new file mode 100644 index 0000000..c492128 Binary files /dev/null and b/src/material-icons/images/how-tos/svg-with-light-color.png differ diff --git a/src/material-icons/images/how-tos/svg-with-spacing.png b/src/material-icons/images/how-tos/svg-with-spacing.png new file mode 100644 index 0000000..6b9c522 Binary files /dev/null and b/src/material-icons/images/how-tos/svg-with-spacing.png differ diff --git a/src/material-icons/images/how-tos/svg-with-too-dark-color.png b/src/material-icons/images/how-tos/svg-with-too-dark-color.png new file mode 100644 index 0000000..143540d Binary files /dev/null and b/src/material-icons/images/how-tos/svg-with-too-dark-color.png differ diff --git a/src/material-icons/images/how-tos/svg-with-wrong-color.png b/src/material-icons/images/how-tos/svg-with-wrong-color.png new file mode 100644 index 0000000..fe95e00 Binary files /dev/null and b/src/material-icons/images/how-tos/svg-with-wrong-color.png differ diff --git a/src/material-icons/images/how-tos/svg-without-spacing.png b/src/material-icons/images/how-tos/svg-without-spacing.png new file mode 100644 index 0000000..e7c9735 Binary files /dev/null and b/src/material-icons/images/how-tos/svg-without-spacing.png differ diff --git a/src/material-icons/images/set-folder-color.gif b/src/material-icons/images/set-folder-color.gif new file mode 100644 index 0000000..dd1475a Binary files /dev/null and b/src/material-icons/images/set-folder-color.gif differ diff --git a/src/material-icons/images/set-folder-theme.gif b/src/material-icons/images/set-folder-theme.gif new file mode 100644 index 0000000..aa09b83 Binary files /dev/null and b/src/material-icons/images/set-folder-theme.gif differ diff --git a/src/material-icons/logo.png b/src/material-icons/logo.png new file mode 100644 index 0000000..25529e5 Binary files /dev/null and b/src/material-icons/logo.png differ diff --git a/src/material-icons/logo.svg b/src/material-icons/logo.svg new file mode 100644 index 0000000..211e093 --- /dev/null +++ b/src/material-icons/logo.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/material-icons/material-colors.yml b/src/material-icons/material-colors.yml new file mode 100644 index 0000000..ecc7bb3 --- /dev/null +++ b/src/material-icons/material-colors.yml @@ -0,0 +1,257 @@ +colors: + - '#FFEBEE' # red 50 + - '#FFCDD2' # red 100 + - '#EF9A9A' # red 200 + - '#E57373' # red 300 + - '#EF5350' # red 400 + - '#F44336' # red 500 + - '#E53935' # red 600 + - '#D32F2F' # red 700 + - '#C62828' # red 800 + - '#B71C1C' # red 900 + - '#FF8A80' # red A100 + - '#FF5252' # red A200 + - '#FF1744' # red A400 + - '#D50000' # red A700 + - '#FCE4EC' # pink 50 + - '#F8BBD0' # pink 100 + - '#F48FB1' # pink 200 + - '#F06292' # pink 300 + - '#EC407A' # pink 400 + - '#E91E63' # pink 500 + - '#D81B60' # pink 600 + - '#C2185B' # pink 700 + - '#AD1457' # pink 800 + - '#880E4F' # pink 900 + - '#FF80AB' # pink A100 + - '#FF4081' # pink A200 + - '#F50057' # pink A400 + - '#C51162' # pink A700 + - '#F3E5F5' # purple 50 + - '#E1BEE7' # purple 100 + - '#CE93D8' # purple 200 + - '#BA68C8' # purple 300 + - '#AB47BC' # purple 400 + - '#9C27B0' # purple 500 + - '#8E24AA' # purple 600 + - '#7B1FA2' # purple 700 + - '#6A1B9A' # purple 800 + - '#4A148C' # purple 900 + - '#EA80FC' # purple A100 + - '#E040FB' # purple A200 + - '#D500F9' # purple A400 + - '#AA00FF' # purple A700 + - '#EDE7F6' # deep purple 50 + - '#D1C4E9' # deep purple 100 + - '#B39DDB' # deep purple 200 + - '#9575CD' # deep purple 300 + - '#7E57C2' # deep purple 400 + - '#673AB7' # deep purple 500 + - '#5E35B1' # deep purple 600 + - '#512DA8' # deep purple 700 + - '#4527A0' # deep purple 800 + - '#311B92' # deep purple 900 + - '#B388FF' # deep purple A100 + - '#7C4DFF' # deep purple A200 + - '#651FFF' # deep purple A400 + - '#6200EA' # deep purple A700 + - '#E8EAF6' # indigo 50 + - '#C5CAE9' # indigo 100 + - '#9FA8DA' # indigo 200 + - '#7986CB' # indigo 300 + - '#5C6BC0' # indigo 400 + - '#3F51B5' # indigo 500 + - '#3949AB' # indigo 600 + - '#303F9F' # indigo 700 + - '#283593' # indigo 800 + - '#1A237E' # indigo 900 + - '#8C9EFF' # indigo A100 + - '#536DFE' # indigo A200 + - '#3D5AFE' # indigo A400 + - '#304FFE' # indigo A700 + - '#E3F2FD' # blue 50 + - '#BBDEFB' # blue 100 + - '#90CAF9' # blue 200 + - '#64B5F6' # blue 300 + - '#42A5F5' # blue 400 + - '#2196F3' # blue 500 + - '#1E88E5' # blue 600 + - '#1976D2' # blue 700 + - '#1565C0' # blue 800 + - '#0D47A1' # blue 900 + - '#82B1FF' # blue A100 + - '#448AFF' # blue A200 + - '#2979FF' # blue A400 + - '#2962FF' # blue A700 + - '#E1F5FE' # light blue 50 + - '#B3E5FC' # light blue 100 + - '#81D4FA' # light blue 200 + - '#4FC3F7' # light blue 300 + - '#29B6F6' # light blue 400 + - '#03A9F4' # light blue 500 + - '#039BE5' # light blue 600 + - '#0288D1' # light blue 700 + - '#0277BD' # light blue 800 + - '#01579B' # light blue 900 + - '#80D8FF' # light blue A100 + - '#40C4FF' # light blue A200 + - '#00B0FF' # light blue A400 + - '#0091EA' # light blue A700 + - '#E0F7FA' # cyan 50 + - '#B2EBF2' # cyan 100 + - '#80DEEA' # cyan 200 + - '#4DD0E1' # cyan 300 + - '#26C6DA' # cyan 400 + - '#00BCD4' # cyan 500 + - '#00ACC1' # cyan 600 + - '#0097A7' # cyan 700 + - '#00838F' # cyan 800 + - '#006064' # cyan 900 + - '#84FFFF' # cyan A100 + - '#18FFFF' # cyan A200 + - '#00E5FF' # cyan A400 + - '#00B8D4' # cyan A700 + - '#E0F2F1' # teal 50 + - '#B2DFDB' # teal 100 + - '#80CBC4' # teal 200 + - '#4DB6AC' # teal 300 + - '#26A69A' # teal 400 + - '#009688' # teal 500 + - '#00897B' # teal 600 + - '#00796B' # teal 700 + - '#00695C' # teal 800 + - '#004D40' # teal 900 + - '#A7FFEB' # teal A100 + - '#64FFDA' # teal A200 + - '#1DE9B6' # teal A400 + - '#00BFA5' # teal A700 + - '#E8F5E9' # green 50 + - '#C8E6C9' # green 100 + - '#A5D6A7' # green 200 + - '#81C784' # green 300 + - '#66BB6A' # green 400 + - '#4CAF50' # green 500 + - '#43A047' # green 600 + - '#388E3C' # green 700 + - '#2E7D32' # green 800 + - '#1B5E20' # green 900 + - '#B9F6CA' # green A100 + - '#69F0AE' # green A200 + - '#00E676' # green A400 + - '#00C853' # green A700 + - '#F1F8E9' # light green 50 + - '#DCEDC8' # light green 100 + - '#C5E1A5' # light green 200 + - '#AED581' # light green 300 + - '#9CCC65' # light green 400 + - '#8BC34A' # light green 500 + - '#7CB342' # light green 600 + - '#689F38' # light green 700 + - '#558B2F' # light green 800 + - '#33691E' # light green 900 + - '#CCFF90' # light green A100 + - '#B2FF59' # light green A200 + - '#76FF03' # light green A400 + - '#64DD17' # light green A700 + - '#F9FBE7' # lime 50 + - '#F0F4C3' # lime 100 + - '#E6EE9C' # lime 200 + - '#DCE775' # lime 300 + - '#D4E157' # lime 400 + - '#CDDC39' # lime 500 + - '#C0CA33' # lime 600 + - '#AFB42B' # lime 700 + - '#9E9D24' # lime 800 + - '#827717' # lime 900 + - '#F4FF81' # lime A100 + - '#EEFF41' # lime A200 + - '#C6FF00' # lime A400 + - '#AEEA00' # lime A700 + - '#FFFDE7' # yellow 50 + - '#FFF9C4' # yellow 100 + - '#FFF59D' # yellow 200 + - '#FFF176' # yellow 300 + - '#FFEE58' # yellow 400 + - '#FFEB3B' # yellow 500 + - '#FDD835' # yellow 600 + - '#FBC02D' # yellow 700 + - '#F9A825' # yellow 800 + - '#F57F17' # yellow 900 + - '#FFFF8D' # yellow A100 + - '#FFFF00' # yellow A200 + - '#FFEA00' # yellow A400 + - '#FFD600' # yellow A700 + - '#FFF8E1' # amber 50 + - '#FFECB3' # amber 100 + - '#FFE082' # amber 200 + - '#FFD54F' # amber 300 + - '#FFCA28' # amber 400 + - '#FFC107' # amber 500 + - '#FFB300' # amber 600 + - '#FFA000' # amber 700 + - '#FF8F00' # amber 800 + - '#FF6F00' # amber 900 + - '#FFE57F' # amber A100 + - '#FFD740' # amber A200 + - '#FFC400' # amber A400 + - '#FFAB00' # amber A700 + - '#FFF3E0' # orange 50 + - '#FFE0B2' # orange 100 + - '#FFCC80' # orange 200 + - '#FFB74D' # orange 300 + - '#FFA726' # orange 400 + - '#FF9800' # orange 500 + - '#FB8C00' # orange 600 + - '#F57C00' # orange 700 + - '#EF6C00' # orange 800 + - '#E65100' # orange 900 + - '#FFD180' # orange A100 + - '#FFAB40' # orange A200 + - '#FF9100' # orange A400 + - '#FF6D00' # orange A700 + - '#FBE9E7' # deep orange 50 + - '#FFCCBC' # deep orange 100 + - '#FFAB91' # deep orange 200 + - '#FF8A65' # deep orange 300 + - '#FF7043' # deep orange 400 + - '#FF5722' # deep orange 500 + - '#F4511E' # deep orange 600 + - '#E64A19' # deep orange 700 + - '#D84315' # deep orange 800 + - '#BF360C' # deep orange 900 + - '#FF9E80' # deep orange A100 + - '#FF6E40' # deep orange A200 + - '#FF3D00' # deep orange A400 + - '#DD2C00' # deep orange A700 + - '#EFEBE9' # brown 50 + - '#D7CCC8' # brown 100 + - '#BCAAA4' # brown 200 + - '#A1887F' # brown 300 + - '#8D6E63' # brown 400 + - '#795548' # brown 500 + - '#6D4C41' # brown 600 + - '#5D4037' # brown 700 + - '#4E342E' # brown 800 + - '#3E2723' # brown 900 + - '#FAFAFA' # gray 50 + - '#F5F5F5' # gray 100 + - '#EEEEEE' # gray 200 + - '#E0E0E0' # gray 300 + - '#BDBDBD' # gray 400 + - '#9E9E9E' # gray 500 + - '#757575' # gray 600 + - '#616161' # gray 700 + - '#424242' # gray 800 + - '#212121' # gray 900 + - '#ECEFF1' # blue gray 50 + - '#CFD8DC' # blue gray 100 + - '#B0BEC5' # blue gray 200 + - '#90A4AE' # blue gray 300 + - '#78909C' # blue gray 400 + - '#607D8B' # blue gray 500 + - '#546E7A' # blue gray 600 + - '#455A64' # blue gray 700 + - '#37474F' # blue gray 800 + - '#263238' # blue gray 900 + # - '#000000' # black must not be used + # - '#FFFFFF' # white must not be used diff --git a/src/material-icons/package.json b/src/material-icons/package.json new file mode 100644 index 0000000..78ef1cd --- /dev/null +++ b/src/material-icons/package.json @@ -0,0 +1,385 @@ +{ + "name": "material-icon-theme", + "displayName": "Material Icon Theme", + "description": "Material Design Icons for Visual Studio Code", + "version": "5.10.0", + "license": "MIT", + "scripts": { + "precompile": "rimraf dist && bun run verify", + "compile": "tsc -p ./", + "compile:declarations": "tsc -p ./tsconfig.declarations.json", + "postcompile": "bun run compile:declarations && bun run generateJson && bun run generateClones && bun run check", + "build": "bun run compile && bun run ./build/build-with-esbuild.ts", + "watch": "bun run ./build/watch-with-esbuild.ts", + "changelog": "changelog-machine --config changelog.config.json", + "check-colors": "bun run ./src/scripts/svg/checkSvgColors.ts", + "check": "bun ./src/scripts/icons/checks/run.ts", + "contributors": "bun ./src/scripts/contributors/contributors.ts", + "generateJson": "bun ./src/scripts/icons/generateJson.ts > dist/material-icons.json", + "generateClones": "bun ./src/scripts/icons/generateClones.ts", + "lint": "bunx @biomejs/biome check --write ./src", + "format": "bunx @biomejs/biome format --write ./src", + "preversion": "bun run contributors && git add images/contributors.png && bun run preview && git add images/fileIcons.png && git add images/folderIcons.png && bun run svgo && git add icons/*.svg", + "preview": "bun ./src/scripts/preview/run.ts", + "svgo": "svgo -i icons -o icons -q", + "test": "bun test", + "version": "bun run changelog && git add CHANGELOG.md", + "vscode:prepublish": "bun run lint && bun run build", + "verify": "bunx sheriff verify", + "prepublishOnly": "bun run ./src/scripts/module/prepare.ts", + "postpublish": "git checkout package.json && git checkout README.md" + }, + "publisher": "PKief", + "author": { + "name": "Philipp Kief", + "email": "philipp.kief@gmx.de", + "url": "https://pkief.com" + }, + "funding": "https://github.com/sponsors/PKief", + "sponsor": { + "url": "https://github.com/sponsors/PKief" + }, + "engines": { + "vscode": "^1.55.0" + }, + "homepage": "https://github.com/material-extensions/vscode-material-icon-theme/blob/main/README.md", + "repository": { + "type": "git", + "url": "git+https://github.com/material-extensions/vscode-material-icon-theme.git" + }, + "bugs": { + "url": "https://github.com/material-extensions/vscode-material-icon-theme/issues" + }, + "icon": "logo.png", + "galleryBanner": { + "color": "#1e1e1e", + "theme": "dark" + }, + "categories": [ + "Themes" + ], + "keywords": [ + "icons", + "theme", + "material", + "icon-theme", + "customization" + ], + "extensionKind": [ + "ui", + "workspace" + ], + "capabilities": { + "untrustedWorkspaces": { + "supported": true + }, + "virtualWorkspaces": true + }, + "activationEvents": [ + "onStartupFinished" + ], + "main": "./dist/extension/desktop/extension.cjs", + "browser": "./dist/extension/web/extension.cjs", + "module": "./dist/module/index.cjs", + "types": "./dist/types/module/index.d.ts", + "sideEffects": false, + "contributes": { + "iconThemes": [ + { + "id": "material-icon-theme", + "label": "Material Icon Theme", + "path": "./dist/material-icons.json", + "_watch": true + } + ], + "commands": [ + { + "command": "material-icon-theme.activateIcons", + "title": "%command.activateIcons%", + "enablement": "!isWeb" + }, + { + "command": "material-icon-theme.toggleIconPacks", + "title": "%command.toggleIconPacks%", + "enablement": "!isWeb" + }, + { + "command": "material-icon-theme.changeFolderTheme", + "title": "%command.changeFolderTheme%", + "enablement": "!isWeb" + }, + { + "command": "material-icon-theme.changeFolderColor", + "title": "%command.changeFolderColor%", + "enablement": "!isWeb" + }, + { + "command": "material-icon-theme.changeFileColor", + "title": "%command.changeFileColor%", + "enablement": "!isWeb" + }, + { + "command": "material-icon-theme.restoreDefaultConfig", + "title": "%command.restoreDefaultConfig%", + "enablement": "!isWeb" + }, + { + "command": "material-icon-theme.toggleExplorerArrows", + "title": "%command.toggleExplorerArrows%", + "enablement": "!isWeb" + }, + { + "command": "material-icon-theme.changeOpacity", + "title": "%command.changeOpacity%", + "enablement": "!isWeb" + }, + { + "command": "material-icon-theme.toggleGrayscale", + "title": "%command.toggleGrayscale%", + "enablement": "!isWeb" + }, + { + "command": "material-icon-theme.changeSaturation", + "title": "%command.changeSaturation%", + "enablement": "!isWeb" + } + ], + "configuration": { + "type": "object", + "title": "%configuration.title%", + "properties": { + "material-icon-theme.activeIconPack": { + "type": "string", + "default": "angular", + "description": "%configuration.activeIconPack%", + "enumDescriptions": [ + "%configuration.activeIconPack.angular%", + "%configuration.activeIconPack.angular_ngrx%", + "%configuration.activeIconPack.react%", + "%configuration.activeIconPack.react_redux%", + "%configuration.activeIconPack.qwik%", + "%configuration.activeIconPack.vue%", + "%configuration.activeIconPack.vue_vuex%", + "%configuration.activeIconPack.nest%", + "%configuration.activeIconPack.none%" + ], + "enum": [ + "angular", + "angular_ngrx", + "react", + "react_redux", + "qwik", + "vue", + "vue_vuex", + "nest", + "none" + ] + }, + "material-icon-theme.files.associations": { + "type": "object", + "default": {}, + "description": "%configuration.files.associations%" + }, + "material-icon-theme.folders.associations": { + "type": "object", + "default": {}, + "description": "%configuration.folders.associations%" + }, + "material-icon-theme.languages.associations": { + "type": "object", + "default": {}, + "description": "%configuration.languages.associations%" + }, + "material-icon-theme.files.customClones": { + "type": "array", + "default": [], + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "%configuration.customClones.name%" + }, + "base": { + "type": "string", + "description": "%configuration.customClones.base%" + }, + "color": { + "type": "string", + "description": "%configuration.customClones.color%" + }, + "lightColor": { + "type": "string", + "description": "%configuration.customClones.lightColor%" + }, + "fileNames": { + "type": "array", + "default": [], + "description": "%configuration.customClones.fileNames%", + "items": { + "type": "string" + } + }, + "fileExtensions": { + "type": "array", + "default": [], + "description": "%configuration.customClones.fileExtensions%", + "items": { + "type": "string" + } + }, + "activeForPacks": { + "type": "array", + "default": [ + "angular" + ], + "description": "%configuration.customClones.activeForPacks%", + "items": { + "type": "string", + "enumDescriptions": [ + "%configuration.activeIconPack.angular%", + "%configuration.activeIconPack.angular_ngrx%", + "%configuration.activeIconPack.react%", + "%configuration.activeIconPack.react_redux%", + "%configuration.activeIconPack.qwik%", + "%configuration.activeIconPack.vue%", + "%configuration.activeIconPack.vue_vuex%", + "%configuration.activeIconPack.nest%", + "%configuration.activeIconPack.none%" + ], + "enum": [ + "angular", + "angular_ngrx", + "react", + "react_redux", + "qwik", + "vue", + "vue_vuex", + "nest", + "none" + ] + } + } + } + }, + "description": "%configuration.customClones%" + }, + "material-icon-theme.folders.customClones": { + "type": "array", + "default": [], + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "%configuration.customClones.name%" + }, + "base": { + "type": "string", + "description": "%configuration.customClones.base%" + }, + "color": { + "type": "string", + "description": "%configuration.customClones.color%" + }, + "lightColor": { + "type": "string", + "description": "%configuration.customClones.lightColor%" + }, + "folderNames": { + "type": "array", + "description": "%configuration.customClones.folderNames%", + "items": { + "type": "string" + } + } + } + }, + "description": "%configuration.customClones%" + }, + "material-icon-theme.folders.theme": { + "type": "string", + "default": "specific", + "description": "%configuration.folders.theme%", + "enumDescriptions": [ + "%configuration.folders.theme.specific%", + "%configuration.folders.theme.classic%", + "%configuration.folders.theme.none%" + ], + "enum": [ + "specific", + "classic", + "none" + ] + }, + "material-icon-theme.folders.color": { + "type": "string", + "default": "#90a4ae", + "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$", + "description": "%configuration.folders.color%" + }, + "material-icon-theme.files.color": { + "type": "string", + "default": "#90a4ae", + "pattern": "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$", + "description": "%configuration.files.color%" + }, + "material-icon-theme.opacity": { + "type": "number", + "default": 1, + "minimum": 0, + "maximum": 1, + "description": "%configuration.opacity%" + }, + "material-icon-theme.hidesExplorerArrows": { + "type": "boolean", + "default": false, + "description": "%configuration.hidesExplorerArrows%" + }, + "material-icon-theme.saturation": { + "type": "number", + "default": 1, + "minimum": 0, + "maximum": 1, + "description": "%configuration.saturation%" + }, + "material-icon-theme.enableLogging": { + "type": "boolean", + "default": false, + "description": "%configuration.enableLogging%" + }, + "material-icon-theme.logLevel": { + "type": "string", + "default": "info", + "enum": [ + "info", + "error", + "debug" + ], + "description": "%configuration.logLevel%" + } + } + } + }, + "dependencies": { + "chroma-js": "^2.4.2", + "fast-deep-equal": "^3.1.3", + "svgson": "^5.3.1" + }, + "devDependencies": { + "@biomejs/biome": "1.8.2", + "@softarc/sheriff-core": "^0.15.1", + "@types/chroma-js": "^2.4.4", + "@types/puppeteer": "^5.4.7", + "@types/vscode": "~1.55.0", + "axios": "^1.7.2", + "bun-types": "^1.1.20", + "changelog-machine": "^1.1.0", + "esbuild": "^0.21.5", + "puppeteer": "^22.13.1", + "rimraf": "^6.0.1", + "svg-color-linter": "^1.4.0", + "svgo": "^2.8.0", + "typescript": "^5.5.4" + } +} diff --git a/src/material-icons/package.nls.cs.json b/src/material-icons/package.nls.cs.json new file mode 100644 index 0000000..76e7c04 --- /dev/null +++ b/src/material-icons/package.nls.cs.json @@ -0,0 +1,35 @@ +{ + "command.activateIcons": "Material Icons: Aktivovat tรฉma ikon", + "command.toggleIconPacks": "Material Icons: Konfigurace sad ikon", + "command.changeFolderTheme": "Material Icons: Zmฤ›nit motiv sloลพky", + "command.changeFolderColor": "Material Icons: Zmฤ›nit barvu sloลพky", + "command.changeFileColor": "Material Icons: Zmฤ›nit barvu souboru", + "command.restoreDefaultConfig": "Material Icons: Obnovit vรฝchozรญ konfiguraci", + "command.toggleExplorerArrows": "Material Icons: Pล™epnout ลกipky Prลฏzkumnรญka", + "command.changeOpacity": "Material Icons: Zmฤ›nit prลฏhlednost", + "command.toggleGrayscale": "Material Icons: Pล™epnout odstรญny ลกedรฉ", + "command.changeSaturation": "Material Icons: Zmฤ›nit saturaci", + "configuration.title": "Material Icons", + "configuration.files.associations": "Nastavit vlastnรญ pล™idruลพenรญ ikony souboru.", + "configuration.folders.associations": "Nastavit vlastnรญ pล™idruลพenรญ ikony sloลพky.", + "configuration.languages.associations": "Nastavit vlastnรญ pล™idruลพenรญ ikon jazyka.", + "configuration.activeIconPack": "Vybrat sadu ikon, kterรก povoluje konkrรฉtnรญ ikony.", + "configuration.activeIconPack.angular": "Ikony pro Angular.", + "configuration.activeIconPack.angular_ngrx": "Ikony pro Angular a ngrx.", + "configuration.activeIconPack.react": "Ikony pro React.", + "configuration.activeIconPack.react_redux": "Ikony pro React a Redux.", + "configuration.activeIconPack.qwik": "Ikony pro Qwik.", + "configuration.activeIconPack.vue": "Ikony pro Vue.", + "configuration.activeIconPack.vue_vuex": "Ikony pro Vue a Vuex.", + "configuration.activeIconPack.nest": "Ikony pro NestJS.", + "configuration.activeIconPack.none": "Nenรญ povolena ลพรกdnรก sada ikon.", + "configuration.folders.theme": "Nastavit typ ikon sloลพek.", + "configuration.folders.theme.specific": "Vybrat ikony konkrรฉtnรญ sloลพky.", + "configuration.folders.theme.classic": "Vybrat klasickรฉ ikony sloลพek.", + "configuration.folders.theme.none": "ลฝรกdnรฉ ikony sloลพek.", + "configuration.folders.color": "Zmฤ›nit barvu ikon sloลพek.", + "configuration.files.color": "Zmฤ›nit barvu ikon souborลฏ.", + "configuration.hidesExplorerArrows": "Pล™ed sloลพkou skrรฝt ลกipky prลฏzkumnรญka.", + "configuration.opacity": "Zmฤ›nit prลฏhlednost ikon.", + "configuration.saturation": "Zmฤ›nit saturaci ikon." +} diff --git a/src/material-icons/package.nls.de.json b/src/material-icons/package.nls.de.json new file mode 100644 index 0000000..a5205cd --- /dev/null +++ b/src/material-icons/package.nls.de.json @@ -0,0 +1,35 @@ +{ + "command.activateIcons": "Material Icons: Icon Theme aktivieren", + "command.toggleIconPacks": "Material Icons: Icon Packs konfigurieren", + "command.changeFolderTheme": "Material Icons: Ordner Thema auswรคhlen", + "command.changeFolderColor": "Material Icons: Ordner Farbe รคndern", + "command.changeFileColor": "Material Icons: Datei Farbe รคndern", + "command.restoreDefaultConfig": "Material Icons: Standard Einstellungen wiederherstellen", + "command.toggleExplorerArrows": "Material Icons: Explorer Pfeilsymbole umschalten", + "command.changeOpacity": "Material Icons: Deckkraft verรคndern", + "command.toggleGrayscale": "Material Icons: Graustufen umschalten", + "command.changeSaturation": "Material Icons: Sรคttigung verรคndern", + "configuration.title": "Material Icons", + "configuration.files.associations": "Benutzerdefinierte Datei Icons konfigurieren.", + "configuration.folders.associations": "Benutzerdefinierte Ordner Icons konfigurieren.", + "configuration.languages.associations": "Benutzerdefinierte Language Icons konfigurieren.", + "configuration.activeIconPack": "Icon-Pack auswรคhlen, die bestimme Icons aktivieren.", + "configuration.activeIconPack.angular": "Icons fรผr Angular", + "configuration.activeIconPack.angular_ngrx": "Icons fรผr Angular und Ngrx", + "configuration.activeIconPack.react": "Icons fรผr React", + "configuration.activeIconPack.react_redux": "Icons fรผr React und Redux", + "configuration.activeIconPack.qwik": "Icons fรผr Qwik.", + "configuration.activeIconPack.vue": "Icons fรผr Vue.", + "configuration.activeIconPack.vue_vuex": "Icons fรผr Vue und Vuex.", + "configuration.activeIconPack.nest": "Icons fรผr NestJS.", + "configuration.activeIconPack.none": "Kein Icon-Pack aktiviert.", + "configuration.folders.theme": "Art der Ordner Icons auswรคhlen.", + "configuration.folders.theme.specific": "Spezifische Ordner Icons auswรคhlen.", + "configuration.folders.theme.classic": "Klassische Ordner Icons auswรคhlen.", + "configuration.folders.theme.none": "Keine Ordner Icons.", + "configuration.folders.color": "Farbe der Ordner Icons verรคndern.", + "configuration.files.color": "Farbe der Datei Icons verรคndern.", + "configuration.hidesExplorerArrows": "Pfeile vor den Ordnern deaktivieren.", + "configuration.opacity": "Deckkraft der Icons anpassen.", + "configuration.saturation": "Sรคttigung der Icons anpassen." +} diff --git a/src/material-icons/package.nls.es.json b/src/material-icons/package.nls.es.json new file mode 100644 index 0000000..b80f479 --- /dev/null +++ b/src/material-icons/package.nls.es.json @@ -0,0 +1,43 @@ +{ + "command.activateIcons": "Material Icon Theme: Activar los iconos", + "command.toggleIconPacks": "Material Icons: Configurar paquetes de iconos", + "command.changeFolderTheme": "Material Icons: Personalizar iconos de carpetas", + "command.changeFolderColor": "Material Icons: Cambiar color de carpeta", + "command.changeFileColor": "Material Icons: Cambiar color del archivo", + "command.restoreDefaultConfig": "Material Icons: Restaurar la configuraciรณn predeterminada", + "command.toggleExplorerArrows": "Material Icons: Deshabilitar flechas delante de carpetas", + "command.changeOpacity": "Material Icons: Cambiar la opacidad", + "command.toggleGrayscale": "Material Icons: Alternar la escala de grises", + "command.changeSaturation": "Material Icons: Cambiar saturaciรณn", + "configuration.title": "Material Icons", + "configuration.files.associations": "Configurar asociaciones personalizadas de iconos de archivos.", + "configuration.folders.associations": "Configurar asociaciones personalizadas de iconos de carpetas.", + "configuration.languages.associations": "Configurar asociaciones personalizadas de iconos de idioma.", + "configuration.customClones": "Clonar cualquier icono existente y crear uno nuevo con colores y asociaciones personalizadas", + "configuration.customClones.base": "Icono usado como base para crear el icono clonado personalizado", + "configuration.customClones.name": "Nombre del icono personalizado", + "configuration.customClones.color": "Color usado como base para recolorear el icono", + "configuration.customClones.lightColor": "Color usado como base para recolorear el icono cuando el tema es claro", + "configuration.customClones.fileNames": "Nombres de archivo para asociar con el icono personalizado", + "configuration.customClones.fileExtensions": "Extensiones de archivo para asociar con el icono personalizado", + "configuration.customClones.folderNames": "Nombres de carpeta para asociar con el icono personalizado", + "configuration.activeIconPack": "Seleccionar un paquete de iconos que permita iconos especรญficos.", + "configuration.activeIconPack.angular": "Iconos de Angular.", + "configuration.activeIconPack.angular_ngrx": "Iconos de Angular y ngrx.", + "configuration.activeIconPack.react": "Iconos de React.", + "configuration.activeIconPack.react_redux": "Iconos de React y Redux.", + "configuration.activeIconPack.qwik": "Iconos de Qwik.", + "configuration.activeIconPack.vue": "Iconos de Vue.", + "configuration.activeIconPack.vue_vuex": "Iconos de Vue y Vuex.", + "configuration.activeIconPack.nest": "Iconos de NestJS.", + "configuration.activeIconPack.none": "No hay ningรบn paquete de iconos activo.", + "configuration.folders.theme": "Seleccionar el tipo de iconos de carpeta.", + "configuration.folders.theme.specific": "Seleccionar iconos de carpeta especรญficos.", + "configuration.folders.theme.classic": "Seleccionar iconos de carpetas clรกsicas.", + "configuration.folders.theme.none": "Sin iconos de carpeta.", + "configuration.folders.color": "Cambiar el color de las carpetas.", + "configuration.files.color": "Cambiar el color de los iconos de archivos.", + "configuration.hidesExplorerArrows": "Deshabilitar flechas delante de carpetas.", + "configuration.opacity": "Cambiar la opacidad de los iconos.", + "configuration.saturation": "Cambiar la saturaciรณn de los iconos." +} diff --git a/src/material-icons/package.nls.fr.json b/src/material-icons/package.nls.fr.json new file mode 100644 index 0000000..d0abe68 --- /dev/null +++ b/src/material-icons/package.nls.fr.json @@ -0,0 +1,30 @@ +{ + "command.activateIcons": "Material Icons: Activer les icรดnes", + "command.toggleIconPacks": "Material Icons: Configurer les Packs d'icรดnes", + "command.changeFolderTheme": "Material Icons: Changer le thรจme du dossier", + "command.restoreDefaultConfig": "Material Icons: Restaurer le paramรจtre par dรฉfaut", + "command.toggleExplorerArrows": "Material Icons: Configurer les flรจches devant les dossiers", + "command.changeFolderColor": "Material Icons: Changer la couleur du dossier", + "command.changeOpacity": "Material Icons: Changer l'opacitรฉ", + "configuration.title": "Material Icons", + "configuration.files.associations": "Configurer des associations d'icรดnes de fichiers personnalisรฉs.", + "configuration.folders.associations": "Configurer des associations d'icรดnes de dossier personnalisรฉes.", + "configuration.languages.associations": "Configurer des associations d'icรดnes de langue personnalisรฉes.", + "configuration.activeIconPack": "Sรฉlectionner un pack d'icรดnes qui active des icรดnes spรฉcifiques.", + "configuration.activeIconPack.angular": "Icรดnes pour Angular.", + "configuration.activeIconPack.angular_ngrx": "Icรดnes pour Angular et ngrx.", + "configuration.activeIconPack.react": "Icรดnes pour React.", + "configuration.activeIconPack.react_redux": "Icรดnes pour React et Redux.", + "configuration.activeIconPack.qwik": "Icรดnes pour Qwik.", + "configuration.activeIconPack.vue": "Icรดnes pour Vue.", + "configuration.activeIconPack.vue_vuex": "Icรดnes pour Vue et Vuex.", + "configuration.activeIconPack.nest": "Icรดnes pour NestJS.", + "configuration.activeIconPack.none": "Aucun pack d'icรดnes n'est actif.", + "configuration.folders.theme": "Sรฉlectionner le type d'icรดnes de dossier.", + "configuration.folders.theme.specific": "Sรฉlectionner des icรดnes de dossiers spรฉcifiques.", + "configuration.folders.theme.classic": "Sรฉlectionner les icรดnes des dossiers classiques.", + "configuration.folders.theme.none": "Pas d'icรดnes de dossier.", + "configuration.folders.color": "Changer la couleur des icรดnes du dossier.", + "configuration.hidesExplorerArrows": "Dรฉsactiver les flรจches devant les dossiers.", + "configuration.opacity": "Ajuster l'opacitรฉ des icรดnes." +} diff --git a/src/material-icons/package.nls.ja.json b/src/material-icons/package.nls.ja.json new file mode 100644 index 0000000..30943b2 --- /dev/null +++ b/src/material-icons/package.nls.ja.json @@ -0,0 +1,35 @@ +{ + "command.activateIcons": "Material Icons: ใ‚ขใ‚คใ‚ณใƒณใƒ†ใƒผใƒžใ‚’ๆœ‰ๅŠนๅŒ–", + "command.toggleIconPacks": "Material Icons: ใ‚ขใ‚คใ‚ณใƒณใƒ‘ใƒƒใ‚ฏใ‚’่จญๅฎš", + "command.changeFolderTheme": "Material Icons: ใƒ•ใ‚ฉใƒซใƒ€ใƒผใƒ†ใƒผใƒžใ‚’ๅค‰ๆ›ด", + "command.changeFolderColor": "Material Icons: ใƒ•ใ‚ฉใƒซใƒ€ใƒผใฎ่‰ฒใ‚’ๅค‰ๆ›ด", + "command.changeFileColor": "Material Icons: ใƒ•ใ‚กใ‚คใƒซใฎ่‰ฒใ‚’ๅค‰ๆ›ด", + "command.restoreDefaultConfig": "Material Icons: ๅˆๆœŸ่จญๅฎšใซๆˆปใ™", + "command.toggleExplorerArrows": "Material Icons: ใƒ•ใ‚ฉใƒซใƒ€ใƒผใฎ็Ÿขๅฐใ‚’ๅˆ‡ใ‚Šๆ›ฟใˆ", + "command.changeOpacity": "Material Icons: ไธ้€ๆ˜Žๅบฆใ‚’ๅค‰ๆ›ด", + "command.toggleGrayscale": "Material Icons: ใ‚ฐใƒฌใƒผใ‚นใ‚ฑใƒผใƒซใ‚’ๅˆ‡ใ‚Šๆ›ฟใˆ", + "command.changeSaturation": "Material Icons: ๅฝฉๅบฆใ‚’ๅค‰ๆ›ด", + "configuration.title": "Material Icons", + "configuration.files.associations": "ใ‚ซใ‚นใ‚ฟใƒ ใƒ•ใ‚กใ‚คใƒซใ‚ขใ‚คใ‚ณใƒณใฎ้–ข้€ฃไป˜ใ‘ใ‚’่จญๅฎšใ™ใ‚‹ใ€‚", + "configuration.folders.associations": "ใ‚ซใ‚นใ‚ฟใƒ ใƒ•ใ‚ฉใƒซใƒ€ใƒผใ‚ขใ‚คใ‚ณใƒณใฎ้–ข้€ฃไป˜ใ‘ใ‚’่จญๅฎšใ™ใ‚‹ใ€‚", + "configuration.languages.associations": "ใ‚ซใ‚นใ‚ฟใƒ ่จ€่ชžใ‚ขใ‚คใ‚ณใƒณใฎ้–ข้€ฃไป˜ใ‘ใ‚’่จญๅฎšใ™ใ‚‹ใ€‚", + "configuration.activeIconPack": "็‰นๅฎšใฎใ‚ขใ‚คใ‚ณใƒณใ‚’ๆœ‰ๅŠนใซใ™ใ‚‹ใ‚ขใ‚คใ‚ณใƒณใƒ‘ใƒƒใ‚ฏใ‚’้ธๆŠžใ™ใ‚‹ใ€‚", + "configuration.activeIconPack.angular": "Angular ็”จใฎใ‚ขใ‚คใ‚ณใƒณใงใ™ใ€‚", + "configuration.activeIconPack.angular_ngrx": "Angular ใจ ngrx ็”จใฎใ‚ขใ‚คใ‚ณใƒณใงใ™ใ€‚", + "configuration.activeIconPack.react": "React ็”จใฎใ‚ขใ‚คใ‚ณใƒณใงใ™ใ€‚", + "configuration.activeIconPack.react_redux": "React ใจ Redux ็”จใฎใ‚ขใ‚คใ‚ณใƒณใงใ™ใ€‚", + "configuration.activeIconPack.qwik": "Qwik ็”จใฎใ‚ขใ‚คใ‚ณใƒณใงใ™ใ€‚", + "configuration.activeIconPack.vue": "Vue ็”จใฎใ‚ขใ‚คใ‚ณใƒณใงใ™ใ€‚", + "configuration.activeIconPack.vue_vuex": "Vue ใจ Vuex ็”จใฎใ‚ขใ‚คใ‚ณใƒณใงใ™ใ€‚", + "configuration.activeIconPack.nest": "NestJS ็”จใฎใ‚ขใ‚คใ‚ณใƒณใงใ™ใ€‚", + "configuration.activeIconPack.none": "ใ‚ขใ‚คใ‚ณใƒณใƒ‘ใƒƒใ‚ฏใฏๆœ‰ๅŠนใงใฏใ‚ใ‚Šใพใ›ใ‚“ใ€‚", + "configuration.folders.theme": "ใƒ•ใ‚ฉใƒซใƒ€ใƒผใ‚ขใ‚คใ‚ณใƒณใฎ็จฎ้กžใ‚’่จญๅฎšใ™ใ‚‹ใ€‚", + "configuration.folders.theme.specific": "็‰นๅฎšใฎใƒ•ใ‚ฉใƒซใƒ€ใƒผใ‚ขใ‚คใ‚ณใƒณใ‚’้ธๆŠžใ™ใ‚‹ใ€‚", + "configuration.folders.theme.classic": "ใ‚ฏใƒฉใ‚ทใƒƒใ‚ฏใƒ•ใ‚ฉใƒซใƒ€ใƒผใ‚ขใ‚คใ‚ณใƒณใ‚’้ธๆŠžใ™ใ‚‹ใ€‚", + "configuration.folders.theme.none": "ใƒ•ใ‚ฉใƒซใƒ€ใƒผใ‚ขใ‚คใ‚ณใƒณใŒใ‚ใ‚Šใพใ›ใ‚“ใ€‚", + "configuration.folders.color": "ใƒ•ใ‚ฉใƒซใƒ€ใƒผใ‚ขใ‚คใ‚ณใƒณใฎ่‰ฒใ‚’ๅค‰ๆ›ดใ™ใ‚‹ใ€‚", + "configuration.files.color": "ใƒ•ใ‚กใ‚คใƒซใ‚ขใ‚คใ‚ณใƒณใฎ่‰ฒใ‚’ๅค‰ๆ›ดใ™ใ‚‹ใ€‚", + "configuration.hidesExplorerArrows": "ใƒ•ใ‚ฉใƒซใƒ€ใƒผใฎๆจชใซใ‚ใ‚‹็Ÿขๅฐใ‚’้š ใ™ใ€‚", + "configuration.opacity": "ใ‚ขใ‚คใ‚ณใƒณใฎไธ้€ๆ˜Žๅบฆใ‚’ๅค‰ๆ›ดใ™ใ‚‹ใ€‚", + "configuration.saturation": "ใ‚ขใ‚คใ‚ณใƒณใฎๅฝฉๅบฆใ‚’ๅค‰ๆ›ดใ™ใ‚‹ใ€‚" +} diff --git a/src/material-icons/package.nls.json b/src/material-icons/package.nls.json new file mode 100644 index 0000000..7f81e1e --- /dev/null +++ b/src/material-icons/package.nls.json @@ -0,0 +1,46 @@ +{ + "command.activateIcons": "Material Icons: Activate Icon Theme", + "command.toggleIconPacks": "Material Icons: Configure Icon Packs", + "command.changeFolderTheme": "Material Icons: Change Folder Theme", + "command.changeFolderColor": "Material Icons: Change Folder Color", + "command.changeFileColor": "Material Icons: Change File Color", + "command.restoreDefaultConfig": "Material Icons: Restore Default Configuration", + "command.toggleExplorerArrows": "Material Icons: Toggle Explorer Arrows", + "command.changeOpacity": "Material Icons: Change Opacity", + "command.toggleGrayscale": "Material Icons: Toggle Grayscale", + "command.changeSaturation": "Material Icons: Change Saturation", + "configuration.title": "Material Icons", + "configuration.files.associations": "Set custom file icon associations.", + "configuration.folders.associations": "Set custom folder icon associations.", + "configuration.languages.associations": "Set custom language icon associations.", + "configuration.customClones": "Clone any existing icon and create a new one with custom colors and associations", + "configuration.customClones.base": "Icon used as a base to create the custom cloned icon", + "configuration.customClones.name": "Name of the custom icon", + "configuration.customClones.color": "Color used as a base to recolor the icon", + "configuration.customClones.lightColor": "Color used as a base to recolor the icon when the theme is light", + "configuration.customClones.fileNames": "File names to associate with the custom icon", + "configuration.customClones.fileExtensions": "File extensions to associate with the custom icon", + "configuration.customClones.folderNames": "Folder names to associate with the custom icon", + "configuration.customClones.activeForPacks": "Only generate this clone when the active icon pack is one of these.", + "configuration.activeIconPack": "Select an icon pack that enables specific icons.", + "configuration.activeIconPack.angular": "Icons for Angular.", + "configuration.activeIconPack.angular_ngrx": "Icons for Angular and ngrx.", + "configuration.activeIconPack.react": "Icons for React.", + "configuration.activeIconPack.react_redux": "Icons for React and Redux.", + "configuration.activeIconPack.qwik": "Icons for Qwik.", + "configuration.activeIconPack.vue": "Icons for Vue.", + "configuration.activeIconPack.vue_vuex": "Icons for Vue and Vuex.", + "configuration.activeIconPack.nest": "Icons for NestJS.", + "configuration.activeIconPack.none": "No icon pack enabled.", + "configuration.folders.theme": "Set the type for the folder icons.", + "configuration.folders.theme.specific": "Select specific folder icons.", + "configuration.folders.theme.classic": "Select classic folder icons.", + "configuration.folders.theme.none": "No folder icons.", + "configuration.folders.color": "Change the color of the folder icons.", + "configuration.files.color": "Change the color of the file icons.", + "configuration.hidesExplorerArrows": "Hide explorer arrows before folder.", + "configuration.opacity": "Change the opacity of the icons.", + "configuration.saturation": "Change the saturation of the icons.", + "configuration.enableLogging": "Enable logging to the output channel.", + "configuration.logLevel": "Set the log level for output messages." +} diff --git a/src/material-icons/package.nls.ko.json b/src/material-icons/package.nls.ko.json new file mode 100644 index 0000000..6a1f972 --- /dev/null +++ b/src/material-icons/package.nls.ko.json @@ -0,0 +1,35 @@ +{ + "command.activateIcons": "Material Icons: ์•„์ด์ฝ˜ ํ…Œ๋งˆ ํ™œ์„ฑํ™”", + "command.toggleIconPacks": "Material Icons: ์•„์ด์ฝ˜ ํŒฉ ๊ตฌ์„ฑ", + "command.changeFolderTheme": "Material Icons: ํด๋” ํ…Œ๋งˆ ๋ณ€๊ฒฝ", + "command.changeFolderColor": "Material Icons: ํด๋” ์ƒ‰์ƒ ๋ณ€๊ฒฝ", + "command.changeFileColor": "Material Icons: ํŒŒ์ผ ์ƒ‰์ƒ ๋ณ€๊ฒฝ", + "command.restoreDefaultConfig": "Material Icons: ๊ธฐ๋ณธ ์„ค์ • ๋ณต์›", + "command.toggleExplorerArrows": "Material Icons: ํŒŒ์ผ ํƒ์ƒ‰๊ธฐ์˜ ํด๋” ํ™”์‚ดํ‘œ ์„ค์ •", + "command.changeOpacity": "Material Icons: ํˆฌ๋ช…๋„ ๋ณ€๊ฒฝ", + "command.toggleGrayscale": "Material Icons: ๊ทธ๋ ˆ์ด์Šค์ผ€์ผ ์„ค์ •", + "command.changeSaturation": "Material Icons: ์ฑ„๋„ ๋ณ€๊ฒฝ", + "configuration.title": "Material Icons", + "configuration.files.associations": "์‚ฌ์šฉ์ž ์ •์˜ ํŒŒ์ผ ์•„์ด์ฝ˜ ์„ค์ •.", + "configuration.folders.associations": "์‚ฌ์šฉ์ž ์ •์˜ ํด๋” ์•„์ด์ฝ˜ ์„ค์ •.", + "configuration.languages.associations": "์‚ฌ์šฉ์ž ์ •์˜ ์–ธ์–ด ์•„์ด์ฝ˜ ์„ค์ •.", + "configuration.activeIconPack": "ํŠน์ • ์•„์ด์ฝ˜์„ ํ™œ์„ฑํ™”ํ•˜๋Š” ์•„์ด์ฝ˜ ํŒฉ ์„ ํƒ.", + "configuration.activeIconPack.angular": "Angular์šฉ ์•„์ด์ฝ˜.", + "configuration.activeIconPack.angular_ngrx": "Angular ๋ฐ ngrx์šฉ ์•„์ด์ฝ˜.", + "configuration.activeIconPack.react": "React์šฉ ์•„์ด์ฝ˜.", + "configuration.activeIconPack.react_redux": "React ๋ฐ Redux์šฉ ์•„์ด์ฝ˜.", + "configuration.activeIconPack.qwik": "Qwik์šฉ ์•„์ด์ฝ˜.", + "configuration.activeIconPack.vue": "Vue์šฉ ์•„์ด์ฝ˜.", + "configuration.activeIconPack.vue_vuex": "Vue ๋ฐ Vuex์šฉ ์•„์ด์ฝ˜.", + "configuration.activeIconPack.nest": "NestJS์šฉ ์•„์ด์ฝ˜.", + "configuration.activeIconPack.none": "์•„์ด์ฝ˜ ํŒฉ ๋น„ํ™œ์„ฑํ™”.", + "configuration.folders.theme": "ํด๋” ์•„์ด์ฝ˜์˜ ์œ ํ˜• ์„ค์ •.", + "configuration.folders.theme.specific": "ํŠน์ • ํด๋” ์•„์ด์ฝ˜ ์„ ํƒ.", + "configuration.folders.theme.classic": "ํด๋ž˜์‹ ํด๋” ์•„์ด์ฝ˜ ์„ ํƒ.", + "configuration.folders.theme.none": "ํด๋” ์•„์ด์ฝ˜ ์—†์Œ.", + "configuration.folders.color": "ํด๋” ์•„์ด์ฝ˜์˜ ์ƒ‰์ƒ ๋ณ€๊ฒฝ.", + "configuration.files.color": "ํŒŒ์ผ ์•„์ด์ฝ˜์˜ ์ƒ‰์ƒ ๋ณ€๊ฒฝ.", + "configuration.hidesExplorerArrows": "ํŒŒ์ผ ํƒ์ƒ‰๊ธฐ์˜ ํด๋” ํ™”์‚ดํ‘œ ์ˆจ๊ธฐ๊ธฐ.", + "configuration.opacity": "์•„์ด์ฝ˜์˜ ํˆฌ๋ช…๋„ ๋ณ€๊ฒฝ.", + "configuration.saturation": "์•„์ด์ฝ˜์˜ ์ฑ„๋„ ๋ณ€๊ฒฝ." +} diff --git a/src/material-icons/package.nls.nl.json b/src/material-icons/package.nls.nl.json new file mode 100644 index 0000000..0e8024e --- /dev/null +++ b/src/material-icons/package.nls.nl.json @@ -0,0 +1,33 @@ +{ + "command.activateIcons": "Material Icons: Activeer Icon Thema", + "command.toggleIconPacks": "Material Icons: Configureer Icon Packs", + "command.changeFolderTheme": "Material Icons: Verander Folder Thema", + "command.changeFolderColor": "Material Icons: Verander Folder Kleur", + "command.restoreDefaultConfig": "Material Icons: Zet Standaard Configuratie Terug", + "command.toggleExplorerArrows": "Material Icons: Configureer Folder Pijlen", + "command.changeOpacity": "Material Icons: Verander Doorzichtbaarheid", + "command.toggleGrayscale": "Material Icons: Zet Grijstinten Aan Of Uit", + "command.changeSaturation": "Material Icons: Verander Saturatie", + "configuration.title": "Material Icons", + "configuration.files.associations": "Stel eigen bestandsiconen in.", + "configuration.folders.associations": "Stel eigen foldericonen in.", + "configuration.languages.associations": "Stel eigen taaliconen in.", + "configuration.activeIconPack": "Selecteer een iconpakket dat bepaalde icons inschakelt.", + "configuration.activeIconPack.angular": "Icons voor Angular.", + "configuration.activeIconPack.angular_ngrx": "Icons voor Angular en ngrx.", + "configuration.activeIconPack.react": "Icons voor React.", + "configuration.activeIconPack.react_redux": "Icons for React en Redux.", + "configuration.activeIconPack.qwik": "Icons voor Qwik.", + "configuration.activeIconPack.vue": "Icons voor Vue.", + "configuration.activeIconPack.vue_vuex": "Icons voor Vue en Vuex.", + "configuration.activeIconPack.nest": "Icons voor NestJS.", + "configuration.activeIconPack.none": "Geen iconpakket ingeschakeld.", + "configuration.folders.theme": "Kies het type foldericons.", + "configuration.folders.theme.specific": "Selecteer bepaalde foldericons.", + "configuration.folders.theme.classic": "Selecteer klassieke foldericons.", + "configuration.folders.theme.none": "Geen foldericons.", + "configuration.folders.color": "Verander de kleur van de foldericons.", + "configuration.hidesExplorerArrows": "Verberg verkenner pijlen voor de folder.", + "configuration.opacity": "Verander de doorzichtbaarheid van de icons.", + "configuration.saturation": "Verander de saturatie van de icons." +} diff --git a/src/material-icons/package.nls.pl.json b/src/material-icons/package.nls.pl.json new file mode 100644 index 0000000..ca7e1bd --- /dev/null +++ b/src/material-icons/package.nls.pl.json @@ -0,0 +1,33 @@ +{ + "command.activateIcons": "Material Icons: Aktywuj motyw ikon", + "command.toggleIconPacks": "Material Icons: Skonfiguruj paczki ikon", + "command.changeFolderTheme": "Material Icons: Zmieล„ motyw folderรณw", + "command.changeFolderColor": "Material Icons: Zmieล„ kolor folderรณw", + "command.restoreDefaultConfig": "Material Icons: Przywrรณฤ‡ domyล›lne ustawienia", + "command.toggleExplorerArrows": "Material Icons: Ukryj strzaล‚ki przy folderach", + "command.changeOpacity": "Material Icons: Zmieล„ przezroczystoล›ฤ‡", + "command.toggleGrayscale": "Material Icons: Przeล‚ฤ…cz czarno-biaล‚e ikony", + "command.changeSaturation": "Material Icons: Zmieล„ nasycenie ikon", + "configuration.title": "Material Icons", + "configuration.files.associations": "Ustaw niestandardowe ikony plikรณw.", + "configuration.folders.associations": "Ustaw niestandardowe ikony folderรณw.", + "configuration.languages.associations": "Ustaw niestandardowe ikony jฤ™zykรณw.", + "configuration.activeIconPack": "Wybierz paczkฤ™ dla niektรณrych ikon.", + "configuration.activeIconPack.angular": "Ikony dla Angulara.", + "configuration.activeIconPack.angular_ngrx": "Ikony dla Angulara i ngrx.", + "configuration.activeIconPack.react": "Ikony dla Reacta.", + "configuration.activeIconPack.react_redux": "Ikony dla Reacta i Reduxa.", + "configuration.activeIconPack.qwik": "Ikony dla Qwik.", + "configuration.activeIconPack.vue": "Ikony dla Vue.", + "configuration.activeIconPack.vue_vuex": "Ikony dla Vue i Vuex.", + "configuration.activeIconPack.nest": "Ikony dla NestJS.", + "configuration.activeIconPack.none": "Brak wล‚ฤ…czonej paczki ikon.", + "configuration.folders.theme": "Wybierz typ ikon folderรณw.", + "configuration.folders.theme.specific": "Wybierz ikony folderรณw.", + "configuration.folders.theme.classic": "Wybierz klasyczne ikony folderรณw.", + "configuration.folders.theme.none": "Brak ikon folderรณw.", + "configuration.folders.color": "Zmieล„ kolor ikon folderรณw.", + "configuration.hidesExplorerArrows": "Ukryj strzaล‚ki przy folderach.", + "configuration.opacity": "Zmieล„ przezroczystoล›ฤ‡ ikon.", + "configuration.saturation": "Zmieล„ nasycenie ikon." +} diff --git a/src/material-icons/package.nls.pt-BR.json b/src/material-icons/package.nls.pt-BR.json new file mode 100644 index 0000000..0bb6b4e --- /dev/null +++ b/src/material-icons/package.nls.pt-BR.json @@ -0,0 +1,30 @@ +{ + "command.activateIcons": "Material Icons: Ativar tema de รญcones", + "command.toggleIconPacks": "Material Icons: Configurar pacote de รญcones", + "command.changeFolderTheme": "Material Icons: Alterar tema das pastas", + "command.changeFolderColor": "Material Icons: Alterar cor das pastas", + "command.restoreDefaultConfig": "Material Icons: Restaurar configuraรงรฃo padrรฃo", + "command.toggleExplorerArrows": "Material Icons: Ocultar as setas ao lado das pastas", + "command.changeOpacity": "Material Icons: Alterar a opacidade", + "configuration.title": "Material Icons", + "configuration.files.associations": "Definir รญcones para associaรงรตes de arquivos customizadas.", + "configuration.folders.associations": "Definir รญcones para associaรงรตes de pastas customizadas.", + "configuration.languages.associations": "Definir รญcones para associaรงรตes de idiomas customizadas.", + "configuration.activeIconPack": "Selecione um pacote de รญcones que habilitam รญcones especรญficos.", + "configuration.activeIconPack.angular": "รcones para Angular.", + "configuration.activeIconPack.angular_ngrx": "รcones para Angular e ngrx.", + "configuration.activeIconPack.react": "รcones para React.", + "configuration.activeIconPack.react_redux": "รcones para React e ngrx.", + "configuration.activeIconPack.qwik": "รcones para Qwik.", + "configuration.activeIconPack.vue": "รcones para Vue.", + "configuration.activeIconPack.vue_vuex": "รcones para Vue e Vuex.", + "configuration.activeIconPack.nest": "รcones para NestJS.", + "configuration.activeIconPack.none": "Nenhum pacote de รญcones ativado.", + "configuration.folders.theme": "Definir o tipo dos รญcones das pastas.", + "configuration.folders.theme.specific": "Selecione รญcones de pastas especรญficas.", + "configuration.folders.theme.classic": "Selecione รญcones de pastas clรกssicas.", + "configuration.folders.theme.none": "Nenhum รญcone de pasta.", + "configuration.folders.color": "Alterar a cor dos รญcones das pastas.", + "configuration.hidesExplorerArrows": "Ocultar as setas ao lado das pastas no explorador de arquivos.", + "configuration.opacity": "Alterar a opacidade dos รญcones." +} diff --git a/src/material-icons/package.nls.pt-PT.json b/src/material-icons/package.nls.pt-PT.json new file mode 100644 index 0000000..2b87811 --- /dev/null +++ b/src/material-icons/package.nls.pt-PT.json @@ -0,0 +1,30 @@ +{ + "command.activateIcons": "Material Icons: Habilitar tema de รญcones", + "command.toggleIconPacks": "Material Icons: Configurar pacote de รญcones", + "command.changeFolderTheme": "Material Icons: Alterar tema dos directรณrios", + "command.changeFolderColor": "Material Icons: Alterar cor dos directรณrios", + "command.restoreDefaultConfig": "Material Icons: Restaurar configuraรงรฃo padrรฃo", + "command.toggleExplorerArrows": "Material Icons: Esconder as setas ao lado dos directรณrios", + "command.changeOpacity": "Material Icons: Alterar a opacidade", + "configuration.title": "Material Icons", + "configuration.files.associations": "Definir รญcones para associaรงรตes de ficheiros peronslizados.", + "configuration.folders.associations": "Definir รญcones para associaรงรตes de directรณrios personalizados.", + "configuration.languages.associations": "Definir รญcones para associaรงรตes de idiomas personalizados.", + "configuration.activeIconPack": "Selecciona um pacote de รญcones que habilitam รญcones especรญficos.", + "configuration.activeIconPack.angular": "รcones para Angular.", + "configuration.activeIconPack.angular_ngrx": "รcones para Angular e ngrx.", + "configuration.activeIconPack.react": "รcones para React.", + "configuration.activeIconPack.react_redux": "รcones para React e ngrx.", + "configuration.activeIconPack.qwik": "รcones para Qwik.", + "configuration.activeIconPack.vue": "รcones para Vue.", + "configuration.activeIconPack.vue_vuex": "รcones para Vue e Vuex.", + "configuration.activeIconPack.nest": "รcones para NestJS.", + "configuration.activeIconPack.none": "Nenhum pacote de รญcones ativado.", + "configuration.folders.theme": "Definir o formato dos รญcones dos directรณrios.", + "configuration.folders.theme.specific": "Selecciona รญcones de pastas especรญficas.", + "configuration.folders.theme.classic": "Selecciona รญcones de pastas clรกssicas.", + "configuration.folders.theme.none": "Nenhum รญcone de pasta.", + "configuration.folders.color": "Alterar a cor dos รญcones dos directรณrios.", + "configuration.hidesExplorerArrows": "Esconder as setas ao lado dos directรณrios no explorador de ficheiros.", + "configuration.opacity": "Alterar a opacidade dos รญcones." +} diff --git a/src/material-icons/package.nls.ru.json b/src/material-icons/package.nls.ru.json new file mode 100644 index 0000000..d1e758c --- /dev/null +++ b/src/material-icons/package.nls.ru.json @@ -0,0 +1,30 @@ +{ + "command.activateIcons": "Material Icons: ะะบั‚ะธะฒะธั€ะพะฒะฐั‚ัŒ ะธะบะพะฝะบะธ ั‚ะตะผั‹", + "command.toggleIconPacks": "Material Icons: ะะฐัั‚ั€ะพะธั‚ัŒ ะฝะฐะฑะพั€ ะธะบะพะฝะพะบ", + "command.changeFolderTheme": "Material Icons: ะ˜ะทะผะตะฝะธั‚ัŒ ั‚ะตะผัƒ ะฟะฐะฟะบะธ", + "command.changeFolderColor": "Material Icons: ะ˜ะทะผะตะฝะธั‚ัŒ ั†ะฒะตั‚ ะฟะฐะฟะบะธ", + "command.restoreDefaultConfig": "Material Icons: ะ’ะพััั‚ะฐะฝะพะฒะธั‚ัŒ ะฝะฐัั‚ั€ะพะนะบะธ ะฟะพ ัƒะผะพะปั‡ะฐะฝะธัŽ", + "command.toggleExplorerArrows": "Material Icons: ะกะบั€ั‹ั‚ัŒ ัั‚ั€ะตะปะบะธ ะฟั€ะพะฒะพะดะฝะธะบะฐ ะฟะตั€ะตะด ะฟะฐะฟะบะพะน", + "command.changeOpacity": "Material Icons: ะ˜ะทะผะตะฝะตะฝะธะต ะฝะตะฟั€ะพะทั€ะฐั‡ะฝะพัั‚ะธ", + "configuration.title": "Material Icons", + "configuration.files.associations": "ะะฐัั‚ั€ะพะนะบะฐ ะฟะพะปัŒะทะพะฒะฐั‚ะตะปัŒัะบะธั… ะฐััะพั†ะธะฐั†ะธะน ะทะฝะฐั‡ะบะพะฒ ั„ะฐะนะปะพะฒ.", + "configuration.folders.associations": "ะะฐัั‚ั€ะพะนะบะฐ ะฟะพะปัŒะทะพะฒะฐั‚ะตะปัŒัะบะธั… ะฐััะพั†ะธะฐั†ะธะน ะทะฝะฐั‡ะบะพะฒ ะฟะฐะฟะพะบ.", + "configuration.languages.associations": "ะะฐัั‚ั€ะพะนะบะฐ ะฐััะพั†ะธะฐั†ะธะน ะทะฝะฐั‡ะบะพะฒ ะฟะพะปัŒะทะพะฒะฐั‚ะตะปัŒัะบะพะณะพ ัะทั‹ะบะฐ.", + "configuration.activeIconPack": "ะ’ั‹ะฑะตั€ะธั‚ะต ะฝะฐะฑะพั€ ะทะฝะฐั‡ะบะพะฒ, ะบะพั‚ะพั€ั‹ะต ะฒะบะปัŽั‡ะฐัŽั‚ ะพะฟั€ะตะดะตะปะตะฝะฝั‹ะต ะทะฝะฐั‡ะบะธ.", + "configuration.activeIconPack.angular": "ะ˜ะบะพะฝะบะธ ะดะปั Angular.", + "configuration.activeIconPack.angular_ngrx": "ะ˜ะบะพะฝะบะธ ะดะปั Angular ะธ ngrx.", + "configuration.activeIconPack.react": "ะ˜ะบะพะฝะบะธ ะดะปั React.", + "configuration.activeIconPack.react_redux": "ะ˜ะบะพะฝะบะธ ะดะปั React ะธ Redux.", + "configuration.activeIconPack.qwik": "ะ˜ะบะพะฝะบะธ ะดะปั Qwik.", + "configuration.activeIconPack.vue": "ะ˜ะบะพะฝะบะธ ะดะปั Vue.", + "configuration.activeIconPack.vue_vuex": "ะ˜ะบะพะฝะบะธ ะดะปั Vue ะธ Vuex.", + "configuration.activeIconPack.nest": "ะ˜ะบะพะฝะบะธ ะดะปั NestJS.", + "configuration.activeIconPack.none": "ะŸะฐะฟะบะฐ ั ะธะบะพะฝะบะฐะผะธ ะฝะต ะฒะบะปัŽั‡ะตะฝะฐ.", + "configuration.folders.theme": "ะฃัั‚ะฐะฝะพะฒะธั‚ัŒ ั‚ะธะฟ ะธะบะพะฝะพะบ ะดะปั ะฟะฐะฟะพะบ.", + "configuration.folders.theme.specific": "ะ’ั‹ะฑะตั€ะธั‚ะต ะบะพะฝะบั€ะตั‚ะฝั‹ะต ะทะฝะฐั‡ะบะธ ะฟะฐะฟะพะบ.", + "configuration.folders.theme.classic": "ะ’ั‹ะฑะตั€ะธั‚ะต ะบะปะฐััะธั‡ะตัะบะธะต ะทะฝะฐั‡ะบะธ ะฟะฐะฟะพะบ.", + "configuration.folders.theme.none": "ะะตั‚ ะทะฝะฐั‡ะบะพะฒ ะฟะฐะฟะพะบ.", + "configuration.folders.color": "ะ˜ะทะผะตะฝะตะฝะธะต ั†ะฒะตั‚ะฐ ะธะบะพะฝะพะบ ะฟะฐะฟะพะบ.", + "configuration.hidesExplorerArrows": "ะกะบั€ั‹ั‚ัŒ ัั‚ั€ะตะปะบะธ ะฟั€ะพะฒะพะดะฝะธะบะฐ ะฟะตั€ะตะด ะฟะฐะฟะบะพะน.", + "configuration.opacity": "ะ˜ะทะผะตะฝะธั‚ะต ะฟั€ะพะทั€ะฐั‡ะฝะพัั‚ัŒ ะทะฝะฐั‡ะบะพะฒ." +} diff --git a/src/material-icons/package.nls.zh-CN.json b/src/material-icons/package.nls.zh-CN.json new file mode 100644 index 0000000..e828717 --- /dev/null +++ b/src/material-icons/package.nls.zh-CN.json @@ -0,0 +1,30 @@ +{ + "command.activateIcons": "Material Icons: ๆฟ€ๆดปMaterial Iconsๆ–‡ไปถๅ›พๆ ‡ไธป้ข˜", + "command.toggleIconPacks": "Material Icons: ้€‰ๆ‹ฉไธ€ไธชๅ›พๆ ‡ๅŒ…", + "command.changeFolderTheme": "Material Icons: ๅˆ‡ๆขๆ–‡ไปถๅคนๅ›พๆ ‡", + "command.changeFolderColor": "Material Icons: ๆ›ดๆ”นๆ–‡ไปถๅคน้ขœ่‰ฒ", + "command.restoreDefaultConfig": "Material Icons: ๆขๅค้ป˜่ฎค่ฎพ็ฝฎ", + "command.toggleExplorerArrows": "Material Icons: ้š่—ๆ–‡ไปถๅคน็ฎญๅคด", + "command.changeOpacity": "Material Icons: ๆ”นๅ˜ไธ้€ๆ˜Žๅบฆ", + "configuration.title": "Material Icons", + "configuration.files.associations": "่ฎพ็ฝฎ่‡ชๅฎšไน‰ๆ–‡ไปถๅ›พๆ ‡ๅ…ณ่”ใ€‚", + "configuration.folders.associations": "่ฎพ็ฝฎ่‡ชๅฎšไน‰ๆ–‡ไปถๅคนๅ›พๆ ‡ๅ…ณ่”ใ€‚", + "configuration.languages.associations": "ๅฎšไน‰่‡ชๅฎšไน‰่ฏญ่จ€ๆ˜ ๅฐ„็š„ๅ›พๆ ‡ใ€‚", + "configuration.activeIconPack": "้€‰ๆ‹ฉไธ€ไธชๅ›พๆ ‡ๅŒ…ใ€‚", + "configuration.activeIconPack.angular": "Angular็š„ๅ›พๆ ‡ใ€‚", + "configuration.activeIconPack.angular_ngrx": "Angularๅ’Œngrx็š„ๅ›พๆ ‡ใ€‚", + "configuration.activeIconPack.react": "React็š„ๅ›พๆ ‡ใ€‚", + "configuration.activeIconPack.react_redux": "Reactๅ’ŒRedux็š„ๅ›พๆ ‡ใ€‚", + "configuration.activeIconPack.qwik": "Qwik็š„ๅ›พๆ ‡ใ€‚", + "configuration.activeIconPack.vue": "Vue็š„ๅ›พๆ ‡ใ€‚", + "configuration.activeIconPack.vue_vuex": "Vueๅ’ŒVuex็š„ๅ›พๆ ‡ใ€‚", + "configuration.activeIconPack.nest": "NestJS็š„ๅ›พๆ ‡ใ€‚", + "configuration.activeIconPack.none": "ๆฒกๆœ‰ๅฏ็”จๅ›พๆ ‡ๅŒ…ใ€‚", + "configuration.folders.theme": "่ฎพ็ฝฎๆ–‡ไปถๅคนๅ›พๆ ‡็š„็ฑปๅž‹ใ€‚", + "configuration.folders.theme.specific": "้€‰ๆ‹ฉ็‰นๅฎšๆ–‡ไปถๅคนๅ›พๆ ‡ใ€‚", + "configuration.folders.theme.classic": "้€‰ๆ‹ฉ็ปๅ…ธๆ–‡ไปถๅคนๅ›พๆ ‡ใ€‚", + "configuration.folders.theme.none": "ๆฒกๆœ‰ๆ–‡ไปถๅคนๅ›พๆ ‡ใ€‚", + "configuration.folders.color": "ๆ›ดๆ”นๆ–‡ไปถๅคนๅ›พๆ ‡็š„้ขœ่‰ฒใ€‚", + "configuration.hidesExplorerArrows": "้š่—่ฏฅๆ–‡ไปถๅคนๆ—่พน็š„็ฎญๅคดใ€‚", + "configuration.opacity": "ๆ›ดๆ”นๅ›พๆ ‡็š„้€ๆ˜Žๅบฆใ€‚" +} diff --git a/src/material-icons/package.nls.zh-TW.json b/src/material-icons/package.nls.zh-TW.json new file mode 100644 index 0000000..166ef27 --- /dev/null +++ b/src/material-icons/package.nls.zh-TW.json @@ -0,0 +1,30 @@ +{ + "command.activateIcons": "Material Icons: ๆฟ€ๆดปMaterial Iconsๆ–‡ไปถๅœ–ๆจ™ไธป้กŒ", + "command.toggleIconPacks": "Material Icons: ้ธๆ“‡ไธ€ๅ€‹ๅœ–ๆจ™ๅŒ…", + "command.changeFolderTheme": "Material Icons: ๅˆ‡ๆ›ๆ–‡ไปถๅคพๅœ–ๆจ™", + "command.changeFolderColor": "Material Icons: ๆ›ดๆ”นๆ–‡ไปถๅคพ้ก่‰ฒ", + "command.restoreDefaultConfig": "Material Icons: ๆขๅพฉ้ป˜่ช่จญ็ฝฎ", + "command.toggleExplorerArrows": "Material Icons: ้šฑ่—ๆ–‡ไปถๅคพ็ฎญ้ ญ", + "command.changeOpacity": "Material Icons: ๆ”น่ฎŠไธ้€ๆ˜Žๅบฆ", + "configuration.title": "Material Icons", + "configuration.files.associations": "่จญ็ฝฎ่‡ชๅฎš็พฉๆ–‡ไปถๅœ–ๆจ™้—œ่ฏใ€‚", + "configuration.folders.associations": "่จญ็ฝฎ่‡ชๅฎš็พฉๆ–‡ไปถๅคพๅœ–ๆจ™้—œ่ฏใ€‚", + "configuration.languages.associations": "ๅฎš็พฉ่‡ชๅฎš็พฉ่ชž่จ€ๆ˜ ๅฐ„็š„ๅœ–ๆจ™ใ€‚", + "configuration.activeIconPack": "้ธๆ“‡ไธ€ๅ€‹ๅœ–ๆจ™ๅŒ…ใ€‚", + "configuration.activeIconPack.angular": "Angular็š„ๅœ–ๆจ™ใ€‚", + "configuration.activeIconPack.angular_ngrx": "Angularๅ’Œngrx็š„ๅœ–ๆจ™ใ€‚", + "configuration.activeIconPack.react": "React็š„ๅœ–ๆจ™ใ€‚", + "configuration.activeIconPack.react_redux": "Reactๅ’ŒRedux็š„ๅœ–ๆจ™ใ€‚", + "configuration.activeIconPack.qwik": "Qwik็š„ๅœ–ๆจ™ใ€‚", + "configuration.activeIconPack.vue": "Vue็š„ๅœ–ๆจ™ใ€‚", + "configuration.activeIconPack.vue_vuex": "Vueๅ’ŒVuex็š„ๅœ–ๆจ™ใ€‚", + "configuration.activeIconPack.nest": "NestJS็š„ๅœ–ๆจ™ใ€‚", + "configuration.activeIconPack.none": "ๆฒ’ๆœ‰ๅ•Ÿ็”จๅœ–ๆจ™ๅŒ…ใ€‚", + "configuration.folders.theme": "่จญ็ฝฎๆ–‡ไปถๅคพๅœ–ๆจ™็š„้กžๅž‹ใ€‚", + "configuration.folders.theme.specific": "้ธๆ“‡็‰นๅฎšๆ–‡ไปถๅคพๅœ–ๆจ™ใ€‚", + "configuration.folders.theme.classic": "้ธๆ“‡็ถ“ๅ…ธๆ–‡ไปถๅคพๅœ–ๆจ™ใ€‚", + "configuration.folders.theme.none": "ๆฒ’ๆœ‰ๆ–‡ไปถๅคพๅœ–ๆจ™ใ€‚", + "configuration.folders.color": "ๆ›ดๆ”นๆ–‡ไปถๅคพๅœ–ๆจ™็š„้ก่‰ฒใ€‚", + "configuration.hidesExplorerArrows": "้šฑ่—่ฉฒๆ–‡ไปถๅคพๆ—้‚Š็š„็ฎญ้ ญใ€‚", + "configuration.opacity": "ๆ›ดๆ”นๅœ–ๆจ™็š„้€ๆ˜Žๅบฆใ€‚" +} diff --git a/src/material-icons/sheriff.config.ts b/src/material-icons/sheriff.config.ts new file mode 100644 index 0000000..c9baee7 --- /dev/null +++ b/src/material-icons/sheriff.config.ts @@ -0,0 +1,17 @@ +import { type SheriffConfig } from '@softarc/sheriff-core'; + +export const sheriffConfig: SheriffConfig = { + entryFile: 'src/module/index.ts', + version: 1, + autoTagging: true, + tagging: { + 'src/extension': 'extension', + 'src/core': 'core', + 'src/module': 'module', + }, + depRules: { + root: ['core'], + extension: ['core'], + module: ['core'], + }, +}; diff --git a/src/material-icons/src/architecture.md b/src/material-icons/src/architecture.md new file mode 100644 index 0000000..fa7f017 --- /dev/null +++ b/src/material-icons/src/architecture.md @@ -0,0 +1,27 @@ +# Architecture + +The project is structured in a way that the core logic is separated from the extension logic. The core logic is used for the generation of the icon manifest, for the definition of the icon associations and for the translation logic. The extension logic is used for the interaction with the VS Code extension API (e.g. getting the user configuration, providing commands etc.). + +```text +๐Ÿ“ฆ src + โ”ฃ ๐Ÿ“‚ core <-- Logic for generating icon manifest, icon associations, translation logic, models, tests + โ”ฃ ๐Ÿ“‚ extension <-- Code which uses VS Code extension API (get user config, providing commands etc) + โ”ฃ ๐Ÿ“‚ module <-- Control which part of the core is exposed to the npm module + โ”— ๐Ÿ“‚ scripts <-- Scripts which are executed during build time (in the package.json) +``` + +By using the [sheriff](https://github.com/softarc-consulting/sheriff) library dependencies between the modules can be verified. The command `bun run verify` checks if the imports between the modules are allowed. For instance it's not allowed, that any of the other modules imports something from the `extension` module because of it's dependency to `vscode`. But the `extension` module itself is allowed to import from `core`. + +This is realized by using the dependency rules in the sheriff.config.ts file: + +```ts +depRules: { + root: ['core'], + extension: ['core'], + module: ['core'], +} +``` + +## Npm module + +The npm module exposes some of the functions so that the icon manifest can be generated programmatically. More information can be found in the [README.md](./module/README.md) of the module. diff --git a/src/material-icons/src/core/generator/applyConfigToIcons.ts b/src/material-icons/src/core/generator/applyConfigToIcons.ts new file mode 100644 index 0000000..ca0f7b3 --- /dev/null +++ b/src/material-icons/src/core/generator/applyConfigToIcons.ts @@ -0,0 +1,36 @@ +import type { Config } from '../models/icons/config'; +import { generateFileIcons } from './fileGenerator'; +import { generateFolderIcons } from './folderGenerator'; +import { setIconOpacity } from './iconOpacity'; +import { setIconSaturation } from './iconSaturation'; + +/** + * Apply the configuration to the icons. But only if the configuration has changed. + * If the affectedConfig is not set then all icons will be updated. + * + * @param config Configuration that customizes the icons and the manifest. + * @param affectedConfig Set of configuration keys that have changed so that not all functions need to be executed. + */ +export const applyConfigToIcons = async (config: Config, oldConfig: Config) => { + if (config.files.color !== oldConfig.files.color) { + await generateFileIcons( + config.files.color, + config.opacity, + config.saturation + ); + } + if (config.folders.color !== oldConfig.folders.color) { + await generateFolderIcons( + config.folders.color, + config.opacity, + config.saturation + ); + } + + if (config.opacity !== oldConfig.opacity) { + await setIconOpacity(config.opacity, config.files.associations); + } + if (config.saturation !== oldConfig.saturation) { + await setIconSaturation(config.saturation, config.files.associations); + } +}; diff --git a/src/material-icons/src/core/generator/clones/clonesGenerator.ts b/src/material-icons/src/core/generator/clones/clonesGenerator.ts new file mode 100644 index 0000000..c9b99b8 --- /dev/null +++ b/src/material-icons/src/core/generator/clones/clonesGenerator.ts @@ -0,0 +1,195 @@ +import { getFileConfigHash } from '../../helpers/configHash'; +import { merge } from '../../helpers/object'; +import { writeToFile } from '../../helpers/writeFile'; +import { logger } from '../../logging/logger'; +import type { + Config, + CustomClone, + FileIconClone, + FolderIconClone, +} from '../../models/icons/config'; +import type { FileIcons } from '../../models/icons/files/fileTypes'; +import type { FolderTheme } from '../../models/icons/folders/folderTheme'; +import type { Manifest } from '../../models/manifest'; +import { cloneIconExtension, clonesFolder } from '../constants'; +import { Variant, getCloneData, isFolder } from './utils/cloneData'; +import { cloneIcon, createCloneConfig } from './utils/cloning'; + +/** + * Creates custom icons by cloning already existing icons and changing + * their colors, based on the user's provided configurations. + */ +export const customClonesIcons = async ( + manifest: Manifest, + config: Config +): Promise => { + let clonedIconsManifest = merge({}, manifest); + const hash = getFileConfigHash(config); + + // create folder clones as specified by the user in the options + for (const clone of config.folders?.customClones ?? []) { + if ( + clone.activeForPacks === undefined || + clone.activeForPacks.includes(config.activeIconPack) + ) { + const cloneCfg = await createIconClone(clone, manifest, hash); + clonedIconsManifest = merge(clonedIconsManifest, cloneCfg); + } + } + + // create file clones as specified by the user in the options + for (const clone of config.files?.customClones ?? []) { + if ( + clone.activeForPacks === undefined || + clone.activeForPacks.includes(config.activeIconPack) + ) { + const cloneCfg = await createIconClone(clone, manifest, hash); + clonedIconsManifest = merge(clonedIconsManifest, cloneCfg); + } + } + + return clonedIconsManifest; +}; + +/** + * Creates custom icons by cloning already existing icons and changing + * their colors, based on the configurations provided by the extension. + * (this is meant to be called at build time) + */ +export const generateConfiguredClones = async ( + iconsList: FolderTheme[] | FileIcons, + manifest: Manifest +) => { + let iconsToClone: CustomClone[] = []; + + if (Array.isArray(iconsList)) { + iconsToClone = iconsList.reduce((acc, theme) => { + const icons = theme.icons?.filter((icon) => icon.clone) ?? []; + return acc.concat( + icons.map((icon) => ({ + folderNames: icon.folderNames, + name: icon.name, + ...icon.clone!, + })) + ); + }, [] as FolderIconClone[]); + } else { + const icons = iconsList.icons?.filter((icon) => icon.clone) ?? []; + iconsToClone = icons.map( + (icon) => + ({ + fileExtensions: icon.fileExtensions, + fileNames: icon.fileNames, + name: icon.name, + ...icon.clone!, + }) as FileIconClone + ); + } + + for (const icon of iconsToClone) { + const clones = getCloneData(icon, manifest, '', '', cloneIconExtension); + if (!clones) { + return; + } + + for (const clone of clones) { + try { + // generates the new icon content (svg) + const content = await cloneIcon(clone.base.path, clone.color); + + // write the new .svg file to the disk + await writeToFile(clone.path, content); + } catch (error) { + logger.error(error); + return; + } + } + } +}; + +/** Checks if there are any custom clones to be created */ +export const hasCustomClones = (config: Config): boolean => { + return ( + (config.folders?.customClones?.length ?? 0) > 0 || + (config.files?.customClones?.length ?? 0) > 0 + ); +}; + +/** + * Generates a clone of an icon. + * @param cloneOpts options and configurations on how to clone the icon + * @param manifest global icon configuration (used to get the base icon) + * @param hash current hash being applied to the icons + * @returns a partial icon configuration for the new icon + */ +const createIconClone = async ( + cloneOpts: FolderIconClone | FileIconClone, + manifest: Manifest, + hash: string +): Promise => { + // get clones to be created + const clones = getCloneData(cloneOpts, manifest, clonesFolder, hash); + if (!clones) { + return manifest; + } + + const clonesConfig = createCloneConfig(); + + for (const clone of clones) { + try { + // generates the new icon content (svg) + const content = await cloneIcon(clone.base.path, clone.color, hash); + + try { + // write the new .svg file to the disk + await writeToFile(clone.path, content); + } catch (error) { + logger.error(error); + return manifest; + } + + // sets the icon path for the cloned icon in the configuration + clonesConfig.iconDefinitions![clone.name] = { + iconPath: clone.inConfigPath, + }; + + if (isFolder(cloneOpts)) { + // sets the associated folder names for the cloned icon + cloneOpts.folderNames?.forEach((folderName) => { + const folderNamesCfg = + clone.variant === Variant.Base + ? clonesConfig.folderNames! + : clone.variant === Variant.Open + ? clonesConfig.folderNamesExpanded! + : clone.variant === Variant.Light + ? clonesConfig.light!.folderNames! + : clonesConfig.light!.folderNamesExpanded!; + folderNamesCfg[folderName] = clone.name; + }); + } else { + // set associations for the cloned file icon in the configuration + cloneOpts.fileNames?.forEach((fileName) => { + const fileNamesCfg = + clone.variant === Variant.Base + ? clonesConfig.fileNames! + : clonesConfig.light!.fileNames!; + + fileNamesCfg[fileName] = clone.name; + }); + + cloneOpts.fileExtensions?.forEach((fileExtension) => { + const fileExtensionsCfg = + clone.variant === Variant.Base + ? clonesConfig.fileExtensions! + : clonesConfig.light!.fileExtensions!; + + fileExtensionsCfg[fileExtension] = clone.name; + }); + } + } catch (error) { + logger.error(error); + } + } + + return clonesConfig; +}; diff --git a/src/material-icons/src/core/generator/clones/utils/cloneData.ts b/src/material-icons/src/core/generator/clones/utils/cloneData.ts new file mode 100644 index 0000000..0a3eeb9 --- /dev/null +++ b/src/material-icons/src/core/generator/clones/utils/cloneData.ts @@ -0,0 +1,261 @@ +import { existsSync } from 'node:fs'; +import { mkdir, rm } from 'node:fs/promises'; +import { basename, dirname, join } from 'node:path'; +import { resolvePath } from '../../../helpers/resolvePath'; +import type { + CustomClone, + FileIconClone, + FolderIconClone, +} from '../../../models/icons/config'; +import type { Manifest } from '../../../models/manifest'; +import { + iconFolderPath, + lightColorFileEnding, + openedFolder, +} from '../../constants'; + +export enum Variant { + Base, + Open, + Light, + LightOpen, +} + +export enum Type { + Folder, + File, +} + +export type IconData = { + type: Type; + path: string; + variant: Variant; +}; + +export type CloneData = IconData & { + name: string; + color: string; + inConfigPath: string; + base: IconData; +}; + +/** checks if a `CustomClone` configuration is a `FolderIconClone` */ +export const isFolder = (clone: CustomClone): clone is FolderIconClone => { + return clone && (clone as FolderIconClone).folderNames !== undefined; +}; + +/** checks if the icon is a dark variant */ +const isDark = (daa: IconData) => + daa.variant === Variant.Base || daa.variant === Variant.Open; + +/** + * get cloning information from configuration + * @param cloneOpts the clone configuration + * @param manifest the current configuration of the extension + * @param hash the current hash being applied to the icons + */ +export const getCloneData = ( + cloneOpts: CustomClone, + manifest: Manifest, + subFolder: string, + hash: string, + ext?: string +): CloneData[] | undefined => { + const baseIcon = isFolder(cloneOpts) + ? getFolderIconBaseData(cloneOpts, manifest) + : getFileIconBaseData(cloneOpts, manifest); + + if (baseIcon) { + return baseIcon.map((base) => { + const cloneIcon = isFolder(cloneOpts) + ? getFolderIconCloneData(base, cloneOpts, hash, subFolder, ext) + : getFileIconCloneData(base, cloneOpts, hash, subFolder, ext); + + return { + name: getIconName(cloneOpts.name, base), + color: isDark(base) + ? cloneOpts.color + : cloneOpts.lightColor ?? cloneOpts.color, + inConfigPath: `${iconFolderPath}${subFolder}${basename( + cloneIcon.path + )}`, + base, + ...cloneIcon, + }; + }); + } +}; + +/** returns path, type and variant for the base file icons to be cloned */ +const getFileIconBaseData = ( + cloneOpts: FileIconClone, + manifest: Manifest +): IconData[] | undefined => { + const icons = []; + const base = manifest.iconDefinitions?.[`${cloneOpts.base}`]?.iconPath; + let light = + manifest.iconDefinitions?.[`${cloneOpts.base}${lightColorFileEnding}`] + ?.iconPath; + + if (cloneOpts.lightColor && !light) { + // the original icon does not have a light version, so we re-use the base + light = base; + } + + if (base) { + icons.push({ + type: Type.File, + variant: Variant.Base, + path: resolvePath(base), + }); + light && + icons.push({ + type: Type.File, + variant: Variant.Light, + path: resolvePath(light), + }); + return icons; + } +}; + +/** creates and returns the path of the cloned file icon */ +const getFileIconCloneData = ( + base: IconData, + cloneOpts: FileIconClone, + hash: string, + subFolder: string, + ext = '.svg' +): IconData => { + const name = getIconName(cloneOpts.name, base); + const clonePath = join(dirname(base.path), subFolder, `${name}${hash}${ext}`); + + return { + variant: base.variant, + type: base.type, + path: clonePath, + }; +}; + +/** returns path, type and variant for the base folder icons to be cloned */ +const getFolderIconBaseData = ( + clone: FolderIconClone, + manifest: Manifest +): IconData[] | undefined => { + const icons = []; + const folderBase = + clone.base === 'folder' + ? 'folder' + : clone.base.startsWith('folder-') + ? clone.base + : `folder-${clone.base}`; + + const base = manifest.iconDefinitions?.[`${folderBase}`]?.iconPath; + const open = + manifest.iconDefinitions?.[`${folderBase}${openedFolder}`]?.iconPath; + let light = + manifest.iconDefinitions?.[`${folderBase}${lightColorFileEnding}`] + ?.iconPath; + let lightOpen = + manifest.iconDefinitions?.[ + `${folderBase}${openedFolder}${lightColorFileEnding}` + ]?.iconPath; + + if (base && open) { + icons.push({ + type: Type.Folder, + variant: Variant.Base, + path: resolvePath(base), + }); + + icons.push({ + type: Type.Folder, + variant: Variant.Open, + path: resolvePath(open), + }); + + if (clone.lightColor && (!light || !lightOpen)) { + // the original icon does not have a light version, so we re-use the base icons + light = base; + lightOpen = open; + } + + if (light) { + icons.push({ + type: Type.Folder, + variant: Variant.Light, + path: resolvePath(light), + }); + } + + if (lightOpen) { + icons.push({ + type: Type.Folder, + variant: Variant.LightOpen, + path: resolvePath(lightOpen), + }); + } + + return icons; + } +}; + +/** creates and returns the path of the cloned folder icon */ +const getFolderIconCloneData = ( + base: IconData, + cloneOpts: FolderIconClone, + hash: string, + subFolder: string, + ext = '.svg' +): IconData => { + const name = getIconName(cloneOpts.name, base); + const path = join(dirname(base.path), subFolder, `${name}${hash}${ext}`); + return { type: base.type, variant: base.variant, path }; +}; + +/** + * removes the clones folder if it exists + * and creates a new one if `keep` is true + */ +export const clearCloneFolder = async (keep = true): Promise => { + const clonesFolderPath = resolvePath('./../icons/clones'); + + if (existsSync(clonesFolderPath)) { + await rm(clonesFolderPath, { recursive: true }); + } + + if (keep) { + await mkdir(clonesFolderPath); + } +}; + +const getIconName = (baseName: string, data: IconData): string => { + let prefix = ''; + let suffix = ''; + + if (data.type === Type.Folder) { + prefix = + baseName === 'folder' + ? '' + : baseName.startsWith('folder-') + ? '' + : 'folder-'; + + switch (data.variant) { + case Variant.Base: + break; + case Variant.Open: + suffix = openedFolder; + break; + case Variant.Light: + suffix = lightColorFileEnding; + break; + case Variant.LightOpen: + suffix = `${openedFolder}${lightColorFileEnding}`; + break; + } + } else { + suffix = data.variant === Variant.Light ? lightColorFileEnding : ''; + } + + return `${prefix}${baseName}${suffix}`; +}; diff --git a/src/material-icons/src/core/generator/clones/utils/cloning.ts b/src/material-icons/src/core/generator/clones/utils/cloning.ts new file mode 100644 index 0000000..367c7d0 --- /dev/null +++ b/src/material-icons/src/core/generator/clones/utils/cloning.ts @@ -0,0 +1,126 @@ +import { readFile } from 'node:fs/promises'; +import { type INode, parse, stringify } from 'svgson'; +import { createEmptyManifest } from '../../../models/manifest'; +import { getColorList, replacementMap } from './color/colors'; + +/** + * Recursively walks through an SVG node tree and its children, + * calling a callback on each node. + */ +export const traverse = ( + node: INode, + callback: (node: INode) => void, + filter = true +) => { + if (node.attributes['data-mit-no-recolor'] !== 'true' || !filter) { + callback(node); + + if (node.children) { + node.children.forEach((child) => traverse(child, callback, filter)); + } + } +}; + +/** Reads an icon from the file system and returns its content. */ +export const readIcon = async (path: string, hash: string): Promise => { + try { + return await readFile(path, 'utf8'); + } catch { + const unhashedPath = path.replace(hash, ''); + return await readFile(unhashedPath, 'utf8'); + } +}; + +/** Clones an icon and changes its colors according to the clone options. */ +export const cloneIcon = async ( + path: string, + color: string, + hash = '' +): Promise => { + const baseContent = await readIcon(path, hash); + const svg = await parse(baseContent); + const replacements = replacementMap(color, getColorList(svg)); + replaceColors(svg, replacements); + return stringify(svg); +}; + +/** Gets the style attribute of an SVG node if it exists. */ +export const getStyle = (node: INode) => { + if (node && node.attributes && node.attributes.style) { + return parseStyle(node.attributes.style); + } + return {}; +}; + +/** Parses the style attribute of an SVG node. */ +const parseStyle = (css: string) => { + const rules = css.split(';'); + const result: Record = {}; + rules.forEach((rule) => { + const [key, value] = rule.split(':'); + result[key.trim()] = value.trim(); + }); + return result; +}; + +/** Converts object to css style string. */ +export const stringifyStyle = (css: Record) => { + return Object.entries(css) + .map(([key, value]) => `${key}:${value}`) + .join(';'); +}; + +/** Replaces colors in an SVG node using a replacement map. */ +export const replaceColors = ( + node: INode, + replacements: Map +) => { + traverse(node, (node) => { + // replace colors in style attribute + const style = getStyle(node); + if (style) { + if (style.fill && replacements.has(style.fill)) { + style.fill = replacements.get(style.fill)!; + node.attributes.style = stringifyStyle(style); + } + + if (style.stroke && replacements.has(style.stroke)) { + style.stroke = replacements.get(style.stroke)!; + node.attributes.style = stringifyStyle(style); + } + } + + // replace colors in attributes + if (node.attributes) { + if (node.attributes.fill && replacements.has(node.attributes.fill)) { + node.attributes.fill = replacements.get(node.attributes.fill)!; + } + + if (node.attributes.stroke && replacements.has(node.attributes.stroke)) { + node.attributes.stroke = replacements.get(node.attributes.stroke)!; + } + + if ( + node.attributes['stop-color'] && + replacements.has(node.attributes['stop-color']) + ) { + node.attributes['stop-color'] = replacements.get( + node.attributes['stop-color'] + )!; + } + } + }); +}; + +/** Creates a clone configuration with empty light object. */ +export const createCloneConfig = () => { + const manifest = createEmptyManifest(); + manifest.light = { + fileExtensions: {}, + fileNames: {}, + folderNames: {}, + folderNamesExpanded: {}, + }; + + return manifest; +}; diff --git a/src/material-icons/src/core/generator/clones/utils/color/colors.ts b/src/material-icons/src/core/generator/clones/utils/color/colors.ts new file mode 100644 index 0000000..edc3f2d --- /dev/null +++ b/src/material-icons/src/core/generator/clones/utils/color/colors.ts @@ -0,0 +1,129 @@ +import chroma, { type Color, valid } from 'chroma-js'; +import { type INode } from 'svgson'; +import { getStyle, traverse } from '../cloning'; +import { + closerMaterialColorTo, + getMaterialColorByKey, +} from './materialPalette'; + +/** Get all the colors used in the SVG node as a `Set` list. **/ +export const getColorList = (node: INode) => { + const colors = new Set(); + + traverse(node, (node) => { + // check colors in style attribute + const style = getStyle(node); + if (style) { + if (style.fill && isValidColor(style.fill)) { + colors.add(style.fill); + } + + if (style.stroke && isValidColor(style.stroke)) { + colors.add(style.stroke); + } + } + + // check colors in svg attributes + if (node.attributes) { + if (node.attributes.fill && isValidColor(node.attributes.fill)) { + colors.add(node.attributes.fill); + } + + if (node.attributes.stroke && isValidColor(node.attributes.stroke)) { + colors.add(node.attributes.stroke); + } + + if ( + node.attributes['stop-color'] && + isValidColor(node.attributes['stop-color']) + ) { + colors.add(node.attributes['stop-color']); + } + } + }); + + return colors; +}; + +/** given a set of colors, orders them from dark to light. **/ +export const orderDarkToLight = (colors: Set) => { + const colorArray = Array.from(colors); + return colorArray.sort((a, b) => { + // sort by lightness + const lA = chroma(a).get('hsl.l'); + const lB = chroma(b).get('hsl.l'); + + if (lA < lB) { + return -1; + } else if (lA > lB) { + return 1; + } else { + return 0; + } + }); +}; + +/** Lightens a color by a given percentage. **/ +const lighten = (color: Color, hslPercent: number) => + color.set('hsl.l', color.get('hsl.l') + hslPercent); + +/** checks if a string is a valid color. **/ +export const isValidColor = (color: string | undefined): boolean => { + if (color === undefined) { + return false; + } + return valid(color); +}; + +/** + * Creates a map of color replacements based on the base color and + * the list of colors. + * + * Orders the list of colors from dark to light and replaces the darkest + * color with the base color. Then uses the hue of the base color and + * the material palette to find the most appropriate color for the rest + * in the list. + */ +export const replacementMap = (baseColor: string, colors: Set) => { + if (!isValidColor(baseColor)) { + // try to get it from the material palette by key + const matCol = getMaterialColorByKey(baseColor); + if (matCol === undefined) { + throw new Error(`Invalid color: ${baseColor}`); + } + + baseColor = matCol; + } + + const orderedColors = orderDarkToLight(colors); + const baseColorChroma = chroma(baseColor); + const baseHue = baseColorChroma.get('hsl.h'); + const replacement = new Map(); + replacement.set(orderedColors[0], baseColor); + + // keep track of the latest color to determine if the next color + // should be lightened or not. + let latestColor = baseColorChroma; + + for (let i = 1; i < orderedColors.length; i++) { + const color = chroma(orderedColors[i]); + let newColor = color.set('hsl.h', baseHue); + + // the idea is to keep the paths with the same relative darkness + // as the original icon, but with different hues. So if the + // new color results in a darker color (as we are looping from + // dark to light), we set the lightness to the latest color and + // then lighten it a bit so that it's brighter than the latest one. + if (newColor.luminance() < latestColor.luminance()) { + newColor = newColor.set('hsl.l', latestColor.get('hsl.l')); + newColor = lighten(newColor, 0.1); + } + + const matCol = closerMaterialColorTo(newColor.hex()); + latestColor = chroma(matCol); + + replacement.set(orderedColors[i], matCol); + } + + return replacement; +}; diff --git a/src/material-icons/src/core/generator/clones/utils/color/materialPalette.ts b/src/material-icons/src/core/generator/clones/utils/color/materialPalette.ts new file mode 100644 index 0000000..1d20172 --- /dev/null +++ b/src/material-icons/src/core/generator/clones/utils/color/materialPalette.ts @@ -0,0 +1,297 @@ +import chroma, { deltaE } from 'chroma-js'; +import { isValidColor } from './colors'; + +export const materialPalette = { + white: '#FFFFFF', + black: '#000000', + 'red-50': '#FFEBEE', + 'red-100': '#FFCDD2', + 'red-200': '#EF9A9A', + 'red-300': '#E57373', + 'red-400': '#EF5350', + 'red-500': '#F44336', + 'red-600': '#E53935', + 'red-700': '#D32F2F', + 'red-800': '#C62828', + 'red-900': '#B71C1C', + 'red-A100': '#FF8A80', + 'red-A200': '#FF5252', + 'red-A400': '#FF1744', + 'red-A700': '#D50000', + 'pink-50': '#FCE4EC', + 'pink-100': '#F8BBD0', + 'pink-200': '#F48FB1', + 'pink-300': '#F06292', + 'pink-400': '#EC407A', + 'pink-500': '#E91E63', + 'pink-600': '#D81B60', + 'pink-700': '#C2185B', + 'pink-800': '#AD1457', + 'pink-900': '#880E4F', + 'pink-A100': '#FF80AB', + 'pink-A200': '#FF4081', + 'pink-A400': '#F50057', + 'pink-A700': '#C51162', + 'purple-50': '#F3E5F5', + 'purple-100': '#E1BEE7', + 'purple-200': '#CE93D8', + 'purple-300': '#BA68C8', + 'purple-400': '#AB47BC', + 'purple-500': '#9C27B0', + 'purple-600': '#8E24AA', + 'purple-700': '#7B1FA2', + 'purple-800': '#6A1B9A', + 'purple-900': '#4A148C', + 'purple-A100': '#EA80FC', + 'purple-A200': '#E040FB', + 'purple-A400': '#D500F9', + 'purple-A700': '#AA00FF', + 'deep-purple-50': '#EDE7F6', + 'deep-purple-100': '#D1C4E9', + 'deep-purple-200': '#B39DDB', + 'deep-purple-300': '#9575CD', + 'deep-purple-400': '#7E57C2', + 'deep-purple-500': '#673AB7', + 'deep-purple-600': '#5E35B1', + 'deep-purple-700': '#512DA8', + 'deep-purple-800': '#4527A0', + 'deep-purple-900': '#311B92', + 'deep-purple-A100': '#B388FF', + 'deep-purple-A200': '#7C4DFF', + 'deep-purple-A400': '#651FFF', + 'deep-purple-A700': '#6200EA', + 'indigo-50': '#E8EAF6', + 'indigo-100': '#C5CAE9', + 'indigo-200': '#9FA8DA', + 'indigo-300': '#7986CB', + 'indigo-400': '#5C6BC0', + 'indigo-500': '#3F51B5', + 'indigo-600': '#3949AB', + 'indigo-700': '#303F9F', + 'indigo-800': '#283593', + 'indigo-900': '#1A237E', + 'indigo-A100': '#8C9EFF', + 'indigo-A200': '#536DFE', + 'indigo-A400': '#3D5AFE', + 'indigo-A700': '#304FFE', + 'blue-50': '#E3F2FD', + 'blue-100': '#BBDEFB', + 'blue-200': '#90CAF9', + 'blue-300': '#64B5F6', + 'blue-400': '#42A5F5', + 'blue-500': '#2196F3', + 'blue-600': '#1E88E5', + 'blue-700': '#1976D2', + 'blue-800': '#1565C0', + 'blue-900': '#0D47A1', + 'blue-A100': '#82B1FF', + 'blue-A200': '#448AFF', + 'blue-A400': '#2979FF', + 'blue-A700': '#2962FF', + 'light-blue-50': '#E1F5FE', + 'light-blue-100': '#B3E5FC', + 'light-blue-200': '#81D4FA', + 'light-blue-300': '#4FC3F7', + 'light-blue-400': '#29B6F6', + 'light-blue-500': '#03A9F4', + 'light-blue-600': '#039BE5', + 'light-blue-700': '#0288D1', + 'light-blue-800': '#0277BD', + 'light-blue-900': '#01579B', + 'light-blue-A100': '#80D8FF', + 'light-blue-A200': '#40C4FF', + 'light-blue-A400': '#00B0FF', + 'light-blue-A700': '#0091EA', + 'cyan-50': '#E0F7FA', + 'cyan-100': '#B2EBF2', + 'cyan-200': '#80DEEA', + 'cyan-300': '#4DD0E1', + 'cyan-400': '#26C6DA', + 'cyan-500': '#00BCD4', + 'cyan-600': '#00ACC1', + 'cyan-700': '#0097A7', + 'cyan-800': '#00838F', + 'cyan-900': '#006064', + 'cyan-A100': '#84FFFF', + 'cyan-A200': '#18FFFF', + 'cyan-A400': '#00E5FF', + 'cyan-A700': '#00B8D4', + 'teal-50': '#E0F2F1', + 'teal-100': '#B2DFDB', + 'teal-200': '#80CBC4', + 'teal-300': '#4DB6AC', + 'teal-400': '#26A69A', + 'teal-500': '#009688', + 'teal-600': '#00897B', + 'teal-700': '#00796B', + 'teal-800': '#00695C', + 'teal-900': '#004D40', + 'teal-A100': '#A7FFEB', + 'teal-A200': '#64FFDA', + 'teal-A400': '#1DE9B6', + 'teal-A700': '#00BFA5', + 'green-50': '#E8F5E9', + 'green-100': '#C8E6C9', + 'green-200': '#A5D6A7', + 'green-300': '#81C784', + 'green-400': '#66BB6A', + 'green-500': '#4CAF50', + 'green-600': '#43A047', + 'green-700': '#388E3C', + 'green-800': '#2E7D32', + 'green-900': '#1B5E20', + 'green-A100': '#B9F6CA', + 'green-A200': '#69F0AE', + 'green-A400': '#00E676', + 'green-A700': '#00C853', + 'light-green-50': '#F1F8E9', + 'light-green-100': '#DCEDC8', + 'light-green-200': '#C5E1A5', + 'light-green-300': '#AED581', + 'light-green-400': '#9CCC65', + 'light-green-500': '#8BC34A', + 'light-green-600': '#7CB342', + 'light-green-700': '#689F38', + 'light-green-800': '#558B2F', + 'light-green-900': '#33691E', + 'light-green-A100': '#CCFF90', + 'light-green-A200': '#B2FF59', + 'light-green-A400': '#76FF03', + 'light-green-A700': '#64DD17', + 'lime-50': '#F9FBE7', + 'lime-100': '#F0F4C3', + 'lime-200': '#E6EE9C', + 'lime-300': '#DCE775', + 'lime-400': '#D4E157', + 'lime-500': '#CDDC39', + 'lime-600': '#C0CA33', + 'lime-700': '#AFB42B', + 'lime-800': '#9E9D24', + 'lime-900': '#827717', + 'lime-A100': '#F4FF81', + 'lime-A200': '#EEFF41', + 'lime-A400': '#C6FF00', + 'lime-A700': '#AEEA00', + 'yellow-50': '#FFFDE7', + 'yellow-100': '#FFF9C4', + 'yellow-200': '#FFF59D', + 'yellow-300': '#FFF176', + 'yellow-400': '#FFEE58', + 'yellow-500': '#FFEB3B', + 'yellow-600': '#FDD835', + 'yellow-700': '#FBC02D', + 'yellow-800': '#F9A825', + 'yellow-900': '#F57F17', + 'yellow-A100': '#FFFF8D', + 'yellow-A200': '#FFFF00', + 'yellow-A400': '#FFEA00', + 'yellow-A700': '#FFD600', + 'amber-50': '#FFF8E1', + 'amber-100': '#FFECB3', + 'amber-200': '#FFE082', + 'amber-300': '#FFD54F', + 'amber-400': '#FFCA28', + 'amber-500': '#FFC107', + 'amber-600': '#FFB300', + 'amber-700': '#FFA000', + 'amber-800': '#FF8F00', + 'amber-900': '#FF6F00', + 'amber-A100': '#FFE57F', + 'amber-A200': '#FFD740', + 'amber-A400': '#FFC400', + 'amber-A700': '#FFAB00', + 'orange-50': '#FFF3E0', + 'orange-100': '#FFE0B2', + 'orange-200': '#FFCC80', + 'orange-300': '#FFB74D', + 'orange-400': '#FFA726', + 'orange-500': '#FF9800', + 'orange-600': '#FB8C00', + 'orange-700': '#F57C00', + 'orange-800': '#EF6C00', + 'orange-900': '#E65100', + 'orange-A100': '#FFD180', + 'orange-A200': '#FFAB40', + 'orange-A400': '#FF9100', + 'orange-A700': '#FF6D00', + 'deep-orange-50': '#FBE9E7', + 'deep-orange-100': '#FFCCBC', + 'deep-orange-200': '#FFAB91', + 'deep-orange-300': '#FF8A65', + 'deep-orange-400': '#FF7043', + 'deep-orange-500': '#FF5722', + 'deep-orange-600': '#F4511E', + 'deep-orange-700': '#E64A19', + 'deep-orange-800': '#D84315', + 'deep-orange-900': '#BF360C', + 'deep-orange-A100': '#FF9E80', + 'deep-orange-A200': '#FF6E40', + 'deep-orange-A400': '#FF3D00', + 'deep-orange-A700': '#DD2C00', + 'brown-50': '#EFEBE9', + 'brown-100': '#D7CCC8', + 'brown-200': '#BCAAA4', + 'brown-300': '#A1887F', + 'brown-400': '#8D6E63', + 'brown-500': '#795548', + 'brown-600': '#6D4C41', + 'brown-700': '#5D4037', + 'brown-800': '#4E342E', + 'brown-900': '#3E2723', + 'gray-50': '#FAFAFA', + 'gray-100': '#F5F5F5', + 'gray-200': '#EEEEEE', + 'gray-300': '#E0E0E0', + 'gray-400': '#BDBDBD', + 'gray-500': '#9E9E9E', + 'gray-600': '#757575', + 'gray-700': '#616161', + 'gray-800': '#424242', + 'gray-900': '#212121', + 'blue-gray-50': '#ECEFF1', + 'blue-gray-100': '#CFD8DC', + 'blue-gray-200': '#B0BEC5', + 'blue-gray-300': '#90A4AE', + 'blue-gray-400': '#78909C', + 'blue-gray-500': '#607D8B', + 'blue-gray-600': '#546E7A', + 'blue-gray-700': '#455A64', + 'blue-gray-800': '#37474F', + 'blue-gray-900': '#263238', +}; + +/** + * Gets the material color from the material palette + * @param key the key of the material color e.g. 'blue-grey-500' + */ +export const getMaterialColorByKey = (key: string): string | undefined => { + if (key in materialPalette) { + return materialPalette[key as keyof typeof materialPalette]; + } + + return undefined; +}; + +/** + * Given a color, returns the closest material color from the + * material palette. + */ +export const closerMaterialColorTo = (color: string): string => { + const palette = Object.values(materialPalette); + + if (!isValidColor(color)) { + throw new Error(`The given color "${color}" is not valid!`); + } + + color = chroma(color).hex(); + + const distances = palette + .map((paletteColor) => ({ + // calculate the distance between the color and the palette color + distance: deltaE(paletteColor, color), + color: paletteColor, + })) + .sort((a, b) => a.distance - b.distance); + + return distances[0].color; +}; diff --git a/src/material-icons/src/core/generator/config/defaultConfig.ts b/src/material-icons/src/core/generator/config/defaultConfig.ts new file mode 100644 index 0000000..e99d1a4 --- /dev/null +++ b/src/material-icons/src/core/generator/config/defaultConfig.ts @@ -0,0 +1,41 @@ +import { merge } from '../../helpers/object'; +import type { Config } from '../../models/icons/config'; +import type { RecursivePartial } from '../../types/recursivePartial'; + +/** + * The options control the generator and decide which icons are disabled or not. + */ +export const getDefaultConfig = (): Required => ({ + folders: { + theme: 'specific', + color: '#90a4ae', + associations: {}, + customClones: [], + }, + activeIconPack: 'angular', + hidesExplorerArrows: false, + opacity: 1, + saturation: 1, + files: { + color: '#90a4ae', + associations: {}, + customClones: [], + }, + languages: { associations: {} }, + enableLogging: false, + logLevel: 'info', +}); + +/** + * Fill in missing configuration values with the default values. + * + * @param config Configuration object + * @returns New configuration object with default values + */ +export const padWithDefaultConfig = ( + config?: RecursivePartial +): Config => { + const withDefaultConfig = merge(getDefaultConfig(), config ?? {}) as Config; + + return withDefaultConfig; +}; diff --git a/src/material-icons/src/core/generator/constants.ts b/src/material-icons/src/core/generator/constants.ts new file mode 100644 index 0000000..74a6fe7 --- /dev/null +++ b/src/material-icons/src/core/generator/constants.ts @@ -0,0 +1,54 @@ +/** + * Name of the VS Code extension. + */ +export const extensionName = 'material-icon-theme'; + +/** + * Name of the extension publisher. + */ +export const extensionPublisher = 'PKief'; + +/** + * Key to identify the log event. + */ +export const logEventKey = `${extensionName}-log-event`; + +/** + * Path where the icons are located. + */ +export const iconFolderPath = './../icons/'; + +/** + * File name of the JSON file that will be generated to the out folder. + */ +export const manifestName = 'material-icons.json'; + +/** + * File ending for opened folders. + */ +export const openedFolder = '-open'; + +/** + * File ending for light icons. + */ +export const lightColorFileEnding = '_light'; + +/** + * File ending for high contrast icons. + */ +export const highContrastColorFileEnding = '_highContrast'; + +/** + * Pattern to match the file icon definition. + */ +export const cloneIconExtension = '.clone.svg'; + +/** + * User Defined Clones subfolder + */ +export const clonesFolder = 'clones/'; + +/** + * Pattern to match wildcards for custom file icon mappings. + */ +export const wildcardPattern = new RegExp(/^\*{1,2}\./); diff --git a/src/material-icons/src/core/generator/fileGenerator.ts b/src/material-icons/src/core/generator/fileGenerator.ts new file mode 100644 index 0000000..afb51f5 --- /dev/null +++ b/src/material-icons/src/core/generator/fileGenerator.ts @@ -0,0 +1,235 @@ +import { getFileConfigHash } from '../helpers/configHash'; +import { logger } from '../logging/logger'; +import type { Config, IconAssociations } from '../models/icons/config'; +import type { FileIcon } from '../models/icons/files/fileIcon'; +import type { FileIcons } from '../models/icons/files/fileTypes'; +import type { IconPackValue } from '../models/icons/iconPack'; +import type { Manifest } from '../models/manifest'; +import { + cloneIconExtension, + highContrastColorFileEnding, + iconFolderPath, + lightColorFileEnding, + wildcardPattern, +} from './constants'; +import { getPath, getSVG, writeSVGFiles } from './shared/svg'; +import { validateHEXColorCode } from './shared/validation'; + +/** + * Get all file icons that can be used in this theme. + */ +export const loadFileIconDefinitions = ( + fileIcons: FileIcons, + config: Config, + manifest: Manifest +): Manifest => { + const enabledIcons = disableIconsByPack(fileIcons, config.activeIconPack); + const customIcons = getCustomIcons(config.files?.associations); + const allFileIcons = [...enabledIcons, ...customIcons]; + + allFileIcons.forEach((icon) => { + if (icon.disabled) return; + const isClone = icon.clone !== undefined; + manifest = setIconDefinition(manifest, config, icon.name, isClone); + + if (icon.light) { + manifest = setIconDefinition( + manifest, + config, + icon.name, + isClone, + lightColorFileEnding + ); + } + if (icon.highContrast) { + manifest = setIconDefinition( + manifest, + config, + icon.name, + isClone, + highContrastColorFileEnding + ); + } + + if (icon.fileExtensions) { + manifest = mapSpecificFileIcons( + icon, + FileMappingType.FileExtensions, + manifest + ); + } + if (icon.fileNames) { + manifest = mapSpecificFileIcons( + icon, + FileMappingType.FileNames, + manifest, + config.files?.associations + ); + } + }); + + // set default file icon + manifest = setIconDefinition( + manifest, + config, + fileIcons.defaultIcon.name, + false + ); + manifest.file = fileIcons.defaultIcon.name; + + if (fileIcons.defaultIcon.light && manifest.light) { + manifest = setIconDefinition( + manifest, + config, + fileIcons.defaultIcon.name, + false, + lightColorFileEnding + ); + if (manifest.light) { + manifest.light.file = fileIcons.defaultIcon.name + lightColorFileEnding; + } + } + + if (fileIcons.defaultIcon.highContrast) { + manifest = setIconDefinition( + manifest, + config, + fileIcons.defaultIcon.name, + false, + highContrastColorFileEnding + ); + if (manifest.highContrast) { + manifest.highContrast.file = + fileIcons.defaultIcon.name + highContrastColorFileEnding; + } + } + + return manifest; +}; + +/** + * Map the file extensions and the filenames to the related icons. + */ +const mapSpecificFileIcons = ( + icon: FileIcon, + mappingType: FileMappingType, + manifest: Manifest, + customFileAssociation: IconAssociations = {} +) => { + const iconMappingType = icon[mappingType as keyof FileIcon] as string[]; + if (iconMappingType === undefined) { + return manifest; + } + iconMappingType.forEach((name) => { + // if the custom file extension should also overwrite the file names + const shouldOverwriteFileNames = Object.keys(customFileAssociation).some( + (key) => { + // overwrite is enabled if there are two asterisks in the wildcard + if (!/^\*{2}\./.test(key)) return false; + const fileExtension = key.replace(wildcardPattern, '.'); + + // check if the file name contains the particular file extension + // (e.g. extension ".md" in "Readme.md" -> then overwrite it with the *.md icon) + return name.toLowerCase().indexOf(fileExtension.toLowerCase()) !== -1; + } + ); + + // if overwrite is enabled then do not continue to set the icons for file names containing the file extension + const configMappingType = manifest[mappingType]; + const configLightMappingType = manifest.light?.[mappingType]; + const configHighContrastMappingType = manifest.highContrast?.[mappingType]; + + if ( + shouldOverwriteFileNames || + !configMappingType || + !configLightMappingType || + !configHighContrastMappingType + ) + return; + + configMappingType[name] = icon.name; + if (icon.light) { + configLightMappingType[name] = `${icon.name}${lightColorFileEnding}`; + } + if (icon.highContrast) { + configHighContrastMappingType[name] = + `${icon.name}${highContrastColorFileEnding}`; + } + }); + return manifest; +}; + +/** + * Disable all file icons that are in a pack which is disabled. + */ +const disableIconsByPack = ( + fileIcons: FileIcons, + activeIconPack: IconPackValue +): FileIcon[] => { + return fileIcons.icons.filter((icon) => { + return !icon.enabledFor + ? true + : icon.enabledFor.some((p) => p === activeIconPack); + }); +}; + +const setIconDefinition = ( + manifest: Manifest, + config: Config, + iconName: string, + isClone: boolean, + appendix: string = '' +) => { + const ext = isClone ? cloneIconExtension : '.svg'; + const key = `${iconName}${appendix}`; + manifest.iconDefinitions ??= {}; + if (!manifest.iconDefinitions![key]) { + const fileConfigHash = getFileConfigHash(config); + manifest.iconDefinitions![key] = { + iconPath: `${iconFolderPath}${iconName}${appendix}${fileConfigHash}${ext}`, + }; + } + return manifest; +}; + +export const generateFileIcons = async ( + color: string, + opacity: number, + saturation: number +) => { + if (!color || !validateHEXColorCode(color)) { + return logger.error('Invalid color code for file icons'); + } + + const fileIcon = + 'M13 9h5.5L13 3.5V9M6 2h8l6 6v12a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4c0-1.11.89-2 2-2m5 2H6v16h12v-9h-7V4z'; + + await writeSVGFiles( + 'file', + getSVG(getPath(fileIcon, color), 24), + opacity, + saturation + ); +}; + +const getCustomIcons = (fileAssociations: IconAssociations | undefined) => { + if (!fileAssociations) return []; + + const icons: FileIcon[] = Object.keys(fileAssociations).map((fa) => { + const icon: Partial = { + name: fileAssociations[fa].toLowerCase(), + }; + if (wildcardPattern.test(fa)) { + icon.fileExtensions = [fa.toLowerCase().replace(wildcardPattern, '')]; + } else { + icon.fileNames = [fa.toLowerCase()]; + } + return icon as FileIcon; + }); + return icons; +}; + +const enum FileMappingType { + FileExtensions = 'fileExtensions', + FileNames = 'fileNames', +} diff --git a/src/material-icons/src/core/generator/folderGenerator.ts b/src/material-icons/src/core/generator/folderGenerator.ts new file mode 100644 index 0000000..ba15c9b --- /dev/null +++ b/src/material-icons/src/core/generator/folderGenerator.ts @@ -0,0 +1,356 @@ +import { getFileConfigHash } from '../helpers/configHash'; +import { merge } from '../helpers/object'; +import { logger } from '../logging/logger'; +import type { Config, IconAssociations } from '../models/icons/config'; +import type { DefaultIcon } from '../models/icons/defaultIcon'; +import type { FolderIcon } from '../models/icons/folders/folderIcon'; +import type { FolderTheme } from '../models/icons/folders/folderTheme'; +import type { IconPackValue } from '../models/icons/iconPack'; +import type { Manifest } from '../models/manifest'; +import { + cloneIconExtension, + highContrastColorFileEnding, + iconFolderPath, + lightColorFileEnding, + openedFolder, +} from './constants'; +import { getPath, getSVG, writeSVGFiles } from './shared/svg'; +import { validateHEXColorCode } from './shared/validation'; + +/** + * Get the folder icon definitions as object. + */ +export const loadFolderIconDefinitions = ( + folderIcons: FolderTheme[], + config: Config, + manifest: Manifest +): Manifest => { + manifest.hidesExplorerArrows = config.hidesExplorerArrows; + const activeTheme = getEnabledFolderTheme(folderIcons, config.folders?.theme); + if (!activeTheme) { + return manifest; + } + const enabledIcons = disableIconsByPack(activeTheme, config.activeIconPack); + const customIcons = getCustomIcons(config.folders?.associations); + const allIcons = [...enabledIcons, ...customIcons]; + + if (config.folders?.theme === 'none') { + return manifest; + } + + allIcons.forEach((icon) => { + if (icon.disabled) return; + const folderNames = extendFolderNames(icon.folderNames); + manifest = setIconDefinitions(manifest, config, icon); + manifest = merge(manifest, setFolderNames(icon.name, folderNames)); + manifest.light = icon.light + ? merge( + manifest.light, + setFolderNames(icon.name, folderNames, lightColorFileEnding) + ) + : manifest.light; + manifest.highContrast = icon.highContrast + ? merge( + manifest.highContrast, + setFolderNames(icon.name, folderNames, highContrastColorFileEnding) + ) + : manifest.highContrast; + }); + + manifest = setDefaultFolderIcons(activeTheme, manifest, config); + return manifest; +}; + +/** + * Set the default folder icons for the theme. + */ +const setDefaultFolderIcons = ( + theme: FolderTheme, + manifest: Manifest, + config: Config +): Manifest => { + const hasFolderIcons = + !!theme.defaultIcon.name && theme.defaultIcon.name.length > 0; + if (hasFolderIcons) { + manifest = setIconDefinitions(manifest, config, theme.defaultIcon); + } + manifest = merge( + manifest, + createDefaultIconConfigObject(hasFolderIcons, theme, '') + ); + manifest.light = theme.defaultIcon.light + ? merge( + manifest.light, + createDefaultIconConfigObject( + hasFolderIcons, + theme, + lightColorFileEnding + ) + ) + : manifest.light; + manifest.highContrast = theme.defaultIcon.highContrast + ? merge( + manifest.highContrast, + createDefaultIconConfigObject( + hasFolderIcons, + theme, + highContrastColorFileEnding + ) + ) + : manifest.highContrast; + + manifest = merge( + manifest, + createRootIconConfigObject(hasFolderIcons, theme, '') + ); + if (theme.rootFolder) { + manifest = setIconDefinitions(manifest, config, theme.rootFolder); + manifest.light = theme.rootFolder.light + ? merge( + manifest.light, + createRootIconConfigObject( + hasFolderIcons, + theme, + lightColorFileEnding + ) + ) + : manifest.light; + manifest.highContrast = theme.rootFolder.highContrast + ? merge( + manifest.highContrast, + createRootIconConfigObject( + hasFolderIcons, + theme, + highContrastColorFileEnding + ) + ) + : manifest.highContrast; + } + + return manifest; +}; + +/** + * Get the object of the current enabled theme. + */ +const getEnabledFolderTheme = ( + themes: FolderTheme[], + enabledTheme: string | undefined +): FolderTheme | undefined => { + return themes.find((theme) => theme.name === enabledTheme); +}; + +/** + * Disable all file icons that are in a pack which is disabled. + */ +const disableIconsByPack = ( + folderIcons: FolderTheme | undefined, + activatedIconPack: IconPackValue | undefined +): FolderIcon[] => { + if (!folderIcons?.icons || folderIcons.icons.length === 0) { + return []; + } + return folderIcons.icons.filter((icon) => { + return !icon.enabledFor + ? true + : icon.enabledFor.some((p) => p === activatedIconPack); + }); +}; + +const setIconDefinitions = ( + manifest: Manifest, + config: Config, + icon: FolderIcon | DefaultIcon +) => { + const isClone = (icon as FolderIcon).clone !== undefined; + + manifest = createIconDefinitions(manifest, config, icon.name, '', isClone); + if (icon.light) { + manifest = merge( + manifest, + createIconDefinitions( + manifest, + config, + icon.name, + lightColorFileEnding, + isClone + ) + ); + } + if (icon.highContrast) { + manifest = merge( + manifest, + createIconDefinitions( + manifest, + config, + icon.name, + highContrastColorFileEnding, + isClone + ) + ); + } + return manifest; +}; + +const createIconDefinitions = ( + manifest: Manifest, + config: Config, + iconName: string, + appendix: string = '', + isClone = false +) => { + const fileConfigHash = getFileConfigHash(config); + const configIconDefinitions = manifest.iconDefinitions; + const ext = isClone ? cloneIconExtension : '.svg'; + const key = `${iconName}${appendix}`; + const openedKey = `${iconName}${openedFolder}${appendix}`; + + if (configIconDefinitions) { + if (!configIconDefinitions[key]) { + configIconDefinitions[key] = { + iconPath: `${iconFolderPath}${key}${fileConfigHash}${ext}`, + }; + } + + if (!configIconDefinitions[`${openedKey}`]) { + configIconDefinitions[`${openedKey}`] = { + iconPath: `${iconFolderPath}${openedKey}${fileConfigHash}${ext}`, + }; + } + } + return manifest; +}; + +const extendFolderNames = (folderNames: string[]) => { + const names: string[] = []; + const styles: [string, string][] = [ + ['', ''], + ['.', ''], + ['_', ''], + ['__', '__'], + ]; + folderNames.forEach((name) => { + styles.forEach((style) => { + names.push(`${style[0]}${name}${style[1]}`); + }); + }); + return names; +}; + +const setFolderNames = ( + iconName: string, + folderNames: string[], + appendix: string = '' +) => { + const obj: Partial = { + folderNames: {}, + folderNamesExpanded: {}, + }; + folderNames.forEach((name) => { + if (obj.folderNames) { + obj.folderNames[name as keyof Manifest] = iconName + appendix; + } + if (obj.folderNamesExpanded) { + obj.folderNamesExpanded[name as keyof Manifest] = + `${iconName}${openedFolder}${appendix}`; + } + }); + return obj; +}; + +const createDefaultIconConfigObject = ( + hasFolderIcons: boolean, + theme: FolderTheme, + appendix: string = '' +) => { + const obj = { + folder: '', + folderExpanded: '', + }; + obj.folder = hasFolderIcons ? theme.defaultIcon.name + appendix : ''; + obj.folderExpanded = hasFolderIcons + ? `${theme.defaultIcon.name}${openedFolder}${appendix}` + : ''; + return obj; +}; + +const createRootIconConfigObject = ( + hasFolderIcons: boolean, + theme: FolderTheme, + appendix: string = '' +) => { + const obj = { + rootFolder: '', + rootFolderExpanded: '', + }; + obj.rootFolder = hasFolderIcons + ? theme.rootFolder + ? theme.rootFolder.name + appendix + : theme.defaultIcon.name + appendix + : ''; + obj.rootFolderExpanded = hasFolderIcons + ? theme.rootFolder + ? `${theme.rootFolder.name}${openedFolder}${appendix}` + : `${theme.defaultIcon.name}${openedFolder}${appendix}` + : ''; + return obj; +}; + +const getCustomIcons = (folderAssociations: IconAssociations | undefined) => { + if (!folderAssociations) return []; + + const icons: FolderIcon[] = Object.keys(folderAssociations).map((fa) => ({ + // use default folder if icon name is empty + name: + folderAssociations[fa].length > 0 + ? 'folder-' + folderAssociations[fa].toLowerCase() + : 'folder', + folderNames: [fa.toLowerCase()], + })); + + return icons; +}; + +export const generateFolderIcons = async ( + color: string, + opacity: number, + saturation: number +) => { + if (!color || !validateHEXColorCode(color)) { + return logger.error('Invalid color code for folder icons'); + } + + const folderIcon = + 'M13.84376,7.53645l-1.28749-1.0729A2,2,0,0,0,11.27591,6H4A2,2,0,0,0,2,8V24a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2H15.12412A2,2,0,0,1,13.84376,7.53645Z'; + const folderIconOpen = + 'M28.96692,12H9.44152a2,2,0,0,0-1.89737,1.36754L4,24V10H28a2,2,0,0,0-2-2H15.1241a2,2,0,0,1-1.28038-.46357L12.5563,6.46357A2,2,0,0,0,11.27592,6H4A2,2,0,0,0,2,8V24a2,2,0,0,0,2,2H26l4.80523-11.21213A2,2,0,0,0,28.96692,12Z'; + const rootFolderIcon = + 'M16,5A11,11,0,1,1,5,16,11.01245,11.01245,0,0,1,16,5m0-3A14,14,0,1,0,30,16,14,14,0,0,0,16,2Zm0,8a6,6,0,1,0,6,6A6,6,0,0,0,16,10Z'; + const rootFolderIconOpen = + 'M16,5A11,11,0,1,1,5,16,11.01245,11.01245,0,0,1,16,5m0-3A14,14,0,1,0,30,16,14,14,0,0,0,16,2Z'; + + await writeSVGFiles( + 'folder', + getSVG(getPath(folderIcon, color)), + opacity, + saturation + ); + await writeSVGFiles( + 'folder-open', + getSVG(getPath(folderIconOpen, color)), + opacity, + saturation + ); + await writeSVGFiles( + 'folder-root', + getSVG(getPath(rootFolderIcon, color)), + opacity, + saturation + ); + await writeSVGFiles( + 'folder-root-open', + getSVG(getPath(rootFolderIconOpen, color)), + opacity, + saturation + ); +}; diff --git a/src/material-icons/src/core/generator/generateManifest.ts b/src/material-icons/src/core/generator/generateManifest.ts new file mode 100644 index 0000000..685d2a3 --- /dev/null +++ b/src/material-icons/src/core/generator/generateManifest.ts @@ -0,0 +1,42 @@ +import { merge } from '../helpers/object'; +import { fileIcons } from '../icons/fileIcons'; +import { folderIcons } from '../icons/folderIcons'; +import { languageIcons } from '../icons/languageIcons'; +import { + type Manifest, + type ManifestConfig, + createEmptyManifest, +} from '../models/manifest'; +import { padWithDefaultConfig } from './config/defaultConfig'; +import { loadFileIconDefinitions } from './fileGenerator'; +import { loadFolderIconDefinitions } from './folderGenerator'; +import { loadLanguageIconDefinitions } from './languageGenerator'; + +/** + * Generate the manifest that will be written as JSON file. + */ +export const generateManifest = (config?: ManifestConfig): Manifest => { + const refinedConfig = padWithDefaultConfig(config); + const manifest = createEmptyManifest(); + const languageIconDefinitions = loadLanguageIconDefinitions( + languageIcons, + refinedConfig, + manifest + ); + const fileIconDefinitions = loadFileIconDefinitions( + fileIcons, + refinedConfig, + manifest + ); + const folderIconDefinitions = loadFolderIconDefinitions( + folderIcons, + refinedConfig, + manifest + ); + + return merge( + languageIconDefinitions, + fileIconDefinitions, + folderIconDefinitions + ); +}; diff --git a/src/material-icons/src/core/generator/iconOpacity.ts b/src/material-icons/src/core/generator/iconOpacity.ts new file mode 100644 index 0000000..0e41a20 --- /dev/null +++ b/src/material-icons/src/core/generator/iconOpacity.ts @@ -0,0 +1,118 @@ +import { lstat, readFile, readdir } from 'node:fs/promises'; +import { join } from 'node:path'; +import { getCustomIconPaths } from '../helpers/customIconPaths'; +import { resolvePath } from '../helpers/resolvePath'; +import { writeToFile } from '../helpers/writeFile'; +import { logger } from '../logging/logger'; +import { iconFolderPath } from './constants'; + +/** + * Changes the opacity of all icons in the set. + * @param config Icon JSON options which include the opacity value. + */ +export const setIconOpacity = async ( + opacity: number, + filesAssociations: Record +) => { + if (!validateOpacityValue(opacity)) { + return logger.error( + 'Invalid opacity value! Opacity must be a decimal number between 0 and 1!' + ); + } + + logger.info(`Setting opacity to ${opacity}...`); + + const iconsPath = resolvePath(iconFolderPath); + const customIconPaths = getCustomIconPaths(filesAssociations); + const iconFiles = await readdir(iconsPath); + + try { + // read all icon files from the icons folder + for (const iconFileName of iconFiles) { + await processSVGFile(iconsPath, iconFileName, opacity); + } + + for (const iconPath of customIconPaths) { + const customIcons = await readdir(iconPath); + for (const iconFileName of customIcons) { + await processSVGFile(iconPath, iconFileName, opacity); + } + } + } catch (error) { + logger.error(error); + } +}; + +/** + * Validate the opacity value. + * @param opacity Opacity value + */ +export const validateOpacityValue = (opacity: number | undefined) => { + return opacity !== undefined && opacity <= 1 && opacity >= 0; +}; + +/** + * Get the SVG root element. + * @param svg SVG file as string. + */ +const getSVGRootElement = (svg: string) => { + const result = new RegExp(/]*>/).exec(svg); + return result?.[0]; +}; + +/** + * Add an opacity attribute to the SVG icon to control the opacity of the icon. + * @param svgRoot Root element of the SVG icon. + * @param opacity Opacity value. + */ +const addOpacityAttribute = (svgRoot: string, opacity: number) => { + const pattern = new RegExp(/\sopacity="[\d.]+"/); + // if the opacity attribute already exists + if (pattern.test(svgRoot)) { + return svgRoot.replace(pattern, ` opacity="${opacity}"`); + } else { + return svgRoot.replace(/^ { + const pattern = new RegExp(/\sopacity="[\d.]+"/); + return svgRoot.replace(pattern, ''); +}; + +/** Function to add or remove opacity from a given SVG string */ +export const updateSVGOpacity = (svg: string, opacity: number): string => { + const svgRootElement = getSVGRootElement(svg); + if (!svgRootElement) return svg; + + let updatedRootElement: string; + if (opacity < 1) { + updatedRootElement = addOpacityAttribute(svgRootElement, opacity); + } else { + updatedRootElement = removeOpacityAttribute(svgRootElement); + } + return svg.replace(/]*>/, updatedRootElement); +}; + +/** Function to read an SVG file, update its opacity, and write it back */ +const processSVGFile = async ( + iconPath: string, + iconFileName: string, + opacity: number +): Promise => { + const svgFilePath = join(iconPath, iconFileName); + if (!(await lstat(svgFilePath)).isFile()) { + return; + } + + // Read SVG file + const svg = await readFile(svgFilePath, 'utf-8'); + const updatedSVG = updateSVGOpacity(svg, opacity); + + if (updatedSVG.trim().length === 0) return; + await writeToFile(svgFilePath, updatedSVG); +}; diff --git a/src/material-icons/src/core/generator/iconSaturation.ts b/src/material-icons/src/core/generator/iconSaturation.ts new file mode 100644 index 0000000..15899c1 --- /dev/null +++ b/src/material-icons/src/core/generator/iconSaturation.ts @@ -0,0 +1,152 @@ +import { lstat, readFile, readdir } from 'node:fs/promises'; +import { join } from 'node:path'; +import { getCustomIconPaths } from '../helpers/customIconPaths'; +import { resolvePath } from '../helpers/resolvePath'; +import { writeToFile } from '../helpers/writeFile'; +import { logger } from '../logging/logger'; +import { iconFolderPath } from './constants'; + +/** + * Changes saturation of all icons in the set. + * @param config Icon JSON options which include the saturation value. + * @param fileNames Only change the saturation of certain file names. + */ +export const setIconSaturation = async ( + saturation: number, + filesAssociations: Record +) => { + if (!validateSaturationValue(saturation)) { + return logger.error( + 'Invalid saturation value! Saturation must be a decimal number between 0 and 1!' + ); + } + + logger.info(`Setting saturation to ${saturation}...`); + + const iconsPath = resolvePath(iconFolderPath); + const customIconPaths = getCustomIconPaths(filesAssociations); + const iconFiles = await readdir(iconsPath); + + // read all icon files from the icons folder + try { + for (const iconFileName of iconFiles) { + await processSVGFileForSaturation(iconsPath, iconFileName, saturation); + } + + for (const iconPath of customIconPaths) { + const customIcons = await readdir(iconPath); + for (const iconFileName of customIcons) { + await processSVGFileForSaturation(iconPath, iconFileName, saturation); + } + } + } catch (error) { + logger.error(error); + } +}; + +/** + * Get the SVG root element. + * @param svg SVG file as string. + */ +const getSVGRootElement = (svg: string) => { + const result = new RegExp(/]*>/).exec(svg); + return result?.[0]; +}; + +/** + * Add an filter attribute to the SVG icon. + * @param svgRoot Root element of the SVG icon. + */ +const addFilterAttribute = (svgRoot: string) => { + const pattern = new RegExp(/\sfilter="[^"]+?"/); + // if the filter attribute already exists + if (pattern.test(svgRoot)) { + return svgRoot.replace(pattern, ' filter="url(#saturation)"'); + } else { + return svgRoot.replace(/^ { + const pattern = new RegExp(/\sfilter="[^"]+?"/); + return svgRoot.replace(pattern, ''); +}; + +/** + * Add filter element to the SVG icon. + * @param svg SVG file as string. + */ +const addFilterElement = (svg: string, saturation: number) => { + const pattern = new RegExp(/(.*<\/svg>)/); + const filterElement = ``; + if (pattern.test(svg)) { + return svg.replace(pattern, `${filterElement}$1`); + } else { + return svg.replace(/<\/svg>/, `${filterElement}`); + } +}; + +/** + * Remove filter element from the SVG icon. + * @param svg SVG file as string. + */ +const removeFilterElement = (svg: string) => { + const pattern = new RegExp(/(.*<\/svg>)/); + return svg.replace(pattern, '$1'); +}; + +/** + * Validate the saturation value. + * @param saturation Saturation value + */ +export const validateSaturationValue = (saturation: number | undefined) => { + return saturation !== undefined && saturation <= 1 && saturation >= 0; +}; + +/** Function to adjust the saturation of a given SVG string */ +export const adjustSVGSaturation = ( + svg: string, + saturation: number +): string => { + // Get the root element of the SVG + const svgRootElement = getSVGRootElement(svg); + if (!svgRootElement) return svg; + + let updatedRootElement: string; + + if (saturation < 1) { + updatedRootElement = addFilterAttribute(svgRootElement); + } else { + updatedRootElement = removeFilterAttribute(svgRootElement); + } + + let updatedSVG = svg.replace(/]*>/, updatedRootElement); + + if (saturation < 1) { + updatedSVG = addFilterElement(updatedSVG, saturation); + } else { + updatedSVG = removeFilterElement(updatedSVG); + } + + return updatedSVG; +}; + +/** Function to read an SVG file, adjust its saturation, and write it back */ +const processSVGFileForSaturation = async ( + iconPath: string, + iconFileName: string, + saturation: number +): Promise => { + const svgFilePath = join(iconPath, iconFileName); + if (!(await lstat(svgFilePath)).isFile()) return; + + // Read SVG file + const svg = await readFile(svgFilePath, 'utf-8'); + const updatedSVG = adjustSVGSaturation(svg, saturation); + + await writeToFile(svgFilePath, updatedSVG); +}; diff --git a/src/material-icons/src/core/generator/languageGenerator.ts b/src/material-icons/src/core/generator/languageGenerator.ts new file mode 100644 index 0000000..fb48a2a --- /dev/null +++ b/src/material-icons/src/core/generator/languageGenerator.ts @@ -0,0 +1,133 @@ +import { getFileConfigHash } from '../helpers/configHash'; +import { merge } from '../helpers/object'; +import type { Config, IconAssociations } from '../models/icons/config'; +import type { DefaultIcon } from '../models/icons/defaultIcon'; +import type { IconPackValue } from '../models/icons/iconPack'; +import type { LanguageIcon } from '../models/icons/languages/languageIdentifier'; +import type { Manifest } from '../models/manifest'; +import { + highContrastColorFileEnding, + iconFolderPath, + lightColorFileEnding, +} from './constants'; + +/** + * Get all file icons that can be used in this theme. + */ +export const loadLanguageIconDefinitions = ( + languageIcons: LanguageIcon[], + config: Config, + manifest: Manifest +): Manifest => { + const enabledLanguages = disableLanguagesByPack( + languageIcons, + config.activeIconPack + ); + const customIcons = getCustomIcons(config.languages?.associations); + const allLanguageIcons = [...enabledLanguages, ...customIcons]; + + allLanguageIcons.forEach((lang) => { + if (lang.disabled) return; + manifest = setIconDefinitions(manifest, config, lang.icon); + manifest = merge( + manifest, + setLanguageIdentifiers(lang.icon.name, lang.ids) + ); + manifest.light = lang.icon.light + ? merge( + manifest.light, + setLanguageIdentifiers( + lang.icon.name + lightColorFileEnding, + lang.ids + ) + ) + : manifest.light; + manifest.highContrast = lang.icon.highContrast + ? merge( + manifest.highContrast, + setLanguageIdentifiers( + lang.icon.name + highContrastColorFileEnding, + lang.ids + ) + ) + : manifest.highContrast; + }); + + return manifest; +}; + +const setIconDefinitions = ( + manifest: Manifest, + config: Config, + icon: DefaultIcon +) => { + manifest = createIconDefinitions(manifest, config, icon.name); + manifest = merge( + manifest, + icon.light + ? createIconDefinitions( + manifest, + config, + icon.name + lightColorFileEnding + ) + : manifest.light + ); + manifest = merge( + manifest, + icon.highContrast + ? createIconDefinitions( + manifest, + config, + icon.name + highContrastColorFileEnding + ) + : manifest.highContrast + ); + return manifest; +}; + +const createIconDefinitions = ( + manifest: Manifest, + config: Config, + iconName: string +) => { + const fileConfigHash = getFileConfigHash(config); + if (manifest.iconDefinitions) { + manifest.iconDefinitions[iconName] = { + iconPath: `${iconFolderPath}${iconName}${fileConfigHash}.svg`, + }; + } + return manifest; +}; + +const setLanguageIdentifiers = (iconName: string, languageIds: string[]) => { + const obj: Partial = { languageIds: {} }; + languageIds.forEach((id) => { + obj.languageIds![id as keyof Manifest] = iconName; + }); + return obj; +}; + +const getCustomIcons = (languageAssociations: IconAssociations | undefined) => { + if (!languageAssociations) return []; + + const icons: LanguageIcon[] = Object.keys(languageAssociations).map((fa) => ({ + icon: { name: languageAssociations[fa].toLowerCase() }, + ids: [fa.toLowerCase()], + })); + + return icons; +}; + +/** + * Disable all file icons that are in a pack which is disabled. + */ +const disableLanguagesByPack = ( + languageIcons: LanguageIcon[], + activatedIconPack: IconPackValue | undefined +) => { + return languageIcons.filter((language) => { + return !language.enabledFor + ? true + : language.enabledFor.some((p) => p === activatedIconPack); + }); +}; diff --git a/src/material-icons/src/core/generator/renameIconFiles.ts b/src/material-icons/src/core/generator/renameIconFiles.ts new file mode 100644 index 0000000..6fd01f5 --- /dev/null +++ b/src/material-icons/src/core/generator/renameIconFiles.ts @@ -0,0 +1,54 @@ +import { existsSync, readdirSync, renameSync, unlinkSync } from 'node:fs'; +import { join } from 'node:path'; +import { getFileConfigHash } from '../helpers/configHash'; +import { getCustomIconPaths } from '../helpers/customIconPaths'; +import { resolvePath } from '../helpers/resolvePath'; +import { logger } from '../logging/logger'; +import type { Config } from '../models/icons/config'; +import { iconFolderPath } from './constants'; + +/** + * Rename all icon files according their respective config. + * + * The rename triggers a change event in VS Code, which will update the icons in the UI. + * @param config Icon Json Options + */ +export const renameIconFiles = (config: Config) => { + const defaultIconPath = resolvePath(iconFolderPath); + const customPaths = getCustomIconPaths(config.files.associations); + const iconPaths = [defaultIconPath, ...customPaths]; + const fileConfigHash = getFileConfigHash(config); + + for (const iconPath of iconPaths) { + const files = readdirSync(iconPath).filter((f) => f.match(/\.svg/gi)); + + for (const f of files) { + const filePath = join(iconPath, f); + + // append file config to file name + const newFilePath = join( + iconPath, + f.replace(/(^[^\.~]+).*?(\.clone\.svg|\.svg)/, `$1${fileConfigHash}$2`) + ); + + try { + // if generated files are already in place, do not overwrite them + if (filePath !== newFilePath) { + if (existsSync(newFilePath)) { + if (existsSync(filePath)) { + logger.debug(`Deleting existing file: ${filePath}`); + unlinkSync(filePath); + } + } else { + if (existsSync(filePath)) { + logger.debug(`Renaming file: ${filePath} to ${newFilePath}`); + renameSync(filePath, newFilePath); + } + } + } + } catch (error) { + logger.error(error); + } + } + } +}; diff --git a/src/material-icons/src/core/generator/shared/svg.ts b/src/material-icons/src/core/generator/shared/svg.ts new file mode 100644 index 0000000..5f4d1ee --- /dev/null +++ b/src/material-icons/src/core/generator/shared/svg.ts @@ -0,0 +1,32 @@ +import { join } from 'node:path'; +import { resolvePath } from '../../helpers/resolvePath'; +import { writeToFile } from '../../helpers/writeFile'; +import { logger } from '../../logging/logger'; +import { iconFolderPath } from '../constants'; +import { updateSVGOpacity } from '../iconOpacity'; +import { adjustSVGSaturation } from '../iconSaturation'; + +export const writeSVGFiles = async ( + iconName: string, + svg: string, + opacity: number, + saturation: number +) => { + // Update the opacity and saturation of the SVG + const updatedOpacity = updateSVGOpacity(svg, opacity); + const updatedSaturation = adjustSVGSaturation(updatedOpacity, saturation); + + const iconsPath = resolvePath(iconFolderPath); + const iconsFolderPath = join(iconsPath, `${iconName}.svg`); + try { + await writeToFile(iconsFolderPath, updatedSaturation); + } catch (error) { + logger.error(error); + } +}; + +export const getPath = (d: string, color: string) => + ``; + +export const getSVG = (path: string, viewBoxSize = 32) => + `${path}`; diff --git a/src/material-icons/src/core/generator/shared/validation.ts b/src/material-icons/src/core/generator/shared/validation.ts new file mode 100644 index 0000000..d7bfb9c --- /dev/null +++ b/src/material-icons/src/core/generator/shared/validation.ts @@ -0,0 +1,8 @@ +/** + * Validate the HEX color code + * @param color HEX code + */ +export const validateHEXColorCode = (color: string = '') => { + const hexPattern = new RegExp(/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/); + return color.length > 0 && hexPattern.test(color); +}; diff --git a/src/material-icons/src/core/helpers/configHash.ts b/src/material-icons/src/core/helpers/configHash.ts new file mode 100644 index 0000000..c1fa4ee --- /dev/null +++ b/src/material-icons/src/core/helpers/configHash.ts @@ -0,0 +1,51 @@ +import { getDefaultConfig } from '../generator/config/defaultConfig'; +import { logger } from '../logging/logger'; +import type { Config } from '../models/icons/config'; + +/** + * Generate a config hashed string that is appended to each icon file name. + * @param config Icon Configuration object + */ +export const getFileConfigHash = (config: Partial): string => { + try { + const defaults = getDefaultConfig(); + let fileConfigString = ''; + if ( + config.saturation !== defaults.saturation || + config.opacity !== defaults.opacity || + config.folders?.color !== defaults.folders.color || + config.files?.color !== defaults.files.color || + (config.files?.customClones?.length ?? 0) > 0 || + (config.folders?.customClones?.length ?? 0) > 0 + ) { + // Any changes that are hashed will trigger a refresh of the icon in the VS Code UI + fileConfigString += `~${getHash( + JSON.stringify({ + saturation: config.saturation, + opacity: config.opacity, + foldersColor: config.folders?.color, + filesColor: config.files?.color, + fileClones: config.files?.customClones, + folderClones: config.folders?.customClones, + }) + )}`; + } + return fileConfigString; + } catch (error) { + logger.error(error); + return ''; + } +}; + +const getHash = (value: string) => { + let hash = 0; + let chr = 0; + + if (value.length === 0) return hash; + for (let i = 0; i < value.length; i++) { + chr = value.charCodeAt(i); + hash = (hash << 5) - hash + chr; + hash |= 0; // Convert to 32bit integer + } + return hash; +}; diff --git a/src/material-icons/src/core/helpers/customIconPaths.ts b/src/material-icons/src/core/helpers/customIconPaths.ts new file mode 100644 index 0000000..f6afb16 --- /dev/null +++ b/src/material-icons/src/core/helpers/customIconPaths.ts @@ -0,0 +1,10 @@ +import { dirname } from 'node:path'; +import { resolvePath } from './resolvePath'; + +export const getCustomIconPaths = ( + filesAssociations: Record = {} +) => { + return Object.values(filesAssociations) + .filter((fileName) => fileName.match(/^[.\/]+/)) // <- custom dirs have a relative path to the dist folder + .map((fileName) => dirname(resolvePath(fileName))); +}; diff --git a/src/material-icons/src/core/helpers/iconPacks.ts b/src/material-icons/src/core/helpers/iconPacks.ts new file mode 100644 index 0000000..f84ff94 --- /dev/null +++ b/src/material-icons/src/core/helpers/iconPacks.ts @@ -0,0 +1,4 @@ +import { IconPack, type IconPackValue } from '../models/icons/iconPack'; + +/** Get all packs that can be used in this icon theme. */ +export const availableIconPacks: IconPackValue[] = Object.values(IconPack); diff --git a/src/material-icons/src/core/helpers/object.ts b/src/material-icons/src/core/helpers/object.ts new file mode 100644 index 0000000..adff1d3 --- /dev/null +++ b/src/material-icons/src/core/helpers/object.ts @@ -0,0 +1,108 @@ +/** + * Get the nested properties of an object. + * This solution is lighter than the lodash get-version. + * Source: http://stackoverflow.com/a/6491621/6942210 + */ +export const get = (obj: Object, path: string): T | undefined => { + const pathArray = path + .replace(/\[(\w+)\]/g, '.$1') // convert indexes to properties + .replace(/^\./, '') // strip a leading dot + .split('.'); // separate paths in array + + /** Avoid errors in the getValue function. */ + const isObject = (object: unknown) => { + return object === Object(object); + }; + let result = structuredClone(obj); + + for (let i = 0; i < pathArray.length; ++i) { + const k = pathArray[i]; + if (isObject(result) && k in result) { + result = (result as Record)[k] as Object; + } else { + return; + } + } + return result as T; +}; + +/** + * Set a value for a nested object property. + * @param obj Object + * @param path Properties as string e.g. `'a.b.c'` + * @param value Value to be set for the given property + * Source: https://stackoverflow.com/a/13719799/6942210 + */ +export const set = ( + // biome-ignore lint/suspicious/noExplicitAny: Multiple unknown types due to recursive function + obj: { [key: string]: any }, + path: string | string[], + value: unknown +) => { + if (typeof path === 'string') { + path = path.split('.'); + } + + if (path.length > 1) { + const e = path.shift() ?? ''; + set( + (obj[e] = + Object.prototype.toString.call(obj[e]) === '[object Object]' + ? obj[e] + : {}), + path, + value + ); + } else { + obj[path[0]] = value; + } +}; + +/** + * Merges given objects recursively. + * + * @param objects Provide the objects that should be merged. + * @returns A new object that is the result of the merge. + */ +export const merge = >( + ...objects: (T | undefined | null)[] +): T => { + return objects.reduce((acc, obj) => { + Object.keys(obj ?? {}).forEach((key) => { + const accValue = (acc as Record)[key]; + const objValue = obj?.[key]; + + // Check if one of the values is null or undefined and the other is not + if ( + (accValue === undefined || accValue === null) && + objValue !== undefined && + objValue !== null + ) { + (acc as Record)[key] = objValue; + } else if ( + (objValue === undefined || objValue === null) && + accValue !== undefined && + accValue !== null + ) { + // No need to assign acc[key] to itself + } else if (Array.isArray(objValue) && Array.isArray(accValue)) { + (acc as Record)[key] = [ + ...new Set(accValue.concat(objValue)), + ]; + } else if ( + typeof objValue === 'object' && + objValue !== null && + typeof accValue === 'object' && + accValue !== null + ) { + (acc as Record)[key] = merge( + accValue as Record, + objValue as Record + ); + } else { + (acc as Record)[key] = objValue; + } + }); + return acc; + }, {} as T); +}; diff --git a/src/material-icons/src/core/helpers/resolvePath.ts b/src/material-icons/src/core/helpers/resolvePath.ts new file mode 100644 index 0000000..1dbae2a --- /dev/null +++ b/src/material-icons/src/core/helpers/resolvePath.ts @@ -0,0 +1,5 @@ +import { join } from 'node:path'; + +export const resolvePath = (path: string): string => { + return join(__dirname, '..', '..', path); +}; diff --git a/src/material-icons/src/core/helpers/titlecase.ts b/src/material-icons/src/core/helpers/titlecase.ts new file mode 100644 index 0000000..2757a70 --- /dev/null +++ b/src/material-icons/src/core/helpers/titlecase.ts @@ -0,0 +1,11 @@ +/** Capitalize the first letter of a string */ +export const capitalizeFirstLetter = (name: string): string => + name.charAt(0).toUpperCase() + name.slice(1); + +/** TitleCase all words in a string */ +export const toTitleCase = (value: string) => { + return value.replace( + /\w\S*/g, + (text) => text.charAt(0).toUpperCase() + text.substring(1).toLowerCase() + ); +}; diff --git a/src/material-icons/src/core/helpers/writeFile.ts b/src/material-icons/src/core/helpers/writeFile.ts new file mode 100644 index 0000000..87f01f2 --- /dev/null +++ b/src/material-icons/src/core/helpers/writeFile.ts @@ -0,0 +1,21 @@ +import { writeFile } from 'node:fs/promises'; +import { logger } from '../logging/logger'; + +/** + * Write content to a file. + * + * @param filePath File path to write to + * @param data Content to write to the file + */ +export const writeToFile = async ( + filePath: string, + data: string, + encoding?: BufferEncoding +) => { + if (!filePath || !data || data.trim().length === 0) { + logger.error('Invalid file path or data to write! File path: ' + filePath); + return; + } + logger.debug('Writing to file: ' + filePath); + await writeFile(filePath, data, encoding); +}; diff --git a/src/material-icons/src/core/i18n/translate.ts b/src/material-icons/src/core/i18n/translate.ts new file mode 100644 index 0000000..698e80d --- /dev/null +++ b/src/material-icons/src/core/i18n/translate.ts @@ -0,0 +1,120 @@ +import { get } from '../helpers/object'; +import { logger } from '../logging/logger'; +import type { Translation } from '../models/i18n/translation'; +import { translation as langCs } from './translations/lang-cs'; +import { translation as langDe } from './translations/lang-de'; +import { translation as langEn } from './translations/lang-en'; +import { translation as langEs } from './translations/lang-es'; +import { translation as langFr } from './translations/lang-fr'; +import { translation as langJa } from './translations/lang-ja'; +import { translation as langKo } from './translations/lang-ko'; +import { translation as langNl } from './translations/lang-nl'; +import { translation as langPl } from './translations/lang-pl'; +import { translation as langPtBr } from './translations/lang-pt-br'; +import { translation as langPtPt } from './translations/lang-pt-pt'; +import { translation as langRu } from './translations/lang-ru'; +import { translation as langUk } from './translations/lang-uk'; +import { translation as langZhCn } from './translations/lang-zh-cn'; +import { translation as langZhTw } from './translations/lang-zh-tw'; + +let currentTranslation: Translation; +let fallbackTranslation: Translation; + +const placeholder = '%'; + +/** Initialize the translations */ +export const initTranslations = async (language: string) => { + try { + currentTranslation = await loadTranslation(language); + fallbackTranslation = await loadTranslation('en'); + logger.info('Translations initialized.'); + } catch (error) { + logger.error(error); + } +}; + +/** Load the required translation */ +const loadTranslation = async (language: string) => { + try { + return await getTranslationObject(language); + } catch { + return await getTranslationObject('en'); + } +}; + +/** Get the translation object of the separated translation files */ +const getTranslationObject = async (language: string): Promise => { + switch (language) { + case 'cs': + return langCs; + case 'de': + return langDe; + case 'en': + return langEn; + case 'es': + return langEs; + case 'fr': + return langFr; + case 'ja': + return langJa; + case 'ko': + return langKo; + case 'nl': + return langNl; + case 'pl': + return langPl; + case 'pt-br': + return langPtBr; + case 'pt-pt': + return langPtPt; + case 'ru': + return langRu; + case 'uk': + return langUk; + case 'zh-cn': + return langZhCn; + case 'zh-tw': + return langZhTw; + default: + return langEn; + } +}; + +/** + * We look up the matching translation in the translation files. + * If we cannot find a matching key in the file we use the fallback. + * With optional parameters you can configure both the translations + * and the fallback (required for testing purposes). + * */ +export const getTranslationValue = ( + key: string, + translations = currentTranslation, + fallback = fallbackTranslation +): string | undefined => { + return get(translations, key) ?? get(fallback, key); +}; + +/** + * The instant method is required for the translate pipe. + * It helps to translate a word instantly. + */ +export const translate = (key: string, ...variables: string[]): string => { + const translation = getTranslationValue(key); + + if (variables.length === 0) return translation ?? key; + return replace(translation, ...variables); +}; + +/** + * The replace function will replace the current placeholder with the + * data parameter from the translation. You can give it one or more optional + * parameters ('variables'). + */ +export const replace = (value: string = '', ...variables: string[]) => { + let translation: string = value; + variables.forEach((variable, i) => { + translation = translation.replace(`${placeholder}${i}`, variable); + }); + + return translation; +}; diff --git a/src/material-icons/src/core/i18n/translations/lang-cs.ts b/src/material-icons/src/core/i18n/translations/lang-cs.ts new file mode 100644 index 0000000..ce25901 --- /dev/null +++ b/src/material-icons/src/core/i18n/translations/lang-cs.ts @@ -0,0 +1,45 @@ +import type { Translation } from '../../models/i18n/translation'; + +export const translation: Translation = { + activate: 'Aktivovat', + activated: 'Material Icon Tรฉma je aktivnรญ.', + iconPacks: { + selectPack: 'Vyberte sadu ikon', + description: "Vyberte sadu ikon '%0'", + disabled: 'Zakรกzat balรญฤky ikon', + }, + folders: { + toggleIcons: 'Vyberte motiv sloลพky', + disabled: 'ลฝรกdnรฉ ikony sloลพek', + theme: { + description: "Vyberte motiv sloลพky '%0'", + }, + }, + colorSelect: { + color: 'Vyberte barvu', + hexCode: 'Vloลพte hexadecimรกlnรญ kรณd barvy', + wrongHexCode: 'Neplatnรฝ hexadecimรกlnรญ kรณd barvy!', + }, + opacity: { + inputPlaceholder: 'Hodnota prลฏhlednosti (od 0 do 1)', + wrongValue: 'Zadejte desetinnรฉ ฤรญslo mezi 0 a 1.', + }, + toggleSwitch: { + on: 'ZAPNUTO', + off: 'VYPNUTO', + }, + explorerArrows: { + toggle: 'ล ipky sloลพek v prลฏzkumnรญkovi', + enable: 'Zobrazit ลกipky sloลพek v Prลฏzkumnรญkovi', + disable: 'Skrรฝt ลกipky sloลพek v Prลฏzkumnรญkovi', + }, + grayscale: { + toggle: 'Zobrazovat ikony ve stupnรญch ลกedi', + enable: 'Povolit ikony ve stupnรญch ลกedi', + disable: 'Zakรกzat ikony ve stupnรญch ลกedi', + }, + saturation: { + inputPlaceholder: 'Hodnota sytosti (mezi 0 a 1)', + wrongValue: 'Zadejte desetinnรฉ ฤรญslo mezi 0 a 1.', + }, +}; diff --git a/src/material-icons/src/core/i18n/translations/lang-de.ts b/src/material-icons/src/core/i18n/translations/lang-de.ts new file mode 100644 index 0000000..fdef538 --- /dev/null +++ b/src/material-icons/src/core/i18n/translations/lang-de.ts @@ -0,0 +1,45 @@ +import type { Translation } from '../../models/i18n/translation'; + +export const translation: Translation = { + activate: 'Aktivieren', + activated: 'Material Icon Theme ist jetzt aktiviert.', + iconPacks: { + selectPack: 'Icon Pack auswรคhlen', + description: "Das '%0' Icon Pack auswรคhlen", + disabled: 'Icon Packs deaktivieren', + }, + folders: { + toggleIcons: 'Wรคhle ein Ordner Design', + disabled: 'Keine Ordner Icons', + theme: { + description: "Wรคhle das '%0' Design", + }, + }, + colorSelect: { + color: 'Wรคhle eine Farbe', + hexCode: 'Gebe einen HEX Farbcode ein', + wrongHexCode: 'Ungรผltiger HEX Farbcode', + }, + opacity: { + inputPlaceholder: 'Wert der Deckkraft (zwischen 0 und 1)', + wrongValue: 'Der Wert muss zwischen 0 und 1 liegen!', + }, + toggleSwitch: { + on: 'EIN', + off: 'AUS', + }, + explorerArrows: { + toggle: 'Pfeile im Explorer anpassen', + enable: 'Explorer Pfeile anzeigen', + disable: 'Explorer Pfeile ausblenden', + }, + grayscale: { + toggle: 'Schaltet graustufige Icons um', + enable: 'Aktiviert graustufige Icons', + disable: 'Deaktiviert graustufige Icons', + }, + saturation: { + inputPlaceholder: 'Wert der Sรคttigung (zwischen 0 und 1)', + wrongValue: 'Der Wert muss zwischen 0 und 1 liegen!', + }, +}; diff --git a/src/material-icons/src/core/i18n/translations/lang-en.ts b/src/material-icons/src/core/i18n/translations/lang-en.ts new file mode 100644 index 0000000..98567d8 --- /dev/null +++ b/src/material-icons/src/core/i18n/translations/lang-en.ts @@ -0,0 +1,45 @@ +import type { Translation } from '../../models/i18n/translation'; + +export const translation: Translation = { + activate: 'Activate', + activated: 'Material Icon Theme is active.', + iconPacks: { + selectPack: 'Select an icon pack', + description: "Select the '%0' icon pack", + disabled: 'Disable icon packs', + }, + folders: { + toggleIcons: 'Pick a folder theme', + disabled: 'No folder icons', + theme: { + description: "Select the '%0' folder theme", + }, + }, + colorSelect: { + color: 'Choose a color', + hexCode: 'Insert a HEX color code', + wrongHexCode: 'Invalid HEX color code!', + }, + opacity: { + inputPlaceholder: 'Opacity value (between 0 and 1)', + wrongValue: 'Please enter a floating-point number between 0 and 1.', + }, + toggleSwitch: { + on: 'ON', + off: 'OFF', + }, + explorerArrows: { + toggle: 'Toggle folder arrows in Explorer', + enable: 'Show folder arrows in Explorer', + disable: 'Hide folder arrows in Explorer', + }, + grayscale: { + toggle: 'Toggle grayscale icons', + enable: 'Enable grayscale icons', + disable: 'Disable grayscale icons', + }, + saturation: { + inputPlaceholder: 'Saturation value (between 0 and 1)', + wrongValue: 'Please enter a floating-point number between 0 and 1.', + }, +}; diff --git a/src/material-icons/src/core/i18n/translations/lang-es.ts b/src/material-icons/src/core/i18n/translations/lang-es.ts new file mode 100644 index 0000000..e27277f --- /dev/null +++ b/src/material-icons/src/core/i18n/translations/lang-es.ts @@ -0,0 +1,45 @@ +import type { Translation } from '../../models/i18n/translation'; + +export const translation: Translation = { + activate: 'Activar', + activated: 'Material Icon Theme estรก activado.', + iconPacks: { + selectPack: 'Seleccione un paquete de iconos', + description: "Seleccione el paquete de iconos '%0'", + disabled: 'Desactivar paquetes de iconos', + }, + folders: { + toggleIcons: 'Cambiar activaciรณn de iconos de carpetas', + disabled: 'Sin iconos de carpeta', + theme: { + description: "Iconos de carpeta '%0'", + }, + }, + colorSelect: { + color: 'Elija un color', + hexCode: 'Insertar un cรณdigo de color HEX', + wrongHexCode: 'ยกCรณdigo de color HEX invรกlido!', + }, + opacity: { + inputPlaceholder: 'Valor de opacidad (entre 0 y 1)', + wrongValue: 'ยกEl valor debe estar entre 0 y 1!', + }, + toggleSwitch: { + on: 'ON', + off: 'OFF', + }, + explorerArrows: { + toggle: 'Conmutar las flechas de carpetas', + enable: 'Mostrar flechas de carpeta', + disable: 'Ocultar las flechas de carpetas', + }, + grayscale: { + toggle: 'Alternar los iconos en escala de grises', + enable: 'Activar los iconos en escala de grises', + disable: 'Desactivar los iconos en escala de grises', + }, + saturation: { + inputPlaceholder: 'Valor de saturaciรณn (entre 0 y 1)', + wrongValue: 'El valor debe estar entre 0 y 1.', + }, +}; diff --git a/src/material-icons/src/core/i18n/translations/lang-fr.ts b/src/material-icons/src/core/i18n/translations/lang-fr.ts new file mode 100644 index 0000000..b3c4748 --- /dev/null +++ b/src/material-icons/src/core/i18n/translations/lang-fr.ts @@ -0,0 +1,45 @@ +import type { Translation } from '../../models/i18n/translation'; + +export const translation: Translation = { + activate: 'Activer', + activated: 'Material Icon Theme est actif.', + iconPacks: { + selectPack: "Sรฉlectionnez un pack d'icรดnes", + description: "Sรฉlectionner le pack d'icรดnes '%0'", + disabled: "Dรฉsactiver les paquets d'icรดnes", + }, + folders: { + toggleIcons: 'Basculer les icรดnes de dossiers', + disabled: 'Aucune icรดnes de dossiers', + theme: { + description: "Icรดnes de dossiers '%0'", + }, + }, + colorSelect: { + color: 'Choisissez une couleur', + hexCode: 'Insรฉrer un code couleur HEX', + wrongHexCode: 'Code couleur HEX non valide!', + }, + opacity: { + inputPlaceholder: "Valeur d'opacitรฉ (entre 0 et 1)", + wrongValue: 'La valeur doit รชtre comprise entre 0 et 1!', + }, + toggleSwitch: { + on: 'ON', + off: 'OFF', + }, + explorerArrows: { + toggle: 'Basculer les flรจches du dossier', + enable: 'Afficher les flรจches du dossier', + disable: 'Cacher les flรจches de dossier', + }, + grayscale: { + toggle: 'Basculer les icรดnes en niveaux de gris', + enable: 'Activer les icรดnes en niveaux de gris', + disable: 'Dรฉsactiver les icรดnes en niveaux de gris', + }, + saturation: { + inputPlaceholder: 'Valeur de saturation (entre 0 et 1)', + wrongValue: 'La valeur doit รชtre comprise entre 0 et 1 !', + }, +}; diff --git a/src/material-icons/src/core/i18n/translations/lang-ja.ts b/src/material-icons/src/core/i18n/translations/lang-ja.ts new file mode 100644 index 0000000..e93f7d4 --- /dev/null +++ b/src/material-icons/src/core/i18n/translations/lang-ja.ts @@ -0,0 +1,45 @@ +import type { Translation } from '../../models/i18n/translation'; + +export const translation: Translation = { + activate: 'ๆœ‰ๅŠนๅŒ–', + activated: 'Material Icon Theme ใฏๆœ‰ๅŠนใงใ™ใ€‚', + iconPacks: { + selectPack: 'ใ‚ขใ‚คใ‚ณใƒณใƒ‘ใƒƒใ‚ฏใ‚’้ธๆŠžใ™ใ‚‹', + description: "ใ‚ขใ‚คใ‚ณใƒณใƒ‘ใƒƒใ‚ฏ '%0' ใ‚’้ธๆŠžใ™ใ‚‹", + disabled: 'ใ‚ขใ‚คใ‚ณใƒณใƒ‘ใƒƒใ‚ฏใ‚’็„กๅŠนๅŒ–ใ™ใ‚‹', + }, + folders: { + toggleIcons: 'ใƒ•ใ‚ฉใƒซใƒ€ใƒผใ‚ขใ‚คใ‚ณใƒณใ‚’ๅˆ‡ใ‚Šๆ›ฟใˆใ‚‹', + disabled: 'ใƒ•ใ‚ฉใƒซใƒ€ใƒผใ‚ขใ‚คใ‚ณใƒณใ‚’่กจ็คบใ—ใชใ„', + theme: { + description: "ใƒ•ใ‚ฉใƒซใƒ€ใƒผใƒ†ใƒผใƒž '%0' ใ‚’้ธๆŠžใ™ใ‚‹", + }, + }, + colorSelect: { + color: '่‰ฒใ‚’ๅค‰ใˆใ‚‹', + hexCode: 'HEX ใ‚ซใƒฉใƒผใ‚ณใƒผใƒ‰ใ‚’ๅ…ฅๅŠ›ใ™ใ‚‹', + wrongHexCode: '็„กๅŠนใช HEX ใ‚ซใƒฉใƒผใ‚ณใƒผใƒ‰ใงใ™๏ผ', + }, + opacity: { + inputPlaceholder: 'ไธ้€ๆ˜Žๅบฆ๏ผˆ0ใ€œ1๏ผ‰', + wrongValue: 'ๅ€คใฏ0ใ‹ใ‚‰1ใฎ้–“ใซใ—ใฆใใ ใ•ใ„๏ผ', + }, + toggleSwitch: { + on: 'ON', + off: 'OFF', + }, + explorerArrows: { + toggle: 'ใƒ•ใ‚ฉใƒซใƒ€ใƒผใฎ็Ÿขๅฐใ‚’ๅˆ‡ใ‚Šๆ›ฟใˆใ‚‹', + enable: 'ใƒ•ใ‚ฉใƒซใƒ€ใƒผใฎ็Ÿขๅฐใ‚’่กจ็คบใ™ใ‚‹', + disable: 'ใƒ•ใ‚ฉใƒซใƒ€ใƒผใฎ็Ÿขๅฐใ‚’้š ใ™', + }, + grayscale: { + toggle: 'ใ‚ฐใƒฌใƒผใ‚นใ‚ฑใƒผใƒซใ‚ขใ‚คใ‚ณใƒณใ‚’ๅˆ‡ใ‚Šๆ›ฟใˆใ‚‹', + enable: 'ใ‚ฐใƒฌใƒผใ‚นใ‚ฑใƒผใƒซใ‚ขใ‚คใ‚ณใƒณใ‚’ๆœ‰ๅŠนใซใ™ใ‚‹', + disable: 'ใ‚ฐใƒฌใƒผใ‚นใ‚ฑใƒผใƒซใ‚ขใ‚คใ‚ณใƒณใ‚’็„กๅŠนใซใ™ใ‚‹', + }, + saturation: { + inputPlaceholder: 'ๅฝฉๅบฆ๏ผˆ0ใ€œ1๏ผ‰', + wrongValue: 'ๅ€คใฏ0ใ‹ใ‚‰1ใฎ้–“ใซใ—ใฆใใ ใ•ใ„๏ผ', + }, +}; diff --git a/src/material-icons/src/core/i18n/translations/lang-ko.ts b/src/material-icons/src/core/i18n/translations/lang-ko.ts new file mode 100644 index 0000000..ae46858 --- /dev/null +++ b/src/material-icons/src/core/i18n/translations/lang-ko.ts @@ -0,0 +1,45 @@ +import type { Translation } from '../../models/i18n/translation'; + +export const translation: Translation = { + activate: 'ํ™œ์„ฑํ™”', + activated: 'Material Icon Theme์ด ํ™œ์„ฑํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.', + iconPacks: { + selectPack: '์•„์ด์ฝ˜ ํŒฉ ์„ ํƒ', + description: "'%0' ์•„์ด์ฝ˜ ํŒฉ ์„ ํƒ", + disabled: '์•„์ด์ฝ˜ ํŒฉ ๋น„ํ™œ์„ฑํ™”', + }, + folders: { + toggleIcons: 'ํด๋” ํ…Œ๋งˆ ์„ ํƒ', + disabled: 'ํด๋” ์•„์ด์ฝ˜ ์—†์Œ', + theme: { + description: "'%0' ํด๋” ํ…Œ๋งˆ ์„ ํƒ", + }, + }, + colorSelect: { + color: '์ƒ‰์ƒ ์„ ํƒ', + hexCode: 'HEX ์ƒ‰์ƒ ์ฝ”๋“œ ์ž…๋ ฅ', + wrongHexCode: '์œ ํšจํ•˜์ง€ ์•Š์€ HEX ์ƒ‰์ƒ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค!', + }, + opacity: { + inputPlaceholder: 'ํˆฌ๋ช…๋„ ๊ฐ’ (0๊ณผ 1 ์‚ฌ์ด)', + wrongValue: '0๊ณผ 1 ์‚ฌ์ด์˜ ๋ถ€๋™ ์†Œ์ˆ˜์  ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”.', + }, + toggleSwitch: { + on: '์ผœ์ง', + off: '๊บผ์ง', + }, + explorerArrows: { + toggle: 'ํŒŒ์ผ ํƒ์ƒ‰๊ธฐ์˜ ํด๋” ํ™”์‚ดํ‘œ ์„ค์ •', + enable: 'ํŒŒ์ผ ํƒ์ƒ‰๊ธฐ์˜ ํด๋” ํ™”์‚ดํ‘œ ํ‘œ์‹œ', + disable: 'ํŒŒ์ผ ํƒ์ƒ‰๊ธฐ์˜ ํด๋” ํ™”์‚ดํ‘œ ์ˆจ๊ธฐ๊ธฐ', + }, + grayscale: { + toggle: '๊ทธ๋ ˆ์ด์Šค์ผ€์ผ ์•„์ด์ฝ˜ ์„ค์ •', + enable: '๊ทธ๋ ˆ์ด์Šค์ผ€์ผ ์•„์ด์ฝ˜ ํ™œ์„ฑํ™”', + disable: '๊ทธ๋ ˆ์ด์Šค์ผ€์ผ ์•„์ด์ฝ˜ ๋น„ํ™œ์„ฑํ™”', + }, + saturation: { + inputPlaceholder: '์ฑ„๋„ ๊ฐ’ (0๊ณผ 1 ์‚ฌ์ด)', + wrongValue: '0๊ณผ 1 ์‚ฌ์ด์˜ ๋ถ€๋™ ์†Œ์ˆ˜์  ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”.', + }, +}; diff --git a/src/material-icons/src/core/i18n/translations/lang-nl.ts b/src/material-icons/src/core/i18n/translations/lang-nl.ts new file mode 100644 index 0000000..77fa552 --- /dev/null +++ b/src/material-icons/src/core/i18n/translations/lang-nl.ts @@ -0,0 +1,45 @@ +import type { Translation } from '../../models/i18n/translation'; + +export const translation: Translation = { + activate: 'Activeer', + activated: 'Material Icon Thema is actief.', + iconPacks: { + selectPack: 'Selecteer een iconpakket', + description: "Selecteer het '%0' iconpakket", + disabled: 'Zet iconpaketten uit', + }, + folders: { + toggleIcons: 'Kies een folderthema', + disabled: 'Geen foldericons', + theme: { + description: "Selecteer het '%0' folderthema", + }, + }, + colorSelect: { + color: 'Kies een kleur', + hexCode: 'Voeg een HEX kleurcode in', + wrongHexCode: 'Ongeldige HEX kleurcode!', + }, + opacity: { + inputPlaceholder: 'Doorzichtbaarheidswaarde (tussen 0 en 1)', + wrongValue: 'De waarde moet tussen de 0 en 1 zijn!', + }, + toggleSwitch: { + on: 'AAN', + off: 'UIT', + }, + explorerArrows: { + toggle: 'Zet folderpijlen aan of uit', + enable: 'Laat folderpijlen zien', + disable: 'Verberg folderpijlen', + }, + grayscale: { + toggle: 'Zet grijsgetinte icons aan of uit', + enable: 'Zet grijsgetinte icons aan', + disable: 'Zet grijsgetinte icons uit', + }, + saturation: { + inputPlaceholder: 'Saturatiewaarde (tussen 0 en 1)', + wrongValue: 'De waarde moet tussen de 0 en 1 zijn!', + }, +}; diff --git a/src/material-icons/src/core/i18n/translations/lang-pl.ts b/src/material-icons/src/core/i18n/translations/lang-pl.ts new file mode 100644 index 0000000..d44fe02 --- /dev/null +++ b/src/material-icons/src/core/i18n/translations/lang-pl.ts @@ -0,0 +1,45 @@ +import type { Translation } from '../../models/i18n/translation'; + +export const translation: Translation = { + activate: 'Aktywuj', + activated: 'Motyw Material Icon jest aktywny.', + iconPacks: { + selectPack: 'Wybierz paczkฤ™ ikon', + description: "Wybierz paczkฤ™ ikon '%0'", + disabled: 'Wyล‚ฤ…cz paczki ikon', + }, + folders: { + toggleIcons: 'Wybierz motyw folderรณw', + disabled: 'Brak ikon folderรณw', + theme: { + description: "Wybierz motyw folderรณw '%0'", + }, + }, + colorSelect: { + color: 'Wybierz kolor', + hexCode: 'Podaj kolor w formacie HEX', + wrongHexCode: 'Nieprawidล‚owy kolor HEX!', + }, + opacity: { + inputPlaceholder: 'Wartoล›ฤ‡ przezroczystoล›ci (pomiฤ™dzy 0 a 1)', + wrongValue: 'Wartoล›ฤ‡ musi byฤ‡ pomiฤ™dzy 0 i 1!', + }, + toggleSwitch: { + on: 'Wลฤ„CZONE', + off: 'WYลฤ„CZONE', + }, + explorerArrows: { + toggle: 'Przeล‚ฤ…cz strzaล‚ki przy folderach', + enable: 'Pokaลผ strzaล‚ki przy folderach', + disable: 'Schowaj strzaล‚ki przy folderach', + }, + grayscale: { + toggle: 'Przeล‚ฤ…cz czarno-biaล‚e ikony', + enable: 'Wล‚ฤ…cz czarno-biaล‚e ikony', + disable: 'Wyล‚ฤ…cz czarno-biaล‚e ikony', + }, + saturation: { + inputPlaceholder: 'Wartoล›ฤ‡ nasycenia (pomiฤ™dzy 0 a 1)', + wrongValue: 'Wartoล›ฤ‡ musi byฤ‡ pomiฤ™dzy 0 i 1!', + }, +}; diff --git a/src/material-icons/src/core/i18n/translations/lang-pt-br.ts b/src/material-icons/src/core/i18n/translations/lang-pt-br.ts new file mode 100644 index 0000000..ecbbe3f --- /dev/null +++ b/src/material-icons/src/core/i18n/translations/lang-pt-br.ts @@ -0,0 +1,45 @@ +import type { Translation } from '../../models/i18n/translation'; + +export const translation: Translation = { + activate: 'Ativar', + activated: 'O Material Icon Theme estรก ativo.', + iconPacks: { + selectPack: 'Selecione um pacote de รญcones', + description: "Selecionar o pacote de รญcones '%0'", + disabled: 'Desabilitar pacotes de รญcones', + }, + folders: { + toggleIcons: 'Escolha um tema para as pastas', + disabled: 'Nenhum รญcone de pasta', + theme: { + description: "Selecionar o tema para pastas '%0'", + }, + }, + colorSelect: { + color: 'Escolha uma cor', + hexCode: 'Insira um cรณdigo de cor hexadecimal', + wrongHexCode: 'Cรณdigo de cor hexadecimal invรกlido!', + }, + opacity: { + inputPlaceholder: 'Valor de opacidade (entre 0 e 1)', + wrongValue: 'O valor deve estar entre 0 e 1!', + }, + toggleSwitch: { + on: 'ON', + off: 'OFF', + }, + explorerArrows: { + toggle: 'Alternar setas do explorador de arquivos', + enable: 'Exibir setas do explorador de arquivos', + disable: 'Ocultar setas do explorador de arquivos', + }, + grayscale: { + toggle: 'Alternar os รญcones em escala de cinza', + enable: 'Habilitar รญcones em escala de cinza', + disable: 'Desativar รญcones em escala de cinza', + }, + saturation: { + inputPlaceholder: 'Valor de saturaรงรฃo (entre 0 e 1)', + wrongValue: 'O valor deve estar entre 0 e 1!', + }, +}; diff --git a/src/material-icons/src/core/i18n/translations/lang-pt-pt.ts b/src/material-icons/src/core/i18n/translations/lang-pt-pt.ts new file mode 100644 index 0000000..ba093f7 --- /dev/null +++ b/src/material-icons/src/core/i18n/translations/lang-pt-pt.ts @@ -0,0 +1,45 @@ +import type { Translation } from '../../models/i18n/translation'; + +export const translation: Translation = { + activate: 'Habilitar', + activated: 'O Material Icon Theme estรก habilitado.', + iconPacks: { + selectPack: 'Seleccione um pacote de รญcones', + description: "Seleccionar o pacote de รญcones '%0'", + disabled: 'Desabilitar pacotes de รญcones', + }, + folders: { + toggleIcons: 'Escolhe um tema para os directรณrios', + disabled: 'Nenhum รญcone do directรณrio', + theme: { + description: "Seleccionar o tema para directรณrios '%0'", + }, + }, + colorSelect: { + color: 'Escolhe uma cor', + hexCode: 'Insira um cรณdigo de cor hexadecimal', + wrongHexCode: 'Cรณdigo de cor hexadecimal invรกlido!', + }, + opacity: { + inputPlaceholder: 'Valor de opacidade (entre 0 e 1)', + wrongValue: 'O valor deve estar entre 0 e 1!', + }, + toggleSwitch: { + on: 'ON', + off: 'OFF', + }, + explorerArrows: { + toggle: 'Alternar setas do explorador de ficheiros', + enable: 'Exibir setas do explorador de ficheiros', + disable: 'Ocultar setas do explorador de ficheiros', + }, + grayscale: { + toggle: 'Alternar รญcones em escala de cinzentos', + enable: 'Habilitar รญcones em escala de cinzentos', + disable: 'Desactivar รญcones em escala de cinzentos', + }, + saturation: { + inputPlaceholder: 'Valor de saturaรงรฃo (entre 0 e 1)', + wrongValue: 'O valor deve estar entre 0 e 1!', + }, +}; diff --git a/src/material-icons/src/core/i18n/translations/lang-ru.ts b/src/material-icons/src/core/i18n/translations/lang-ru.ts new file mode 100644 index 0000000..f30c909 --- /dev/null +++ b/src/material-icons/src/core/i18n/translations/lang-ru.ts @@ -0,0 +1,45 @@ +import type { Translation } from '../../models/i18n/translation'; + +export const translation: Translation = { + activate: 'ะะบั‚ะธะฒะธั€ะพะฒะฐั‚ัŒ', + activated: 'Material Icon Theme ะฐะบั‚ะธะฒะตะฝ.', + iconPacks: { + selectPack: 'ะ’ั‹ะฑั€ะฐั‚ัŒ ะฝะฐะฑะพั€ ะธะบะพะฝะพะบ', + description: "ะ’ั‹ะฑั€ะฐั‚ัŒ '%0' ะฝะฐะฑะพั€ ะธะบะพะฝะพะบ", + disabled: 'ะ’ั‹ะบะปัŽั‡ะธั‚ัŒ ะฝะฐะฑะพั€ ะธะบะพะฝะพะบ', + }, + folders: { + toggleIcons: 'ะ’ั‹ะฑั€ะฐั‚ัŒ ั‚ะตะผัƒ ะฟะฐะฟะบะธ', + disabled: 'ะะตั‚ ะธะบะพะฝะพะบ ะดะปั ะฟะฐะฟะบะธ', + theme: { + description: "ะ’ั‹ะฑั€ะฐั‚ัŒ '%0' ั‚ะตะผัƒ ะฟะฐะฟะบะธ", + }, + }, + colorSelect: { + color: 'ะ’ั‹ะฑะตั€ะธั‚ะต ั†ะฒะตั‚', + hexCode: 'ะ’ัั‚ะฐะฒะธั‚ัŒ HEX-ะบะพะด ั†ะฒะตั‚ะฐ', + wrongHexCode: 'ะะตะฒะตั€ะฝั‹ะน HEX-ะบะพะด ั†ะฒะตั‚ะฐ!', + }, + opacity: { + inputPlaceholder: 'ะ—ะฝะฐั‡ะตะฝะธะต ะฝะตะฟั€ะพะทั€ะฐั‡ะฝะพัั‚ะธ (ะผะตะถะดัƒ 0 ะธ 1)', + wrongValue: 'ะ—ะฝะฐั‡ะตะฝะธะต ะดะพะปะถะฝะพ ะฑั‹ั‚ัŒ ะผะตะถะดัƒ 0 ะธ 1!', + }, + toggleSwitch: { + on: 'ะ’ะบะปัŽั‡ะธั‚ัŒ', + off: 'ะ’ั‹ะบะปัŽั‡ะธั‚ัŒ', + }, + explorerArrows: { + toggle: 'ะŸะพะบะฐะทะฐั‚ัŒ/ัะบั€ั‹ั‚ัŒ ัั‚ั€ะตะปะบะธ ัƒ ะฟะฐะฟะพะบ', + enable: 'ะŸะพะบะฐะทะฐั‚ัŒ ัั‚ั€ะตะปะบะธ ัƒ ะฟะฐะฟะพะบ', + disable: 'ะกะบั€ั‹ั‚ัŒ ัั‚ั€ะตะปะบะธ ัƒ ะฟะฐะฟะพะบ', + }, + grayscale: { + toggle: 'ะŸะตั€ะตะบะปัŽั‡ะตะฝะธะต ัะตั€ั‹ั… ะทะฝะฐั‡ะบะพะฒ', + enable: 'ะ’ะบะปัŽั‡ะธั‚ัŒ ะทะฝะฐั‡ะบะธ ะฒ ะพั‚ั‚ะตะฝะบะฐั… ัะตั€ะพะณะพ', + disable: 'ะžั‚ะบะปัŽั‡ะธั‚ัŒ ะทะฝะฐั‡ะบะธ ะฒ ะพั‚ั‚ะตะฝะบะฐั… ัะตั€ะพะณะพ', + }, + saturation: { + inputPlaceholder: 'ะ—ะฝะฐั‡ะตะฝะธะต ะฝะฐัั‹ั‰ะตะฝะฝะพัั‚ะธ (ะผะตะถะดัƒ 0 ะธ 1)', + wrongValue: 'ะ—ะฝะฐั‡ะตะฝะธะต ะดะพะปะถะฝะพ ะฑั‹ั‚ัŒ ะผะตะถะดัƒ 0 ะธ 1!', + }, +}; diff --git a/src/material-icons/src/core/i18n/translations/lang-uk.ts b/src/material-icons/src/core/i18n/translations/lang-uk.ts new file mode 100644 index 0000000..982d509 --- /dev/null +++ b/src/material-icons/src/core/i18n/translations/lang-uk.ts @@ -0,0 +1,45 @@ +import type { Translation } from '../../models/i18n/translation'; + +export const translation: Translation = { + activate: 'ะะบั‚ะธะฒัƒะฒะฐั‚ะธ', + activated: 'Material Icon Theme ะฐะบั‚ะธะฒะพะฒะฐะฝะธะน.', + iconPacks: { + selectPack: 'ะ’ะธะฑะตั€ั–ั‚ัŒ ะฝะฐะฑั–ั€ ั–ะบะพะฝะพะบ', + description: "ะ’ะธะฑะตั€ั–ั‚ัŒ ะฝะฐะฑั–ั€ ะทะฝะฐั‡ะบั–ะฒ '%0'", + disabled: 'ะ’ะธะผะบะฝัƒั‚ะธ ะฟะฐะบะตั‚ะธ ะทะฝะฐั‡ะบั–ะฒ', + }, + folders: { + toggleIcons: 'ะŸะตั€ะตะบะปัŽั‡ะธั‚ะธ ั‚ะตะบัƒ icons', + disabled: 'ะะตะผะฐั” ะฟั–ะบั‚ะพะณั€ะฐะผ ะฟะฐะฟะพะบ', + theme: { + description: "ะ’ะธะฑะตั€ั–ั‚ัŒ ั‚ะตะผัƒ ะฟะฐะฟะบะธ '%0'", + }, + }, + colorSelect: { + color: 'ะ’ะธะฑะตั€ั–ั‚ัŒ ะบะพะปั–ั€', + hexCode: 'ะ’ะฒะตะดั–ั‚ัŒ HEX ะบะพะปั–ั€ะฝะธะน ะบะพะด', + wrongHexCode: 'ะะตะดั–ะนัะฝะธะน HEX ะบะพะปั–ั€ะฝะธะน ะบะพะด!', + }, + opacity: { + inputPlaceholder: 'ะ—ะฝะฐั‡ะตะฝะฝั ะฝะตะฟั€ะพะทะพั€ะพัั‚ั– (ะฒั–ะด 0 ะดะพ 1)', + wrongValue: 'ะ—ะฝะฐั‡ะตะฝะฝั ะผะฐั” ะฑัƒั‚ะธ ะฒั–ะด 0 ะดะพ 1!', + }, + toggleSwitch: { + on: 'ะ’ะบะปัŽั‡ะธั‚ะธ', + off: 'ะ’ั–ะดะบะปัŽั‡ะธั‚ะธ', + }, + explorerArrows: { + toggle: 'ะกั‚ั€ั–ะปะบะธ ะดะปั ะฟะตั€ะตะผะธะบะฐะฝะฝั ะฟะฐะฟะพะบ', + enable: 'ะŸะพะบะฐะทะฐั‚ะธ ัั‚ั€ั–ะปะบะธ ะฟะฐะฟะบะธ', + disable: 'ะŸั€ะธั…ะพะฒะฐั‚ะธ ัั‚ั€ั–ะปะบะธ ะฟะฐะฟะบะธ', + }, + grayscale: { + toggle: 'ะŸะตั€ะตะผะธะบะฐะฝะฝั ะทะฝะฐั‡ะบั–ะฒ ัƒ ะฒั–ะดั‚ั–ะฝะบะฐั… ัั–ั€ะพะณะพ', + enable: 'ะฃะฒั–ะผะบะฝัƒั‚ะธ ะทะฝะฐั‡ะบะธ ัƒ ะฒั–ะดั‚ั–ะฝะบะฐั… ัั–ั€ะพะณะพ', + disable: 'ะ’ะธะผะบะฝัƒั‚ะธ ะทะฝะฐั‡ะบะธ ัƒ ะฒั–ะดั‚ั–ะฝะบะฐั… ัั–ั€ะพะณะพ', + }, + saturation: { + inputPlaceholder: 'ะ—ะฝะฐั‡ะตะฝะฝั ะฝะฐัะธั‡ะตะฝะฝั (ะฒั–ะด 0 ะดะพ 1)', + wrongValue: 'ะ—ะฝะฐั‡ะตะฝะฝั ะผะฐั” ะฑัƒั‚ะธ ะฒั–ะด 0 ะดะพ 1!', + }, +}; diff --git a/src/material-icons/src/core/i18n/translations/lang-zh-cn.ts b/src/material-icons/src/core/i18n/translations/lang-zh-cn.ts new file mode 100644 index 0000000..033a461 --- /dev/null +++ b/src/material-icons/src/core/i18n/translations/lang-zh-cn.ts @@ -0,0 +1,45 @@ +import type { Translation } from '../../models/i18n/translation'; + +export const translation: Translation = { + activate: 'ๆฟ€ๆดป', + activated: 'Materialไธป้ข˜ๅ›พๆ ‡ๅทฒๆฟ€ๆดป', + iconPacks: { + selectPack: '้€‰ๆ‹ฉๅ›พๆ ‡ๅŒ…', + description: '้€‰ๆ‹ฉ๏ผ…0็ฌฆๅท', + disabled: '็ฆ็”จๅ›พๆ ‡ๅŒ…', + }, + folders: { + toggleIcons: 'ๅˆ‡ๆขๆ–‡ไปถๅคนๅ›พๆ ‡็š„ๆ˜พ็คบ', + disabled: 'ไธๆ˜พ็คบๆ–‡ไปถๅคนๅ›พๆ ‡', + theme: { + description: "'%0'ไธป้ข˜็š„ๆ–‡ไปถๅคนๅ›พๆ ‡", + }, + }, + colorSelect: { + color: '้€‰ๆ‹ฉ้ขœ่‰ฒ', + hexCode: 'ๆ’ๅ…ฅHEX้ขœ่‰ฒไปฃ็ ', + wrongHexCode: 'ๆ— ๆ•ˆ็š„HEX้ขœ่‰ฒไปฃ็ ๏ผ', + }, + opacity: { + inputPlaceholder: 'ไธ้€ๆ˜Žๅบฆๅ€ผ๏ผˆ0ๅ’Œ1ไน‹้—ด๏ผ‰', + wrongValue: '่ฏฅๅ€ผๅฟ…้กปไป‹ไบŽ0ๅ’Œ1ไน‹้—ด๏ผ', + }, + toggleSwitch: { + on: 'ON', + off: 'OFF', + }, + explorerArrows: { + toggle: 'ๅˆ‡ๆขๆ–‡ไปถๅคน็ฎญๅคด', + enable: 'ๆ˜พ็คบๆ–‡ไปถๅคน็ฎญๅคด', + disable: '้š่—ๆ–‡ไปถๅคน็ฎญๅคด', + }, + grayscale: { + toggle: 'ๅˆ‡ๆข็ฐๅบฆๅ›พๆ ‡', + enable: 'ๅฏ็”จ็ฐๅบฆๅ›พๆ ‡', + disable: '็ฆ็”จ็ฐๅบฆๅ›พๆ ‡', + }, + saturation: { + inputPlaceholder: '้ฅฑๅ’Œๅบฆๅ€ผ๏ผˆๅœจ0ๅ’Œ1ไน‹้—ด๏ผ‰ใ€‚', + wrongValue: '่ฏฅๅ€ผๅฟ…้กปๅœจ0ๅ’Œ1ไน‹้—ด!', + }, +}; diff --git a/src/material-icons/src/core/i18n/translations/lang-zh-tw.ts b/src/material-icons/src/core/i18n/translations/lang-zh-tw.ts new file mode 100644 index 0000000..2dd985d --- /dev/null +++ b/src/material-icons/src/core/i18n/translations/lang-zh-tw.ts @@ -0,0 +1,45 @@ +import type { Translation } from '../../models/i18n/translation'; + +export const translation: Translation = { + activate: 'ๆฟ€ๆดป', + activated: 'Materialไธป้กŒๅœ–ๆจ™ๅทฒๆฟ€ๆดป', + iconPacks: { + selectPack: '้ธๆ“‡ๅœ–ๆจ™ๅŒ…', + description: '้ธๆ“‡๏ผ…0็ฌฆ่™Ÿ', + disabled: '็ฆ็”จๅœ–ๆจ™ๅŒ…', + }, + folders: { + toggleIcons: 'ๅˆ‡ๆ›ๆ–‡ไปถๅคพๅœ–ๆจ™็š„้กฏ็คบ', + disabled: 'ไธ้กฏ็คบๆ–‡ไปถๅคพๅœ–ๆจ™', + theme: { + description: "'%0'ไธป้กŒ็š„ๆ–‡ไปถๅคพๅœ–ๆจ™", + }, + }, + colorSelect: { + color: '้€‰ๆ‹ฉ้ขœ่‰ฒ', + hexCode: 'ๆ’ๅ…ฅHEX้ก่‰ฒไปฃ็ขผ', + wrongHexCode: '็„กๆ•ˆ็š„HEX้ก่‰ฒไปฃ็ขผ๏ผ', + }, + opacity: { + inputPlaceholder: 'ไธ้€ๆ˜Žๅบฆๅ€ผ๏ผˆ0ๅ’Œ1ไน‹้–“๏ผ‰', + wrongValue: '่ฉฒๅ€ผๅฟ…้ ˆไป‹ๆ–ผ0ๅ’Œ1ไน‹้–“๏ผ', + }, + toggleSwitch: { + on: 'ON', + off: 'OFF', + }, + explorerArrows: { + toggle: 'ๅˆ‡ๆ›ๆ–‡ไปถๅคพ็ฎญ้ ญ', + enable: '้กฏ็คบๆ–‡ไปถๅคพ็ฎญ้ ญ', + disable: '้šฑ่—ๆ–‡ไปถๅคพ็ฎญ้ ญ', + }, + grayscale: { + toggle: 'ๅˆ‡ๆ›็ฐๅบฆๅœ–ๆจ™', + enable: 'ๅ•Ÿ็”จ็ฐๅบฆๅœ–ๆจ™', + disable: '็ฆ็”จ็ฐๅบฆๅœ–ๆจ™', + }, + saturation: { + inputPlaceholder: '้ฃฝๅ’Œๅบฆๅ€ผ๏ผˆๅœจ0ๅ’Œ1ไน‹้–“๏ผ‰ใ€‚', + wrongValue: '่ฉฒๅ€ผๅฟ…้ ˆๅœจ0ๅ’Œ1ไน‹้–“!', + }, +}; diff --git a/src/material-icons/src/core/icons/fileIcons.ts b/src/material-icons/src/core/icons/fileIcons.ts new file mode 100644 index 0000000..cab494c --- /dev/null +++ b/src/material-icons/src/core/icons/fileIcons.ts @@ -0,0 +1,2598 @@ +import type { FileIcons } from '../models/icons/files/fileTypes'; +import { IconPack } from '../models/icons/iconPack'; +import { FileNamePattern } from '../models/icons/patterns/patterns'; +import { parseByPattern } from '../patterns/patterns'; + +/** + * Defines file icons + */ +export const fileIcons: FileIcons = { + defaultIcon: { name: 'file' }, + icons: parseByPattern([ + { name: 'html', fileExtensions: ['htm', 'xhtml', 'html_vm', 'asp'] }, + { + name: 'pug', + fileExtensions: ['jade', 'pug'], + fileNames: ['.pug-lintrc', '.pug-lintrc.js', '.pug-lintrc.json'], + }, + { + name: 'markdown', + fileExtensions: ['md', 'markdown', 'rst'], + }, + { name: 'blink', fileExtensions: ['blink'], light: true }, + { name: 'css', fileExtensions: ['css'] }, + { name: 'sass', fileExtensions: ['scss', 'sass'] }, + { name: 'less', fileExtensions: ['less'] }, + { name: 'just', fileNames: ['justfile', '.justfile'] }, + { + name: 'json', + fileExtensions: [ + 'json', + 'jsonc', + 'tsbuildinfo', + 'json5', + 'jsonl', + 'ndjson', + ], + fileNames: [ + '.jscsrc', + '.jshintrc', + 'composer.lock', + '.jsbeautifyrc', + '.esformatter', + 'cdp.pid', + '.lintstagedrc', + '.whitesource', + ], + }, + { + name: 'hjson', + fileExtensions: ['hjson'], + }, + { + name: 'jinja', + fileExtensions: ['jinja', 'jinja2', 'j2', 'jinja-html'], + light: true, + }, + { name: 'proto', fileExtensions: ['proto'] }, + { + name: 'playwright', + fileNames: [ + 'playwright.config.js', + 'playwright.config.mjs', + 'playwright.config.ts', + 'playwright.config.base.js', + 'playwright.config.base.mjs', + 'playwright.config.base.ts', + 'playwright-ct.config.js', + 'playwright-ct.config.mjs', + 'playwright-ct.config.ts', + ], + }, + { + name: 'sublime', + fileExtensions: ['sublime-project', 'sublime-workspace'], + }, + { name: 'twine', fileExtensions: ['tw', 'twee'] }, + { + name: 'yaml', + fileExtensions: ['yml.dist', 'yaml.dist', 'YAML-tmLanguage'], + }, + { + name: 'xml', + fileExtensions: [ + 'xml', + 'plist', + 'xsd', + 'dtd', + 'xsl', + 'xslt', + 'resx', + 'iml', + 'xquery', + 'tmLanguage', + 'manifest', + 'project', + 'xml.dist', + 'xml.dist.sample', + 'dmn', + 'jrxml', + ], + fileNames: ['.htaccess'], + }, + { + name: 'image', + fileExtensions: [ + 'png', + 'jpeg', + 'jpg', + 'gif', + 'ico', + 'tif', + 'tiff', + 'psd', + 'psb', + 'ami', + 'apx', + 'avif', + 'bmp', + 'bpg', + 'brk', + 'cur', + 'dds', + 'dng', + 'exr', + 'fpx', + 'gbr', + 'img', + 'jbig2', + 'jb2', + 'jng', + 'jxr', + 'pgf', + 'pic', + 'raw', + 'webp', + 'eps', + 'afphoto', + 'ase', + 'aseprite', + 'clip', + 'cpt', + 'heif', + 'heic', + 'kra', + 'mdp', + 'ora', + 'pdn', + 'reb', + 'sai', + 'tga', + 'xcf', + 'jfif', + 'ppm', + 'pbm', + 'pgm', + 'pnm', + 'icns', + ], + }, + { name: 'javascript', fileExtensions: ['esx', 'mjs'] }, + { name: 'react', fileExtensions: ['jsx'] }, + { name: 'react_ts', fileExtensions: ['tsx'] }, + { + name: 'rocket', + fileNames: [ + '.release-it.json', + '.release-it.ts', + '.release-it.js', + '.release-it.cjs', + '.release-it.yaml', + '.release-it.yml', + '.release-it.toml', + 'release.toml', + 'release-plz.toml', + '.release-plz.toml', + ], + }, + { + name: 'routing', + fileExtensions: [ + 'routing.ts', + 'routing.tsx', + 'routing.js', + 'routing.jsx', + 'routes.ts', + 'routes.tsx', + 'routes.js', + 'routes.jsx', + ], + fileNames: [ + 'router.js', + 'router.jsx', + 'router.ts', + 'router.tsx', + 'routes.js', + 'routes.jsx', + 'routes.ts', + 'routes.tsx', + ], + enabledFor: [ + IconPack.Angular, + IconPack.Ngrx, + IconPack.React, + IconPack.Redux, + IconPack.Vue, + IconPack.Vuex, + ], + }, + { + name: 'redux-action', + fileExtensions: ['action.js', 'actions.js', 'action.ts', 'actions.ts'], + fileNames: ['action.js', 'actions.js', 'action.ts', 'actions.ts'], + enabledFor: [IconPack.Redux], + }, + { + name: 'redux-reducer', + fileExtensions: [ + 'reducer.js', + 'reducers.js', + 'reducer.ts', + 'reducers.ts', + ], + fileNames: ['reducer.js', 'reducers.js', 'reducer.ts', 'reducers.ts'], + enabledFor: [IconPack.Redux], + }, + { + name: 'redux-selector', + fileExtensions: [ + 'selector.js', + 'selectors.js', + 'selector.ts', + 'selectors.ts', + ], + fileNames: ['selector.js', 'selectors.js', 'selector.ts', 'selectors.ts'], + enabledFor: [IconPack.Redux], + }, + { + name: 'redux-store', + fileExtensions: ['store.js', 'store.ts'], + fileNames: ['store.js', 'store.ts'], + enabledFor: [IconPack.Redux], + }, + { + name: 'settings', + fileExtensions: [ + 'ini', + 'dlc', + 'config', + 'conf', + 'properties', + 'prop', + 'settings', + 'option', + 'props', + 'toml', + 'prefs', + 'sln.dotsettings', + 'sln.dotsettings.user', + 'cfg', + 'cnf', + ], + fileNames: [ + '.jshintignore', + '.buildignore', + '.mrconfig', + '.yardopts', + 'manifest.mf', + '.clang-format', + '.clang-tidy', + '.conf', + ], + }, + { + name: 'typescript-def', + fileExtensions: ['d.ts', 'd.cts', 'd.mts'], + }, + { name: 'markojs', fileExtensions: ['marko'] }, + { + name: 'astro', + fileExtensions: ['astro'], + }, + { + name: 'astro-config', + fileNames: [ + 'astro.config.js', + 'astro.config.mjs', + 'astro.config.cjs', + 'astro.config.ts', + 'astro.config.cts', + 'astro.config.mts', + ], + }, + { name: 'pdf', fileExtensions: ['pdf'] }, + { + name: 'table', + fileExtensions: ['xlsx', 'xlsm', 'xls', 'csv', 'tsv', 'psv', 'ods'], + }, + { + name: 'vscode', + fileExtensions: [ + 'vscodeignore', + 'vsixmanifest', + 'vsix', + 'code-workplace', + 'code-workspace', + 'code-profile', + 'code-snippets', + ], + }, + { + name: 'visualstudio', + fileExtensions: [ + 'csproj', + 'ruleset', + 'sln', + 'slnx', + 'suo', + 'vb', + 'vbs', + 'vcxitems', + 'vcxitems.filters', + 'vcxproj', + 'vcxproj.filters', + ], + }, + { + name: 'database', + fileExtensions: [ + 'pdb', + 'sql', + 'pks', + 'pkb', + 'accdb', + 'mdb', + 'sqlite', + 'sqlite3', + 'pgsql', + 'postgres', + 'plpgsql', + 'psql', + 'db', + 'db3', + 'dblite', + 'dblite3', + 'debugsymbols', + ], + }, + { name: 'kusto', fileExtensions: ['kql'] }, + { name: 'csharp', fileExtensions: ['cs', 'csx', 'csharp'] }, + { name: 'qsharp', fileExtensions: ['qs'] }, + { + name: 'zip', + fileExtensions: [ + 'zip', + 'tar', + 'gz', + 'xz', + 'lzma', + 'lz4', + 'br', + 'bz2', + 'bzip2', + 'gzip', + 'brotli', + '7z', + 'rar', + 'tz', + 'txz', + 'tgz', + 'zst', + ], + }, + { name: 'vala', fileExtensions: ['vala'] }, + { name: 'zig', fileExtensions: ['zig', 'zon'] }, + { name: 'exe', fileExtensions: ['exe', 'msi'] }, + { name: 'hex', fileExtensions: ['dat', 'bin', 'hex'] }, + { name: 'java', fileExtensions: ['java', 'jsp'] }, + { name: 'jar', fileExtensions: ['jar'] }, + { name: 'javaclass', fileExtensions: ['class'] }, + { name: 'c', fileExtensions: ['c', 'i', 'mi'] }, + { name: 'h', fileExtensions: ['h'] }, + { + name: 'cpp', + fileExtensions: ['cc', 'cpp', 'cxx', 'c++', 'cp', 'mii', 'ii'], + }, + { + name: 'hpp', + fileExtensions: ['hh', 'hpp', 'hxx', 'h++', 'hp', 'tcc', 'inl'], + }, + { name: 'rc', fileExtensions: ['rc'] }, + { name: 'go', fileExtensions: ['go'] }, + { + name: 'go-mod', + fileNames: ['go.mod', 'go.sum', 'go.work', 'go.work.sum'], + }, + { name: 'python', fileExtensions: ['py'] }, + { + name: 'python-misc', + fileExtensions: ['pyc', 'whl'], + fileNames: [ + 'requirements.txt', + 'pipfile', + '.python-version', + 'manifest.in', + 'pylintrc', + '.pylintrc', + 'pyproject.toml', + 'py.typed', + ], + }, + { name: 'url', fileExtensions: ['url'] }, + { + name: 'console', + fileExtensions: [ + 'sh', + 'ksh', + 'csh', + 'tcsh', + 'zsh', + 'bash', + 'bat', + 'cmd', + 'awk', + 'fish', + 'exp', + 'nu', + ], + fileNames: ['commit-msg', 'pre-commit', 'pre-push', 'post-merge'], + }, + { + name: 'powershell', + fileExtensions: ['ps1', 'psm1', 'psd1', 'ps1xml', 'psc1', 'pssc'], + }, + { + name: 'gradle', + fileExtensions: ['gradle'], + fileNames: ['gradle.properties', 'gradlew', 'gradle-wrapper.properties'], + }, + { name: 'word', fileExtensions: ['doc', 'docx', 'rtf', 'odt'] }, + { + name: 'certificate', + fileExtensions: ['cer', 'cert', 'crt'], + fileNames: [ + 'copying', + 'copying.md', + 'copying.rst', + 'copying.txt', + 'copyright', + 'copyright.md', + 'copyright.rst', + 'copyright.txt', + 'license', + 'license-agpl', + 'license-apache', + 'license-bsd', + 'license-mit', + 'license-gpl', + 'license-lgpl', + 'license.md', + 'license.rst', + 'license.txt', + 'licence', + 'licence-agpl', + 'licence-apache', + 'licence-bsd', + 'licence-mit', + 'licence-gpl', + 'licence-lgpl', + 'licence.md', + 'licence.rst', + 'licence.txt', + 'unlicense', + 'unlicense.txt', + ], + }, + { + name: 'key', + fileExtensions: [ + 'pub', + 'key', + 'pem', + 'asc', + 'gpg', + 'passwd', + 'shasum', + 'sha256', + 'sha256sum', + 'sha256sums', + ], + fileNames: ['.htpasswd', 'sha256sums', '.secrets'], + }, + { + name: 'font', + fileExtensions: [ + 'woff', + 'woff2', + 'ttf', + 'eot', + 'suit', + 'otf', + 'bmap', + 'fnt', + 'odttf', + 'ttc', + 'font', + 'fonts', + 'sui', + 'ntf', + 'mrf', + ], + }, + { name: 'lib', fileExtensions: ['lib', 'bib', 'a'] }, + { name: 'dll', fileExtensions: ['dll', 'ilk', 'so'] }, + { + name: 'ruby', + fileExtensions: ['rb', 'erb', 'rbs'], + fileNames: ['.ruby-version'], + }, + { name: 'gemfile', fileNames: ['gemfile'] }, + { + name: 'rubocop', + fileNames: ['.rubocop.yml', '.rubocop-todo.yml', '.rubocop_todo.yml'], + light: true, + }, + { name: 'rspec', fileNames: ['.rspec'] }, + { name: 'fsharp', fileExtensions: ['fs', 'fsx', 'fsi', 'fsproj'] }, + { name: 'swift', fileExtensions: ['swift'] }, + { name: 'arduino', fileExtensions: ['ino'] }, + { + name: 'docker', + fileExtensions: [ + 'dockerignore', + 'dockerfile', + 'docker-compose.yml', + 'docker-compose.yaml', + 'containerignore', + 'containerfile', + 'compose.yaml', + 'compose.yml', + ], + fileNames: [ + 'dockerfile', + 'dockerfile.prod', + 'dockerfile.production', + 'dockerfile.alpha', + 'dockerfile.beta', + 'dockerfile.stage', + 'dockerfile.staging', + 'dockerfile.dev', + 'dockerfile.development', + 'dockerfile.local', + 'dockerfile.test', + 'dockerfile.testing', + 'dockerfile.ci', + 'dockerfile.web', + 'dockerfile.worker', + + 'docker-compose.yml', + 'docker-compose.override.yml', + 'docker-compose.prod.yml', + 'docker-compose.production.yml', + 'docker-compose.alpha.yml', + 'docker-compose.beta.yml', + 'docker-compose.stage.yml', + 'docker-compose.staging.yml', + 'docker-compose.dev.yml', + 'docker-compose.development.yml', + 'docker-compose.local.yml', + 'docker-compose.test.yml', + 'docker-compose.testing.yml', + 'docker-compose.ci.yml', + 'docker-compose.web.yml', + 'docker-compose.worker.yml', + + 'docker-compose.yaml', + 'docker-compose.override.yaml', + 'docker-compose.prod.yaml', + 'docker-compose.production.yaml', + 'docker-compose.alpha.yaml', + 'docker-compose.beta.yaml', + 'docker-compose.stage.yaml', + 'docker-compose.staging.yaml', + 'docker-compose.dev.yaml', + 'docker-compose.development.yaml', + 'docker-compose.local.yaml', + 'docker-compose.test.yaml', + 'docker-compose.testing.yaml', + 'docker-compose.ci.yaml', + 'docker-compose.web.yaml', + 'docker-compose.worker.yaml', + + 'containerfile', + 'containerfile.prod', + 'containerfile.production', + 'containerfile.alpha', + 'containerfile.beta', + 'containerfile.stage', + 'containerfile.staging', + 'containerfile.dev', + 'containerfile.development', + 'containerfile.local', + 'containerfile.test', + 'containerfile.testing', + 'containerfile.ci', + 'containerfile.web', + 'containerfile.worker', + + 'compose.yaml', + 'compose.override.yaml', + 'compose.prod.yaml', + 'compose.production.yaml', + 'compose.alpha.yaml', + 'compose.beta.yaml', + 'compose.stage.yaml', + 'compose.staging.yaml', + 'compose.dev.yaml', + 'compose.development.yaml', + 'compose.local.yaml', + 'compose.test.yaml', + 'compose.testing.yaml', + 'compose.ci.yaml', + 'compose.web.yaml', + 'compose.worker.yaml', + + 'compose.yml', + 'compose.override.yml', + 'compose.prod.yml', + 'compose.production.yml', + 'compose.alpha.yml', + 'compose.beta.yml', + 'compose.stage.yml', + 'compose.staging.yml', + 'compose.dev.yml', + 'compose.development.yml', + 'compose.local.yml', + 'compose.test.yml', + 'compose.testing.yml', + 'compose.ci.yml', + 'compose.web.yml', + 'compose.worker.yml', + ], + }, + { name: 'tex', fileExtensions: ['tex', 'sty', 'dtx', 'ltx'] }, + { + name: 'powerpoint', + fileExtensions: [ + 'pptx', + 'ppt', + 'pptm', + 'potx', + 'potm', + 'ppsx', + 'ppsm', + 'pps', + 'ppam', + 'ppa', + 'odp', + ], + }, + { + name: 'video', + fileExtensions: [ + 'webm', + 'mkv', + 'flv', + 'vob', + 'ogv', + 'ogg', + 'gifv', + 'avi', + 'mov', + 'qt', + 'wmv', + 'yuv', + 'rm', + 'rmvb', + 'mp4', + 'm4v', + 'mpg', + 'mp2', + 'mpeg', + 'mpe', + 'mpv', + 'm2v', + ], + }, + { name: 'virtual', fileExtensions: ['vdi', 'vbox', 'vbox-prev'] }, + { name: 'vedic', fileExtensions: ['ved', 'veda', 'vedic'] }, + { name: 'email', fileExtensions: ['ics'], fileNames: ['.mailmap'] }, + { + name: 'audio', + fileExtensions: ['mp3', 'flac', 'm4a', 'wma', 'aiff', 'wav'], + }, + { name: 'coffee', fileExtensions: ['coffee', 'cson', 'iced'] }, + { name: 'document', fileExtensions: ['txt'] }, + { + name: 'graphql', + fileExtensions: ['graphql', 'gql'], + fileNames: ['.graphqlconfig'], + patterns: { + graphql: FileNamePattern.Ecmascript, + }, + }, + { name: 'rust', fileExtensions: ['rs', 'ron'] }, + { name: 'raml', fileExtensions: ['raml'] }, + { name: 'xaml', fileExtensions: ['xaml'] }, + { name: 'haskell', fileExtensions: ['hs'] }, + { name: 'kotlin', fileExtensions: ['kt', 'kts'] }, + { + name: 'mist', + fileExtensions: ['mist.js', 'mist.ts', 'mist.jsx', 'mist.tsx'], + clone: { + base: 'liquid', + color: 'blue-500', + }, + }, + { name: 'otne', fileExtensions: ['otne'] }, + { + name: 'git', + fileExtensions: ['patch'], + fileNames: [ + '.git', + '.gitignore', + '.gitmessage', + '.gitignore-global', + '.gitignore_global', + '.gitattributes', + '.gitattributes-global', + '.gitattributes_global', + '.gitconfig', + '.gitmodules', + '.gitkeep', + '.keep', + '.gitpreserve', + '.gitinclude', + '.git-blame-ignore', + '.git-blame-ignore-revs', + '.git-for-windows-updater', + 'git-history', + ], + }, + { name: 'lua', fileExtensions: ['lua'], fileNames: ['.luacheckrc'] }, + { name: 'clojure', fileExtensions: ['clj', 'cljs', 'cljc'] }, + { name: 'groovy', fileExtensions: ['groovy'] }, + { name: 'r', fileExtensions: ['r', 'rmd'], fileNames: ['.Rhistory'] }, + { name: 'dart', fileExtensions: ['dart'], fileNames: ['.pubignore'] }, + { name: 'dart_generated', fileExtensions: ['freezed.dart', 'g.dart'] }, + { name: 'actionscript', fileExtensions: ['as'] }, + { name: 'mxml', fileExtensions: ['mxml'] }, + { name: 'autohotkey', fileExtensions: ['ahk'] }, + { name: 'flash', fileExtensions: ['swf'] }, + { name: 'swc', fileExtensions: ['swc'] }, + { + name: 'cmake', + fileExtensions: ['cmake'], + fileNames: ['cmakelists.txt', 'cmakecache.txt'], + }, + { + name: 'assembly', + fileExtensions: [ + 'asm', + 'a51', + 'inc', + 'nasm', + 's', + 'ms', + 'agc', + 'ags', + 'aea', + 'argus', + 'mitigus', + 'binsource', + ], + }, + { name: 'vue', fileExtensions: ['vue'] }, + { name: 'semgrep', fileNames: ['semgrep.yml', '.semgrepignore'] }, + { + name: 'vue-config', + fileNames: [ + 'vue.config.js', + 'vue.config.ts', + 'vetur.config.js', + 'vetur.config.ts', + 'volar.config.js', + ], + }, + { + name: 'vuex-store', + fileExtensions: ['store.js', 'store.ts'], + fileNames: ['store.js', 'store.ts'], + enabledFor: [IconPack.Vuex], + }, + { + name: 'nuxt', + fileNames: ['nuxt.config.js', 'nuxt.config.ts', '.nuxtignore', '.nuxtrc'], + }, + { + name: 'harmonix', + fileNames: ['harmonix.config.js', 'harmonix.config.ts'], + }, + { name: 'ocaml', fileExtensions: ['ml', 'mli', 'cmx'] }, + { name: 'odin', fileExtensions: ['odin'] }, + { + name: 'javascript-map', + fileExtensions: ['js.map', 'mjs.map', 'cjs.map'], + }, + { name: 'css-map', fileExtensions: ['css.map'] }, + { + name: 'lock', + fileExtensions: ['lock'], + fileNames: ['security.md', 'security.txt', 'security'], + }, + { name: 'handlebars', fileExtensions: ['hbs', 'mustache'] }, + { name: 'perl', fileExtensions: ['pm', 'raku'] }, + { name: 'haxe', fileExtensions: ['hx'] }, + { + name: 'test-ts', + fileExtensions: [ + 'spec.ts', + 'spec.cts', + 'spec.mts', + 'cy.ts', + 'e2e-spec.ts', + 'e2e-spec.cts', + 'e2e-spec.mts', + 'test.ts', + 'test.cts', + 'test.mts', + 'ts.snap', + 'spec-d.ts', + 'test-d.ts', + ], + }, + { + name: 'test-jsx', + fileExtensions: [ + 'spec.tsx', + 'test.tsx', + 'tsx.snap', + 'spec.jsx', + 'test.jsx', + 'jsx.snap', + 'cy.jsx', + 'cy.tsx', + 'spec-d.tsx', + 'test-d.tsx', + ], + }, + { + name: 'test-js', + fileExtensions: [ + 'spec.js', + 'spec.cjs', + 'spec.mjs', + 'e2e-spec.js', + 'e2e-spec.cjs', + 'e2e-spec.mjs', + 'test.js', + 'test.cjs', + 'test.mjs', + 'js.snap', + 'cy.js', + ], + }, + { + name: 'angular', + fileExtensions: ['module.ts', 'module.js', 'ng-template'], + fileNames: [ + 'angular-cli.json', + '.angular-cli.json', + 'angular.json', + 'ng-package.json', + ], + enabledFor: [IconPack.Angular, IconPack.Ngrx], + }, + { + name: 'angular-component', + clone: { + base: 'angular', + color: 'blue-700', + }, + fileExtensions: ['component.ts', 'component.js'], + enabledFor: [IconPack.Angular, IconPack.Ngrx], + }, + { + name: 'angular-guard', + clone: { + base: 'angular', + color: 'green-600', + }, + fileExtensions: ['guard.ts', 'guard.js'], + enabledFor: [IconPack.Angular, IconPack.Ngrx], + }, + { + name: 'angular-service', + clone: { + base: 'angular', + color: 'amber-400', + }, + fileExtensions: ['service.ts', 'service.js'], + enabledFor: [IconPack.Angular, IconPack.Ngrx], + }, + { + name: 'angular-pipe', + clone: { + base: 'angular', + color: 'teal-600', + }, + fileExtensions: ['pipe.ts', 'pipe.js', 'filter.js'], + enabledFor: [IconPack.Angular, IconPack.Ngrx], + }, + { + name: 'angular-directive', + clone: { + base: 'angular', + color: 'purple-400', + }, + fileExtensions: ['directive.ts', 'directive.js'], + enabledFor: [IconPack.Angular, IconPack.Ngrx], + }, + { + name: 'angular-resolver', + clone: { + base: 'angular', + color: 'green-600', + }, + fileExtensions: ['resolver.ts', 'resolver.js'], + enabledFor: [IconPack.Angular, IconPack.Ngrx], + }, + { + name: 'angular-interceptor', + clone: { + base: 'angular', + color: 'orange-500', + }, + fileExtensions: ['interceptor.ts', 'interceptor.js'], + enabledFor: [IconPack.Angular, IconPack.Ngrx], + }, + { name: 'puppet', fileExtensions: ['pp'] }, + { name: 'elixir', fileExtensions: ['ex', 'exs', 'eex', 'leex', 'heex'] }, + { name: 'livescript', fileExtensions: ['ls'] }, + { name: 'erlang', fileExtensions: ['erl'] }, + { name: 'twig', fileExtensions: ['twig'] }, + { name: 'julia', fileExtensions: ['jl'] }, + { name: 'elm', fileExtensions: ['elm'] }, + { name: 'purescript', fileExtensions: ['pure', 'purs'] }, + { name: 'smarty', fileExtensions: ['tpl'] }, + { name: 'stylus', fileExtensions: ['styl'] }, + { name: 'reason', fileExtensions: ['re', 'rei'] }, + { name: 'bucklescript', fileExtensions: ['cmj'] }, + { name: 'merlin', fileExtensions: ['merlin'] }, + { name: 'verilog', fileExtensions: ['vhd', 'sv', 'svh', 'vhdl'] }, + { name: 'mathematica', fileExtensions: ['nb'] }, + { name: 'wolframlanguage', fileExtensions: ['wl', 'wls'] }, + { name: 'nunjucks', fileExtensions: ['njk', 'nunjucks'] }, + { name: 'robot', fileExtensions: ['robot'] }, + { name: 'solidity', fileExtensions: ['sol'] }, + { name: 'autoit', fileExtensions: ['au3'] }, + { name: 'haml', fileExtensions: ['haml'] }, + { name: 'yang', fileExtensions: ['yang'] }, + { + name: 'mjml', + fileExtensions: ['mjml'], + fileNames: ['.mjmlconfig'], + }, + { + name: 'vercel', + fileNames: ['vercel.json', '.vercelignore', 'now.json', '.nowignore'], + light: true, + }, + { + name: 'liara', + fileNames: ['liara.json', '.liaraignore'], + }, + { + name: 'verdaccio', + fileNames: ['verdaccio.yml'], + }, + { + name: 'payload', + fileNames: [ + 'payload.config.js', + 'payload.config.mjs', + 'payload.config.ts', + 'payload.config.mts', + ], + light: true, + }, + { + name: 'next', + fileNames: [ + 'next.config.js', + 'next.config.mjs', + 'next.config.ts', + 'next.config.mts', + ], + light: true, + }, + { + name: 'remark', + fileNames: [ + '.remarkrc', + '.remarkrc.cjs', + '.remarkrc.js', + '.remarkrc.json', + '.remarkrc.mjs', + '.remarkrc.yaml', + '.remarkrc.yml', + '.remarkignore', + ], + }, + { + name: 'remix', + fileNames: ['remix.config.js', 'remix.config.ts'], + light: true, + }, + { + name: 'terraform', + fileExtensions: ['tf', 'tf.json', 'tfvars', 'tfstate', 'tfbackend'], + }, + { + name: 'laravel', + fileExtensions: ['blade.php', 'inky.php'], + fileNames: ['artisan'], + }, + { name: 'applescript', fileExtensions: ['applescript', 'ipa'] }, + { name: 'cake', fileExtensions: ['cake'] }, + { name: 'cucumber', fileExtensions: ['feature', 'features'] }, + { name: 'nim', fileExtensions: ['nim', 'nimble'] }, + { name: 'apiblueprint', fileExtensions: ['apib', 'apiblueprint'] }, + { name: 'riot', fileExtensions: ['riot', 'tag'] }, + { name: 'vfl', fileExtensions: ['vfl'], fileNames: ['.vfl'] }, + { name: 'kl', fileExtensions: ['kl'], fileNames: ['.kl'] }, + { + name: 'postcss', + fileExtensions: ['pcss', 'sss'], + patterns: { + postcss: FileNamePattern.Cosmiconfig, + }, + }, + { + name: 'posthtml', + patterns: { + posthtml: FileNamePattern.Cosmiconfig, + }, + }, + { + name: 'todo', + fileExtensions: ['todo'], + fileNames: ['todo.md', 'todos.md'], + }, + { name: 'coldfusion', fileExtensions: ['cfml', 'cfc', 'lucee', 'cfm'] }, + { + name: 'cabal', + fileExtensions: ['cabal'], + fileNames: [ + 'cabal.project', + 'cabal.project.freeze', + 'cabal.project.local', + ], + }, + { name: 'nix', fileExtensions: ['nix'] }, + { name: 'slim', fileExtensions: ['slim'] }, + { name: 'http', fileExtensions: ['http', 'rest'], fileNames: ['CNAME'] }, + { name: 'restql', fileExtensions: ['rql', 'restql'] }, + { name: 'kivy', fileExtensions: ['kv'] }, + { + name: 'graphcool', + fileExtensions: ['graphcool'], + fileNames: ['project.graphcool'], + }, + { name: 'sbt', fileExtensions: ['sbt'] }, + { + name: 'webpack', + fileNames: ['webpack.config.coffee'], + patterns: { + 'webpack.base': FileNamePattern.Ecmascript, + 'webpack.client': FileNamePattern.Ecmascript, + 'webpack.common': FileNamePattern.Ecmascript, + 'webpack.config.babel': FileNamePattern.Ecmascript, + 'webpack.config.base.babel': FileNamePattern.Ecmascript, + 'webpack.config.base': FileNamePattern.Ecmascript, + 'webpack.config.client': FileNamePattern.Ecmascript, + 'webpack.config.common.babel': FileNamePattern.Ecmascript, + 'webpack.config.common': FileNamePattern.Ecmascript, + 'webpack.config.dev.babel': FileNamePattern.Ecmascript, + 'webpack.config.dev': FileNamePattern.Ecmascript, + 'webpack.config.main': FileNamePattern.Ecmascript, + 'webpack.config.prod.babel': FileNamePattern.Ecmascript, + 'webpack.config.prod': FileNamePattern.Ecmascript, + 'webpack.config.production.babel': FileNamePattern.Ecmascript, + 'webpack.config.production': FileNamePattern.Ecmascript, + 'webpack.config.renderer': FileNamePattern.Ecmascript, + 'webpack.config.server': FileNamePattern.Ecmascript, + 'webpack.config.staging.babel': FileNamePattern.Ecmascript, + 'webpack.config.staging': FileNamePattern.Ecmascript, + 'webpack.config.test': FileNamePattern.Ecmascript, + 'webpack.config.vendor.production': FileNamePattern.Ecmascript, + 'webpack.config.vendor': FileNamePattern.Ecmascript, + 'webpack.config': FileNamePattern.Ecmascript, + 'webpack.dev': FileNamePattern.Ecmascript, + 'webpack.development': FileNamePattern.Ecmascript, + 'webpack.dist': FileNamePattern.Ecmascript, + 'webpack.mix': FileNamePattern.Ecmascript, + 'webpack.prod.config': FileNamePattern.Ecmascript, + 'webpack.prod': FileNamePattern.Ecmascript, + 'webpack.production': FileNamePattern.Ecmascript, + 'webpack.server': FileNamePattern.Ecmascript, + 'webpack.test': FileNamePattern.Ecmascript, + webpack: FileNamePattern.Ecmascript, + webpackfile: FileNamePattern.Ecmascript, + }, + }, + { name: 'ionic', fileNames: ['ionic.config.json', '.io-config.json'] }, + { + name: 'gulp', + fileNames: [ + 'gulpfile.js', + 'gulpfile.mjs', + 'gulpfile.ts', + 'gulpfile.cts', + 'gulpfile.mts', + 'gulpfile.babel.js', + ], + }, + { + name: 'nodejs', + fileNames: [ + 'package.json', + 'package-lock.json', + '.nvmrc', + '.esmrc', + '.node-version', + ], + }, + { name: 'npm', fileNames: ['.npmignore', '.npmrc'] }, + { + name: 'yarn', + fileNames: [ + '.yarnrc', + 'yarn.lock', + '.yarnclean', + '.yarn-integrity', + 'yarn-error.log', + '.yarnrc.yml', + '.yarnrc.yaml', + ], + }, + { + name: 'android', + fileNames: ['androidmanifest.xml'], + fileExtensions: ['apk', 'smali', 'dex'], + }, + { + name: 'tune', + fileExtensions: ['env'], + fileNames: [ + '.env.defaults', + '.env.example', + '.env.sample', + '.env.template', + '.env.schema', + '.env.local', + '.env.dev', + '.env.development', + '.env.alpha', + '.env.e2e', + '.env.qa', + '.env.dist', + '.env.prod', + '.env.production', + '.env.stage', + '.env.staging', + '.env.preview', + '.env.test', + '.env.testing', + '.env.development.local', + '.env.qa.local', + '.env.production.local', + '.env.staging.local', + '.env.test.local', + '.env.uat', + '.vars', + ], + }, + { + name: 'turborepo', + light: true, + fileNames: ['turbo.json'], + }, + { + name: 'babel', + fileNames: ['babel-transform.js'], + patterns: { + babel: FileNamePattern.Cosmiconfig, + 'babel-plugin-macros': FileNamePattern.Cosmiconfig, + }, + }, + { + name: 'blitz', + fileNames: [ + 'blitz.config.js', + 'blitz.config.ts', + '.blitz.config.compiled.js', + ], + }, + { + name: 'contributing', + fileNames: [ + 'contributing.md', + 'contributing.rst', + 'contributing.txt', + 'contributing', + ], + }, + { + name: 'readme', + fileNames: ['readme.md', 'readme.rst', 'readme.txt', 'readme'], + }, + { + name: 'changelog', + fileNames: [ + 'changelog', + 'changelog.md', + 'changelog.rst', + 'changelog.txt', + 'changes', + 'changes.md', + 'changes.rst', + 'changes.txt', + ], + }, + { + name: 'architecture', + fileNames: [ + 'architecture.md', + 'architecture.rst', + 'architecture.txt', + 'architecture', + ], + }, + { + name: 'credits', + fileNames: ['credits.md', 'credits.rst', 'credits.txt', 'credits'], + }, + { + name: 'authors', + fileNames: [ + 'authors.md', + 'authors.rst', + 'authors.txt', + 'authors', + 'contributors.md', + 'contributors.rst', + 'contributors.txt', + 'contributors', + ], + }, + { name: 'flow', fileNames: ['.flowconfig'] }, + { name: 'favicon', fileNames: ['favicon.ico'] }, + { + name: 'karma', + fileNames: [ + 'karma.conf.js', + 'karma.conf.ts', + 'karma.conf.coffee', + 'karma.config.js', + 'karma.config.ts', + 'karma-main.js', + 'karma-main.ts', + ], + }, + { name: 'bithound', fileNames: ['.bithoundrc'] }, + { + name: 'svgo', + fileNames: ['svgo.config.js', 'svgo.config.cjs', 'svgo.config.mjs'], + }, + { name: 'appveyor', fileNames: ['.appveyor.yml', 'appveyor.yml'] }, + { name: 'travis', fileNames: ['.travis.yml'] }, + { + name: 'codecov', + fileNames: [ + '.codecov.yml', + 'codecov.yml', + '.codecov.yaml', + 'codecov.yaml', + ], + }, + { + name: 'sonarcloud', + fileNames: [ + 'sonar-project.properties', + '.sonarcloud.properties', + 'sonarcloud.yaml', + ], + }, + { + name: 'protractor', + fileNames: [ + 'protractor.conf.js', + 'protractor.conf.ts', + 'protractor.conf.coffee', + 'protractor.config.js', + 'protractor.config.ts', + ], + }, + { name: 'fusebox', fileNames: ['fuse.js'] }, + { name: 'heroku', fileNames: ['procfile', 'procfile.windows'] }, + { name: 'editorconfig', fileNames: ['.editorconfig'] }, + { name: 'gitlab', fileExtensions: ['gitlab-ci.yml'] }, + { name: 'bower', fileNames: ['.bowerrc', 'bower.json'] }, + { + name: 'eslint', + fileNames: [ + '.eslintrc-md.js', + '.eslintrc-jsdoc.js', + '.eslintrc.base.json', + '.eslintignore', + '.eslintcache', + ], + patterns: { + eslint: FileNamePattern.Cosmiconfig, + }, + }, + { + name: 'conduct', + fileNames: [ + 'code_of_conduct.md', + 'code_of_conduct.txt', + 'code_of_conduct', + ], + }, + { name: 'watchman', fileNames: ['.watchmanconfig'] }, + { name: 'aurelia', fileNames: ['aurelia.json'] }, + { + name: 'auto', + fileNames: [ + '.autorc', + 'auto.config.js', + 'auto.config.ts', + 'auto-config.json', + 'auto-config.yaml', + 'auto-config.yml', + 'auto-config.ts', + 'auto-config.js', + ], + light: true, + }, + { + name: 'mocha', + fileNames: [ + 'mocha.opts', + '.mocharc.yml', + '.mocharc.yaml', + '.mocharc.js', + '.mocharc.json', + '.mocharc.jsonc', + ], + }, + { + name: 'jenkins', + fileNames: ['jenkinsfile'], + fileExtensions: ['jenkinsfile', 'jenkins'], + }, + { + name: 'firebase', + fileNames: [ + 'firebase.json', + '.firebaserc', + 'firestore.rules', + 'firestore.indexes.json', + ], + }, + { + name: 'figma', + fileExtensions: ['fig'], + }, + { + name: 'rollup', + fileNames: [ + 'rollup.config.js', + 'rollup.config.mjs', + 'rollup.config.ts', + 'rollup-config.js', + 'rollup-config.mjs', + 'rollup-config.ts', + 'rollup.config.common.js', + 'rollup.config.common.mjs', + 'rollup.config.common.ts', + 'rollup.config.base.js', + 'rollup.config.base.mjs', + 'rollup.config.base.ts', + 'rollup.config.prod.js', + 'rollup.config.prod.mjs', + 'rollup.config.prod.ts', + 'rollup.config.dev.js', + 'rollup.config.dev.mjs', + 'rollup.config.dev.ts', + 'rollup.config.prod.vendor.js', + 'rollup.config.prod.vendor.mjs', + 'rollup.config.prod.vendor.ts', + ], + }, + { name: 'hack', fileNames: ['.hhconfig'] }, + { name: 'huff', fileExtensions: ['huff'], light: true }, + { name: 'hardhat', fileNames: ['hardhat.config.js', 'hardhat.config.ts'] }, + { + name: 'stylelint', + light: true, + fileNames: ['.stylelintignore', '.stylelintcache'], + patterns: { + stylelint: FileNamePattern.Cosmiconfig, + }, + }, + { name: 'code-climate', fileNames: ['.codeclimate.yml'], light: true }, + { + name: 'prettier', + fileNames: ['.prettierignore'], + patterns: { + prettier: FileNamePattern.Cosmiconfig, + }, + }, + { + name: 'renovate', + fileNames: [ + '.renovaterc', + '.renovaterc.json', + 'renovate-config.json', + 'renovate.json', + 'renovate.json5', + ], + }, + { name: 'apollo', fileNames: ['apollo.config.js'] }, + { name: 'nodemon', fileNames: ['nodemon.json', 'nodemon-debug.json'] }, + { + name: 'ngrx-reducer', + fileExtensions: ['reducer.ts', 'rootReducer.ts'], + enabledFor: [IconPack.Ngrx], + }, + { + name: 'ngrx-state', + fileExtensions: ['state.ts'], + enabledFor: [IconPack.Ngrx], + }, + { + name: 'ngrx-actions', + fileExtensions: ['actions.ts'], + enabledFor: [IconPack.Ngrx], + }, + { + name: 'ngrx-effects', + fileExtensions: ['effects.ts'], + enabledFor: [IconPack.Ngrx], + }, + { + name: 'ngrx-entity', + fileNames: ['.entity'], + enabledFor: [IconPack.Ngrx], + }, + { + name: 'ngrx-selectors', + fileExtensions: ['selectors.ts'], + enabledFor: [IconPack.Ngrx], + }, + { name: 'webhint', fileNames: ['.hintrc'] }, + { + name: 'browserlist', + fileNames: ['browserslist', '.browserslistrc'], + light: true, + }, + { name: 'crystal', fileExtensions: ['cr', 'ecr'], light: true }, + { name: 'snyk', fileNames: ['.snyk'] }, + { + name: 'drone', + fileExtensions: ['drone.yml'], + fileNames: ['.drone.yml'], + light: true, + }, + { name: 'cuda', fileExtensions: ['cu', 'cuh'] }, + { name: 'log', fileExtensions: ['log'] }, + { name: 'dotjs', fileExtensions: ['def', 'dot', 'jst'] }, + { name: 'ejs', fileExtensions: ['ejs'] }, + { name: 'sequelize', fileNames: ['.sequelizerc'] }, + { + name: 'gatsby', + fileNames: [ + 'gatsby-config.js', + 'gatsby-config.mjs', + 'gatsby-config.ts', + 'gatsby-node.js', + 'gatsby-node.mjs', + 'gatsby-node.ts', + 'gatsby-browser.js', + 'gatsby-browser.tsx', + 'gatsby-ssr.js', + 'gatsby-ssr.tsx', + ], + }, + { + name: 'wakatime', + fileNames: ['.wakatime-project'], + fileExtensions: ['.wakatime-project'], + light: true, + }, + { name: 'circleci', fileNames: ['circle.yml'], light: true }, + { name: 'cloudfoundry', fileNames: ['.cfignore'] }, + { + name: 'grunt', + fileNames: [ + 'gruntfile.js', + 'gruntfile.ts', + 'gruntfile.cjs', + 'gruntfile.cts', + 'gruntfile.coffee', + 'gruntfile.babel.js', + 'gruntfile.babel.ts', + 'gruntfile.babel.coffee', + ], + }, + { + name: 'jest', + fileNames: [ + 'jest.config.js', + 'jest.config.cjs', + 'jest.config.mjs', + 'jest.config.ts', + 'jest.config.cts', + 'jest.config.mts', + 'jest.config.json', + 'jest.e2e.config.js', + 'jest.e2e.config.cjs', + 'jest.e2e.config.mjs', + 'jest.e2e.config.ts', + 'jest.e2e.config.cts', + 'jest.e2e.config.mts', + 'jest.e2e.config.json', + 'jest.e2e.json', + 'jest-unit.config.js', + 'jest-e2e.config.js', + 'jest-e2e.config.cjs', + 'jest-e2e.config.mjs', + 'jest-e2e.config.ts', + 'jest-e2e.config.cts', + 'jest-e2e.config.mts', + 'jest-e2e.config.json', + 'jest-e2e.json', + 'jest-github-actions-reporter.js', + 'jest.setup.js', + 'jest.setup.ts', + 'jest.json', + '.jestrc', + '.jestrc.js', + '.jestrc.json', + 'jest.teardown.js', + 'jest-preset.json', + 'jest-preset.js', + 'jest-preset.cjs', + 'jest-preset.mjs', + 'jest.preset.js', + 'jest.preset.mjs', + 'jest.preset.cjs', + 'jest.preset.json', + ], + }, + { name: 'processing', fileExtensions: ['pde'] }, + { + name: 'storybook', + fileExtensions: [ + 'stories.js', + 'stories.jsx', + 'stories.mdx', + 'story.js', + 'story.jsx', + 'stories.ts', + 'stories.tsx', + 'story.ts', + 'story.tsx', + 'stories.svelte', + 'story.mdx', + ], + }, + { name: 'wepy', fileExtensions: ['wpy'] }, + { name: 'fastlane', fileNames: ['fastfile', 'appfile'] }, + { name: 'hcl', fileExtensions: ['hcl'], light: true }, + { name: 'helm', fileNames: ['.helmignore'] }, + { name: 'san', fileExtensions: ['san'] }, + { + name: 'quokka', + fileExtensions: ['quokka.js', 'quokka.ts', 'quokka.jsx', 'quokka.tsx'], + }, + { name: 'wallaby', fileNames: ['wallaby.js', 'wallaby.conf.js'] }, + { name: 'django', fileExtensions: ['djt'] }, + { name: 'stencil', fileNames: ['stencil.config.js', 'stencil.config.ts'] }, + { name: 'red', fileExtensions: ['red'] }, + { + name: 'makefile', + fileExtensions: ['mk'], + fileNames: ['makefile', 'gnumakefile', 'kbuild'], + }, + { name: 'foxpro', fileExtensions: ['fxp', 'prg'] }, + { name: 'i18n', fileExtensions: ['pot', 'po', 'mo', 'lang', 'xlf'] }, + { name: 'webassembly', fileExtensions: ['wat', 'wasm'] }, + { + name: 'semantic-release', + light: true, + patterns: { + release: FileNamePattern.Cosmiconfig, + }, + }, + { + name: 'bitbucket', + fileNames: ['bitbucket-pipelines.yaml', 'bitbucket-pipelines.yml'], + }, + { name: 'jupyter', fileExtensions: ['ipynb'] }, + { name: 'd', fileExtensions: ['d'] }, + { name: 'mdx', fileExtensions: ['mdx'] }, + { name: 'mdsvex', fileExtensions: ['svx'] }, + { name: 'ballerina', fileExtensions: ['bal', 'balx'] }, + { name: 'racket', fileExtensions: ['rkt'] }, + { + name: 'bazel', + fileExtensions: ['bzl', 'bazel'], + fileNames: ['.bazelignore', '.bazelrc', '.bazelversion'], + }, + { name: 'mint', fileExtensions: ['mint'] }, + { name: 'velocity', fileExtensions: ['vm', 'fhtml', 'vtl'] }, + { name: 'godot', fileExtensions: ['gd'] }, + { + name: 'godot-assets', + fileExtensions: [ + 'godot', + 'tres', + 'tscn', + 'gdns', + 'gdnlib', + 'gdshader', + 'gdshaderinc', + 'gdextension', + ], + fileNames: ['.gdignore', '._sc_', '_sc_'], + }, + { + name: 'azure-pipelines', + fileNames: [ + 'azure-pipelines.yml', + 'azure-pipelines.yaml', + 'azure-pipelines-main.yml', + 'azure-pipelines-main.yaml', + ], + fileExtensions: [ + 'azure-pipelines.yml', + 'azure-pipelines.yaml', + 'azure-pipelines-main.yml', + 'azure-pipelines-main.yaml', + ], + }, + { name: 'azure', fileExtensions: ['azcli'] }, + { + name: 'vagrant', + fileNames: ['vagrantfile'], + fileExtensions: ['vagrantfile'], + }, + { name: 'prisma', fileNames: ['prisma.yml'], fileExtensions: ['prisma'] }, + { name: 'razor', fileExtensions: ['cshtml', 'vbhtml'] }, + { name: 'abc', fileExtensions: ['abc'] }, + { name: 'asciidoc', fileExtensions: ['ad', 'adoc', 'asciidoc'] }, + { + name: 'istanbul', + fileNames: [ + '.nycrc', + '.nycrc.json', + '.nycrc.yaml', + '.nycrc.yml', + 'nyc.config.js', + '.istanbul.yml', + ], + }, + { name: 'edge', fileExtensions: ['edge'] }, + { name: 'scheme', fileExtensions: ['ss', 'scm'] }, + { name: 'lisp', fileExtensions: ['lisp', 'lsp', 'cl', 'fast'] }, + { + name: 'tailwindcss', + fileNames: [ + 'tailwind.js', + 'tailwind.ts', + 'tailwind.config.js', + 'tailwind.config.cjs', + 'tailwind.config.mjs', + 'tailwind.config.ts', + 'tailwind.config.cts', + 'tailwind.config.mts', + ], + }, + { + name: '3d', + fileExtensions: [ + 'stl', + 'stp', + 'obj', + 'o', + 'ac', + 'blend', + 'dxf', + 'fbx', + 'mesh', + 'mqo', + 'pmd', + 'pmx', + 'skp', + 'vac', + 'vdp', + 'vox', + ], + }, + { name: 'buildkite', fileNames: ['buildkite.yml', 'buildkite.yaml'] }, + { + name: 'netlify', + fileNames: [ + 'netlify.json', + 'netlify.yml', + 'netlify.yaml', + 'netlify.toml', + ], + light: true, + }, + { name: 'svg', fileExtensions: ['svg'] }, + { + name: 'svelte', + fileExtensions: ['svelte'], + fileNames: ['svelte.config.js', 'svelte.config.cjs'], + }, + { + name: 'vim', + fileExtensions: ['vimrc', 'gvimrc', 'exrc', 'vim', 'viminfo'], + }, + { + name: 'nest', + fileNames: [ + 'nest-cli.json', + '.nest-cli.json', + 'nestconfig.json', + '.nestconfig.json', + ], + }, + { + name: 'nest-controller', + clone: { + base: 'nest', + color: 'light-blue-700', + }, + fileExtensions: ['controller.ts', 'controller.js'], + enabledFor: [IconPack.Nest], + }, + { + name: 'nest-middleware', + clone: { + base: 'nest', + color: 'indigo-400', + }, + fileExtensions: ['middleware.ts', 'middleware.js'], + enabledFor: [IconPack.Nest], + }, + { + name: 'nest-module', + clone: { + base: 'nest', + color: 'red-600', + }, + fileExtensions: ['module.ts', 'module.js'], + enabledFor: [IconPack.Nest], + }, + { + name: 'nest-service', + clone: { + base: 'nest', + color: 'amber-400', + }, + fileExtensions: ['service.ts', 'service.js'], + enabledFor: [IconPack.Nest], + }, + { + name: 'nest-decorator', + clone: { + base: 'nest', + color: 'purple-400', + }, + fileExtensions: ['decorator.ts', 'decorator.js'], + enabledFor: [IconPack.Nest], + }, + { + name: 'nest-pipe', + clone: { + base: 'nest', + color: 'teal-600', + }, + fileExtensions: ['pipe.ts', 'pipe.js'], + enabledFor: [IconPack.Nest], + }, + { + name: 'nest-filter', + clone: { + base: 'nest', + color: 'deep-orange-400', + }, + fileExtensions: ['filter.ts', 'filter.js'], + enabledFor: [IconPack.Nest], + }, + { + name: 'nest-gateway', + clone: { + base: 'nest', + color: 'lime-700', + }, + fileExtensions: ['gateway.ts', 'gateway.js'], + enabledFor: [IconPack.Nest], + }, + { + name: 'nest-guard', + clone: { + base: 'nest', + color: 'green-600', + }, + fileExtensions: ['guard.ts', 'guard.js'], + enabledFor: [IconPack.Nest], + }, + { + name: 'nest-resolver', + clone: { + base: 'nest', + color: 'pink-400', + }, + fileExtensions: ['resolver.ts', 'resolver.js'], + enabledFor: [IconPack.Nest], + }, + { name: 'moon', fileNames: ['moon.yml'] }, + { name: 'moonscript', fileExtensions: ['moon'] }, + { name: 'percy', fileNames: ['.percy.yml'] }, + { name: 'gitpod', fileNames: ['.gitpod.yml'] }, + { name: 'advpl', fileExtensions: ['prw', 'prx'] }, + { + name: 'advpl-ptm', + clone: { + base: 'advpl', + color: 'red-400', + }, + fileExtensions: ['ptm'], + }, + { + name: 'advpl-tlpp', + clone: { + base: 'advpl', + color: 'yellow-700', + }, + fileExtensions: ['tlpp'], + }, + { + name: 'advpl-include', + clone: { + base: 'advpl', + color: 'cyan-500', + }, + fileExtensions: ['ch'], + }, + { name: 'codeowners', fileNames: ['codeowners', 'OWNERS'] }, + { name: 'gcp', fileNames: ['.gcloudignore'] }, + { name: 'amplify', fileNames: ['amplify.yml'] }, + { + name: 'disc', + fileExtensions: ['iso', 'vmdk', 'hdd', 'qcow', 'qcow2', 'qed', 'dmg'], + }, + { + name: 'fortran', + fileExtensions: ['f', 'f77', 'f90', 'f95', 'f03', 'f08'], + }, + { name: 'tcl', fileExtensions: ['tcl'] }, + { name: 'liquid', fileExtensions: ['liquid'] }, + { name: 'prolog', fileExtensions: ['p', 'pro', 'pl'] }, + { + name: 'husky', + patterns: { + husky: FileNamePattern.Cosmiconfig, + }, + }, + { name: 'coconut', fileExtensions: ['coco'] }, + { name: 'tilt', fileNames: ['tiltfile'] }, + { + name: 'capacitor', + fileNames: ['capacitor.config.json', 'capacitor.config.ts'], + }, + { name: 'sketch', fileExtensions: ['sketch'] }, + { name: 'pawn', fileExtensions: ['pwn', 'amx'] }, + { name: 'adonis', fileNames: ['.adonisrc.json', 'ace'] }, + { name: 'forth', fileExtensions: ['4th', 'fth', 'frt'] }, + { + name: 'uml', + fileExtensions: ['iuml', 'pu', 'puml', 'plantuml', 'wsd'], + light: true, + }, + { + name: 'meson', + fileNames: ['meson.build', 'meson_options.txt'], + fileExtensions: ['wrap'], + }, + { + name: 'commitlint', + fileNames: ['.commitlint.yaml', '.commitlint.yml'], + patterns: { + commitlint: FileNamePattern.Cosmiconfig, + }, + }, + { name: 'buck', fileNames: ['.buckconfig'] }, + { name: 'dhall', fileExtensions: ['dhall', 'dhallb'] }, + { + name: 'sml', + fileExtensions: [ + 'sml', + 'mlton', + 'mlb', + 'sig', + 'fun', + 'cm', + 'lex', + 'use', + 'grm', + ], + }, + { name: 'nx', fileNames: ['nx.json', '.nxignore'] }, + { name: 'opam', fileExtensions: ['opam'] }, + { + name: 'dune', + fileNames: [ + 'dune', + 'dune-project', + 'dune-workspace', + 'dune-workspace.dev', + ], + }, + { name: 'imba', fileExtensions: ['imba'] }, + { name: 'drawio', fileExtensions: ['drawio', 'dio'] }, + { name: 'pascal', fileExtensions: ['pas'] }, + { name: 'shaderlab', fileExtensions: ['unity'] }, + { + name: 'roadmap', + fileNames: [ + 'roadmap.md', + 'roadmap.txt', + 'timeline.md', + 'timeline.txt', + 'milestones.md', + 'milestones.txt', + ], + }, + { + name: 'sas', + fileExtensions: ['sas', 'sas7bdat', 'sashdat', 'astore', 'ast', 'sast'], + }, + { + name: 'nuget', + fileNames: ['nuget.config', '.nuspec', 'nuget.exe'], + fileExtensions: ['nupkg'], + }, + { name: 'command', fileExtensions: ['command'] }, + { + name: 'stryker', + fileNames: [ + 'stryker.conf.json', + 'stryker.conf.js', + 'stryker.conf.cjs', + 'stryker.conf.mjs', + '.stryker.conf.json', + '.stryker.conf.js', + '.stryker.conf.cjs', + '.stryker.conf.mjs', + ], + }, + { name: 'denizenscript', fileExtensions: ['dsc'] }, + { + name: 'modernizr', + fileNames: ['.modernizrrc', '.modernizrrc.js', '.modernizrrc.json'], + }, + { name: 'slug', fileNames: ['.slugignore'] }, + { name: 'search', fileExtensions: ['code-search'] }, + { + name: 'stitches', + fileNames: ['stitches.config.js', 'stitches.config.ts'], + light: true, + }, + { + name: 'nginx', + fileNames: ['nginx.conf'], + fileExtensions: ['nginx', 'nginxconf', 'nginxconfig'], + }, + { + name: 'minecraft', + fileExtensions: [ + 'mcfunction', + 'mcmeta', + 'mcr', + 'mca', + 'mcgame', + 'mclevel', + 'mcworld', + 'mine', + 'mus', + 'mcstructure', + 'mcpack', + 'mcaddon', + 'mctemplate', + 'mcproject', + ], + fileNames: ['.mcattributes', '.mcdefinitions', '.mcignore'], + }, + { name: 'replit', fileNames: ['.replit'] }, + { name: 'rescript', fileExtensions: ['res'] }, + { name: 'rescript-interface', fileExtensions: ['resi'] }, + { + name: 'duc', + fileNames: ['duc.fbs'], + fileExtensions: ['duc'], + }, + { + name: 'snowpack', + fileNames: [ + 'snowpack.config.js', + 'snowpack.config.cjs', + 'snowpack.config.mjs', + 'snowpack.config.ts', + 'snowpack.config.cts', + 'snowpack.config.mts', + 'snowpack.deps.json', + 'snowpack.config.json', + ], + light: true, + }, + { name: 'brainfuck', fileExtensions: ['b', 'bf'] }, + { name: 'bicep', fileExtensions: ['bicep'] }, + { name: 'cobol', fileExtensions: ['cob', 'cbl'] }, + { name: 'grain', fileExtensions: ['gr'] }, + { name: 'lolcode', fileExtensions: ['lol'] }, + { name: 'idris', fileExtensions: ['idr', 'ibc'] }, + { name: 'quasar', fileNames: ['quasar.conf.js', 'quasar.config.js'] }, + { name: 'dependabot', fileNames: ['dependabot.yml', 'dependabot.yaml'] }, + { name: 'pipeline', fileExtensions: ['pipeline'] }, + { + name: 'vite', + patterns: { + 'vite.config': FileNamePattern.Ecmascript, + }, + }, + { + name: 'vitest', + patterns: { + 'vitest.workspace': FileNamePattern.Ecmascript, + 'vitest.config': FileNamePattern.Ecmascript, + }, + }, + { + name: 'velite', + patterns: { + 'velite.config': FileNamePattern.Ecmascript, + }, + }, + { name: 'opa', fileExtensions: ['rego'] }, + { name: 'lerna', fileNames: ['lerna.json'] }, + { + name: 'windicss', + fileNames: [ + 'windi.config.js', + 'windi.config.cjs', + 'windi.config.ts', + 'windi.config.cts', + 'windi.config.json', + ], + fileExtensions: ['windi'], + }, + { + name: 'textlint', + fileNames: [ + '.textlintrc', + '.textlintrc.js', + '.textlintrc.json', + '.textlintrc.yml', + '.textlintrc.yaml', + ], + }, + { name: 'scala', fileExtensions: ['scala', 'sc'] }, + { name: 'lilypond', fileExtensions: ['ly'] }, + { name: 'vlang', fileExtensions: ['v'], fileNames: ['vpkg.json', 'v.mod'] }, + { name: 'chess', fileExtensions: ['pgn', 'fen'], light: true }, + { name: 'gemini', fileExtensions: ['gmi', 'gemini'] }, + { + name: 'sentry', + fileNames: ['.sentryclirc'], + patterns: { + 'sentry.client.config': FileNamePattern.Ecmascript, + 'sentry.server.config': FileNamePattern.Ecmascript, + 'sentry.edge.config': FileNamePattern.Ecmascript, + }, + }, + { + name: 'phpunit', + fileNames: [ + '.phpunit.result.cache', + '.phpunit-watcher.yml', + 'phpunit.xml', + 'phpunit.xml.dist', + 'phpunit-watcher.yml', + 'phpunit-watcher.yml.dist', + ], + }, + { + name: 'php-cs-fixer', + fileNames: [ + '.php_cs', + '.php_cs.dist', + '.php_cs.php', + '.php_cs.dist.php', + '.php-cs-fixer.php', + '.php-cs-fixer.dist.php', + ], + }, + { name: 'robots', fileNames: ['robots.txt'] }, + { + name: 'tsconfig', + fileNames: [ + 'tsconfig.json', + 'tsconfig.app.json', + 'tsconfig.editor.json', + 'tsconfig.spec.json', + 'tsconfig.base.json', + 'tsconfig.build.json', + 'tsconfig.eslint.json', + 'tsconfig.lib.json', + 'tsconfig.lib.prod.json', + 'tsconfig.node.json', + 'tsconfig.test.json', + 'tsconfig.e2e.json', + 'tsconfig.web.json', + 'tsconfig.webworker.json', + 'tsconfig.worker.json', + 'tsconfig.config.json', + 'tsconfig.vitest.json', + 'tsconfig.cjs.json', + 'tsconfig.esm.json', + 'tsconfig.mjs.json', + 'tsconfig.doc.json', + 'tsconfig.paths.json', + 'tsconfig.main.json', + 'tsconfig.renderer.json', + 'tsconfig.server.json', + ], + fileExtensions: ['tsconfig.json'], + }, + { + name: 'tauri', + fileNames: [ + 'tauri.conf.json', + 'tauri.config.json', + 'tauri.linux.conf.json', + 'tauri.windows.conf.json', + 'tauri.macos.conf.json', + '.taurignore', + ], + fileExtensions: ['tauri'], + }, + { + name: 'jsconfig', + fileNames: ['jsconfig.json'], + fileExtensions: ['jsconfig.json'], + }, + { + name: 'maven', + fileNames: ['maven.config', 'jvm.config', 'pom.xml'], + }, + { name: 'ada', fileExtensions: ['ada', 'adb', 'ads', 'ali'] }, + { + name: 'serverless', + fileNames: [ + 'serverless.yml', + 'serverless.yaml', + 'serverless.json', + 'serverless.js', + 'serverless.ts', + ], + }, + { + name: 'supabase', + fileNames: ['supabase.js', 'supabase.py'], + }, + { + name: 'ember', + fileNames: ['.ember-cli', '.ember-cli.js', 'ember-cli-builds.js'], + }, + { + name: 'horusec', + fileNames: ['horusec-config.json'], + fileExtensions: ['horusec-config.json'], + }, + { name: 'poetry', fileNames: ['poetry.lock'] }, + { + name: 'pdm', + fileNames: ['pdm.lock', 'pdm.toml', '.pdm-python'], + fileExtensions: ['pdm.lock', 'pdm.toml'], + }, + { name: 'coala', fileExtensions: ['coarc', 'coafile'] }, + { name: 'parcel', fileNames: ['.parcelrc'] }, + { + name: 'dinophp', + fileExtensions: ['bubble', 'html.bubble', 'php.bubble'], + }, + { name: 'teal', fileExtensions: ['tl'] }, + { name: 'template', fileExtensions: ['template'] }, + { name: 'astyle', fileNames: ['.astylerc'] }, + { + name: 'shader', + fileExtensions: [ + 'glsl', + 'vert', + 'tesc', + 'tese', + 'geom', + 'frag', + 'comp', + 'vert.glsl', + 'tesc.glsl', + 'tese.glsl', + 'geom.glsl', + 'frag.glsl', + 'comp.glsl', + 'vertex.glsl', + 'geometry.glsl', + 'fragment.glsl', + 'compute.glsl', + 'ts.glsl', + 'gs.glsl', + 'vs.glsl', + 'fs.glsl', + 'shader', + 'vertexshader', + 'fragmentshader', + 'geometryshader', + 'computeshader', + 'hlsl', + 'pixel.hlsl', + 'geometry.hlsl', + 'compute.hlsl', + 'tessellation.hlsl', + 'px.hlsl', + 'geom.hlsl', + 'comp.hlsl', + 'tess.hlsl', + 'wgsl', + ], + }, + { + name: 'lighthouse', + fileNames: [ + '.lighthouserc.js', + 'lighthouserc.js', + '.lighthouserc.cjs', + 'lighthouserc.cjs', + '.lighthouserc.json', + 'lighthouserc.json', + '.lighthouserc.yml', + 'lighthouserc.yml', + '.lighthouserc.yaml', + 'lighthouserc.yaml', + ], + }, + { + name: 'svgr', + patterns: { + svgr: FileNamePattern.Cosmiconfig, + }, + }, + { name: 'rome', fileNames: ['rome.json'] }, + { + name: 'cypress', + fileNames: ['cypress.json', 'cypress.env.json'], + patterns: { + 'cypress.config': FileNamePattern.Ecmascript, + }, + }, + { name: 'siyuan', fileExtensions: ['sy'] }, + { name: 'ndst', fileExtensions: ['ndst.yml', 'ndst.yaml', 'ndst.json'] }, + { + name: 'plop', + fileNames: ['plopfile.js', 'plopfile.cjs', 'plopfile.mjs', 'plopfile.ts'], + }, + { name: 'tobi', fileExtensions: ['tobi'] }, + { name: 'tobimake', fileNames: ['.tobimake'] }, + { name: 'gleam', fileNames: ['gleam.toml'], fileExtensions: ['gleam'] }, + { + name: 'pnpm', + light: true, + fileNames: ['pnpm-lock.yaml', 'pnpm-workspace.yaml', '.pnpmfile.cjs'], + }, + { + name: 'gridsome', + fileNames: ['gridsome.config.js', 'gridsome.server.js'], + }, + { + name: 'steadybit', + fileExtensions: ['steadybit.yml', 'steadybit.yaml'], + fileNames: [ + '.steadybit.yml', + 'steadybit.yml', + '.steadybit.yaml', + 'steadybit.yaml', + ], + }, + { name: 'capnp', fileExtensions: ['capnp'] }, + { name: 'tree', fileExtensions: ['tree'] }, + { + name: 'cadence', + fileExtensions: ['cdc'], + }, + { name: 'caddy', fileNames: ['Caddyfile'] }, + { + name: 'openapi', + light: true, + fileExtensions: ['openapi.json', 'openapi.yml', 'openapi.yaml'], + fileNames: ['openapi.json', 'openapi.yml', 'openapi.yaml'], + }, + { + name: 'swagger', + fileExtensions: ['swagger.json', 'swagger.yml', 'swagger.yaml'], + fileNames: ['swagger.json', 'swagger.yml', 'swagger.yaml'], + }, + { name: 'bun', fileNames: ['bun.lockb', 'bunfig.toml'], light: true }, + { name: 'antlr', fileExtensions: ['g4'] }, + { name: 'stylable', fileExtensions: ['st.css'] }, + { name: 'pinejs', fileExtensions: ['pine'] }, + { + name: 'nano-staged', + light: true, + fileNames: [ + '.nano-staged.js', + 'nano-staged.js', + '.nano-staged.cjs', + 'nano-staged.cjs', + '.nano-staged.mjs', + 'nano-staged.mjs', + '.nano-staged.json', + 'nano-staged.json', + '.nanostagedrc', + ], + }, + { + name: 'knip', + fileNames: [ + 'knip.json', + 'knip.jsonc', + '.knip.json', + '.knip.jsonc', + 'knip.ts', + 'knip.js', + 'knip.config.ts', + 'knip.config.js', + ], + }, + { + name: 'taskfile', + fileExtensions: ['taskfile.yml', 'taskfile.yaml'], + fileNames: [ + 'taskfile.yml', + 'taskfile.yaml', + 'taskfile.dist.yml', + 'taskfile.dist.yaml', + ], + }, + { + name: 'craco', + patterns: { + craco: FileNamePattern.Cosmiconfig, + }, + }, + { + name: 'gamemaker', + fileExtensions: ['gml', 'yy', 'yyp', 'yyz'], + }, + { name: 'tldraw', fileExtensions: ['tldr'], light: true }, + { + name: 'mercurial', + fileNames: [ + '.hg', + '.hgignore', + '.hgflow', + '.hgrc', + 'hgrc', + 'mercurial.ini', + ], + }, + { + name: 'deno', + fileNames: ['deno.json', 'deno.jsonc', 'deno.lock'], + light: true, + }, + { + name: 'plastic', + fileNames: [ + 'plastic.branchexplorer', + 'plastic.selector', + 'plastic.wktree', + 'plastic.workspace', + 'plastic.workspaces', + ], + }, + { name: 'typst', fileExtensions: ['typ'] }, + { + name: 'unocss', + fileNames: [ + 'uno.config.js', + 'uno.config.mjs', + 'uno.config.ts', + 'uno.config.mts', + 'unocss.config.js', + 'unocss.config.mjs', + 'unocss.config.ts', + 'unocss.config.mts', + ], + }, + { name: 'ifanr-cloud', fileNames: ['.mincloudrc'] }, + { name: 'concourse', fileNames: ['concourse.yml'] }, + { name: 'qwik', fileExtensions: ['tsx'], enabledFor: [IconPack.Qwik] }, + { name: 'mermaid', fileExtensions: ['mmd', 'mermaid'] }, + { + name: 'syncpack', + patterns: { + syncpack: FileNamePattern.Cosmiconfig, + }, + }, + { + name: 'mojo', + fileExtensions: ['mojo', '๐Ÿ”ฅ'], + }, + { + name: 'werf', + fileNames: [ + 'werf.yaml', + 'werf.yml', + 'werf-giterminism.yaml', + 'werf-giterminism.yml', + ], + }, + { name: 'roblox', fileExtensions: ['rbxl', 'rbxlx', 'rbxm', 'rbxmx'] }, + { + name: 'panda', + patterns: { + 'panda.config': FileNamePattern.Ecmascript, + }, + }, + { name: 'biome', fileNames: ['biome.json', 'biome.jsonc'] }, + { + name: 'esbuild', + patterns: { + esbuild: FileNamePattern.Ecmascript, + 'esbuild.config': FileNamePattern.Ecmascript, + }, + }, + { name: 'spwn', fileExtensions: ['spwn'] }, + { name: 'templ', fileExtensions: ['templ'] }, + { name: 'chrome', fileExtensions: ['crx'] }, + { name: 'stan', fileExtensions: ['stan'] }, + { + name: 'abap', + fileExtensions: ['abap', 'acds', 'asddls'], + }, + { + name: 'drizzle', + fileNames: [ + 'drizzle.config.ts', + 'drizzle.config.js', + 'drizzle.config.json', + ], + }, + { name: 'lottie', fileExtensions: ['lottie'] }, + { + name: 'puppeteer', + patterns: { + puppeteer: FileNamePattern.Cosmiconfig, + }, + }, + { name: 'apps-script', fileExtensions: ['gs'] }, + { + name: 'pkl', + fileExtensions: ['pkl'], + fileNames: ['PklProject', 'PklProject.deps.json'], + }, + { + name: 'kubernetes', + fileNames: [ + 'k8s.yml', + 'k8s.yaml', + 'kubernetes.yml', + 'kubernetes.yaml', + '.k8s.yml', + '.k8s.yaml', + ], + }, + { + name: 'screwdriver', + fileNames: ['screwdriver.yaml', 'screwdriver.yml'], + }, + { + name: 'snapcraft', + fileNames: ['snapcraft.yaml', 'snapcraft.yml'], + }, + { + name: 'container', + clone: { + base: '3d', + color: '#00b0ff', + }, + fileNames: [ + '.devcontainer/devcontainer.json', + '.devcontainer/devcontainer-lock.json', + ], + }, + { + name: 'kcl', + fileNames: ['kcl.mod', 'kcl.yaml', 'kcl.yml'], + fileExtensions: ['k'], + }, + { + name: 'verified', + fileExtensions: ['sigstore.json'], + }, + { + name: 'bruno', + fileExtensions: ['bru'], + }, + { + name: 'cairo', + fileExtensions: ['cairo'], + }, + { + name: 'grafana-alloy', + fileExtensions: ['alloy'], + }, + { + name: 'clangd', + fileNames: ['.clangd'], + }, + { + name: 'markdownlint', + fileNames: [ + '.markdownlint.json', + '.markdownlint.jsonc', + '.markdownlint.yaml', + '.markdownlint.yml', + '.markdownlint-cli2.jsonc', + '.markdownlint-cli2.yaml', + '.markdownlint-cli2.cjs', + '.markdownlint-cli2.mjs', + '.markdownlintignore', + ], + }, + { + name: 'tsil', + fileExtensions: ['ั†'], + }, + { + name: 'deepsource', + fileNames: ['.deepsource.toml'], + }, + { + name: 'tape', + fileExtensions: ['tape'], + clone: { base: 'video', color: 'purple-300' }, + }, + { + name: 'hurl', + fileExtensions: ['hurl'], + }, + { + name: 'cds', + fileExtensions: ['cds'], + }, + { + name: 'slint', + fileExtensions: ['slint', '60'], + }, + { + name: 'jsr', + fileNames: ['jsr.json', 'jsr.jsonc'], + light: true, + }, + { + name: 'coderabbit-ai', + fileNames: ['.coderabbit.yml', '.coderabbit.yaml'], + }, + { + name: 'gemini-ai', + fileNames: ['.aiexclude'], + }, + ]), +}; diff --git a/src/material-icons/src/core/icons/folderIcons.ts b/src/material-icons/src/core/icons/folderIcons.ts new file mode 100644 index 0000000..ad21213 --- /dev/null +++ b/src/material-icons/src/core/icons/folderIcons.ts @@ -0,0 +1,931 @@ +import type { FolderTheme } from '../models/icons/folders/folderTheme'; +import { IconPack } from '../models/icons/iconPack'; + +/** + * Defines folder icons + */ +export const folderIcons: FolderTheme[] = [ + { + name: 'specific', + defaultIcon: { name: 'folder' }, + rootFolder: { name: 'folder-root' }, + icons: [ + { + name: 'folder-robot', + folderNames: ['bot', 'robot'], + }, + { + name: 'folder-src', + folderNames: ['src', 'srcs', 'source', 'sources', 'code'], + }, + { + name: 'folder-dist', + folderNames: [ + 'dist', + 'out', + 'output', + 'build', + 'release', + 'bin', + 'distribution', + ], + }, + { + name: 'folder-css', + folderNames: ['css', 'stylesheet', 'stylesheets', 'style', 'styles'], + }, + { name: 'folder-sass', folderNames: ['sass', 'scss'] }, + { name: 'folder-television', folderNames: ['tv', 'television'] }, + { name: 'folder-desktop', folderNames: ['desktop'] }, + { name: 'folder-console', folderNames: ['console'] }, + { + name: 'folder-images', + folderNames: [ + 'images', + 'image', + 'imgs', + 'img', + 'icons', + 'icon', + 'icos', + 'ico', + 'figures', + 'figure', + 'figs', + 'fig', + 'screenshot', + 'screenshots', + 'screengrab', + 'screengrabs', + 'pic', + 'pics', + 'picture', + 'pictures', + 'photo', + 'photos', + 'photograph', + 'photographs', + ], + }, + { + name: 'folder-scripts', + folderNames: ['script', 'scripts', 'scripting'], + }, + { name: 'folder-node', folderNames: ['node_modules'] }, + { + name: 'folder-javascript', + folderNames: ['js', 'javascript', 'javascripts'], + }, + { name: 'folder-json', folderNames: ['json', 'jsons'] }, + { name: 'folder-font', folderNames: ['font', 'fonts'] }, + { name: 'folder-bower', folderNames: ['bower_components'] }, + { + name: 'folder-test', + folderNames: ['test', 'tests', 'testing', 'snapshots', 'spec', 'specs'], + }, + { + name: 'folder-jinja', + folderNames: ['jinja', 'jinja2', 'j2'], + light: true, + }, + { name: 'folder-markdown', folderNames: ['markdown', 'md'] }, + { name: 'folder-pdm', folderNames: ['pdm-plugins', 'pdm-build'] }, + { name: 'folder-php', folderNames: ['php'] }, + { name: 'folder-phpmailer', folderNames: ['phpmailer'] }, + { name: 'folder-sublime', folderNames: ['sublime'] }, + { + name: 'folder-docs', + folderNames: [ + 'doc', + 'docs', + 'document', + 'documents', + 'documentation', + 'post', + 'posts', + 'article', + 'articles', + ], + }, + { name: 'folder-gh-workflows', folderNames: ['github/workflows'] }, + { + name: 'folder-git', + folderNames: ['git', 'patches', 'githooks', 'submodules'], + }, + { name: 'folder-github', folderNames: ['github'] }, + { name: 'folder-gitea', folderNames: ['gitea'] }, + { name: 'folder-gitlab', folderNames: ['gitlab'] }, + { name: 'folder-vscode', folderNames: ['vscode', 'vscode-test'] }, + { + name: 'folder-views', + folderNames: [ + 'view', + 'views', + 'screen', + 'screens', + 'page', + 'pages', + 'public_html', + 'html', + ], + }, + { name: 'folder-vue', folderNames: ['vue'] }, + { name: 'folder-vuepress', folderNames: ['vuepress'] }, + { name: 'folder-expo', folderNames: ['expo', 'expo-shared'] }, + { + name: 'folder-config', + folderNames: [ + 'cfg', + 'cfgs', + 'conf', + 'confs', + 'config', + 'configs', + 'configuration', + 'configurations', + 'setting', + 'settings', + 'META-INF', + 'option', + 'options', + ], + }, + { + name: 'folder-i18n', + folderNames: [ + 'i18n', + 'internationalization', + 'lang', + 'langs', + 'language', + 'languages', + 'locale', + 'locales', + 'l10n', + 'localization', + 'translation', + 'translate', + 'translations', + 'tx', + ], + }, + { + name: 'folder-components', + folderNames: ['components', 'widget', 'widgets', 'fragments'], + }, + { + name: 'folder-verdaccio', + folderNames: ['verdaccio'], + }, + { name: 'folder-aurelia', folderNames: ['aurelia_project'] }, + { + name: 'folder-resource', + folderNames: [ + 'resource', + 'resources', + 'res', + 'asset', + 'assets', + 'static', + 'report', + 'reports', + ], + }, + { + name: 'folder-lib', + folderNames: [ + 'lib', + 'libs', + 'library', + 'libraries', + 'vendor', + 'vendors', + 'third-party', + 'lib64', + ], + }, + { + name: 'folder-theme', + folderNames: [ + 'themes', + 'theme', + 'color', + 'colors', + 'design', + 'designs', + ], + }, + { name: 'folder-webpack', folderNames: ['webpack'] }, + { name: 'folder-global', folderNames: ['global'] }, + { + name: 'folder-public', + folderNames: [ + 'public', + 'www', + 'wwwroot', + 'web', + 'website', + 'site', + 'browser', + 'browsers', + ], + }, + { + name: 'folder-include', + folderNames: [ + 'inc', + 'include', + 'includes', + 'partial', + 'partials', + 'inc64', + ], + }, + { + name: 'folder-docker', + folderNames: ['docker', 'dockerfiles', 'dockerhub'], + }, + { + name: 'folder-ngrx-effects', + folderNames: ['effects'], + enabledFor: [IconPack.Ngrx], + }, + { + name: 'folder-ngrx-store', + folderNames: ['store'], + enabledFor: [IconPack.Ngrx], + }, + { + name: 'folder-ngrx-state', + folderNames: ['states', 'state'], + enabledFor: [IconPack.Ngrx], + }, + { + name: 'folder-ngrx-reducer', + folderNames: ['reducers', 'reducer'], + enabledFor: [IconPack.Ngrx], + }, + { + name: 'folder-ngrx-actions', + folderNames: ['actions'], + enabledFor: [IconPack.Ngrx], + }, + { + name: 'folder-ngrx-entities', + folderNames: ['entities'], + enabledFor: [IconPack.Ngrx], + }, + { + name: 'folder-ngrx-selectors', + folderNames: ['selectors'], + enabledFor: [IconPack.Ngrx], + }, + { + name: 'folder-redux-reducer', + folderNames: ['reducers', 'reducer'], + enabledFor: [IconPack.Redux], + }, + { + name: 'folder-redux-actions', + folderNames: ['actions'], + enabledFor: [IconPack.Redux], + }, + { + name: 'folder-redux-selector', + folderNames: ['selectors', 'selector'], + enabledFor: [IconPack.Redux], + }, + { + name: 'folder-redux-store', + folderNames: ['store', 'stores'], + enabledFor: [IconPack.Redux], + }, + { + name: 'folder-react-components', + folderNames: ['components', 'react', 'jsx', 'reactjs'], + enabledFor: [IconPack.React, IconPack.Redux], + }, + { + name: 'folder-astro', + folderNames: ['astro'], + }, + { + name: 'folder-database', + folderNames: ['db', 'data', 'database', 'databases', 'sql'], + }, + { name: 'folder-log', folderNames: ['log', 'logs', 'logging'] }, + { name: 'folder-target', folderNames: ['target'] }, + { + name: 'folder-temp', + folderNames: ['temp', 'tmp', 'cached', 'cache'], + }, + { name: 'folder-aws', folderNames: ['aws'] }, + { + name: 'folder-audio', + folderNames: [ + 'aud', + 'auds', + 'audio', + 'audios', + 'music', + 'sound', + 'sounds', + ], + }, + { + name: 'folder-video', + folderNames: ['vid', 'vids', 'video', 'videos', 'movie', 'movies'], + }, + { + name: 'folder-kubernetes', + folderNames: ['kubernetes', 'k8s'], + }, + { name: 'folder-import', folderNames: ['import', 'imports', 'imported'] }, + { name: 'folder-export', folderNames: ['export', 'exports', 'exported'] }, + { name: 'folder-wakatime', folderNames: ['wakatime'] }, + { name: 'folder-circleci', folderNames: ['circleci'] }, + { + name: 'folder-wordpress', + folderNames: ['wordpress-org', 'wp-content'], + }, + { name: 'folder-gradle', folderNames: ['gradle'] }, + { + name: 'folder-coverage', + folderNames: [ + 'coverage', + 'nyc-output', + 'nyc_output', + 'e2e', + 'it', + 'integration-test', + 'integration-tests', + ], + }, + { + name: 'folder-class', + folderNames: [ + 'class', + 'classes', + 'model', + 'models', + 'schemas', + 'schema', + ], + }, + { + name: 'folder-other', + folderNames: [ + 'other', + 'others', + 'misc', + 'miscellaneous', + 'extra', + 'extras', + 'etc', + ], + }, + { name: 'folder-lua', folderNames: ['lua'] }, + { name: 'folder-turborepo', folderNames: ['turbo'] }, + { + name: 'folder-typescript', + folderNames: ['typescript', 'ts', 'typings', '@types', 'types'], + }, + { name: 'folder-graphql', folderNames: ['graphql', 'gql'] }, + { name: 'folder-routes', folderNames: ['routes', 'router', 'routers'] }, + { name: 'folder-ci', folderNames: ['ci'] }, + { + name: 'folder-benchmark', + folderNames: [ + 'benchmark', + 'benchmarks', + 'performance', + 'measure', + 'measures', + 'measurement', + ], + }, + { + name: 'folder-messages', + folderNames: [ + 'messages', + 'messaging', + 'forum', + 'chat', + 'chats', + 'conversation', + 'conversations', + ], + }, + { name: 'folder-less', folderNames: ['less'] }, + { + name: 'folder-gulp', + folderNames: [ + 'gulp', + 'gulp-tasks', + 'gulpfile.js', + 'gulpfile.mjs', + 'gulpfile.ts', + 'gulpfile.babel.js', + ], + }, + { + name: 'folder-python', + folderNames: ['python', 'pycache', 'pytest_cache'], + }, + { + name: 'folder-mojo', + folderNames: ['mojo'], + }, + { name: 'folder-moon', folderNames: ['moon'] }, + { name: 'folder-debug', folderNames: ['debug', 'debugging'] }, + { name: 'folder-fastlane', folderNames: ['fastlane'] }, + { + name: 'folder-plugin', + folderNames: [ + 'plugin', + 'plugins', + 'mod', + 'mods', + 'modding', + 'extension', + 'extensions', + 'addon', + 'addons', + 'module', + 'modules', + ], + }, + { name: 'folder-middleware', folderNames: ['middleware', 'middlewares'] }, + { + name: 'folder-controller', + folderNames: [ + 'controller', + 'controllers', + 'service', + 'services', + 'provider', + 'providers', + 'handler', + 'handlers', + ], + }, + { name: 'folder-ansible', folderNames: ['ansible'] }, + { + name: 'folder-server', + folderNames: ['server', 'servers', 'backend', 'backends'], + }, + { + name: 'folder-client', + folderNames: ['client', 'clients', 'frontend', 'frontends', 'pwa'], + }, + { name: 'folder-tasks', folderNames: ['tasks', 'tickets'] }, + { name: 'folder-android', folderNames: ['android'] }, + { name: 'folder-ios', folderNames: ['ios'] }, + { + name: 'folder-ui', + folderNames: ['presentation', 'gui', 'ui', 'ux'], + }, + { name: 'folder-upload', folderNames: ['uploads', 'upload'] }, + { name: 'folder-download', folderNames: ['downloads', 'download'] }, + { + name: 'folder-tools', + folderNames: [ + 'tools', + 'toolkit', + 'toolkits', + 'toolbox', + 'toolboxes', + 'tooling', + 'devtools', + ], + }, + { name: 'folder-helper', folderNames: ['helpers', 'helper'] }, + { name: 'folder-serverless', folderNames: ['serverless'] }, + { name: 'folder-api', folderNames: ['api', 'apis', 'restapi'] }, + { name: 'folder-app', folderNames: ['app', 'apps'] }, + { + name: 'folder-apollo', + folderNames: [ + 'apollo', + 'apollo-client', + 'apollo-cache', + 'apollo-config', + ], + }, + { + name: 'folder-archive', + folderNames: [ + 'arc', + 'arcs', + 'archive', + 'archives', + 'archival', + 'bkp', + 'bkps', + 'bak', + 'baks', + 'backup', + 'backups', + 'back-up', + 'back-ups', + 'history', + 'histories', + ], + }, + { name: 'folder-batch', folderNames: ['batch', 'batchs', 'batches'] }, + { name: 'folder-buildkite', folderNames: ['buildkite'] }, + { name: 'folder-cluster', folderNames: ['cluster', 'clusters'] }, + { + name: 'folder-command', + folderNames: ['command', 'commands', 'cmd', 'cli', 'clis'], + }, + { name: 'folder-constant', folderNames: ['constant', 'constants'] }, + { + name: 'folder-container', + folderNames: ['container', 'containers', 'devcontainer'], + }, + { name: 'folder-content', folderNames: ['content', 'contents'] }, + { name: 'folder-context', folderNames: ['context', 'contexts'] }, + { name: 'folder-core', folderNames: ['core'] }, + { name: 'folder-delta', folderNames: ['delta', 'deltas', 'changes'] }, + { name: 'folder-dump', folderNames: ['dump', 'dumps'] }, + { + name: 'folder-examples', + folderNames: [ + 'demo', + 'demos', + 'example', + 'examples', + 'sample', + 'samples', + 'sample-data', + ], + }, + { + name: 'folder-environment', + folderNames: ['env', 'envs', 'environment', 'environments', 'venv'], + }, + { + name: 'folder-functions', + folderNames: [ + 'func', + 'funcs', + 'function', + 'functions', + 'lambda', + 'lambdas', + 'logic', + 'math', + 'maths', + 'calc', + 'calcs', + 'calculation', + 'calculations', + ], + }, + { + name: 'folder-generator', + folderNames: [ + 'generator', + 'generators', + 'generated', + 'cfn-gen', + 'gen', + 'gens', + 'auto', + ], + }, + { + name: 'folder-hook', + folderNames: ['hook', 'hooks', 'trigger', 'triggers'], + }, + { name: 'folder-job', folderNames: ['job', 'jobs'] }, + { + name: 'folder-keys', + folderNames: [ + 'key', + 'keys', + 'token', + 'tokens', + 'jwt', + 'secret', + 'secrets', + ], + }, + { name: 'folder-layout', folderNames: ['layout', 'layouts'] }, + { + name: 'folder-mail', + folderNames: ['mail', 'mails', 'email', 'emails', 'smtp', 'mailers'], + }, + { name: 'folder-mappings', folderNames: ['mappings', 'mapping'] }, + { name: 'folder-meta', folderNames: ['meta'] }, + { name: 'folder-changesets', folderNames: ['changesets', 'changeset'] }, + { + name: 'folder-packages', + folderNames: ['package', 'packages', 'pkg', 'pkgs'], + }, + { name: 'folder-shared', folderNames: ['shared', 'common'] }, + { + name: 'folder-shader', + folderNames: ['glsl', 'hlsl', 'shader', 'shaders'], + }, + { name: 'folder-stack', folderNames: ['stack', 'stacks'] }, + { + name: 'folder-template', + folderNames: [ + 'template', + 'templates', + 'github/ISSUE_TEMPLATE', + 'github/PULL_REQUEST_TEMPLATE', + ], + }, + { + name: 'folder-utils', + folderNames: ['util', 'utils', 'utility', 'utilities'], + }, + { name: 'folder-supabase', folderNames: ['supabase'] }, + { name: 'folder-private', folderNames: ['private'] }, + { name: 'folder-linux', folderNames: ['linux', 'linuxbsd', 'unix'] }, + { name: 'folder-windows', folderNames: ['windows', 'win', 'win32'] }, + { + name: 'folder-macos', + folderNames: ['macos', 'mac', 'osx', 'DS_Store'], + }, + { + name: 'folder-error', + folderNames: ['error', 'errors', 'err', 'errs', 'crash', 'crashes'], + }, + { name: 'folder-event', folderNames: ['event', 'events'] }, + { + name: 'folder-secure', + folderNames: [ + 'auth', + 'authentication', + 'secure', + 'security', + 'cert', + 'certs', + 'certificate', + 'certificates', + 'ssl', + ], + }, + { name: 'folder-custom', folderNames: ['custom', 'customs'] }, + { + name: 'folder-mock', + folderNames: [ + 'draft', + 'drafts', + 'mock', + 'mocks', + 'fixture', + 'fixtures', + 'concept', + 'concepts', + 'sketch', + 'sketches', + ], + }, + { + name: 'folder-syntax', + folderNames: ['syntax', 'syntaxes', 'spellcheck'], + }, + { name: 'folder-vm', folderNames: ['vm', 'vms'] }, + { name: 'folder-stylus', folderNames: ['stylus'] }, + { name: 'folder-flow', folderNames: ['flow-typed'] }, + { + name: 'folder-rules', + folderNames: [ + 'rule', + 'rules', + 'validation', + 'validations', + 'validator', + 'validators', + ], + }, + { + name: 'folder-review', + folderNames: ['review', 'reviews', 'revisal', 'revisals', 'reviewed'], + }, + { + name: 'folder-animation', + folderNames: ['anim', 'anims', 'animation', 'animations', 'animated'], + }, + { name: 'folder-guard', folderNames: ['guard', 'guards'] }, + { name: 'folder-prisma', folderNames: ['prisma', 'prisma/schema'] }, + { name: 'folder-pipe', folderNames: ['pipe', 'pipes'] }, + { name: 'folder-svg', folderNames: ['svg', 'svgs'] }, + { + name: 'folder-vuex-store', + folderNames: ['store', 'stores'], + enabledFor: [IconPack.Vuex], + }, + { + name: 'folder-nuxt', + folderNames: ['nuxt'], + }, + { + name: 'folder-vue-directives', + folderNames: ['directives'], + enabledFor: [IconPack.Vuex, IconPack.Vue], + }, + { + name: 'folder-vue', + folderNames: ['components'], + enabledFor: [IconPack.Vuex, IconPack.Vue], + }, + { name: 'folder-terraform', folderNames: ['terraform'] }, + { + name: 'folder-mobile', + folderNames: ['mobile', 'mobiles', 'portable', 'portability'], + }, + { name: 'folder-stencil', folderNames: ['stencil'] }, + { name: 'folder-firebase', folderNames: ['firebase'] }, + { name: 'folder-svelte', folderNames: ['svelte', 'svelte-kit'] }, + { + name: 'folder-update', + folderNames: ['update', 'updates', 'upgrade', 'upgrades'], + }, + { name: 'folder-intellij', folderNames: ['idea'], light: true }, + { + name: 'folder-azure-pipelines', + folderNames: ['azure-pipelines', 'azure-pipelines-ci'], + }, + { name: 'folder-mjml', folderNames: ['mjml'] }, + { + name: 'folder-admin', + folderNames: [ + 'admin', + 'admins', + 'manager', + 'managers', + 'moderator', + 'moderators', + ], + }, + { + name: 'folder-jupyter', + folderNames: ['jupyter', 'notebook', 'notebooks', 'ipynb'], + }, + { name: 'folder-scala', folderNames: ['scala'] }, + { + name: 'folder-connection', + folderNames: [ + 'connection', + 'connections', + 'integration', + 'integrations', + 'remote', + 'remotes', + ], + }, + { name: 'folder-quasar', folderNames: ['quasar'] }, + { name: 'folder-next', folderNames: ['next'] }, + { name: 'folder-cobol', folderNames: ['cobol'] }, + { name: 'folder-yarn', folderNames: ['yarn'] }, + { name: 'folder-husky', folderNames: ['husky'] }, + { + name: 'folder-storybook', + folderNames: ['storybook', 'stories'], + }, + { name: 'folder-base', folderNames: ['base', 'bases'] }, + { + name: 'folder-cart', + folderNames: ['cart', 'shopping-cart', 'shopping', 'shop'], + }, + { + name: 'folder-home', + folderNames: ['home', 'start'], + }, + { + name: 'folder-project', + folderNames: ['project', 'projects'], + }, + { + name: 'folder-interface', + folderNames: ['interface', 'interfaces'], + }, + { name: 'folder-netlify', folderNames: ['netlify'] }, + { + name: 'folder-enum', + folderNames: ['enum', 'enums'], + }, + { + name: 'folder-contract', + folderNames: [ + 'pact', + 'pacts', + 'contract', + 'contracts', + 'contract-testing', + 'contract-test', + 'contract-tests', + ], + }, + { + name: 'folder-helm', + folderNames: ['helm', 'helmchart', 'helmcharts'], + }, + { + name: 'folder-queue', + folderNames: ['queue', 'queues', 'bull', 'mq'], + }, + { + name: 'folder-vercel', + folderNames: ['vercel', 'now'], + }, + { + name: 'folder-cypress', + folderNames: ['cypress'], + }, + { + name: 'folder-decorators', + folderNames: ['decorator', 'decorators'], + }, + { + name: 'folder-java', + folderNames: ['java'], + }, + { + name: 'folder-resolver', + folderNames: ['resolver', 'resolvers'], + }, + { + name: 'folder-angular', + folderNames: ['angular'], + }, + { + name: 'folder-unity', + folderNames: ['unity'], + }, + { + name: 'folder-pdf', + folderNames: ['pdf', 'pdfs'], + }, + { + name: 'folder-proto', + folderNames: ['protobuf', 'protobufs', 'proto', 'protos'], + }, + { + name: 'folder-plastic', + folderNames: ['plastic'], + }, + { + name: 'folder-gamemaker', + folderNames: ['gamemaker', 'gamemaker2'], + }, + { + name: 'folder-mercurial', + folderNames: ['hg', 'hghooks', 'hgext'], + }, + { + name: 'folder-godot', + folderNames: ['godot', 'godot-cpp'], + }, + { + name: 'folder-lottie', + folderNames: ['lottie', 'lotties', 'lottiefiles'], + }, + { + name: 'folder-taskfile', + folderNames: ['taskfile', 'taskfiles'], + }, + { + name: 'folder-drizzle', + folderNames: ['drizzle'], + }, + { + name: 'folder-cloudflare', + folderNames: ['cloudflare'], + }, + { + name: 'folder-seeders', + folderNames: ['seeds', 'seeders', 'seed', 'seeding'], + }, + { + name: 'folder-store', + folderNames: ['store', 'stores'], + enabledFor: [IconPack.Angular], + }, + { name: 'folder-bicep', folderNames: ['bicep'] }, + { name: 'folder-snapcraft', folderNames: ['snap', 'snapcraft'] }, + { + name: 'folder-development', + folderNames: ['dev', 'development'], + clone: { + base: 'folder-src', + color: 'light-blue-700', + }, + }, + { name: 'folder-flutter', folderNames: ['flutter'] }, + { name: 'folder-snippet', folderNames: ['snippet', 'snippets'] }, + ], + }, + { + name: 'classic', + defaultIcon: { name: 'folder' }, + rootFolder: { name: 'folder-root' }, + }, + { name: 'none', defaultIcon: { name: '' } }, +]; diff --git a/src/material-icons/src/core/icons/languageIcons.ts b/src/material-icons/src/core/icons/languageIcons.ts new file mode 100644 index 0000000..8bad5b0 --- /dev/null +++ b/src/material-icons/src/core/icons/languageIcons.ts @@ -0,0 +1,163 @@ +import type { LanguageIcon } from '../models/icons/languages/languageIdentifier'; + +/** + * Defines icons for language ids + */ +export const languageIcons: LanguageIcon[] = [ + { icon: { name: 'git' }, ids: ['git', 'git-commit', 'git-rebase', 'ignore'] }, + { + icon: { name: 'github-actions-workflow' }, + ids: ['github-actions-workflow'], + }, + { + icon: { name: 'yaml' }, + ids: ['yaml', 'spring-boot-properties-yaml', 'ansible', 'ansible-jinja'], + }, + { icon: { name: 'xml' }, ids: ['xml', 'xquery', 'xsl'] }, + { icon: { name: 'matlab' }, ids: ['matlab'] }, + { + icon: { name: 'settings' }, + ids: ['makefile', 'toml', 'ini', 'properties', 'spring-boot-properties'], + }, + { icon: { name: 'shaderlab' }, ids: ['shaderlab'] }, + { icon: { name: 'diff' }, ids: ['diff'] }, + { icon: { name: 'json' }, ids: ['json', 'jsonc', 'json5'] }, + { icon: { name: 'blink' }, ids: ['blink'] }, + { icon: { name: 'java' }, ids: ['java'] }, + { icon: { name: 'razor' }, ids: ['razor', 'aspnetcorerazor'] }, + { icon: { name: 'python' }, ids: ['python'] }, + { icon: { name: 'mojo' }, ids: ['mojo'] }, + { icon: { name: 'javascript' }, ids: ['javascript'] }, + { icon: { name: 'typescript' }, ids: ['typescript'] }, + { icon: { name: 'scala' }, ids: ['scala'] }, + { icon: { name: 'handlebars' }, ids: ['handlebars'] }, + { icon: { name: 'perl' }, ids: ['perl', 'perl6'] }, + { icon: { name: 'haxe' }, ids: ['haxe', 'hxml'] }, + { icon: { name: 'puppet' }, ids: ['puppet'] }, + { icon: { name: 'elixir' }, ids: ['elixir'] }, + { icon: { name: 'livescript' }, ids: ['livescript'] }, + { icon: { name: 'erlang' }, ids: ['erlang'] }, + { icon: { name: 'twig' }, ids: ['twig'] }, + { icon: { name: 'julia' }, ids: ['julia'] }, + { icon: { name: 'elm' }, ids: ['elm'] }, + { icon: { name: 'purescript' }, ids: ['purescript'] }, + { icon: { name: 'stylus' }, ids: ['stylus'] }, + { icon: { name: 'nunjucks' }, ids: ['nunjucks'] }, + { icon: { name: 'pug' }, ids: ['pug'] }, + { icon: { name: 'robot' }, ids: ['robotframework'] }, + { icon: { name: 'sass' }, ids: ['sass', 'scss'] }, + { icon: { name: 'less' }, ids: ['less'] }, + { icon: { name: 'css' }, ids: ['css'] }, + { icon: { name: 'visualstudio' }, ids: ['testOutput', 'vb'] }, + { icon: { name: 'angular' }, ids: ['ng-template'] }, + { icon: { name: 'graphql' }, ids: ['graphql'] }, + { icon: { name: 'solidity' }, ids: ['solidity'] }, + { icon: { name: 'autoit' }, ids: ['autoit'] }, + { icon: { name: 'haml' }, ids: ['haml'] }, + { icon: { name: 'yang' }, ids: ['yang'] }, + { icon: { name: 'terraform' }, ids: ['terraform'] }, + { icon: { name: 'applescript' }, ids: ['applescript'] }, + { icon: { name: 'cake' }, ids: ['cake'] }, + { icon: { name: 'cucumber' }, ids: ['cucumber'] }, + { icon: { name: 'nim' }, ids: ['nim', 'nimble'] }, + { icon: { name: 'apiblueprint' }, ids: ['apiblueprint'] }, + { icon: { name: 'riot' }, ids: ['riot'] }, + { icon: { name: 'postcss' }, ids: ['postcss'] }, + { icon: { name: 'coldfusion' }, ids: ['lang-cfml'] }, + { icon: { name: 'haskell' }, ids: ['haskell'] }, + { icon: { name: 'dhall' }, ids: ['dhall'] }, + { icon: { name: 'cabal' }, ids: ['cabal'] }, + { icon: { name: 'nix' }, ids: ['nix'] }, + { icon: { name: 'ruby' }, ids: ['ruby'] }, + { icon: { name: 'slim' }, ids: ['slim'] }, + { icon: { name: 'php' }, ids: ['php'] }, + { icon: { name: 'php_elephant' }, ids: [] }, + { icon: { name: 'php_elephant_pink' }, ids: [] }, + { icon: { name: 'hack' }, ids: ['hack'] }, + { icon: { name: 'react' }, ids: ['javascriptreact'] }, + { icon: { name: 'mjml' }, ids: ['mjml'] }, + { icon: { name: 'processing' }, ids: ['processing'] }, + { icon: { name: 'hcl' }, ids: ['hcl'] }, + { icon: { name: 'go' }, ids: ['go'] }, + { icon: { name: 'go_gopher' }, ids: [] }, + { icon: { name: 'nodejs_alt' }, ids: [] }, + { icon: { name: 'django' }, ids: ['django-html', 'django-txt'] }, + { icon: { name: 'html' }, ids: ['html'] }, + { icon: { name: 'godot' }, ids: ['gdscript'] }, + { icon: { name: 'godot-assets' }, ids: ['gdresource', 'gdshader'] }, + { icon: { name: 'vim' }, ids: ['viml'] }, + { icon: { name: 'silverstripe' }, ids: [] }, + { icon: { name: 'prolog' }, ids: ['prolog'] }, + { icon: { name: 'pawn' }, ids: ['pawn'] }, + { icon: { name: 'reason' }, ids: ['reason', 'reason_lisp'] }, + { icon: { name: 'sml' }, ids: ['sml'] }, + { icon: { name: 'tex' }, ids: ['tex', 'doctex', 'latex', 'latex-expl3'] }, + { icon: { name: 'salesforce' }, ids: ['apex'] }, + { icon: { name: 'sas' }, ids: ['sas'] }, + { icon: { name: 'docker' }, ids: ['dockerfile', 'dockercompose'] }, + { icon: { name: 'table' }, ids: ['csv', 'tsv', 'psv'] }, + { icon: { name: 'csharp' }, ids: ['csharp'] }, + { icon: { name: 'console' }, ids: ['bat', 'awk', 'shellscript'] }, + { icon: { name: 'c' }, ids: ['c'] }, + { icon: { name: 'cpp' }, ids: ['cpp'] }, + { icon: { name: 'objective-c' }, ids: ['objective-c'] }, + { icon: { name: 'objective-cpp' }, ids: ['objective-cpp'] }, + { icon: { name: 'coffee' }, ids: ['coffeescript'] }, + { icon: { name: 'fsharp' }, ids: ['fsharp'] }, + { icon: { name: 'editorconfig' }, ids: ['editorconfig'] }, + { icon: { name: 'clojure' }, ids: ['clojure'] }, + { icon: { name: 'groovy' }, ids: ['groovy'] }, + { icon: { name: 'markdown' }, ids: ['markdown'] }, + { icon: { name: 'jinja' }, ids: ['jinja'] }, + { icon: { name: 'proto' }, ids: ['proto'] }, + { icon: { name: 'python-misc' }, ids: ['pip-requirements'] }, + { icon: { name: 'vue' }, ids: ['vue', 'vue-postcss', 'vue-html'] }, + { icon: { name: 'lua' }, ids: ['lua'] }, + { icon: { name: 'lib' }, ids: ['bibtex', 'bibtex-style'] }, + { icon: { name: 'log' }, ids: ['log'] }, + { icon: { name: 'jupyter' }, ids: ['jupyter'] }, + { icon: { name: 'document' }, ids: ['plaintext'] }, + { icon: { name: 'pdf' }, ids: ['pdf'] }, + { icon: { name: 'powershell' }, ids: ['powershell'] }, + { icon: { name: 'pug' }, ids: ['jade'] }, + { icon: { name: 'r' }, ids: ['r', 'rsweave'] }, + { icon: { name: 'rust' }, ids: ['rust'] }, + { icon: { name: 'database' }, ids: ['sql'] }, + { icon: { name: 'kusto' }, ids: ['kql'] }, + { icon: { name: 'lock' }, ids: ['ssh_config'] }, + { icon: { name: 'svg' }, ids: ['svg'] }, + { icon: { name: 'swift' }, ids: ['swift'] }, + { icon: { name: 'react_ts' }, ids: ['typescriptreact'] }, + { icon: { name: 'search' }, ids: ['search-result'] }, + { icon: { name: 'minecraft' }, ids: ['mcfunction'] }, + { icon: { name: 'rescript' }, ids: ['rescript'] }, + { icon: { name: 'otne' }, ids: ['otne'] }, + { + icon: { name: 'twine' }, + ids: ['twee3', 'twee3-harlowe-3', 'twee3-chapbook-1', 'twee3-sugarcube-2'], + }, + { icon: { name: 'grain' }, ids: ['grain'] }, + { icon: { name: 'lolcode' }, ids: ['lolcode'] }, + { icon: { name: 'idris' }, ids: ['idris'] }, + { icon: { name: 'chess' }, ids: ['pgn'] }, + { icon: { name: 'gemini' }, ids: ['gemini', 'text-gemini'] }, + { icon: { name: 'vlang' }, ids: ['v'] }, + { icon: { name: 'wolframlanguage' }, ids: ['wolfram'] }, + { icon: { name: 'shader' }, ids: ['hlsl', 'glsl', 'wgsl'] }, + { icon: { name: 'tree' }, ids: ['tree'] }, + { icon: { name: 'svelte' }, ids: ['svelte'] }, + { icon: { name: 'dart' }, ids: ['dart'] }, + { icon: { name: 'cadence' }, ids: ['cadence'] }, + { icon: { name: 'stylable' }, ids: ['stylable'] }, + { icon: { name: 'hjson' }, ids: ['hjson'] }, + { icon: { name: 'huff' }, ids: ['huff'] }, + { + icon: { name: 'cds' }, + ids: ['cds', 'capnb', 'cds-markdown-injection'], + }, + { + icon: { name: 'concourse' }, + ids: ['concourse-pipeline-yaml', 'concourse-task-yaml'], + }, + { icon: { name: 'slint' }, ids: ['slint'] }, +]; diff --git a/src/material-icons/src/core/index.ts b/src/material-icons/src/core/index.ts new file mode 100644 index 0000000..039d031 --- /dev/null +++ b/src/material-icons/src/core/index.ts @@ -0,0 +1,57 @@ +export { applyConfigToIcons } from './generator/applyConfigToIcons'; +export { + customClonesIcons, + generateConfiguredClones, + hasCustomClones, +} from './generator/clones/clonesGenerator'; +export { clearCloneFolder } from './generator/clones/utils/cloneData'; +export { + getDefaultConfig, + padWithDefaultConfig, +} from './generator/config/defaultConfig'; +export { + extensionName, + extensionPublisher, + highContrastColorFileEnding, + lightColorFileEnding, + logEventKey, + manifestName, + openedFolder, +} from './generator/constants'; +export { generateFileIcons } from './generator/fileGenerator'; +export { generateFolderIcons } from './generator/folderGenerator'; +export { generateManifest } from './generator/generateManifest'; +export { validateOpacityValue } from './generator/iconOpacity'; +export { validateSaturationValue } from './generator/iconSaturation'; +export { renameIconFiles } from './generator/renameIconFiles'; +export { validateHEXColorCode } from './generator/shared/validation'; +export { availableIconPacks } from './helpers/iconPacks'; +export { get, merge, set } from './helpers/object'; +export { resolvePath } from './helpers/resolvePath'; +export { capitalizeFirstLetter, toTitleCase } from './helpers/titlecase'; +export { writeToFile } from './helpers/writeFile'; +export { initTranslations, translate } from './i18n/translate'; +export { fileIcons } from './icons/fileIcons'; +export { folderIcons } from './icons/folderIcons'; +export { languageIcons } from './icons/languageIcons'; +export { + createLoggingObserver, + logger, + type LogEvent, + type LogLevel, +} from './logging/logger'; +export type { CloneOptions } from './models/icons/cloneOptions'; +export type { Config, IconAssociations } from './models/icons/config'; +export type { DefaultIcon } from './models/icons/defaultIcon'; +export type { FileIcon } from './models/icons/files/fileIcon'; +export type { FileIcons } from './models/icons/files/fileTypes'; +export type { FolderIcon } from './models/icons/folders/folderIcon'; +export type { + FolderTheme, + FolderThemeName, +} from './models/icons/folders/folderTheme'; +export { IconPack, type IconPackValue } from './models/icons/iconPack'; +export type { LanguageIcon } from './models/icons/languages/languageIdentifier'; +export { FileNamePattern } from './models/icons/patterns/patterns'; +export { type Manifest, type ManifestConfig } from './models/manifest'; +export { parseByPattern } from './patterns/patterns'; diff --git a/src/material-icons/src/core/logging/logger.ts b/src/material-icons/src/core/logging/logger.ts new file mode 100644 index 0000000..bc67ed3 --- /dev/null +++ b/src/material-icons/src/core/logging/logger.ts @@ -0,0 +1,60 @@ +import { EventEmitter } from 'node:events'; +import { logEventKey } from '../generator/constants'; + +export type LogLevel = 'info' | 'error' | 'debug'; +const loggerEmitter = new EventEmitter({ + captureRejections: true, +}); + +// Mapping log levels to numeric values for comparison +const logLevelValues: { [Key in LogLevel]: number } = { + debug: 1, + info: 2, + error: 3, +}; + +export type LogEvent = { + level: LogLevel; + message: string; +}; + +/** + * Create a logger that emits log events. + */ +const createLogger = () => { + const emitLogEvent = (level: LogLevel, message: unknown) => { + const timestamp = new Date().toISOString(); + const logEvent: LogEvent = { + level, + message: `[${level.toUpperCase()}] ${timestamp} - ${message}`, + }; + loggerEmitter.emit(logEventKey, logEvent); + }; + + return { + info: (message: unknown) => emitLogEvent('info', message), + error: (message: unknown) => emitLogEvent('error', message), + debug: (message: unknown) => emitLogEvent('debug', message), + }; +}; + +/** + * Create a logging observer that listens to log events and calls a callback function when a log event is emitted. + * + * @param minLogLevel Minimum log level to observe + * @param callback Callback function to be called when a log event is emitted + */ +export const createLoggingObserver = ( + minLogLevel: LogLevel, + callback: (event: LogEvent) => void +): EventEmitter => { + const minLogLevelValue = logLevelValues[minLogLevel]; + + return loggerEmitter.on(logEventKey, (event: LogEvent) => { + if (logLevelValues[event.level] >= minLogLevelValue) { + callback(event); + } + }); +}; + +export const logger = createLogger(); diff --git a/src/material-icons/src/core/models/i18n/translation.ts b/src/material-icons/src/core/models/i18n/translation.ts new file mode 100644 index 0000000..151699f --- /dev/null +++ b/src/material-icons/src/core/models/i18n/translation.ts @@ -0,0 +1,43 @@ +export type Translation = { + activate: string; + activated: string; + iconPacks: { + selectPack: string; + description: string; + disabled: string; + }; + folders: { + toggleIcons: string; + disabled: string; + theme: { + description: string; + }; + }; + colorSelect: { + color: string; + hexCode: string; + wrongHexCode: string; + }; + opacity: { + inputPlaceholder: string; + wrongValue: string; + }; + toggleSwitch: { + on: string; + off: string; + }; + explorerArrows: { + toggle: string; + enable: string; + disable: string; + }; + grayscale: { + toggle: string; + enable: string; + disable: string; + }; + saturation: { + inputPlaceholder: string; + wrongValue: string; + }; +}; diff --git a/src/material-icons/src/core/models/icons/cloneOptions.ts b/src/material-icons/src/core/models/icons/cloneOptions.ts new file mode 100644 index 0000000..9d1b903 --- /dev/null +++ b/src/material-icons/src/core/models/icons/cloneOptions.ts @@ -0,0 +1,5 @@ +export type CloneOptions = { + base: string; + color: string; + lightColor?: string; +}; diff --git a/src/material-icons/src/core/models/icons/config.ts b/src/material-icons/src/core/models/icons/config.ts new file mode 100644 index 0000000..ec2f140 --- /dev/null +++ b/src/material-icons/src/core/models/icons/config.ts @@ -0,0 +1,47 @@ +import type { LogLevel } from '../../logging/logger'; +import type { FolderThemeName } from './folders/folderTheme'; +import type { IconPackValue } from './iconPack'; + +export type Config = { + activeIconPack: IconPackValue; + hidesExplorerArrows: boolean; + opacity: number; + saturation: number; + folders: { + theme: FolderThemeName; + color: string; + associations: IconAssociations; + customClones: FolderIconClone[]; + }; + files: { + color: string; + associations: IconAssociations; + customClones: FileIconClone[]; + }; + languages: { + associations: IconAssociations; + }; + enableLogging: boolean; + logLevel: LogLevel; +}; + +export type IconAssociations = { + [pattern: string]: string; +}; + +export type CustomClone = { + name: string; + base: string; + color: string; + lightColor?: string; + activeForPacks?: IconPackValue[]; +}; + +export type FileIconClone = CustomClone & { + fileExtensions?: string[]; + fileNames?: string[]; +}; + +export type FolderIconClone = CustomClone & { + folderNames: string[]; +}; diff --git a/src/material-icons/src/core/models/icons/defaultIcon.ts b/src/material-icons/src/core/models/icons/defaultIcon.ts new file mode 100644 index 0000000..2fb5961 --- /dev/null +++ b/src/material-icons/src/core/models/icons/defaultIcon.ts @@ -0,0 +1,16 @@ +export type DefaultIcon = { + /** + * Name of the icon, e.g. `src` + */ + name: string; + + /** + * Define if there is a light icon available. + */ + light?: boolean; + + /** + * Define if there is a high contrast icon available. + */ + highContrast?: boolean; +}; diff --git a/src/material-icons/src/core/models/icons/files/fileIcon.ts b/src/material-icons/src/core/models/icons/files/fileIcon.ts new file mode 100644 index 0000000..bc0f5d2 --- /dev/null +++ b/src/material-icons/src/core/models/icons/files/fileIcon.ts @@ -0,0 +1,61 @@ +import type { RequireAtLeastOne } from '../../../types/requiredAtLeastOne'; +import type { CloneOptions } from '../cloneOptions'; +import type { IconPack } from '../iconPack'; +import type { Patterns } from '../patterns/patterns'; + +type BasicFileIcon = { + /** + * Name of the icon, e.g. `javascript` + */ + name: string; + + /** + * Define the file extensions that should use this icon. + * E.g. `['js']` + */ + fileExtensions?: string[]; + + /** + * Define if there are some static file names that should apply this icon. + * E.g. `['sample.js']` + */ + fileNames?: string[]; + + /** + * Define patterns for file names. Patterns are used to generate common file names and file extensions based on a key. + */ + patterns?: Patterns; + + /** + * Define if there is a light icon available. + */ + light?: boolean; + + /** + * Define if there is a high contrast icon available. + */ + highContrast?: boolean; + + /** + * Define if the icon should be disabled. + */ + disabled?: boolean; + + /** + * Defines a pack to which this icon belongs. A pack can be toggled and all icons inside this pack can be enabled or disabled together. + */ + enabledFor?: IconPack[]; + + /** + * Options for generating an icon based on another icon. + */ + clone?: CloneOptions; +}; + +/** + * Type for a `FileIcon`. In addition to the `name` property, either a `fileExtensions` or `fileNames` property is required. + */ +export type FileIcon = RequireAtLeastOne< + BasicFileIcon, + 'fileExtensions' | 'fileNames' | 'patterns' +>; diff --git a/src/material-icons/src/core/models/icons/files/fileTypes.ts b/src/material-icons/src/core/models/icons/files/fileTypes.ts new file mode 100644 index 0000000..8d06123 --- /dev/null +++ b/src/material-icons/src/core/models/icons/files/fileTypes.ts @@ -0,0 +1,14 @@ +import { type DefaultIcon } from '../defaultIcon'; +import type { FileIcon } from './fileIcon'; + +export type FileIcons = { + /** + * Define the default icon for folders. + */ + defaultIcon: DefaultIcon; + + /** + * Defines all folder icons. + */ + icons: FileIcon[]; +}; diff --git a/src/material-icons/src/core/models/icons/folders/folderIcon.ts b/src/material-icons/src/core/models/icons/folders/folderIcon.ts new file mode 100644 index 0000000..a55dfed --- /dev/null +++ b/src/material-icons/src/core/models/icons/folders/folderIcon.ts @@ -0,0 +1,40 @@ +import { type CloneOptions } from '../cloneOptions'; +import type { IconPack } from '../iconPack'; + +export type FolderIcon = { + /** + * Name of the icon, e.g. `src` + */ + name: string; + + /** + * Define the folder names that should apply the icon. + * E.g. `['src', 'source']` + */ + folderNames: string[]; + + /** + * Define if there is a light icon available. + */ + light?: boolean; + + /** + * Define if there is a high contrast icon available. + */ + highContrast?: boolean; + + /** + * Define if the icon should be disabled. + */ + disabled?: boolean; + + /** + * Defines a pack to which this icon belongs. A pack can be toggled and all icons inside this pack can be enabled or disabled together. + */ + enabledFor?: IconPack[]; + + /** + * Options for generating an icon based on another icon. + */ + clone?: CloneOptions; +}; diff --git a/src/material-icons/src/core/models/icons/folders/folderTheme.ts b/src/material-icons/src/core/models/icons/folders/folderTheme.ts new file mode 100644 index 0000000..5822246 --- /dev/null +++ b/src/material-icons/src/core/models/icons/folders/folderTheme.ts @@ -0,0 +1,26 @@ +import type { DefaultIcon } from '../defaultIcon'; +import type { FolderIcon } from './folderIcon'; + +export type FolderTheme = { + /** + * Name of the theme + */ + name: FolderThemeName; + + /** + * Define the default icon for folders in a theme. + */ + defaultIcon: DefaultIcon; + + /** + * Icon for root folders. + */ + rootFolder?: DefaultIcon; + + /** + * Defines folder icons for specific folder names. + */ + icons?: FolderIcon[]; +}; + +export type FolderThemeName = 'specific' | 'classic' | 'none'; diff --git a/src/material-icons/src/core/models/icons/iconPack.ts b/src/material-icons/src/core/models/icons/iconPack.ts new file mode 100644 index 0000000..bf0dfdb --- /dev/null +++ b/src/material-icons/src/core/models/icons/iconPack.ts @@ -0,0 +1,15 @@ +/** + * Defines icon packs that can be toggled. + */ +export enum IconPack { + Angular = 'angular', + Nest = 'nest', + Ngrx = 'angular_ngrx', + React = 'react', + Redux = 'react_redux', + Qwik = 'qwik', + Vue = 'vue', + Vuex = 'vue_vuex', +} + +export type IconPackValue = `${IconPack}` | ''; diff --git a/src/material-icons/src/core/models/icons/languages/languageIdentifier.ts b/src/material-icons/src/core/models/icons/languages/languageIdentifier.ts new file mode 100644 index 0000000..66fbeb0 --- /dev/null +++ b/src/material-icons/src/core/models/icons/languages/languageIdentifier.ts @@ -0,0 +1,27 @@ +import type { DefaultIcon } from '../defaultIcon'; +import type { IconPack } from '../iconPack'; + +export type LanguageIcon = { + /** + * Icon for the language identifier + */ + icon: DefaultIcon; + + /** + * Language ID, e.g. `javascript` + * + * According to official VS Code documentation: + * https://code.visualstudio.com/docs/languages/identifiers + */ + ids: string[]; + + /** + * Define if the icon should be disabled. + */ + disabled?: boolean; + + /** + * Defines a pack to which this icon belongs. A pack can be toggled and all icons inside this pack can be enabled or disabled together. + */ + enabledFor?: IconPack[]; +}; diff --git a/src/material-icons/src/core/models/icons/patterns/patterns.ts b/src/material-icons/src/core/models/icons/patterns/patterns.ts new file mode 100644 index 0000000..45bcb0c --- /dev/null +++ b/src/material-icons/src/core/models/icons/patterns/patterns.ts @@ -0,0 +1,18 @@ +import type { FileIcon } from '../files/fileIcon'; + +export enum FileNamePattern { + /** Adds the following extensions to the file name: `js`, `mjs`, `cjs`, `ts`, `mts`, `cts`. */ + Ecmascript = 'ecmascript', + + /** Adds the following extensions to the file name: `json`, `jsonc`, `json5`, `yaml`, `yml`, `toml`. */ + Configuration = 'configuration', + + /** Adds the following extensions to the file name: `js`, `mjs`, `cjs`, `ts`, `mts`, `cts`, `json`, `jsonc`, `json5`, `yaml`, `yml`, `toml`. */ + NodeEcosystem = 'nodeEcosystem', + + /** It adjusts the name with the following patterns: `.fileNamerc`, `.config/fileNamerc`, `fileName.config` and combines that with the pattern `NodeEcosystem` */ + Cosmiconfig = 'cosmiconfig', +} + +export type Patterns = Record; +export type FileIconWithPatterns = (FileIcon & { patterns?: Patterns })[]; diff --git a/src/material-icons/src/core/models/manifest.ts b/src/material-icons/src/core/models/manifest.ts new file mode 100644 index 0000000..d900411 --- /dev/null +++ b/src/material-icons/src/core/models/manifest.ts @@ -0,0 +1,47 @@ +import type { RecursivePartial } from '../types/recursivePartial'; +import type { Config } from './icons/config'; + +/** + * Configuration for the manifest. It contains the configuration which is used to generate the manifest. + */ +export type ManifestConfig = RecursivePartial< + Pick & { + files: Pick; + } & { + folders: Pick; + } +>; + +export type Manifest = { + file?: string; + folder?: string; + folderExpanded?: string; + folderNames?: Record; + folderNamesExpanded?: Record; + rootFolder?: string; + rootFolderExpanded?: string; + fileExtensions?: Record; + fileNames?: Record; + languageIds?: Record; + iconDefinitions?: Record; + light?: Manifest; + highContrast?: Manifest; + hidesExplorerArrows?: boolean; +}; + +export const createEmptyManifest = (): Manifest => ({ + iconDefinitions: {}, + folderNames: {}, + folderNamesExpanded: {}, + fileExtensions: {}, + fileNames: {}, + languageIds: {}, + light: { + fileExtensions: {}, + fileNames: {}, + }, + highContrast: { + fileExtensions: {}, + fileNames: {}, + }, +}); diff --git a/src/material-icons/src/core/patterns/patterns.ts b/src/material-icons/src/core/patterns/patterns.ts new file mode 100644 index 0000000..f877bfe --- /dev/null +++ b/src/material-icons/src/core/patterns/patterns.ts @@ -0,0 +1,118 @@ +import type { FileIcon } from '../models/icons/files/fileIcon'; +import { + type FileIconWithPatterns, + FileNamePattern, + type Patterns, +} from '../models/icons/patterns/patterns'; + +/** + * Maps the patterns to an array of strings. + * Each pattern is a function that generates file names based on a key. + * + * @param patterns The patterns to map. + * @returns An array of strings generated by applying the patterns. + */ +const mapPatterns = (patterns: Patterns): string[] => { + return Object.entries(patterns).flatMap(([fileName, pattern]) => { + switch (pattern) { + case FileNamePattern.Ecmascript: + return [ + `${fileName}.js`, + `${fileName}.mjs`, + `${fileName}.cjs`, + `${fileName}.ts`, + `${fileName}.mts`, + `${fileName}.cts`, + ]; + + case FileNamePattern.Configuration: + return [ + `${fileName}.json`, + `${fileName}.jsonc`, + `${fileName}.json5`, + `${fileName}.yaml`, + `${fileName}.yml`, + `${fileName}.toml`, + ]; + + case FileNamePattern.NodeEcosystem: + return [ + `${fileName}.js`, + `${fileName}.mjs`, + `${fileName}.cjs`, + `${fileName}.ts`, + `${fileName}.mts`, + `${fileName}.cts`, + `${fileName}.json`, + `${fileName}.jsonc`, + `${fileName}.json5`, + `${fileName}.yaml`, + `${fileName}.yml`, + `${fileName}.toml`, + ]; + + case FileNamePattern.Cosmiconfig: + return [ + `.${fileName}rc`, + `.${fileName}rc.json`, + `.${fileName}rc.jsonc`, + `.${fileName}rc.json5`, + `.${fileName}rc.yaml`, + `.${fileName}rc.yml`, + `.${fileName}rc.toml`, + `.${fileName}rc.js`, + `.${fileName}rc.mjs`, + `.${fileName}rc.cjs`, + `.${fileName}rc.ts`, + `.${fileName}rc.mts`, + `.${fileName}rc.cts`, + `.config/${fileName}rc`, + `.config/${fileName}rc.json`, + `.config/${fileName}rc.jsonc`, + `.config/${fileName}rc.json5`, + `.config/${fileName}rc.yaml`, + `.config/${fileName}rc.yml`, + `.config/${fileName}rc.toml`, + `.config/${fileName}rc.js`, + `.config/${fileName}rc.mjs`, + `.config/${fileName}rc.cjs`, + `.config/${fileName}rc.ts`, + `.config/${fileName}rc.mts`, + `.config/${fileName}rc.cts`, + `${fileName}.config.json`, + `${fileName}.config.jsonc`, + `${fileName}.config.json5`, + `${fileName}.config.yaml`, + `${fileName}.config.yml`, + `${fileName}.config.toml`, + `${fileName}.config.js`, + `${fileName}.config.mjs`, + `${fileName}.config.cjs`, + `${fileName}.config.ts`, + `${fileName}.config.mts`, + `${fileName}.config.cts`, + ]; + + default: + // Check if all potential pattern cases are handled + const exhaustiveCheck: never = pattern; + throw new Error(`Unhandled pattern: ${exhaustiveCheck}`); + } + }); +}; + +/** + * Parses the raw file icons by applying the patterns. + * A pattern helps to generate file names based on a key. + * + * @param rawFileIcons - The list of file icons without applied patterns. + * @returns The list of file icons with applied patterns. + */ +export const parseByPattern = ( + rawFileIcons: FileIconWithPatterns +): FileIcon[] => { + return rawFileIcons.map(({ patterns, fileNames = [], ...rest }) => ({ + ...rest, + fileNames: patterns ? [...mapPatterns(patterns), ...fileNames] : fileNames, + })); +}; diff --git a/src/material-icons/src/core/tests/helpers/object.test.ts b/src/material-icons/src/core/tests/helpers/object.test.ts new file mode 100644 index 0000000..44f44fa --- /dev/null +++ b/src/material-icons/src/core/tests/helpers/object.test.ts @@ -0,0 +1,106 @@ +import { describe, expect, it } from 'bun:test'; +import { merge, set } from '../../helpers/object'; + +describe('set function its', () => { + it('should set value at root level', () => { + const obj: { a: number; b: number; c?: number } = { a: 1, b: 2 }; + set(obj, 'c', 3); + expect(obj).toEqual({ a: 1, b: 2, c: 3 }); + }); + + it('should set value in a nested object', () => { + const obj: { a: { b: number; c?: number } } = { a: { b: 2 } }; + set(obj, 'a.c', 3); + expect(obj).toEqual({ a: { b: 2, c: 3 } }); + }); + + it('should override existing value', () => { + const obj = { a: 1 }; + set(obj, 'a', 2); + expect(obj.a).toBe(2); + }); + + it('should set value with array notation', () => { + const obj = {}; + set(obj, ['a', 'b', 'c'], 3); + expect(obj).toEqual({ a: { b: { c: 3 } } }); + }); + + it('should create nested structure if not exist', () => { + const obj = {}; + set(obj, 'a.b.c', 3); + expect(obj).toEqual({ a: { b: { c: 3 } } }); + }); + + it('should set value with complex path', () => { + const obj: { a: { b: { c: number; d?: { e?: number } } } } = { + a: { b: { c: 1 } }, + }; + set(obj, 'a.b.d.e', 2); + expect(obj).toEqual({ a: { b: { c: 1, d: { e: 2 } } } }); + }); + + it('should set value to null', () => { + const obj: { a: number; b?: null } = { a: 1 }; + set(obj, 'b', null); + expect(obj).toEqual({ a: 1, b: null }); + }); + + it('should set value to undefined', () => { + const obj: { a: number; b?: undefined } = { a: 1 }; + set(obj, 'b', undefined); + expect(obj).toEqual({ a: 1, b: undefined }); + }); +}); + +describe('merge function its', () => { + it('should merge objects with primitive values', () => { + type Obj = { a: number; b?: string; c?: boolean }; + const obj1: Obj = { a: 1, b: 'text' }; + const obj2: Obj = { a: 2, c: true }; + const result = merge(obj1, obj2); + expect(result).toEqual({ a: 2, b: 'text', c: true }); + }); + + it('should merge objects with nested objects', () => { + type Obj = { a: { x?: number; y?: number }; b?: string; c?: boolean }; + const obj1: Obj = { a: { x: 1 }, b: 'text' }; + const obj2: Obj = { a: { y: 2 }, c: true }; + const result = merge(obj1, obj2); + expect(result).toEqual({ a: { x: 1, y: 2 }, b: 'text', c: true }); + }); + + it('should merge objects with arrays', () => { + type Obj = { a: number[]; b?: string; c?: boolean }; + const obj1: Obj = { a: [1, 2], b: 'text' }; + const obj2: Obj = { a: [3, 4], c: true }; + const result = merge(obj1, obj2); + expect(result).toEqual({ a: [1, 2, 3, 4], b: 'text', c: true }); + }); + + it('should handle null and undefined correctly', () => { + type Obj = { + a: { x: number } | null; + b: string | undefined; + }; + const obj1: Obj = { a: null, b: undefined }; + const obj2: Obj = { a: { x: 1 }, b: 'text' }; + const result = merge(obj1, obj2); + expect(result).toEqual({ a: { x: 1 }, b: 'text' }); + }); + + it('should prefer the truthy value when one value is undefined or null and the other is truthy', () => { + type Obj = { + key1?: string | null; + key2?: string | null; + key3?: string | null; + }; + const obj1: Obj = { key1: null, key2: 'value2', key3: undefined }; + const obj2: Obj = { key1: 'value1', key2: null, key3: 'value3' }; + + const expectedResult = { key1: 'value1', key2: 'value2', key3: 'value3' }; + const result = merge(obj1, obj2); + + expect(result).toEqual(expectedResult); + }); +}); diff --git a/src/material-icons/src/core/tests/i18n/i18n.test.ts b/src/material-icons/src/core/tests/i18n/i18n.test.ts new file mode 100644 index 0000000..da27230 --- /dev/null +++ b/src/material-icons/src/core/tests/i18n/i18n.test.ts @@ -0,0 +1,52 @@ +import { describe, expect, it } from 'bun:test'; +import { get } from '../../helpers/object'; +import { getTranslationValue, replace } from '../../i18n/translate'; +import type { Translation } from '../../models/i18n/translation'; + +describe('i18n', () => { + it('should translate key', () => { + const result = getTranslationValue('activate', { + activate: 'b', + } as Translation); + expect(result).toBe('b'); + }); + + it('should return undefined if translation is not defined', () => { + const result = getTranslationValue( + 'activate', + {} as Translation, + {} as Translation + ); + expect(result).toBeUndefined(); + }); + + it('should use fallback if translation is not defined', () => { + const result = getTranslationValue( + 'activate', + {} as Translation, + { activate: 'fb' } as Translation + ); + expect(result).toBe('fb'); + }); + + it('should get the correct translation value of the translation object', () => { + const translation = { + a: { + b: { + c: 'c', + }, + }, + }; + + const result = get(translation, 'a.b.c'); + expect(result).toBe('c'); + }); + + it('should use placeholder in translation', () => { + const result = replace('%0 with placeholder', 'test'); + expect(result).toBe('test with placeholder'); + + const result2 = replace('%0 with %1', 'test', 'placeholder'); + expect(result2).toBe('test with placeholder'); + }); +}); diff --git a/src/material-icons/src/core/tests/icons/cloning.test.ts b/src/material-icons/src/core/tests/icons/cloning.test.ts new file mode 100644 index 0000000..6184c22 --- /dev/null +++ b/src/material-icons/src/core/tests/icons/cloning.test.ts @@ -0,0 +1,970 @@ +import { beforeAll, describe, expect, it, mock } from 'bun:test'; +import { type INode, parse } from 'svgson'; +import { customClonesIcons } from '../../generator/clones/clonesGenerator'; +import { + Type, + Variant, + getCloneData, +} from '../../generator/clones/utils/cloneData'; +import { + cloneIcon, + getStyle, + traverse, +} from '../../generator/clones/utils/cloning'; +import { + closerMaterialColorTo, + materialPalette as palette, +} from '../../generator/clones/utils/color/materialPalette'; +import { padWithDefaultConfig } from '../../generator/config/defaultConfig'; +import { + clonesFolder, + iconFolderPath, + lightColorFileEnding, + openedFolder, +} from '../../generator/constants'; +import { getFileConfigHash } from '../../helpers/configHash'; +import { merge } from '../../helpers/object'; +import { resolvePath } from '../../helpers/resolvePath'; +import type { FileIconClone, FolderIconClone } from '../../models/icons/config'; +import { type Manifest, createEmptyManifest } from '../../models/manifest'; +import { + isValidColor, + orderDarkToLight, +} from './../../generator/clones/utils/color/colors'; +import * as icon from './data/icons'; + +describe('cloning: color manipulation', () => { + describe('#orderDarkToLight(..)', () => { + it('should order colors from dark to light', () => { + const colors = new Set(['#000', '#fff', '#f00', '#0f0', '#00f']); + const result = orderDarkToLight(colors); + expect(result).toStrictEqual(['#000', '#f00', '#0f0', '#00f', '#fff']); + }); + + it('if empty set, should return empty array', () => { + const colors = new Set(); + const result = orderDarkToLight(colors); + expect(result).toStrictEqual([]); + }); + + it('if one color, should return array with that color', () => { + const colors = new Set(['#000']); + const result = orderDarkToLight(colors); + expect(result).toStrictEqual(['#000']); + }); + }); + + describe('#closerMaterialColorTo(..)', () => { + it('should return the closest material color to the given color', () => { + const color = '#e24542'; + const result = closerMaterialColorTo(color); + expect(result).toStrictEqual(palette['red-600']); + }); + + it('should return the same color if it is already a material color', () => { + const color = palette['indigo-500']; + const result = closerMaterialColorTo(color); + expect(result).toStrictEqual(color); + }); + + it('should throw an error if the given color is not valid', () => { + const color = 'bad-color'; + expect(() => closerMaterialColorTo(color)).toThrowError( + 'The given color "bad-color" is not valid!' + ); + }); + }); +}); + +describe('cloning: icon cloning', () => { + describe('#getCloneData(..)', () => { + const subFolder = 'sub/'; + const hash = '~-fakehash123456789'; + const ext = '.ext'; + let manifest: Manifest; + + beforeAll(() => { + manifest = { + iconDefinitions: { + base: { + iconPath: 'icons/icon.svg', + }, + base2: { + iconPath: 'icons/icon2.svg', + }, + // biome-ignore lint/style/useNamingConvention: + base2_light: { + iconPath: 'icons/icon2_light.svg', + }, + 'folder-base': { + iconPath: 'icons/folder-base.svg', + }, + 'folder-base-open': { + iconPath: 'icons/folder-base_open.svg', + }, + 'folder-base2': { + iconPath: 'icons/folder-base2.svg', + }, + 'folder-base2-open': { + iconPath: 'icons/folder-base2_open.svg', + }, + 'folder-base2_light': { + iconPath: 'icons/folder-base2_light.svg', + }, + 'folder-base2-open_light': { + iconPath: 'icons/folder-base2_open_light.svg', + }, + }, + } as Partial as Manifest; + }); + + describe('clone data generation for file icons', () => { + it('should create a single clone object if not light version exists or asked', () => { + const cloneOpts: FileIconClone = { + name: 'foo', + base: 'base', + color: 'green-500', + fileExtensions: ['bar'], + fileNames: ['file.xyz'], + }; + + const result = getCloneData(cloneOpts, manifest, subFolder, hash, ext); + + const expected = [ + { + base: { + path: resolvePath(manifest.iconDefinitions!.base.iconPath), + type: Type.File, + variant: Variant.Base, + }, + color: 'green-500', + inConfigPath: `${iconFolderPath}${subFolder}foo${hash}${ext}`, + name: 'foo', + path: resolvePath(`./icons/${subFolder}foo${hash}${ext}`), + type: Type.File, + variant: Variant.Base, + }, + ]; + + expect(result).toStrictEqual(expected); + }); + + it('should create two clone objects if light version exists', () => { + const cloneOpts: FileIconClone = { + name: 'foo', + base: 'base2', + color: 'green-500', + fileExtensions: ['bar'], + fileNames: ['file.xyz'], + }; + + const result = getCloneData(cloneOpts, manifest, subFolder, hash, ext); + + const expected = [ + { + base: { + path: resolvePath(manifest.iconDefinitions!.base2.iconPath), + type: Type.File, + variant: Variant.Base, + }, + color: 'green-500', + inConfigPath: `${iconFolderPath}${subFolder}foo${hash}${ext}`, + name: 'foo', + path: resolvePath(`./icons/${subFolder}foo${hash}${ext}`), + type: Type.File, + variant: Variant.Base, + }, + { + base: { + path: resolvePath( + manifest.iconDefinitions!.base2_light!.iconPath + ), + type: Type.File, + variant: Variant.Light, + }, + color: 'green-500', + inConfigPath: `${iconFolderPath}${subFolder}foo${lightColorFileEnding}${hash}${ext}`, + name: `foo${lightColorFileEnding}`, + path: resolvePath( + `./icons/${subFolder}foo${lightColorFileEnding}${hash}${ext}` + ), + type: Type.File, + variant: Variant.Light, + }, + ]; + + expect(result).toStrictEqual(expected); + }); + + it("should create two clone objects if light version is asked and base light doesn't exist", () => { + const cloneOpts: FileIconClone = { + name: 'foo', + base: 'base', + color: 'green-500', + lightColor: 'green-800', + fileExtensions: ['bar'], + fileNames: ['file.xyz'], + }; + + const result = getCloneData(cloneOpts, manifest, subFolder, hash, ext); + + const expected = [ + { + base: { + path: resolvePath(manifest.iconDefinitions!.base.iconPath), + type: Type.File, + variant: Variant.Base, + }, + color: 'green-500', + inConfigPath: `${iconFolderPath}${subFolder}foo${hash}${ext}`, + name: 'foo', + path: resolvePath(`./icons/${subFolder}foo${hash}${ext}`), + type: Type.File, + variant: Variant.Base, + }, + { + base: { + // since light version of icon base doesn't exist, the base icon is used as a base + // to clone the light version + path: resolvePath(manifest.iconDefinitions!.base.iconPath), + type: Type.File, + variant: Variant.Light, + }, + color: 'green-800', + inConfigPath: `${iconFolderPath}${subFolder}foo${lightColorFileEnding}${hash}${ext}`, + name: `foo${lightColorFileEnding}`, + path: resolvePath( + `./icons/${subFolder}foo${lightColorFileEnding}${hash}${ext}` + ), + type: Type.File, + variant: Variant.Light, + }, + ]; + + expect(result).toStrictEqual(expected); + }); + }); + + describe('clone data generation for folder icons', () => { + it('should create a single clone object if not light version exists or asked', () => { + const cloneOpts: FolderIconClone = { + name: 'foo', + base: 'base', + color: 'green-500', + folderNames: ['bar'], + }; + + const result = getCloneData(cloneOpts, manifest, subFolder, hash, ext); + + const expected = [ + { + base: { + path: resolvePath( + manifest.iconDefinitions!['folder-base'].iconPath + ), + type: Type.Folder, + variant: Variant.Base, + }, + color: 'green-500', + inConfigPath: `${iconFolderPath}${subFolder}folder-foo${hash}${ext}`, + name: 'folder-foo', + path: resolvePath(`./icons/${subFolder}folder-foo${hash}${ext}`), + type: Type.Folder, + variant: Variant.Base, + }, + { + base: { + path: resolvePath( + manifest.iconDefinitions!['folder-base-open'].iconPath + ), + type: Type.Folder, + variant: Variant.Open, + }, + color: 'green-500', + inConfigPath: `${iconFolderPath}${subFolder}folder-foo${openedFolder}${hash}${ext}`, + name: `folder-foo${openedFolder}`, + path: resolvePath( + `./icons/${subFolder}folder-foo${openedFolder}${hash}${ext}` + ), + type: Type.Folder, + variant: Variant.Open, + }, + ]; + + expect(result).toStrictEqual(expected); + }); + + it('should create two clone objects if light version exists', () => { + const cloneOpts: FolderIconClone = { + name: 'foo', + base: 'folder-base2', + color: 'green-500', + folderNames: ['bar'], + }; + + const result = getCloneData(cloneOpts, manifest, subFolder, hash, ext); + + const expected = [ + { + base: { + path: resolvePath( + manifest.iconDefinitions!['folder-base2'].iconPath + ), + type: Type.Folder, + variant: Variant.Base, + }, + color: 'green-500', + inConfigPath: `${iconFolderPath}${subFolder}folder-foo${hash}${ext}`, + name: 'folder-foo', + path: resolvePath(`./icons/${subFolder}folder-foo${hash}${ext}`), + type: Type.Folder, + variant: Variant.Base, + }, + { + base: { + path: resolvePath( + manifest.iconDefinitions!['folder-base2-open'].iconPath + ), + type: Type.Folder, + variant: Variant.Open, + }, + color: 'green-500', + inConfigPath: `${iconFolderPath}${subFolder}folder-foo${openedFolder}${hash}${ext}`, + name: `folder-foo${openedFolder}`, + path: resolvePath( + `./icons/${subFolder}folder-foo${openedFolder}${hash}${ext}` + ), + type: Type.Folder, + variant: Variant.Open, + }, + { + base: { + path: resolvePath( + manifest.iconDefinitions!['folder-base2_light']!.iconPath + ), + type: Type.Folder, + variant: Variant.Light, + }, + color: 'green-500', + inConfigPath: `${iconFolderPath}${subFolder}folder-foo${lightColorFileEnding}${hash}${ext}`, + name: `folder-foo${lightColorFileEnding}`, + path: resolvePath( + `./icons/${subFolder}folder-foo${lightColorFileEnding}${hash}${ext}` + ), + type: Type.Folder, + variant: Variant.Light, + }, + { + base: { + path: resolvePath( + manifest.iconDefinitions!['folder-base2-open_light']!.iconPath + ), + type: Type.Folder, + variant: Variant.LightOpen, + }, + color: 'green-500', + inConfigPath: `${iconFolderPath}${subFolder}folder-foo${openedFolder}${lightColorFileEnding}${hash}${ext}`, + name: `folder-foo${openedFolder}${lightColorFileEnding}`, + path: resolvePath( + `./icons/${subFolder}folder-foo${openedFolder}${lightColorFileEnding}${hash}${ext}` + ), + type: Type.Folder, + variant: Variant.LightOpen, + }, + ]; + + expect(result).toStrictEqual(expected); + }); + + it("should create two clone objects if light version is asked and base light doesn't exist", () => { + const cloneOpts: FolderIconClone = { + name: 'foo', + base: 'folder-base', + color: 'green-500', + lightColor: 'green-800', + folderNames: ['bar'], + }; + + const result = getCloneData(cloneOpts, manifest, subFolder, hash, ext); + + const expected = [ + { + base: { + path: resolvePath( + manifest.iconDefinitions!['folder-base'].iconPath + ), + type: Type.Folder, + variant: Variant.Base, + }, + color: 'green-500', + inConfigPath: `${iconFolderPath}${subFolder}folder-foo${hash}${ext}`, + name: 'folder-foo', + path: resolvePath(`./icons/${subFolder}folder-foo${hash}${ext}`), + type: Type.Folder, + variant: Variant.Base, + }, + { + base: { + path: resolvePath( + manifest.iconDefinitions!['folder-base-open'].iconPath + ), + type: Type.Folder, + variant: Variant.Open, + }, + color: 'green-500', + inConfigPath: `${iconFolderPath}${subFolder}folder-foo${openedFolder}${hash}${ext}`, + name: `folder-foo${openedFolder}`, + path: resolvePath( + `./icons/${subFolder}folder-foo${openedFolder}${hash}${ext}` + ), + type: Type.Folder, + variant: Variant.Open, + }, + { + base: { + // since light version of icon base doesn't exist, the base icon is used as a base + // to clone the light version + path: resolvePath( + manifest.iconDefinitions!['folder-base'].iconPath + ), + type: Type.Folder, + variant: Variant.Light, + }, + color: 'green-800', + inConfigPath: `${iconFolderPath}${subFolder}folder-foo${lightColorFileEnding}${hash}${ext}`, + name: `folder-foo${lightColorFileEnding}`, + path: resolvePath( + `./icons/${subFolder}folder-foo${lightColorFileEnding}${hash}${ext}` + ), + type: Type.Folder, + variant: Variant.Light, + }, + { + base: { + // since light version of icon base doesn't exist, the base icon is used as a base + // to clone the light version + path: resolvePath( + manifest.iconDefinitions!['folder-base-open'].iconPath + ), + type: Type.Folder, + variant: Variant.LightOpen, + }, + color: 'green-800', + inConfigPath: `${iconFolderPath}${subFolder}folder-foo${openedFolder}${lightColorFileEnding}${hash}${ext}`, + name: `folder-foo${openedFolder}${lightColorFileEnding}`, + path: resolvePath( + `./icons/${subFolder}folder-foo${openedFolder}${lightColorFileEnding}${hash}${ext}` + ), + type: Type.Folder, + variant: Variant.LightOpen, + }, + ]; + + expect(result).toStrictEqual(expected); + }); + }); + }); + + describe('#cloneIcon(..)', () => { + const bluePalette = [ + palette['blue-50'], + palette['blue-100'], + palette['blue-200'], + palette['blue-300'], + palette['blue-400'], + palette['blue-500'], + palette['blue-600'], + palette['blue-700'], + palette['blue-800'], + palette['blue-900'], + palette['blue-A100'], + palette['blue-A200'], + palette['blue-A400'], + palette['blue-A700'], + ]; + + it('should replace the color with the given color', async () => { + mock.module('node:fs/promises', () => { + return { + readFile: () => Promise.resolve(icon.file), + }; + }); + + // mock the fs.readFileSync method to return the desired icon file + const result = await cloneIcon('fake/path/to/icon.svg', 'blue-600', ''); + + const colorCount = forEachColor(await parse(result), (color, loc) => { + expect(color).toBe(palette['blue-600']); + expect(loc).toBe('style:fill'); + }); + + expect(colorCount).toBe(1); + }); + + it('should replace the color with the given color if color is in fill attribute', async () => { + // mock the fs.readFileSync method to return the desired icon file + mock.module('node:fs/promises', () => { + return { + readFile: () => Promise.resolve(icon.fileFill), + }; + }); + const result = await cloneIcon('fake/path/to/icon.svg', 'blue-600', ''); + + const colorCount = forEachColor(await parse(result), (color, loc) => { + expect(color).toBe(palette['blue-600']); + expect(loc).toBe('attr:fill'); + }); + + expect(colorCount).toBe(1); + }); + + it('should replace the color with the given color if color is in stop-color attribute', async () => { + mock.module('node:fs/promises', () => { + return { + readFile: () => Promise.resolve(icon.gradient), + }; + }); + const result = await cloneIcon('fake/path/to/icon.svg', 'blue-600', ''); + + const colorCount = forEachColor(await parse(result), (color, loc) => { + expect(bluePalette).toContain(color); + expect(loc).toBe('attr:stop-color'); + }); + + expect(colorCount).toBe(3); + }); + + it('should replace colors on icons with multiple nodes', async () => { + mock.module('node:fs/promises', () => { + return { + readFile: () => Promise.resolve(icon.folder), + }; + }); + const result = await cloneIcon('fake/path/to/icon.svg', 'blue-600', ''); + + const colors: string[] = []; + const colorCount = forEachColor(await parse(result), (color, loc) => { + colors.push(color); + expect(bluePalette).toContain(color); + expect(loc).toBe('style:fill'); + }); + + // check that one of the colors is actually blue-600 + expect(colors.includes(palette['blue-600'])).toBeTruthy(); + + expect(colorCount).toBe(2); + }); + + describe('`data-mit-no-recolor` attribute', () => { + it('should not replace the color if the node has the `data-mit-no-recolor` attribute', async () => { + mock.module('node:fs/promises', () => { + return { + readFile: () => Promise.resolve(icon.folderIgnores), + }; + }); + + const result = await cloneIcon('fake/path/to/icon.svg', 'blue-600', ''); + const parsed = await parse(result); + const changedNodeStyle = getStyle(parsed.children[0]); + const unchangedNodeStyle = getStyle(parsed.children[1]); + + expect(changedNodeStyle.fill).toBe(palette['blue-600']); + expect(unchangedNodeStyle.fill).toBe('red'); + }); + + it('should not replace the color of any child of a node with the `data-mit-no-recolor` attribute', async () => { + mock.module('node:fs/promises', () => { + return { + readFile: () => Promise.resolve(icon.gradientIgnore), + }; + }); + const result = await cloneIcon('fake/path/to/icon.svg', 'blue-600', ''); + + const colorCount = forEachColor(await parse(result), (color, loc) => { + expect(['#00695c', '#26a69a', '#b2dfdb']).toContain(color); + expect(bluePalette).not.toContain(color); + expect(loc).toBe('attr:stop-color'); + }); + + expect(colorCount).toBe(3); + }); + }); + }); +}); + +/** helper function to traverse the svg tree and notify the colors found */ +const forEachColor = ( + node: INode, + callback: (color: string, loc?: string) => void +) => { + let colorCount = 0; + + const notify = (color: string, loc: string) => { + colorCount++; + callback(color, loc); + }; + + traverse( + node, + (node) => { + // check colors in style attribute + const style = getStyle(node); + style?.fill && + isValidColor(style.fill) && + notify(style.fill, 'style:fill'); + style?.stroke && + isValidColor(style.stroke) && + notify(style.stroke, 'style:stroke'); + node.attributes?.fill && + isValidColor(node.attributes.fill) && + notify(node.attributes.fill, 'attr:fill'); + node.attributes?.stroke && + isValidColor(node.attributes.stroke) && + notify(node.attributes.stroke, 'attr:stroke'); + node.attributes?.['stop-color'] && + isValidColor(node.attributes['stop-color']) && + notify(node.attributes['stop-color'], 'attr:stop-color'); + }, + false // no filtering + ); + + return colorCount; +}; + +describe('cloning: json config generation from user options', () => { + beforeAll(() => { + mock.module('node:fs/promises', () => { + return { + readFile: () => Promise.resolve(icon.file), + writeFile: () => Promise.resolve(), + }; + }); + }); + + const getManifest = (hash: string) => { + return { + iconDefinitions: { + foo: { iconPath: `./../icons/foo${hash}.svg` }, + file: { iconPath: `./../icons/file${hash}.svg` }, + 'folder-foo': { iconPath: `./../icons/folder${hash}.svg` }, + 'folder-foo-open': { iconPath: `./../icons/folder-open${hash}.svg` }, + }, + folderNames: {}, + folderNamesExpanded: {}, + fileExtensions: {}, + fileNames: { 'foo.bar': 'foo' }, + file: 'file', + languageIds: {}, + light: { + fileExtensions: {}, + fileNames: {}, + folderNames: {}, + folderNamesExpanded: {}, + }, + highContrast: { fileExtensions: {}, fileNames: {} }, + }; + }; + + it('should generate the manifest from the config', async () => { + const config = padWithDefaultConfig({ + files: { + customClones: [ + { + base: 'foo', + name: 'foo-clone', + fileNames: ['bar.foo'], + fileExtensions: ['baz'], + color: 'green-400', + lightColor: 'green-800', + }, + ], + }, + folders: { + customClones: [ + { + base: 'folder-foo', + name: 'folder-foo-clone', + folderNames: ['bar'], + color: 'green-400', + lightColor: 'green-800', + }, + ], + }, + }); + const hash = getFileConfigHash(config); + const result = await customClonesIcons(getManifest(hash), config); + + const expected = merge(createEmptyManifest(), { + iconDefinitions: { + file: { + iconPath: `./../icons/file${hash}.svg`, + }, + 'folder-foo': { + iconPath: `./../icons/folder${hash}.svg`, + }, + 'folder-foo-open': { + iconPath: `./../icons/folder${openedFolder}${hash}.svg`, + }, + foo: { + iconPath: `./../icons/foo${hash}.svg`, + }, + 'folder-foo-clone': { + iconPath: `./../icons/${clonesFolder}folder-foo-clone${hash}.svg`, + }, + 'folder-foo-clone-open': { + iconPath: `./../icons/${clonesFolder}folder-foo-clone${openedFolder}${hash}.svg`, + }, + 'folder-foo-clone_light': { + iconPath: `./../icons/${clonesFolder}folder-foo-clone${lightColorFileEnding}${hash}.svg`, + }, + 'folder-foo-clone-open_light': { + iconPath: `./../icons/${clonesFolder}folder-foo-clone${openedFolder}${lightColorFileEnding}${hash}.svg`, + }, + 'foo-clone': { + iconPath: `./../icons/${clonesFolder}foo-clone${hash}.svg`, + }, + 'foo-clone_light': { + iconPath: `./../icons/${clonesFolder}foo-clone${lightColorFileEnding}${hash}.svg`, + }, + }, + folderNames: { bar: 'folder-foo-clone' }, + folderNamesExpanded: { bar: `folder-foo-clone${openedFolder}` }, + fileExtensions: { baz: 'foo-clone' }, + fileNames: { 'bar.foo': 'foo-clone', 'foo.bar': 'foo' }, + file: 'file', + languageIds: {}, + light: { + fileExtensions: { baz: `foo-clone${lightColorFileEnding}` }, + fileNames: { 'bar.foo': `foo-clone${lightColorFileEnding}` }, + folderNames: { bar: `folder-foo-clone${lightColorFileEnding}` }, + folderNamesExpanded: { + bar: `folder-foo-clone${openedFolder}${lightColorFileEnding}`, + }, + }, + highContrast: { fileExtensions: {}, fileNames: {} }, + }); + + expect(result).toStrictEqual(expected); + }); + + it('should not generate clones for icons not in the active pack', async () => { + const config = padWithDefaultConfig({ + files: { + customClones: [ + { + base: 'foo', + name: 'foo-clone', + fileNames: ['bar.foo'], + fileExtensions: ['baz'], + color: 'green-400', + lightColor: 'green-800', + activeForPacks: ['nest'], + }, + ], + }, + folders: { + customClones: [ + { + base: 'folder-foo', + name: 'folder-foo-clone', + folderNames: ['bar'], + color: 'green-400', + lightColor: 'green-800', + activeForPacks: ['nest'], + }, + ], + }, + }); + const hash = getFileConfigHash(config); + const result = await customClonesIcons(getManifest(hash), config); + + const expected = merge(createEmptyManifest(), { + iconDefinitions: { + file: { + iconPath: `./../icons/file${hash}.svg`, + }, + 'folder-foo': { + iconPath: `./../icons/folder${hash}.svg`, + }, + 'folder-foo-open': { + iconPath: `./../icons/folder${openedFolder}${hash}.svg`, + }, + foo: { + iconPath: `./../icons/foo${hash}.svg`, + }, + }, + folderNames: {}, + folderNamesExpanded: {}, + fileExtensions: {}, + fileNames: { 'foo.bar': 'foo' }, + file: 'file', + languageIds: {}, + light: { + fileExtensions: {}, + fileNames: {}, + folderNames: {}, + folderNamesExpanded: {}, + }, + highContrast: { fileExtensions: {}, fileNames: {} }, + }); + + expect(result).toStrictEqual(expected); + }); + + it('should generate clones for icons in the active pack, or whose pack is unspecified', async () => { + const config = padWithDefaultConfig({ + files: { + customClones: [ + { + base: 'foo', + name: 'foo-clone', + fileNames: ['bar.foo'], + fileExtensions: ['baz'], + color: 'green-400', + lightColor: 'green-800', + activeForPacks: ['nest'], + }, + { + base: 'foo', + name: 'foo-angular-clone', + fileNames: ['bar.foo.angular'], + fileExtensions: ['baz.angular'], + color: 'green-500', + lightColor: 'green-900', + activeForPacks: ['angular'], + }, + { + base: 'foo', + name: 'foo-any-clone', + fileNames: ['bar.foo.any'], + fileExtensions: ['baz.any'], + color: 'green-600', + lightColor: 'green-100', + }, + ], + }, + folders: { + customClones: [ + { + base: 'folder-foo', + name: 'folder-foo-clone', + folderNames: ['bar'], + color: 'green-400', + lightColor: 'green-800', + activeForPacks: ['nest'], + }, + { + base: 'folder-foo', + name: 'folder-foo-angular-clone', + folderNames: ['bar.angular'], + color: 'green-500', + lightColor: 'green-900', + activeForPacks: ['angular'], + }, + { + base: 'folder-foo', + name: 'folder-foo-any-clone', + folderNames: ['bar.any'], + color: 'green-600', + lightColor: 'green-100', + }, + ], + }, + }); + const hash = getFileConfigHash(config); + const result = await customClonesIcons(getManifest(hash), config); + + const expected = merge(createEmptyManifest(), { + iconDefinitions: { + file: { + iconPath: `./../icons/file${hash}.svg`, + }, + 'folder-foo': { + iconPath: `./../icons/folder${hash}.svg`, + }, + 'folder-foo-open': { + iconPath: `./../icons/folder${openedFolder}${hash}.svg`, + }, + foo: { + iconPath: `./../icons/foo${hash}.svg`, + }, + 'folder-foo-angular-clone': { + iconPath: `./../icons/${clonesFolder}folder-foo-angular-clone${hash}.svg`, + }, + 'folder-foo-angular-clone-open': { + iconPath: `./../icons/${clonesFolder}folder-foo-angular-clone${openedFolder}${hash}.svg`, + }, + 'folder-foo-angular-clone_light': { + iconPath: `./../icons/${clonesFolder}folder-foo-angular-clone${lightColorFileEnding}${hash}.svg`, + }, + 'folder-foo-angular-clone-open_light': { + iconPath: `./../icons/${clonesFolder}folder-foo-angular-clone${openedFolder}${lightColorFileEnding}${hash}.svg`, + }, + 'folder-foo-any-clone': { + iconPath: `./../icons/${clonesFolder}folder-foo-any-clone${hash}.svg`, + }, + 'folder-foo-any-clone-open': { + iconPath: `./../icons/${clonesFolder}folder-foo-any-clone${openedFolder}${hash}.svg`, + }, + 'folder-foo-any-clone_light': { + iconPath: `./../icons/${clonesFolder}folder-foo-any-clone${lightColorFileEnding}${hash}.svg`, + }, + 'folder-foo-any-clone-open_light': { + iconPath: `./../icons/${clonesFolder}folder-foo-any-clone${openedFolder}${lightColorFileEnding}${hash}.svg`, + }, + 'foo-angular-clone': { + iconPath: `./../icons/${clonesFolder}foo-angular-clone${hash}.svg`, + }, + 'foo-angular-clone_light': { + iconPath: `./../icons/${clonesFolder}foo-angular-clone${lightColorFileEnding}${hash}.svg`, + }, + 'foo-any-clone': { + iconPath: `./../icons/${clonesFolder}foo-any-clone${hash}.svg`, + }, + 'foo-any-clone_light': { + iconPath: `./../icons/${clonesFolder}foo-any-clone${lightColorFileEnding}${hash}.svg`, + }, + }, + folderNames: { + 'bar.angular': 'folder-foo-angular-clone', + 'bar.any': 'folder-foo-any-clone', + }, + folderNamesExpanded: { + 'bar.angular': `folder-foo-angular-clone${openedFolder}`, + 'bar.any': `folder-foo-any-clone${openedFolder}`, + }, + fileExtensions: { + 'baz.angular': 'foo-angular-clone', + 'baz.any': 'foo-any-clone', + }, + fileNames: { + 'bar.foo.angular': 'foo-angular-clone', + 'bar.foo.any': 'foo-any-clone', + 'foo.bar': 'foo', + }, + file: 'file', + languageIds: {}, + light: { + fileExtensions: { + 'baz.angular': `foo-angular-clone${lightColorFileEnding}`, + 'baz.any': `foo-any-clone${lightColorFileEnding}`, + }, + fileNames: { + 'bar.foo.angular': `foo-angular-clone${lightColorFileEnding}`, + 'bar.foo.any': `foo-any-clone${lightColorFileEnding}`, + }, + folderNames: { + 'bar.angular': `folder-foo-angular-clone${lightColorFileEnding}`, + 'bar.any': `folder-foo-any-clone${lightColorFileEnding}`, + }, + folderNamesExpanded: { + 'bar.angular': `folder-foo-angular-clone${openedFolder}${lightColorFileEnding}`, + 'bar.any': `folder-foo-any-clone${openedFolder}${lightColorFileEnding}`, + }, + }, + highContrast: { fileExtensions: {}, fileNames: {} }, + }); + + expect(result).toStrictEqual(expected); + }); +}); diff --git a/src/material-icons/src/core/tests/icons/data/icons.ts b/src/material-icons/src/core/tests/icons/data/icons.ts new file mode 100644 index 0000000..f20fd24 --- /dev/null +++ b/src/material-icons/src/core/tests/icons/data/icons.ts @@ -0,0 +1,56 @@ +/** a file icon with just one node */ +export const file = ` + + + +`; + +export const fileFill = ` + + + +`; + +/** an icon with a gradient */ +export const gradient = ` + + + + + + + + + + +`; + +/** a folder icon with many nodes */ +export const folder = ` + + + + +`; + +/** a folder icon asking for one node to not be recolorized */ +export const folderIgnores = ` + + + + +`; + +/** an icon with a gradient that asks for the gradient node to not be recolorized */ +export const gradientIgnore = ` + + + + + + + + + + +`; diff --git a/src/material-icons/src/core/tests/icons/fileIcons.test.ts b/src/material-icons/src/core/tests/icons/fileIcons.test.ts new file mode 100644 index 0000000..157181f --- /dev/null +++ b/src/material-icons/src/core/tests/icons/fileIcons.test.ts @@ -0,0 +1,366 @@ +import { beforeEach, describe, expect, it } from 'bun:test'; +import { getDefaultConfig } from '../../generator/config/defaultConfig'; +import { loadFileIconDefinitions } from '../../generator/fileGenerator'; +import type { Config } from '../../models/icons/config'; +import type { FileIcons } from '../../models/icons/files/fileTypes'; +import { IconPack } from '../../models/icons/iconPack'; +import { type Manifest, createEmptyManifest } from '../../models/manifest'; + +describe('file icons', () => { + let expectedManifest: Manifest; + let config: Config; + + beforeEach(() => { + config = getDefaultConfig(); + expectedManifest = createEmptyManifest(); + }); + + it('should configure icon definitions', () => { + const fileIcons: FileIcons = { + defaultIcon: { name: 'file' }, + icons: [ + { + name: 'angular', + fileNames: ['.angular-cli.json', 'angular-cli.json'], + enabledFor: [IconPack.Angular, IconPack.Ngrx], + }, + { + name: 'javascript', + fileNames: ['filename.js'], + fileExtensions: ['js'], + }, + ], + }; + + const manifest = createEmptyManifest(); + const iconDefinitions = loadFileIconDefinitions( + fileIcons, + config, + manifest + ); + + expectedManifest.iconDefinitions = { + angular: { + iconPath: './../icons/angular.svg', + }, + javascript: { + iconPath: './../icons/javascript.svg', + }, + file: { + iconPath: './../icons/file.svg', + }, + }; + expectedManifest.file = 'file'; + expectedManifest.fileExtensions = { + js: 'javascript', + }; + expectedManifest.fileNames = { + '.angular-cli.json': 'angular', + 'angular-cli.json': 'angular', + 'filename.js': 'javascript', + }; + + expect(iconDefinitions).toStrictEqual(expectedManifest); + }); + + it('should disable icon packs', () => { + const fileIcons: FileIcons = { + defaultIcon: { name: 'file' }, + icons: [ + { + name: 'angular', + fileNames: ['.angular-cli.json', 'angular-cli.json'], + enabledFor: [IconPack.Ngrx], + }, + { + name: 'javascript', + fileNames: ['filename.js'], + fileExtensions: ['js'], + }, + ], + }; + + const manifest = createEmptyManifest(); + config.activeIconPack = ''; + const iconDefinitions = loadFileIconDefinitions( + fileIcons, + config, + manifest + ); + + expectedManifest.iconDefinitions = { + file: { + iconPath: './../icons/file.svg', + }, + javascript: { + iconPath: './../icons/javascript.svg', + }, + }; + expectedManifest.file = 'file'; + expectedManifest.fileExtensions = { + js: 'javascript', + }; + expectedManifest.fileNames = { + 'filename.js': 'javascript', + }; + + expect(iconDefinitions).toStrictEqual(expectedManifest); + }); + + it('should configure custom icon associations', () => { + const fileIcons: FileIcons = { + defaultIcon: { name: 'file' }, + icons: [ + { + name: 'angular', + fileNames: ['.angular-cli.json', 'angular-cli.json'], + }, + { + name: 'javascript', + fileNames: ['filename.js'], + fileExtensions: ['js'], + }, + ], + }; + const config = getDefaultConfig(); + config.files.associations = { + '*.sample.ts': 'angular', + 'sample.js': 'javascript', + }; + const manifest = createEmptyManifest(); + const iconDefinitions = loadFileIconDefinitions( + fileIcons, + config, + manifest + ); + + expectedManifest.iconDefinitions = { + file: { + iconPath: './../icons/file.svg', + }, + javascript: { + iconPath: './../icons/javascript.svg', + }, + angular: { + iconPath: './../icons/angular.svg', + }, + }; + expectedManifest.file = 'file'; + expectedManifest.fileExtensions = { + js: 'javascript', + 'sample.ts': 'angular', + }; + expectedManifest.fileNames = { + '.angular-cli.json': 'angular', + 'angular-cli.json': 'angular', + 'sample.js': 'javascript', + 'filename.js': 'javascript', + }; + + config.files.associations = { + '*.sample.ts': 'angular', + 'sample.js': 'javascript', + }; + + expect(iconDefinitions).toStrictEqual(expectedManifest); + }); + + it('should configure language icons for light and high contrast', () => { + const fileIcons: FileIcons = { + defaultIcon: { name: 'file', light: true, highContrast: true }, + icons: [ + { + name: 'angular', + fileNames: ['.angular-cli.json', 'angular-cli.json'], + enabledFor: [IconPack.Angular, IconPack.Ngrx], + }, + { + name: 'javascript', + fileNames: ['filename.js'], + fileExtensions: ['js'], + light: true, + highContrast: true, + }, + ], + }; + + const manifest = createEmptyManifest(); + const iconDefinitions = loadFileIconDefinitions( + fileIcons, + config, + manifest + ); + expectedManifest.iconDefinitions = { + file: { + iconPath: './../icons/file.svg', + }, + // biome-ignore lint/style/useNamingConvention: + file_light: { + iconPath: './../icons/file_light.svg', + }, + // biome-ignore lint/style/useNamingConvention: + file_highContrast: { + iconPath: './../icons/file_highContrast.svg', + }, + javascript: { + iconPath: './../icons/javascript.svg', + }, + // biome-ignore lint/style/useNamingConvention: + javascript_light: { + iconPath: './../icons/javascript_light.svg', + }, + // biome-ignore lint/style/useNamingConvention: + javascript_highContrast: { + iconPath: './../icons/javascript_highContrast.svg', + }, + angular: { + iconPath: './../icons/angular.svg', + }, + }; + expectedManifest.file = 'file'; + expectedManifest.fileExtensions = { + js: 'javascript', + }; + expectedManifest.light = { + file: 'file_light', + fileExtensions: { + js: 'javascript_light', + }, + fileNames: { + 'filename.js': 'javascript_light', + }, + }; + expectedManifest.highContrast = { + file: 'file_highContrast', + fileExtensions: { + js: 'javascript_highContrast', + }, + fileNames: { + 'filename.js': 'javascript_highContrast', + }, + }; + expectedManifest.fileNames = { + '.angular-cli.json': 'angular', + 'angular-cli.json': 'angular', + 'filename.js': 'javascript', + }; + + expect(iconDefinitions).toStrictEqual(expectedManifest); + }); + + it('should generate cloned file icons config', () => { + const fileIcons: FileIcons = { + defaultIcon: { name: 'file' }, + icons: [ + { + name: 'foo', + fileNames: ['foo.bar'], + }, + { + name: 'foo-clone', + fileNames: ['bar.foo'], + fileExtensions: ['baz'], + light: true, + clone: { + base: 'foo', + color: 'green-500', + lightColor: 'green-100', + }, + }, + ], + }; + + const manifest = createEmptyManifest(); + const iconDefinitions = loadFileIconDefinitions( + fileIcons, + config, + manifest + ); + + expectedManifest.iconDefinitions = { + foo: { + iconPath: './../icons/foo.svg', + }, + 'foo-clone': { + iconPath: './../icons/foo-clone.clone.svg', + }, + 'foo-clone_light': { + iconPath: './../icons/foo-clone_light.clone.svg', + }, + file: { + iconPath: './../icons/file.svg', + }, + }; + expectedManifest.light = { + fileExtensions: { + baz: 'foo-clone_light', + }, + fileNames: { + 'bar.foo': 'foo-clone_light', + }, + }; + expectedManifest.fileNames = { + 'foo.bar': 'foo', + 'bar.foo': 'foo-clone', + }; + expectedManifest.fileExtensions = { + baz: 'foo-clone', + }; + expectedManifest.file = 'file'; + + expect(iconDefinitions).toStrictEqual(expectedManifest); + }); + + it('should allow interoperability between cloned and user custom associations', () => { + const fileIcons: FileIcons = { + defaultIcon: { name: 'file' }, + icons: [ + { + name: 'foo', + fileExtensions: ['foo'], + }, + { + name: 'bar', + fileExtensions: ['bar'], + clone: { + base: 'foo', + color: 'green-500', + lightColor: 'green-100', + }, + }, + ], + }; + + config.files.associations = { + '*.baz': 'bar', // assigned to the clone + }; + + const manifest = createEmptyManifest(); + const iconDefinitions = loadFileIconDefinitions( + fileIcons, + config, + manifest + ); + + expectedManifest.iconDefinitions = { + foo: { + iconPath: './../icons/foo.svg', + }, + bar: { + iconPath: './../icons/bar.clone.svg', + }, + file: { + iconPath: './../icons/file.svg', + }, + }; + expectedManifest.fileNames = {}; + expectedManifest.fileExtensions = { + foo: 'foo', + bar: 'bar', + baz: 'bar', + }; + expectedManifest.file = 'file'; + + expect(iconDefinitions).toStrictEqual(expectedManifest); + }); +}); diff --git a/src/material-icons/src/core/tests/icons/filename-pattern.test.ts b/src/material-icons/src/core/tests/icons/filename-pattern.test.ts new file mode 100644 index 0000000..8cc5431 --- /dev/null +++ b/src/material-icons/src/core/tests/icons/filename-pattern.test.ts @@ -0,0 +1,95 @@ +import { describe, expect, it } from 'bun:test'; +import type { FileIcon } from '../../models/icons/files/fileIcon'; +import { + type FileIconWithPatterns, + FileNamePattern, +} from '../../models/icons/patterns/patterns'; +import { parseByPattern } from '../../patterns/patterns'; + +describe('File name patterns', () => { + it('should add a pattern to the file names', () => { + const fileIconsWithPatterns: FileIconWithPatterns = [ + { + name: 'file1', + fileNames: ['file1.txt'], + patterns: { + file1: FileNamePattern.Ecmascript, + }, + }, + ]; + + const expected: FileIcon[] = [ + { + name: 'file1', + fileNames: [ + 'file1.js', + 'file1.mjs', + 'file1.cjs', + 'file1.ts', + 'file1.mts', + 'file1.cts', + 'file1.txt', + ], + }, + ]; + const result = parseByPattern(fileIconsWithPatterns); + + expect(result).toStrictEqual(expected); + }); + + it('should return same file names if there is no pattern configured', () => { + const fileIconsWithPatterns: FileIconWithPatterns = [ + { + name: 'file1', + fileNames: ['file1.txt'], + }, + ]; + + const expected: FileIcon[] = [ + { + name: 'file1', + fileNames: ['file1.txt'], + }, + ]; + const result = parseByPattern(fileIconsWithPatterns); + + expect(result).toStrictEqual(expected); + }); + + it('should add multiple patterns to the file names', () => { + const fileIconsWithPatterns: FileIconWithPatterns = [ + { + name: 'file1', + fileNames: ['file1.txt'], + patterns: { + file1: FileNamePattern.Ecmascript, + file2: FileNamePattern.Configuration, + }, + }, + ]; + + const expected: FileIcon[] = [ + { + name: 'file1', + fileNames: [ + 'file1.js', + 'file1.mjs', + 'file1.cjs', + 'file1.ts', + 'file1.mts', + 'file1.cts', + 'file2.json', + 'file2.jsonc', + 'file2.json5', + 'file2.yaml', + 'file2.yml', + 'file2.toml', + 'file1.txt', + ], + }, + ]; + const result = parseByPattern(fileIconsWithPatterns); + + expect(result).toStrictEqual(expected); + }); +}); diff --git a/src/material-icons/src/core/tests/icons/folderIcons.test.ts b/src/material-icons/src/core/tests/icons/folderIcons.test.ts new file mode 100644 index 0000000..200ee65 --- /dev/null +++ b/src/material-icons/src/core/tests/icons/folderIcons.test.ts @@ -0,0 +1,679 @@ +import { beforeAll, beforeEach, describe, expect, it } from 'bun:test'; +import { getDefaultConfig } from '../../generator/config/defaultConfig'; +import { loadFolderIconDefinitions } from '../../generator/folderGenerator'; +import type { Config } from '../../models/icons/config'; +import type { FolderTheme } from '../../models/icons/folders/folderTheme'; +import { IconPack } from '../../models/icons/iconPack'; +import { type Manifest, createEmptyManifest } from '../../models/manifest'; + +describe('folder icons', () => { + let folderIcons: FolderTheme[]; + let expectedManifest: Manifest; + let config: Config; + + beforeAll(() => { + folderIcons = [ + { + name: 'specific', + defaultIcon: { name: 'folder' }, + rootFolder: { name: 'folder-root' }, + icons: [ + { name: 'folder-src', folderNames: ['src', 'source'] }, + { + name: 'folder-angular', + folderNames: ['angular', 'ng'], + enabledFor: [IconPack.Angular, IconPack.Ngrx], + }, + ], + }, + { name: 'classic', defaultIcon: { name: 'folder' } }, + { name: 'none', defaultIcon: { name: '' } }, + ]; + }); + + beforeEach(() => { + config = getDefaultConfig(); + expectedManifest = createEmptyManifest(); + }); + + it('should configure icon definitions', () => { + const manifest = createEmptyManifest(); + const iconDefinitions = loadFolderIconDefinitions( + folderIcons, + config, + manifest + ); + + expectedManifest.iconDefinitions = { + folder: { + iconPath: './../icons/folder.svg', + }, + 'folder-open': { + iconPath: './../icons/folder-open.svg', + }, + 'folder-root': { + iconPath: './../icons/folder-root.svg', + }, + 'folder-root-open': { + iconPath: './../icons/folder-root-open.svg', + }, + 'folder-src': { + iconPath: './../icons/folder-src.svg', + }, + 'folder-src-open': { + iconPath: './../icons/folder-src-open.svg', + }, + 'folder-angular': { + iconPath: './../icons/folder-angular.svg', + }, + 'folder-angular-open': { + iconPath: './../icons/folder-angular-open.svg', + }, + }; + expectedManifest.folder = 'folder'; + expectedManifest.folderExpanded = 'folder-open'; + expectedManifest.rootFolder = 'folder-root'; + expectedManifest.rootFolderExpanded = 'folder-root-open'; + expectedManifest.folderNames = { + src: 'folder-src', + source: 'folder-src', + angular: 'folder-angular', + ng: 'folder-angular', + _src: 'folder-src', + _source: 'folder-src', + _angular: 'folder-angular', + _ng: 'folder-angular', + __src__: 'folder-src', + __source__: 'folder-src', + __angular__: 'folder-angular', + __ng__: 'folder-angular', + '.src': 'folder-src', + '.source': 'folder-src', + '.angular': 'folder-angular', + '.ng': 'folder-angular', + }; + expectedManifest.folderNamesExpanded = { + src: 'folder-src-open', + source: 'folder-src-open', + angular: 'folder-angular-open', + ng: 'folder-angular-open', + _src: 'folder-src-open', + _source: 'folder-src-open', + _angular: 'folder-angular-open', + _ng: 'folder-angular-open', + __src__: 'folder-src-open', + __source__: 'folder-src-open', + __angular__: 'folder-angular-open', + __ng__: 'folder-angular-open', + '.src': 'folder-src-open', + '.source': 'folder-src-open', + '.angular': 'folder-angular-open', + '.ng': 'folder-angular-open', + }; + expectedManifest.hidesExplorerArrows = false; + + expect(iconDefinitions).toStrictEqual(expectedManifest); + }); + + it('should deactivate folder icons', () => { + config.folders.theme = 'none'; + const manifest = createEmptyManifest(); + const iconDefinitions = loadFolderIconDefinitions( + folderIcons, + config, + manifest + ); + + expectedManifest.iconDefinitions = {}; + expectedManifest.folderNames = {}; + expectedManifest.folderNamesExpanded = {}; + expectedManifest.hidesExplorerArrows = false; + + expect(iconDefinitions).toStrictEqual(expectedManifest); + }); + + it('should change folder theme', () => { + config.folders.theme = 'classic'; + const manifest = createEmptyManifest(); + const iconDefinitions = loadFolderIconDefinitions( + folderIcons, + config, + manifest + ); + + expectedManifest.iconDefinitions = { + folder: { + iconPath: './../icons/folder.svg', + }, + 'folder-open': { + iconPath: './../icons/folder-open.svg', + }, + }; + expectedManifest.folder = 'folder'; + expectedManifest.folderExpanded = 'folder-open'; + expectedManifest.rootFolder = 'folder'; + expectedManifest.rootFolderExpanded = 'folder-open'; + expectedManifest.folderNames = {}; + expectedManifest.folderNamesExpanded = {}; + expectedManifest.hidesExplorerArrows = false; + + expect(iconDefinitions).toStrictEqual(expectedManifest); + }); + + it('should configure custom icon associations', () => { + config.folders.associations = { + sample: 'src', + }; + const manifest = createEmptyManifest(); + const iconDefinitions = loadFolderIconDefinitions( + folderIcons, + config, + manifest + ); + expectedManifest.iconDefinitions = { + folder: { + iconPath: './../icons/folder.svg', + }, + 'folder-open': { + iconPath: './../icons/folder-open.svg', + }, + 'folder-root': { + iconPath: './../icons/folder-root.svg', + }, + 'folder-root-open': { + iconPath: './../icons/folder-root-open.svg', + }, + 'folder-src': { + iconPath: './../icons/folder-src.svg', + }, + 'folder-src-open': { + iconPath: './../icons/folder-src-open.svg', + }, + 'folder-angular': { + iconPath: './../icons/folder-angular.svg', + }, + 'folder-angular-open': { + iconPath: './../icons/folder-angular-open.svg', + }, + }; + expectedManifest.folder = 'folder'; + expectedManifest.folderExpanded = 'folder-open'; + expectedManifest.rootFolder = 'folder-root'; + expectedManifest.rootFolderExpanded = 'folder-root-open'; + expectedManifest.folderNames = { + src: 'folder-src', + source: 'folder-src', + angular: 'folder-angular', + ng: 'folder-angular', + sample: 'folder-src', + _src: 'folder-src', + _source: 'folder-src', + _angular: 'folder-angular', + _ng: 'folder-angular', + _sample: 'folder-src', + __src__: 'folder-src', + __source__: 'folder-src', + __angular__: 'folder-angular', + __ng__: 'folder-angular', + __sample__: 'folder-src', + '.src': 'folder-src', + '.source': 'folder-src', + '.angular': 'folder-angular', + '.ng': 'folder-angular', + '.sample': 'folder-src', + }; + expectedManifest.folderNamesExpanded = { + src: 'folder-src-open', + source: 'folder-src-open', + angular: 'folder-angular-open', + ng: 'folder-angular-open', + sample: 'folder-src-open', + _src: 'folder-src-open', + _source: 'folder-src-open', + _angular: 'folder-angular-open', + _ng: 'folder-angular-open', + _sample: 'folder-src-open', + __src__: 'folder-src-open', + __source__: 'folder-src-open', + __angular__: 'folder-angular-open', + __ng__: 'folder-angular-open', + __sample__: 'folder-src-open', + '.src': 'folder-src-open', + '.source': 'folder-src-open', + '.angular': 'folder-angular-open', + '.ng': 'folder-angular-open', + '.sample': 'folder-src-open', + }; + expectedManifest.hidesExplorerArrows = false; + + expect(iconDefinitions).toStrictEqual(expectedManifest); + }); + + it('should disable icon packs', () => { + const manifest = createEmptyManifest(); + config.activeIconPack = ''; + const iconDefinitions = loadFolderIconDefinitions( + folderIcons, + config, + manifest + ); + expectedManifest.iconDefinitions = { + folder: { + iconPath: './../icons/folder.svg', + }, + 'folder-open': { + iconPath: './../icons/folder-open.svg', + }, + 'folder-root': { + iconPath: './../icons/folder-root.svg', + }, + 'folder-root-open': { + iconPath: './../icons/folder-root-open.svg', + }, + 'folder-src': { + iconPath: './../icons/folder-src.svg', + }, + 'folder-src-open': { + iconPath: './../icons/folder-src-open.svg', + }, + }; + expectedManifest.folder = 'folder'; + expectedManifest.folderExpanded = 'folder-open'; + expectedManifest.rootFolder = 'folder-root'; + expectedManifest.rootFolderExpanded = 'folder-root-open'; + expectedManifest.folderNames = { + src: 'folder-src', + source: 'folder-src', + _src: 'folder-src', + _source: 'folder-src', + __src__: 'folder-src', + __source__: 'folder-src', + '.src': 'folder-src', + '.source': 'folder-src', + }; + expectedManifest.folderNamesExpanded = { + src: 'folder-src-open', + source: 'folder-src-open', + _src: 'folder-src-open', + _source: 'folder-src-open', + __src__: 'folder-src-open', + __source__: 'folder-src-open', + '.src': 'folder-src-open', + '.source': 'folder-src-open', + }; + expectedManifest.hidesExplorerArrows = false; + + expect(iconDefinitions).toStrictEqual(expectedManifest); + }); + + it('should configure folder icons for light and high contrast', () => { + const lightHighContrastFolderIcons: FolderTheme[] = [ + { + name: 'specific', + defaultIcon: { name: 'folder', light: true, highContrast: true }, + rootFolder: { name: 'folder-root', light: true, highContrast: true }, + icons: [ + { + name: 'folder-src', + folderNames: ['src', 'source'], + light: true, + highContrast: true, + }, + ], + }, + ]; + const manifest = createEmptyManifest(); + const iconDefinitions = loadFolderIconDefinitions( + lightHighContrastFolderIcons, + config, + manifest + ); + expectedManifest.iconDefinitions = { + folder: { + iconPath: './../icons/folder.svg', + }, + 'folder-open': { + iconPath: './../icons/folder-open.svg', + }, + // biome-ignore lint/style/useNamingConvention: + folder_light: { + iconPath: './../icons/folder_light.svg', + }, + 'folder-open_light': { + iconPath: './../icons/folder-open_light.svg', + }, + // biome-ignore lint/style/useNamingConvention: + folder_highContrast: { + iconPath: './../icons/folder_highContrast.svg', + }, + 'folder-open_highContrast': { + iconPath: './../icons/folder-open_highContrast.svg', + }, + 'folder-root': { + iconPath: './../icons/folder-root.svg', + }, + 'folder-root-open': { + iconPath: './../icons/folder-root-open.svg', + }, + 'folder-root_light': { + iconPath: './../icons/folder-root_light.svg', + }, + 'folder-root-open_light': { + iconPath: './../icons/folder-root-open_light.svg', + }, + 'folder-root_highContrast': { + iconPath: './../icons/folder-root_highContrast.svg', + }, + 'folder-root-open_highContrast': { + iconPath: './../icons/folder-root-open_highContrast.svg', + }, + 'folder-src': { + iconPath: './../icons/folder-src.svg', + }, + 'folder-src-open': { + iconPath: './../icons/folder-src-open.svg', + }, + 'folder-src_light': { + iconPath: './../icons/folder-src_light.svg', + }, + 'folder-src-open_light': { + iconPath: './../icons/folder-src-open_light.svg', + }, + 'folder-src_highContrast': { + iconPath: './../icons/folder-src_highContrast.svg', + }, + 'folder-src-open_highContrast': { + iconPath: './../icons/folder-src-open_highContrast.svg', + }, + }; + expectedManifest.folder = 'folder'; + expectedManifest.folderExpanded = 'folder-open'; + expectedManifest.rootFolder = 'folder-root'; + expectedManifest.rootFolderExpanded = 'folder-root-open'; + expectedManifest.folderNames = { + src: 'folder-src', + source: 'folder-src', + _src: 'folder-src', + _source: 'folder-src', + __src__: 'folder-src', + __source__: 'folder-src', + '.src': 'folder-src', + '.source': 'folder-src', + }; + expectedManifest.folderNamesExpanded = { + src: 'folder-src-open', + source: 'folder-src-open', + _src: 'folder-src-open', + _source: 'folder-src-open', + __src__: 'folder-src-open', + __source__: 'folder-src-open', + '.src': 'folder-src-open', + '.source': 'folder-src-open', + }; + expectedManifest.light = { + fileExtensions: {}, + fileNames: {}, + folder: 'folder_light', + folderExpanded: 'folder-open_light', + rootFolder: 'folder-root_light', + rootFolderExpanded: 'folder-root-open_light', + folderNames: { + src: 'folder-src_light', + source: 'folder-src_light', + _src: 'folder-src_light', + _source: 'folder-src_light', + __src__: 'folder-src_light', + __source__: 'folder-src_light', + '.src': 'folder-src_light', + '.source': 'folder-src_light', + }, + folderNamesExpanded: { + src: 'folder-src-open_light', + source: 'folder-src-open_light', + _src: 'folder-src-open_light', + _source: 'folder-src-open_light', + __src__: 'folder-src-open_light', + __source__: 'folder-src-open_light', + '.src': 'folder-src-open_light', + '.source': 'folder-src-open_light', + }, + }; + expectedManifest.highContrast = { + fileExtensions: {}, + fileNames: {}, + folder: 'folder_highContrast', + folderExpanded: 'folder-open_highContrast', + rootFolder: 'folder-root_highContrast', + rootFolderExpanded: 'folder-root-open_highContrast', + folderNames: { + src: 'folder-src_highContrast', + source: 'folder-src_highContrast', + _src: 'folder-src_highContrast', + _source: 'folder-src_highContrast', + __src__: 'folder-src_highContrast', + __source__: 'folder-src_highContrast', + '.src': 'folder-src_highContrast', + '.source': 'folder-src_highContrast', + }, + folderNamesExpanded: { + src: 'folder-src-open_highContrast', + source: 'folder-src-open_highContrast', + _src: 'folder-src-open_highContrast', + _source: 'folder-src-open_highContrast', + __src__: 'folder-src-open_highContrast', + __source__: 'folder-src-open_highContrast', + '.src': 'folder-src-open_highContrast', + '.source': 'folder-src-open_highContrast', + }, + }; + expectedManifest.hidesExplorerArrows = false; + expect(iconDefinitions).toStrictEqual(expectedManifest); + }); + + it('should hide explorer arrows', () => { + const manifest = createEmptyManifest(); + config.hidesExplorerArrows = true; + const iconDefinitions = loadFolderIconDefinitions( + folderIcons, + config, + manifest + ); + + expect(iconDefinitions.hidesExplorerArrows).toBe(true); + }); + + it('should generate cloned folder icons config', () => { + const folderTheme: FolderTheme[] = [ + { + name: 'specific', + defaultIcon: { name: 'folder' }, + rootFolder: { name: 'folder-root' }, + icons: [ + { name: 'foo', folderNames: ['foo', 'bar'] }, + { + name: 'foo-clone', + folderNames: ['baz', 'qux'], + light: true, + clone: { + base: 'foo', + color: 'green-500', + lightColor: 'green-100', + }, + }, + ], + }, + ]; + + const manifest = createEmptyManifest(); + const iconDefinitions = loadFolderIconDefinitions( + folderTheme, + config, + manifest + ); + + expectedManifest.iconDefinitions = { + foo: { iconPath: './../icons/foo.svg' }, + 'foo-open': { iconPath: './../icons/foo-open.svg' }, + 'foo-clone': { iconPath: './../icons/foo-clone.clone.svg' }, + 'foo-clone-open': { iconPath: './../icons/foo-clone-open.clone.svg' }, + 'foo-clone_light': { iconPath: './../icons/foo-clone_light.clone.svg' }, + 'foo-clone-open_light': { + iconPath: './../icons/foo-clone-open_light.clone.svg', + }, + 'folder-open': { iconPath: './../icons/folder-open.svg' }, + 'folder-root': { iconPath: './../icons/folder-root.svg' }, + 'folder-root-open': { iconPath: './../icons/folder-root-open.svg' }, + folder: { iconPath: './../icons/folder.svg' }, + }; + expectedManifest.folder = 'folder'; + expectedManifest.folderExpanded = 'folder-open'; + expectedManifest.rootFolder = 'folder-root'; + expectedManifest.rootFolderExpanded = 'folder-root-open'; + expectedManifest.folderNames = { + foo: 'foo', + '.foo': 'foo', + _foo: 'foo', + __foo__: 'foo', + bar: 'foo', + '.bar': 'foo', + _bar: 'foo', + __bar__: 'foo', + baz: 'foo-clone', + '.baz': 'foo-clone', + _baz: 'foo-clone', + __baz__: 'foo-clone', + qux: 'foo-clone', + '.qux': 'foo-clone', + _qux: 'foo-clone', + __qux__: 'foo-clone', + }; + expectedManifest.folderNamesExpanded = { + foo: 'foo-open', + '.foo': 'foo-open', + _foo: 'foo-open', + __foo__: 'foo-open', + bar: 'foo-open', + '.bar': 'foo-open', + _bar: 'foo-open', + __bar__: 'foo-open', + baz: 'foo-clone-open', + '.baz': 'foo-clone-open', + _baz: 'foo-clone-open', + __baz__: 'foo-clone-open', + qux: 'foo-clone-open', + '.qux': 'foo-clone-open', + _qux: 'foo-clone-open', + __qux__: 'foo-clone-open', + }; + expectedManifest.light = { + fileExtensions: {}, + fileNames: {}, + folderNames: { + baz: 'foo-clone_light', + '.baz': 'foo-clone_light', + _baz: 'foo-clone_light', + __baz__: 'foo-clone_light', + qux: 'foo-clone_light', + '.qux': 'foo-clone_light', + _qux: 'foo-clone_light', + __qux__: 'foo-clone_light', + }, + folderNamesExpanded: { + baz: 'foo-clone-open_light', + '.baz': 'foo-clone-open_light', + _baz: 'foo-clone-open_light', + __baz__: 'foo-clone-open_light', + qux: 'foo-clone-open_light', + '.qux': 'foo-clone-open_light', + _qux: 'foo-clone-open_light', + __qux__: 'foo-clone-open_light', + }, + }; + expectedManifest.hidesExplorerArrows = false; + + expect(iconDefinitions).toStrictEqual(expectedManifest); + }); + + it('should allow interoperability between cloned and user custom associations', () => { + const folderTheme: FolderTheme[] = [ + { + name: 'specific', + defaultIcon: { name: 'folder' }, + rootFolder: { name: 'folder-root' }, + icons: [ + { name: 'folder-foo', folderNames: ['foo'] }, + { + name: 'folder-bar', + folderNames: ['bar'], + clone: { + base: 'foo', + color: 'green-500', + }, + }, + ], + }, + ]; + + config.folders.associations = { + baz: 'bar', // assigned to the clone + }; + + const manifest = createEmptyManifest(); + const iconDefinitions = loadFolderIconDefinitions( + folderTheme, + config, + manifest + ); + + expectedManifest.iconDefinitions = { + 'folder-foo': { iconPath: './../icons/folder-foo.svg' }, + 'folder-foo-open': { iconPath: './../icons/folder-foo-open.svg' }, + 'folder-bar': { iconPath: './../icons/folder-bar.clone.svg' }, + 'folder-bar-open': { iconPath: './../icons/folder-bar-open.clone.svg' }, + folder: { iconPath: './../icons/folder.svg' }, + 'folder-open': { iconPath: './../icons/folder-open.svg' }, + 'folder-root': { iconPath: './../icons/folder-root.svg' }, + 'folder-root-open': { iconPath: './../icons/folder-root-open.svg' }, + }; + expectedManifest.folder = 'folder'; + expectedManifest.folderExpanded = 'folder-open'; + expectedManifest.rootFolder = 'folder-root'; + expectedManifest.rootFolderExpanded = 'folder-root-open'; + expectedManifest.folderNames = { + '.bar': 'folder-bar', + '.baz': 'folder-bar', + '.foo': 'folder-foo', + __bar__: 'folder-bar', + __baz__: 'folder-bar', + __foo__: 'folder-foo', + _bar: 'folder-bar', + _baz: 'folder-bar', + _foo: 'folder-foo', + bar: 'folder-bar', + baz: 'folder-bar', + foo: 'folder-foo', + }; + expectedManifest.folderNamesExpanded = { + '.bar': 'folder-bar-open', + '.baz': 'folder-bar-open', + '.foo': 'folder-foo-open', + __bar__: 'folder-bar-open', + __baz__: 'folder-bar-open', + __foo__: 'folder-foo-open', + _bar: 'folder-bar-open', + _baz: 'folder-bar-open', + _foo: 'folder-foo-open', + bar: 'folder-bar-open', + baz: 'folder-bar-open', + foo: 'folder-foo-open', + }; + + expectedManifest.light = { + fileExtensions: {}, + fileNames: {}, + }; + expectedManifest.hidesExplorerArrows = false; + + expect(iconDefinitions).toStrictEqual(expectedManifest); + }); +}); diff --git a/src/material-icons/src/core/tests/icons/languageIcons.test.ts b/src/material-icons/src/core/tests/icons/languageIcons.test.ts new file mode 100644 index 0000000..a8d415f --- /dev/null +++ b/src/material-icons/src/core/tests/icons/languageIcons.test.ts @@ -0,0 +1,181 @@ +import { beforeEach, describe, expect, it } from 'bun:test'; +import { getDefaultConfig } from '../../generator/config/defaultConfig'; +import { loadLanguageIconDefinitions } from '../../generator/languageGenerator'; +import type { Config } from '../../models/icons/config'; +import { IconPack } from '../../models/icons/iconPack'; +import type { LanguageIcon } from '../../models/icons/languages/languageIdentifier'; +import { type Manifest, createEmptyManifest } from '../../models/manifest'; + +describe('language icons', () => { + let expectedManifest: Manifest; + let config: Config; + + beforeEach(() => { + expectedManifest = createEmptyManifest(); + config = getDefaultConfig(); + }); + + it('should configure icon definitions', () => { + const languageIcons: LanguageIcon[] = [ + { icon: { name: 'a' }, ids: ['a'] }, + { icon: { name: 'b' }, ids: ['b'] }, + { icon: { name: 'c' }, ids: ['c', 'd'] }, + ]; + const manifest = createEmptyManifest(); + const iconDefinitions = loadLanguageIconDefinitions( + languageIcons, + config, + manifest + ); + + expectedManifest.iconDefinitions = { + a: { + iconPath: './../icons/a.svg', + }, + b: { + iconPath: './../icons/b.svg', + }, + c: { + iconPath: './../icons/c.svg', + }, + }; + expectedManifest.languageIds = { + a: 'a', + b: 'b', + c: 'c', + d: 'c', + }; + expect(iconDefinitions).toStrictEqual(expectedManifest); + }); + + it('should disable icon definitions', () => { + const languageIcons: LanguageIcon[] = [ + { icon: { name: 'a' }, ids: ['a'] }, + { icon: { name: 'c' }, ids: ['c', 'd'], disabled: true }, + ]; + const manifest = createEmptyManifest(); + const iconDefinitions = loadLanguageIconDefinitions( + languageIcons, + config, + manifest + ); + + expectedManifest.iconDefinitions = { + a: { + iconPath: './../icons/a.svg', + }, + }; + expectedManifest.languageIds = { + a: 'a', + }; + expect(iconDefinitions).toStrictEqual(expectedManifest); + }); + + it('should disable icon packs', () => { + const languageIcons: LanguageIcon[] = [ + { icon: { name: 'a' }, ids: ['a'], enabledFor: [IconPack.Angular] }, + { icon: { name: 'c' }, ids: ['c', 'd'], disabled: true }, + ]; + + config.activeIconPack = ''; + const manifest = createEmptyManifest(); + const iconDefinitions = loadLanguageIconDefinitions( + languageIcons, + config, + manifest + ); + + expectedManifest.iconDefinitions = {}; + expectedManifest.languageIds = {}; + expect(iconDefinitions).toStrictEqual(expectedManifest); + }); + + it('should configure language icons for light and high contrast', () => { + const languageIcons: LanguageIcon[] = [ + { icon: { name: 'a', light: true, highContrast: true }, ids: ['a'] }, + { icon: { name: 'b', light: true, highContrast: true }, ids: ['b'] }, + ]; + + const manifest = createEmptyManifest(); + const iconDefinitions = loadLanguageIconDefinitions( + languageIcons, + config, + manifest + ); + expectedManifest.iconDefinitions = { + a: { + iconPath: './../icons/a.svg', + }, + // biome-ignore lint/style/useNamingConvention: + a_light: { + iconPath: './../icons/a_light.svg', + }, + // biome-ignore lint/style/useNamingConvention: + a_highContrast: { + iconPath: './../icons/a_highContrast.svg', + }, + b: { + iconPath: './../icons/b.svg', + }, + // biome-ignore lint/style/useNamingConvention: + b_light: { + iconPath: './../icons/b_light.svg', + }, + // biome-ignore lint/style/useNamingConvention: + b_highContrast: { + iconPath: './../icons/b_highContrast.svg', + }, + }; + expectedManifest.languageIds = { + a: 'a', + b: 'b', + }; + expectedManifest.light = { + fileExtensions: {}, + fileNames: {}, + languageIds: { + a: 'a_light', + b: 'b_light', + }, + }; + expectedManifest.highContrast = { + fileExtensions: {}, + fileNames: {}, + languageIds: { + a: 'a_highContrast', + b: 'b_highContrast', + }, + }; + expect(iconDefinitions).toStrictEqual(expectedManifest); + }); + + it('should configure custom icon associations', () => { + const languageIcons: LanguageIcon[] = [ + { icon: { name: 'json' }, ids: ['a'] }, + ]; + + const manifest = createEmptyManifest(); + config.languages = { + associations: { + xml: 'json', + }, + }; + const iconDefinitions = loadLanguageIconDefinitions( + languageIcons, + config, + manifest + ); + + expectedManifest.iconDefinitions = { + json: { + iconPath: './../icons/json.svg', + }, + }; + expectedManifest.languageIds = { + a: 'json', + xml: 'json', + }; + + expect(iconDefinitions).toStrictEqual(expectedManifest); + }); +}); diff --git a/src/material-icons/src/core/tests/mocks/index.ts b/src/material-icons/src/core/tests/mocks/index.ts new file mode 100644 index 0000000..0dd9fd4 --- /dev/null +++ b/src/material-icons/src/core/tests/mocks/index.ts @@ -0,0 +1,6 @@ +import { mock } from 'bun:test'; +import { vscodeApiMock } from './vscode'; + +mock.module('vscode', () => { + return vscodeApiMock; +}); diff --git a/src/material-icons/src/core/tests/mocks/vscode.ts b/src/material-icons/src/core/tests/mocks/vscode.ts new file mode 100644 index 0000000..4e7d1ba --- /dev/null +++ b/src/material-icons/src/core/tests/mocks/vscode.ts @@ -0,0 +1,13 @@ +export const vscodeApiMock = { + commands: { + registerCommand: () => {}, + }, + + window: { + showInformationMessage: () => {}, + }, + + env: { + language: 'en', + }, +}; diff --git a/src/material-icons/src/core/types/recursivePartial.ts b/src/material-icons/src/core/types/recursivePartial.ts new file mode 100644 index 0000000..2c0042c --- /dev/null +++ b/src/material-icons/src/core/types/recursivePartial.ts @@ -0,0 +1,3 @@ +export type RecursivePartial = { + [P in keyof T]?: RecursivePartial; +}; diff --git a/src/material-icons/src/core/types/requiredAtLeastOne.ts b/src/material-icons/src/core/types/requiredAtLeastOne.ts new file mode 100644 index 0000000..2f3700c --- /dev/null +++ b/src/material-icons/src/core/types/requiredAtLeastOne.ts @@ -0,0 +1,7 @@ +export type RequireAtLeastOne = Pick< + T, + Exclude +> & + { + [K in Keys]-?: Required> & Partial>>; + }[Keys]; diff --git a/src/material-icons/src/extension/commands/activate.ts b/src/material-icons/src/extension/commands/activate.ts new file mode 100644 index 0000000..e5c625d --- /dev/null +++ b/src/material-icons/src/extension/commands/activate.ts @@ -0,0 +1,25 @@ +import { window as codeWindow } from 'vscode'; +import { extensionName, logger, translate } from '../../core'; +import { getConfig } from '../shared/config'; + +/** Activate the icon theme by changing the settings for the iconTheme. */ +export const activateIcons = () => { + return setIconTheme(); +}; + +/** Set the icon theme in the config. */ +const setIconTheme = async () => { + // global user config + try { + const section = 'workbench.iconTheme'; + await getConfig().update(section, extensionName, true); + + // local workspace config + if (getConfig().inspect(section)?.workspaceValue) { + getConfig().update(section, extensionName); + } + codeWindow.showInformationMessage(translate('activated')); + } catch (error) { + logger.error(error); + } +}; diff --git a/src/material-icons/src/extension/commands/explorerArrows.ts b/src/material-icons/src/extension/commands/explorerArrows.ts new file mode 100644 index 0000000..99ea78d --- /dev/null +++ b/src/material-icons/src/extension/commands/explorerArrows.ts @@ -0,0 +1,54 @@ +import { type QuickPickItem, window as codeWindow } from 'vscode'; +import { logger, translate } from '../../core'; +import { getThemeConfig, setThemeConfig } from '../shared/config'; + +/** Command to toggle the explorer arrows. */ +export const toggleExplorerArrows = async () => { + try { + const status = areExplorerArrowsHidden(); + const response = await showQuickPickItems(status); + return handleQuickPickActions(response); + } catch (error) { + logger.error(error); + } +}; + +/** Show QuickPick items to select preferred configuration for the explorer arrows. */ +const showQuickPickItems = ( + status: boolean +): Thenable => { + const on: QuickPickItem = { + description: translate('toggleSwitch.on'), + detail: translate('explorerArrows.enable'), + label: !status ? '\u2714' : '\u25FB', + }; + const off: QuickPickItem = { + description: translate('toggleSwitch.off'), + detail: translate('explorerArrows.disable'), + label: status ? '\u2714' : '\u25FB', + }; + return codeWindow.showQuickPick([on, off], { + placeHolder: translate('explorerArrows.toggle'), + ignoreFocusOut: false, + matchOnDescription: true, + }); +}; + +/** Handle the actions from the QuickPick. */ +const handleQuickPickActions = (value: QuickPickItem | undefined) => { + if (!value?.description) return; + switch (value.description) { + case translate('toggleSwitch.on'): { + return setThemeConfig('hidesExplorerArrows', false, true); + } + case translate('toggleSwitch.off'): { + return setThemeConfig('hidesExplorerArrows', true, true); + } + default: + return; + } +}; + +export const areExplorerArrowsHidden = (): boolean => { + return getThemeConfig('hidesExplorerArrows') === true; +}; diff --git a/src/material-icons/src/extension/commands/fileColor.ts b/src/material-icons/src/extension/commands/fileColor.ts new file mode 100644 index 0000000..bd1fb3d --- /dev/null +++ b/src/material-icons/src/extension/commands/fileColor.ts @@ -0,0 +1,99 @@ +import { type QuickPickItem, window as codeWindow } from 'vscode'; +import { + getDefaultConfig, + logger, + translate, + validateHEXColorCode, +} from '../../core'; +import { getThemeConfig, setThemeConfig } from '../shared/config'; + +type FileColor = { + label: string; + hex: string; +}; + +const iconPalette: FileColor[] = [ + { label: 'Grey (Default)', hex: '#90a4ae' }, + { label: 'Blue', hex: '#42a5f5' }, + { label: 'Green', hex: '#7CB342' }, + { label: 'Teal', hex: '#26A69A' }, + { label: 'Red', hex: '#EF5350' }, + { label: 'Orange', hex: '#FF7043' }, + { label: 'Yellow', hex: '#FDD835' }, + { label: 'Custom Color', hex: 'Custom HEX Code' }, +]; + +/** Command to toggle the file icons. */ +export const changeFileColor = async () => { + try { + const status = checkFileColorStatus(); + const response = await showQuickPickItems(status); + if (response) { + handleQuickPickActions(response); + } + } catch (error) { + logger.error(error); + } +}; + +/** Show QuickPick items to select preferred color for the file icons. */ +const showQuickPickItems = (currentColor: string) => { + const options = iconPalette.map( + (color): QuickPickItem => ({ + description: color.label, + label: isColorActive(color, currentColor) ? '\u2714' : '\u25FB', + }) + ); + + return codeWindow.showQuickPick(options, { + placeHolder: translate('colorSelect.color'), + ignoreFocusOut: false, + matchOnDescription: true, + }); +}; + +/** Handle the actions from the QuickPick. */ +const handleQuickPickActions = async (value: QuickPickItem) => { + if (!value || !value.description) return; + if (value.description === 'Custom Color') { + const value = await codeWindow.showInputBox({ + placeHolder: translate('colorSelect.hexCode'), + ignoreFocusOut: true, + validateInput: validateColorInput, + }); + if (value) { + setColorConfig(value); + } + } else { + const hexCode = iconPalette.find((c) => c.label === value.description)?.hex; + if (hexCode) { + setColorConfig(hexCode); + } + } +}; + +const validateColorInput = (colorInput: string) => { + if (!validateHEXColorCode(colorInput)) { + return translate('colorSelect.wrongHexCode'); + } + return undefined; +}; + +/** Check status of the file color */ +export const checkFileColorStatus = (): string => { + const defaultConfig = getDefaultConfig(); + return getThemeConfig('files.color') ?? defaultConfig.files.color; +}; + +const setColorConfig = (value: string) => { + setThemeConfig('files.color', value.toLowerCase(), true); +}; + +const isColorActive = (color: FileColor, currentColor: string): boolean => { + if (color.label === 'Custom Color') { + return !iconPalette.some( + (c) => c.hex.toLowerCase() === currentColor.toLowerCase() + ); + } + return color.hex.toLowerCase() === currentColor.toLowerCase(); +}; diff --git a/src/material-icons/src/extension/commands/folderColor.ts b/src/material-icons/src/extension/commands/folderColor.ts new file mode 100644 index 0000000..7804649 --- /dev/null +++ b/src/material-icons/src/extension/commands/folderColor.ts @@ -0,0 +1,100 @@ +import { type QuickPickItem, window as codeWindow } from 'vscode'; +import { + getDefaultConfig, + logger, + translate, + validateHEXColorCode, +} from '../../core'; +import { getThemeConfig, setThemeConfig } from '../shared/config'; + +type FolderColor = { + label: string; + hex: string; +}; + +const iconPalette: FolderColor[] = [ + { label: 'Grey (Default)', hex: '#90a4ae' }, + { label: 'Blue', hex: '#42a5f5' }, + { label: 'Green', hex: '#7CB342' }, + { label: 'Teal', hex: '#26A69A' }, + { label: 'Red', hex: '#EF5350' }, + { label: 'Orange', hex: '#FF7043' }, + { label: 'Yellow', hex: '#FDD835' }, + { label: 'Custom Color', hex: 'Custom HEX Code' }, +]; + +/** Command to toggle the folder icons. */ +export const changeFolderColor = async () => { + try { + const status = checkFolderColorStatus(); + const response = await showQuickPickItems(status); + if (response) { + handleQuickPickActions(response); + } + } catch (error) { + logger.error(error); + } +}; + +/** Show QuickPick items to select preferred color for the folder icons. */ +const showQuickPickItems = (currentColor: string) => { + const options = iconPalette.map( + (color): QuickPickItem => ({ + description: color.label, + label: isColorActive(color, currentColor) ? '\u2714' : '\u25FB', + }) + ); + + return codeWindow.showQuickPick(options, { + placeHolder: translate('colorSelect.color'), + ignoreFocusOut: false, + matchOnDescription: true, + }); +}; + +/** Handle the actions from the QuickPick. */ +const handleQuickPickActions = async (value: QuickPickItem) => { + if (!value || !value.description) return; + if (value.description === 'Custom Color') { + const value = await codeWindow.showInputBox({ + placeHolder: translate('colorSelect.hexCode'), + ignoreFocusOut: true, + validateInput: validateColorInput, + }); + if (value) { + setColorConfig(value); + } + } else { + const hexCode = iconPalette.find((c) => c.label === value.description)?.hex; + if (hexCode) { + setColorConfig(hexCode); + } + } +}; + +const validateColorInput = (colorInput: string) => { + if (!validateHEXColorCode(colorInput)) { + return translate('colorSelect.wrongHexCode'); + } + return undefined; +}; + +/** Check status of the folder color */ +export const checkFolderColorStatus = (): string => { + const defaultConfig = getDefaultConfig(); + const folderColorConfig = getThemeConfig('folders.color'); + return folderColorConfig ?? defaultConfig.folders.color!; +}; + +const setColorConfig = (value: string) => { + setThemeConfig('folders.color', value.toLowerCase(), true); +}; + +const isColorActive = (color: FolderColor, currentColor: string): boolean => { + if (color.label === 'Custom Color') { + return !iconPalette.some( + (c) => c.hex.toLowerCase() === currentColor.toLowerCase() + ); + } + return color.hex.toLowerCase() === currentColor.toLowerCase(); +}; diff --git a/src/material-icons/src/extension/commands/folders.ts b/src/material-icons/src/extension/commands/folders.ts new file mode 100644 index 0000000..24406ab --- /dev/null +++ b/src/material-icons/src/extension/commands/folders.ts @@ -0,0 +1,56 @@ +import { type QuickPickItem, window as codeWindow } from 'vscode'; +import { + type FolderThemeName, + capitalizeFirstLetter, + folderIcons, + logger, + translate, +} from '../../core'; +import { getThemeConfig, setThemeConfig } from '../shared/config'; + +/** Command to toggle the folder icons. */ +export const changeFolderTheme = async () => { + try { + const status = getFolderIconTheme(); + const response = await showQuickPickItems(status); + if (response) { + handleQuickPickActions(response); + } + } catch (error) { + logger.error(error); + } +}; + +/** Show QuickPick items to select preferred configuration for the folder icons. */ +const showQuickPickItems = (activeTheme: FolderThemeName) => { + const options = folderIcons.map( + (theme): QuickPickItem => ({ + description: capitalizeFirstLetter(theme.name), + detail: + theme.name === 'none' + ? translate('folders.disabled') + : translate( + 'folders.theme.description', + capitalizeFirstLetter(theme.name) + ), + label: theme.name === activeTheme ? '\u2714' : '\u25FB', + }) + ); + + return codeWindow.showQuickPick(options, { + placeHolder: translate('folders.toggleIcons'), + ignoreFocusOut: false, + matchOnDescription: true, + }); +}; + +/** Handle the actions from the QuickPick. */ +const handleQuickPickActions = (value: QuickPickItem) => { + if (!value || !value.description) return; + return setThemeConfig('folders.theme', value.description.toLowerCase(), true); +}; + +/** Get the current folder theme. */ +export const getFolderIconTheme = () => { + return getThemeConfig('folders.theme') ?? 'none'; +}; diff --git a/src/material-icons/src/extension/commands/grayscale.ts b/src/material-icons/src/extension/commands/grayscale.ts new file mode 100644 index 0000000..70f7bcc --- /dev/null +++ b/src/material-icons/src/extension/commands/grayscale.ts @@ -0,0 +1,55 @@ +import { type QuickPickItem, window as codeWindow } from 'vscode'; +import { logger, translate } from '../../core'; +import { getThemeConfig, setThemeConfig } from '../shared/config'; + +/** Command to toggle grayscale. */ +export const toggleGrayscale = async () => { + try { + const status = checkGrayscaleStatus(); + const response = await showQuickPickItems(status); + if (response) { + handleQuickPickActions(response); + } + } catch (error) { + logger.error(error); + } +}; + +/** Show QuickPick items to select preferred configuration for grayscale icons. */ +const showQuickPickItems = (status: boolean) => { + const on: QuickPickItem = { + description: translate('toggleSwitch.on'), + detail: translate('grayscale.enable'), + label: status ? '\u2714' : '\u25FB', + }; + const off: QuickPickItem = { + description: translate('toggleSwitch.off'), + detail: translate('grayscale.disable'), + label: !status ? '\u2714' : '\u25FB', + }; + return codeWindow.showQuickPick([on, off], { + placeHolder: translate('grayscale.toggle'), + ignoreFocusOut: false, + matchOnDescription: true, + }); +}; + +/** Handle the actions from the QuickPick. */ +const handleQuickPickActions = (value: QuickPickItem) => { + if (!value || !value.description) return; + switch (value.description) { + case translate('toggleSwitch.on'): { + return setThemeConfig('saturation', 0, true); + } + case translate('toggleSwitch.off'): { + return setThemeConfig('saturation', 1, true); + } + default: + return; + } +}; + +/** Is grayscale icons enabled? */ +export const checkGrayscaleStatus = (): boolean => { + return getThemeConfig('saturation') === 0; +}; diff --git a/src/material-icons/src/extension/commands/iconPacks.ts b/src/material-icons/src/extension/commands/iconPacks.ts new file mode 100644 index 0000000..2524bde --- /dev/null +++ b/src/material-icons/src/extension/commands/iconPacks.ts @@ -0,0 +1,65 @@ +import { type QuickPickItem, window as codeWindow } from 'vscode'; +import { logger, toTitleCase, translate } from '../../core'; +import { availableIconPacks } from '../../core/helpers/iconPacks'; +import type { IconPackValue } from '../../core/models/icons/iconPack'; +import { getThemeConfig, setThemeConfig } from '../shared/config'; + +/** Command to toggle the icons packs */ +export const toggleIconPacks = async () => { + try { + const activeIconPack = getActiveIconPack(); + const response = await showQuickPickItems(activeIconPack); + if (response) { + handleQuickPickActions(response); + } + } catch (error) { + logger.error(error); + } +}; + +/** Show QuickPick items to select preferred configuration for the icon packs. */ +const showQuickPickItems = (activePack: IconPackValue) => { + const packs = [...availableIconPacks.sort(), 'none'] as ( + | IconPackValue + | 'none' + )[]; + const options = packs.map((pack): QuickPickItem => { + const packLabel = toTitleCase(pack.replace('_', ' + ')); + const active = isPackActive(activePack, pack); + const iconPacksDeactivated = pack === 'none' && activePack === ''; + + return { + description: packLabel, + detail: translate( + `iconPacks.${pack === 'none' ? 'disabled' : 'description'}`, + packLabel + ), + label: iconPacksDeactivated ? '\u2714' : active ? '\u2714' : '\u25FB', + }; + }); + + return codeWindow.showQuickPick(options, { + placeHolder: translate('iconPacks.selectPack'), + ignoreFocusOut: false, + matchOnDescription: true, + matchOnDetail: true, + }); +}; + +/** Handle the actions from the QuickPick. */ +const handleQuickPickActions = (value: QuickPickItem) => { + if (!value || !value.description) return; + const decision = value.description.replace(' + ', '_').toLowerCase() as + | IconPackValue + | 'none'; + + setThemeConfig('activeIconPack', decision === 'none' ? '' : decision, true); +}; + +const getActiveIconPack = () => { + return getThemeConfig('activeIconPack') ?? ''; +}; + +const isPackActive = (activePack: string, pack: string) => { + return activePack.toLowerCase() === pack.toLowerCase(); +}; diff --git a/src/material-icons/src/extension/commands/opacity.ts b/src/material-icons/src/extension/commands/opacity.ts new file mode 100644 index 0000000..3776c7a --- /dev/null +++ b/src/material-icons/src/extension/commands/opacity.ts @@ -0,0 +1,49 @@ +import { window as codeWindow } from 'vscode'; +import { + getDefaultConfig, + logger, + translate, + validateOpacityValue, +} from '../../core'; +import { getThemeConfig, setThemeConfig } from '../shared/config'; + +/** Command to toggle the folder icons. */ +export const changeOpacity = async () => { + try { + const currentOpacityValue = getCurrentOpacityValue(); + const response = await showInput(currentOpacityValue); + if (response) { + await setOpacityConfig(+response); + } + } catch (error) { + logger.error(error); + } +}; + +/** Show input to enter the opacity value. */ +const showInput = (opacity: number) => { + return codeWindow.showInputBox({ + placeHolder: translate('opacity.inputPlaceholder'), + ignoreFocusOut: true, + value: opacity.toString(), + validateInput: validateOpacityInput, + }); +}; + +/** Validate the opacity value which was inserted by the user. */ +const validateOpacityInput = (opacityInput: string) => { + if (!validateOpacityValue(+opacityInput)) { + return translate('opacity.wrongValue'); + } + return undefined; +}; + +/** Get the current value of the opacity of the icons. */ +export const getCurrentOpacityValue = (): number => { + const defaultConfig = getDefaultConfig(); + return getThemeConfig('opacity') ?? defaultConfig.opacity; +}; + +const setOpacityConfig = (opacity: number) => { + return setThemeConfig('opacity', opacity, true); +}; diff --git a/src/material-icons/src/extension/commands/restoreConfig.ts b/src/material-icons/src/extension/commands/restoreConfig.ts new file mode 100644 index 0000000..388c1b7 --- /dev/null +++ b/src/material-icons/src/extension/commands/restoreConfig.ts @@ -0,0 +1,11 @@ +import { getConfigProperties, setConfig } from '../shared/config'; + +/** Restore all configurations to default. */ +export const restoreDefaultConfig = async () => { + const configProperties = Object.keys(getConfigProperties()); + await Promise.all( + configProperties.map((configProperty) => + setConfig(configProperty, undefined, true) + ) + ); +}; diff --git a/src/material-icons/src/extension/commands/saturation.ts b/src/material-icons/src/extension/commands/saturation.ts new file mode 100644 index 0000000..d19f181 --- /dev/null +++ b/src/material-icons/src/extension/commands/saturation.ts @@ -0,0 +1,49 @@ +import { window as codeWindow } from 'vscode'; +import { + getDefaultConfig, + logger, + translate, + validateSaturationValue, +} from '../../core'; +import { getThemeConfig, setThemeConfig } from '../shared/config'; + +/** Command to toggle the folder icons. */ +export const changeSaturation = async () => { + try { + const currentSaturationValue = getCurrentSaturationValue(); + const response = await showInput(currentSaturationValue); + if (response) { + await setSaturationConfig(+response); + } + } catch (error) { + logger.error(error); + } +}; + +/** Show input to enter the saturation value. */ +const showInput = (saturation: number) => { + return codeWindow.showInputBox({ + placeHolder: translate('saturation.inputPlaceholder'), + ignoreFocusOut: true, + value: saturation.toString(), + validateInput: validateSaturationInput, + }); +}; + +/** Validate the saturation value which was inserted by the user. */ +const validateSaturationInput = (saturationInput: string) => { + if (!validateSaturationValue(+saturationInput)) { + return translate('saturation.wrongValue'); + } + return undefined; +}; + +/** Get the current value of the saturation of the icons. */ +export const getCurrentSaturationValue = (): number => { + const defaultConfig = getDefaultConfig(); + return getThemeConfig('saturation') ?? defaultConfig.saturation; +}; + +const setSaturationConfig = (saturation: number) => { + return setThemeConfig('saturation', saturation, true); +}; diff --git a/src/material-icons/src/extension/desktop/extension.ts b/src/material-icons/src/extension/desktop/extension.ts new file mode 100644 index 0000000..0341500 --- /dev/null +++ b/src/material-icons/src/extension/desktop/extension.ts @@ -0,0 +1,41 @@ +'use strict'; + +import { type ExtensionContext, env, workspace } from 'vscode'; +import { initTranslations, logger } from '../../core'; +import { disableLogObserver, observeLogs } from '../logging/logger'; +import { detectConfigChanges } from '../tools/changeDetection'; +import { registered } from '../tools/registered'; + +/** + * This method is called when the extension is activated. + * It initializes the core functionality of the extension. + */ +export const activate = async (context: ExtensionContext) => { + try { + observeLogs(); + + await initTranslations(env.language); + + // Subscribe to the extension commands + context.subscriptions.push(...registered); + + // Initially trigger the config change detection + await detectConfigChanges(undefined, context); + + // Observe changes in the config + context.subscriptions.push( + workspace.onDidChangeConfiguration( + async (event) => await detectConfigChanges(event, context) + ) + ); + + logger.info('Extension activated!'); + } catch (error) { + logger.error(error); + } +}; + +/** This method is called when the extension is deactivated */ +export const deactivate = () => { + disableLogObserver(); +}; diff --git a/src/material-icons/src/extension/logging/logger.ts b/src/material-icons/src/extension/logging/logger.ts new file mode 100644 index 0000000..41a058c --- /dev/null +++ b/src/material-icons/src/extension/logging/logger.ts @@ -0,0 +1,42 @@ +import { EventEmitter } from 'node:events'; +import { type OutputChannel, window } from 'vscode'; +import { + type LogLevel, + createLoggingObserver, + extensionName, + toTitleCase, +} from '../../core'; +import { getThemeConfig } from '../shared/config'; + +let eventEmitter: EventEmitter | undefined; + +/** + * Observe log events and write them to the output channel. + */ +export const observeLogs = () => { + const logLevel = getThemeConfig('logLevel') ?? 'info'; + const isLoggingEnabled = getThemeConfig('enableLogging') ?? false; + + let outputChannel: OutputChannel | undefined; + + if (isLoggingEnabled) { + // Create the output channel only if logging is enabled + outputChannel = window.createOutputChannel( + toTitleCase(extensionName.replaceAll('-', ' ')) + ); + } + + eventEmitter = createLoggingObserver(logLevel, (event) => { + if (outputChannel) { + outputChannel.appendLine(event.message); + } else { + console.log(event.message); + } + }); +}; + +export const disableLogObserver = () => { + if (eventEmitter) { + eventEmitter.removeAllListeners(); + } +}; diff --git a/src/material-icons/src/extension/shared/config.ts b/src/material-icons/src/extension/shared/config.ts new file mode 100644 index 0000000..d73f236 --- /dev/null +++ b/src/material-icons/src/extension/shared/config.ts @@ -0,0 +1,114 @@ +import { extensions, workspace } from 'vscode'; +import { type Config, extensionName, extensionPublisher } from '../../core'; +import { merge, set } from '../../core/helpers/object'; + +/** Get configuration of vs code. */ +export const getConfig = (section?: string) => { + return workspace.getConfiguration(section); +}; + +/** Get list of configuration entries of package.json */ +export const getConfigProperties = (): { [config: string]: unknown } => { + return extensions.getExtension(`${extensionPublisher}.${extensionName}`) + ?.packageJSON?.contributes?.configuration?.properties; +}; + +/** Get list of all configration properties */ +export const configPropertyNames = Object.keys(getConfigProperties()); + +/** Update configuration of vs code. */ +export const setConfig = (section: string, value: unknown, global = false) => { + return getConfig().update(section, value, global); +}; + +/** Get current configuration of the theme from the vscode config */ +export const getThemeConfig = (section: string): T | undefined => { + const themeConfig = getConfig(extensionName).inspect(section); + return getConfigValue(themeConfig); +}; + +/** Set the config of the theme. */ +export const setThemeConfig = ( + section: string, + value: unknown, + global = false +) => { + return getConfig(extensionName).update(section, value, global); +}; + +/** + * Checks if the theme is the active icon theme + * @param{boolean} global false by default + */ +export const isThemeActivated = (global = false): boolean => { + return global + ? getConfig().inspect('workbench.iconTheme')?.globalValue === extensionName + : getConfig().inspect('workbench.iconTheme')?.workspaceValue === + extensionName; +}; + +/** Checks if the theme is not the active icon theme */ +export const isThemeNotVisible = (): boolean => { + const config = getConfig().inspect('workbench.iconTheme'); + return ( + (!isThemeActivated(true) && !config?.workspaceValue) || // no workspace and not global + (!isThemeActivated() && !!config?.workspaceValue) + ); +}; + +/** + * Returns the value of a specific configuration by checking the workspace and the user configuration and fallback to the default value. + * + * @param themeConfig Theme configuration + * @returns Actual theme configuration value + */ +const getConfigValue = ( + themeConfig: Partial< + | { + globalValue: T; + workspaceValue: T; + defaultValue: T; + } + | undefined + > +) => { + let configValue: T | undefined; + if (themeConfig === undefined) { + return undefined; + } + if ( + typeof themeConfig.workspaceValue === 'object' && + themeConfig.workspaceValue && + themeConfig.globalValue + ) { + configValue = merge(themeConfig.workspaceValue, themeConfig.globalValue); + } else { + configValue = + themeConfig.workspaceValue ?? + themeConfig.globalValue ?? + themeConfig.defaultValue; + } + return configValue; +}; + +/** + * Get the current configuration of the theme. + * + * @returns Current configuration + */ +export const getCurrentConfig = (): Config => { + const updatedConfig = configPropertyNames.reduce>( + (acc, configNameWithExtensionId) => { + const configName = configNameWithExtensionId.replace( + `${extensionName}.`, + '' + ); + const configValue = getThemeConfig(configName) ?? null; + set(acc, configName, configValue); + return acc; + }, + {} + ); + + return updatedConfig as Config; +}; diff --git a/src/material-icons/src/extension/tools/changeDetection.ts b/src/material-icons/src/extension/tools/changeDetection.ts new file mode 100644 index 0000000..4fcd3bf --- /dev/null +++ b/src/material-icons/src/extension/tools/changeDetection.ts @@ -0,0 +1,83 @@ +import { join } from 'node:path'; +import deepEqual from 'fast-deep-equal'; +import type { ConfigurationChangeEvent, ExtensionContext } from 'vscode'; +import { + type Config, + applyConfigToIcons, + clearCloneFolder, + customClonesIcons, + extensionName, + generateManifest, + hasCustomClones, + logger, + manifestName, + merge, + padWithDefaultConfig, + renameIconFiles, + resolvePath, + writeToFile, +} from '../../core'; +import { getCurrentConfig } from '../shared/config'; + +/** Compare the workspace and the user configurations with the current setup of the icons. */ +export const detectConfigChanges = async ( + event: ConfigurationChangeEvent | undefined, + context: ExtensionContext +) => { + // if the changed config is not related to the extension + if (event?.affectsConfiguration(extensionName) === false) return; + + const oldConfig = getConfigFromStorage(context); + const config = getCurrentConfig(); + + // if the configuration has not changed + if (deepEqual(config, oldConfig)) return; + + await applyConfigToIcons(config, oldConfig); + + logger.info('Configuration changes detected and applied!'); + + await renameIconFiles(config); + const manifest = generateManifest(config); + + // clear the clone folder + await clearCloneFolder(hasCustomClones(config)); + + const manifestWithClones = merge( + manifest, + await customClonesIcons(manifest, config) + ); + + const iconJsonPath = join(resolvePath(manifestName)); + await writeToFile( + iconJsonPath, + JSON.stringify(manifestWithClones, undefined, 2), + 'utf-8' + ); + + logger.info('Updated the manifest file.'); + + logger.debug( + 'Applied configuration: ' + JSON.stringify(config, undefined, 2) + ); + + syncConfigWithStorage(config, context); +}; + +const syncConfigWithStorage = (config: Config, context: ExtensionContext) => { + context.globalState.update('config', { + version: context.extension.packageJSON.version, + config, + }); +}; + +const getConfigFromStorage = (context: ExtensionContext): Config => { + const config = context.globalState.get<{ version: string; config: Config }>( + 'config' + ); + if (context.extension.packageJSON.version === config?.version) { + return padWithDefaultConfig(config?.config); + } else { + return padWithDefaultConfig(); + } +}; diff --git a/src/material-icons/src/extension/tools/registered.ts b/src/material-icons/src/extension/tools/registered.ts new file mode 100644 index 0000000..d97ff59 --- /dev/null +++ b/src/material-icons/src/extension/tools/registered.ts @@ -0,0 +1,33 @@ +import { commands } from 'vscode'; +import { extensionName } from '../../core'; +import { activateIcons } from '../commands/activate'; +import { toggleExplorerArrows } from '../commands/explorerArrows'; +import { changeFileColor } from '../commands/fileColor'; +import { changeFolderColor } from '../commands/folderColor'; +import { changeFolderTheme } from '../commands/folders'; +import { toggleGrayscale } from '../commands/grayscale'; +import { toggleIconPacks } from '../commands/iconPacks'; +import { changeOpacity } from '../commands/opacity'; +import { restoreDefaultConfig } from '../commands/restoreConfig'; +import { changeSaturation } from '../commands/saturation'; + +const extensionCommands: { [commmand: string]: () => Promise } = { + activateIcons, + toggleIconPacks, + changeFolderTheme, + changeFolderColor, + changeFileColor, + restoreDefaultConfig, + toggleExplorerArrows, + changeOpacity, + toggleGrayscale, + changeSaturation, +}; + +export const registered = Object.keys(extensionCommands).map((commandName) => { + const callCommand = () => extensionCommands[commandName](); + return commands.registerCommand( + `${extensionName}.${commandName}`, + callCommand + ); +}); diff --git a/src/material-icons/src/extension/web/extension.ts b/src/material-icons/src/extension/web/extension.ts new file mode 100644 index 0000000..159bad4 --- /dev/null +++ b/src/material-icons/src/extension/web/extension.ts @@ -0,0 +1,10 @@ +'use strict'; + +/** + * This method is called when the extension is activated. + * It initializes the core functionality of the extension. + */ +export const activate = async () => {}; + +/** This method is called when the extension is deactivated */ +export const deactivate = () => {}; diff --git a/src/material-icons/src/module/README.md b/src/material-icons/src/module/README.md new file mode 100644 index 0000000..2b1ed43 --- /dev/null +++ b/src/material-icons/src/module/README.md @@ -0,0 +1,94 @@ +

+
+ logo +

+ Material Icon Theme +
+
+

+ +

Get the Material Design icons as NPM Module.

+ +

+ Version  + Rating  + Installs  + Downloads +

+ +## File icons + +
๐Ÿž๏ธ Show all available file icons
file icons
+ +## Folder icons + +
๐Ÿž๏ธ Show all available folder icons
folder icons
+ +## Description + +This npm module provides all Icons from the VS Code Material Icon Theme as npm module. The icons are available as SVG files and can be used in any web project. + +## Installation + +Install the npm module: + +```bash +npm install material-icon-theme +``` + +## Usage + +All the SVG files can be found in the "node_modules/material-icon-theme/icons" folder. To get to know the mapping between the file and folder names and the icons, the `generateManifest` has to be used. + +```javascript +import { generateManifest } from 'material-icon-theme'; +``` + +The `generateManifest` function returns a JSON object with the mapping between the file and folder names and the icons. The JSON object can be used to display the icons in a web project. + +This manifest follows the official VS Code extension API guidelines. More information how this manifest is structured and how it can be used can be found [in the VS Code documentation](https://code.visualstudio.com/api/extension-guides/file-icon-theme#icon-definitions). + +The type definition for the manifest can be found in the `material-icon-theme` module: + +```typescript +import { Manifest } from 'material-icon-theme'; +``` + +### Configure the icons + +While generating the manifest, there can be some configuration options passed to the `generateManifest` function. The configuration options are the same as in the VS Code Material Icon Theme extension. The configuration options can be found in the `material-icon-theme` module: + +```typescript +import { type ManifestConfig, type IconAssociations, type IconPackValue, generateManifest } from 'material-icon-theme'; + +const config: ManifestConfig = { + activeIconPack: 'angular'; + hidesExplorerArrows: true; + folders: { + theme: 'classic'; + associations: {}; + }; + files: { + associations: {}; + }; + languages: { + associations: {}; + }; +}; + +const manifest = generateManifest(config); +``` + +Not all configuration options have to be passed. The `generateManifest` function uses the default configuration options if they are not passed. + +## Icon packs + +The Material Icon Theme provides different icon packs. The icon pack can be changed by setting the `activeIconPack` in the configuration options. To get a list of all available icon packs, the `getIconPacks` function can be used: + +```typescript +import { availableIconPacks, type IconPackValue } from 'material-icon-theme'; + +const iconPacks: Array = availableIconPacks; + +console.log('Available icon packs:', iconPacks); +``` diff --git a/src/material-icons/src/module/index.ts b/src/material-icons/src/module/index.ts new file mode 100644 index 0000000..e109f65 --- /dev/null +++ b/src/material-icons/src/module/index.ts @@ -0,0 +1,10 @@ +// Everything that is exported from this file will be exported to an npm package +export { + availableIconPacks, + generateManifest, + type FolderThemeName, + type IconAssociations, + type IconPackValue, + type ManifestConfig, + type Manifest, +} from '../core'; diff --git a/src/material-icons/src/scripts/contributors/contributors.css b/src/material-icons/src/scripts/contributors/contributors.css new file mode 100644 index 0000000..6fb06b9 --- /dev/null +++ b/src/material-icons/src/scripts/contributors/contributors.css @@ -0,0 +1,24 @@ +body { + margin: 0; + padding: 0; +} + +ul { + list-style: none; + margin: 0; + padding: 0; + width: 100%; +} + +li { + width: 40px; + height: 40px; + float: left; + margin: 3px; +} + +img { + width: 100%; + height: 100%; + border-radius: 5px; +} diff --git a/src/material-icons/src/scripts/contributors/contributors.ts b/src/material-icons/src/scripts/contributors/contributors.ts new file mode 100644 index 0000000..1728f10 --- /dev/null +++ b/src/material-icons/src/scripts/contributors/contributors.ts @@ -0,0 +1,121 @@ +import { join } from 'node:path'; +import axios, { type AxiosRequestConfig } from 'axios'; +import { writeToFile } from '../../core'; +import { green, red, yellow } from '../helpers/painter'; +import { createScreenshot } from '../helpers/screenshots'; +import type { Contributor } from '../models/scripts/contributors/contributor'; + +/** + * Parse link header + * @param linkHeader Link header as string + * @returns Object that contains the page numbers of `prev`, `next` and `last`. + */ +const parseLinkHeader = (linkHeader: string) => { + const nextPagePattern = new RegExp(/\bpage=(\d+)>;\srel="next"/); + const lastPagePattern = new RegExp(/\bpage=(\d+)>;\srel="last"/); + const prevPagePattern = new RegExp(/\bpage=(\d+)>;\srel="prev"/); + + const nextPage = nextPagePattern.exec(linkHeader) ?? ''; + const lastPage = lastPagePattern.exec(linkHeader) ?? ''; + const prevPage = prevPagePattern.exec(linkHeader) ?? ''; + + return { nextPage, lastPage, prevPage }; +}; + +/** + * Get all contributors from GitHub API. + */ +const fetchContributors = ( + page: string +): Promise<{ contributorsOfPage: Contributor[]; nextPage: string }> => { + return new Promise((resolve, reject) => { + const config: AxiosRequestConfig = { + method: 'get', + url: `https://api.github.com/repos/pkief/vscode-material-icon-theme/contributors`, + params: { page }, + headers: { + accept: 'application/json', + 'User-Agent': 'Contributors script', + }, + }; + + axios + .request(config) + .then((res) => { + const { nextPage, lastPage, prevPage } = parseLinkHeader( + res.headers?.link?.toString() ?? '' + ); + console.log( + '> Material Icon Theme:', + yellow( + `[${page}/${ + lastPage ? lastPage[1] : +prevPage[1] + 1 + }] Loading contributors from GitHub...` + ) + ); + + resolve({ contributorsOfPage: res.data, nextPage: nextPage?.[1] }); + }) + .catch((err) => { + reject(err); + }); + }); +}; + +const createContributorsList = async (contributors: Contributor[]) => { + const list = contributors + .map((c) => { + return `
  • ${c.login}
  • `; + }) + .join('\n'); + + const htmlDoctype = ''; + const styling = ''; + const generatedHtml = `${htmlDoctype}${styling}
      ${list}
    `; + + const outputPath = join(__dirname, 'contributors.html'); + await writeToFile(outputPath, generatedHtml); + return outputPath; +}; + +const init = async () => { + const contributorsList: Contributor[] = []; + let page = '1'; + + // iterate over the pages of GitHub API + while (page !== undefined) { + const result = await fetchContributors(page); + contributorsList.push(...result.contributorsOfPage); + page = result.nextPage; + } + + if (contributorsList.length > 0) { + console.log( + '> Material Icon Theme:', + green('Successfully fetched all contributors from GitHub!') + ); + } else { + console.log( + '> Material Icon Theme:', + red('Error: Could not fetch contributors from GitHub!') + ); + throw Error(); + } + const outputPath = await createContributorsList(contributorsList); + + // create the image + console.log('> Material Icon Theme:', yellow('Creating image...')); + const fileName = 'contributors'; + createScreenshot(outputPath, fileName) + .then(() => { + console.log( + '> Material Icon Theme:', + green(`Successfully created ${fileName} image!`) + ); + }) + .catch(() => { + throw Error(red(`Error while creating ${fileName} image`)); + }); +}; + +init(); diff --git a/src/material-icons/src/scripts/helpers/painter.ts b/src/material-icons/src/scripts/helpers/painter.ts new file mode 100644 index 0000000..26f54ed --- /dev/null +++ b/src/material-icons/src/scripts/helpers/painter.ts @@ -0,0 +1,5 @@ +// colored console output + +export const red = (value: string) => `\x1b[31m${value}\x1b[0m`; +export const green = (value: string) => `\x1b[32m${value}\x1b[0m`; +export const yellow = (value: string) => `\x1b[33m${value}\x1b[0m`; diff --git a/src/material-icons/src/scripts/helpers/screenshots.ts b/src/material-icons/src/scripts/helpers/screenshots.ts new file mode 100644 index 0000000..2285aa9 --- /dev/null +++ b/src/material-icons/src/scripts/helpers/screenshots.ts @@ -0,0 +1,37 @@ +import { join } from 'node:path'; +import Puppeteer from 'puppeteer'; + +/** + * Create a screenshot from an HTML file and save it as image. + * @param filePath Path of an HTML file + * @param fileName Name of the output image + */ +export const createScreenshot = async (filePath: string, fileName: string) => { + const browser = await Puppeteer.launch(); + const htmlFilePath = join('file:', filePath); + + try { + const page = await browser.newPage(); + await page.setViewport({ + height: 10, + width: 1000, + }); + + await page.goto(htmlFilePath); + + await page.screenshot({ + path: `images/${fileName}.png`, + omitBackground: true, + fullPage: true, + }); + + await browser.close(); + } catch (error) { + console.error(error); + throw Error('Could not create screenshot for a preview'); + } finally { + const pages = await browser.pages(); + + for (const page of pages) await page.close(); + } +}; diff --git a/src/material-icons/src/scripts/helpers/similarity.ts b/src/material-icons/src/scripts/helpers/similarity.ts new file mode 100644 index 0000000..97dc311 --- /dev/null +++ b/src/material-icons/src/scripts/helpers/similarity.ts @@ -0,0 +1,47 @@ +/** + * Compares two strings and returns the Levenshtein distance + * @see https://stackoverflow.com/a/36566052/6942210 + * @param s1 Text string + * @param s2 text string + */ +export const similarity = (s1: string, s2: string) => { + let longer = s1; + let shorter = s2; + if (s1.length < s2.length) { + longer = s2; + shorter = s1; + } + const longerLength = longer.length; + if (longerLength === 0) { + return 1.0; + } + return (longerLength - editDistance(longer, shorter)) / longerLength; +}; + +const editDistance = (s1: string, s2: string) => { + s1 = s1.toLowerCase(); + s2 = s2.toLowerCase(); + + const costs = new Array(); + for (let i = 0; i <= s1.length; i++) { + let lastValue = i; + for (let j = 0; j <= s2.length; j++) { + if (i === 0) { + costs[j] = j; + } else { + if (j > 0) { + let newValue = costs[j - 1]; + if (s1.charAt(i - 1) !== s2.charAt(j - 1)) { + newValue = Math.min(Math.min(newValue, lastValue), costs[j]) + 1; + } + costs[j - 1] = lastValue; + lastValue = newValue; + } + } + } + if (i > 0) { + costs[s2.length] = lastValue; + } + } + return costs[s2.length]; +}; diff --git a/src/material-icons/src/scripts/helpers/titleCase.ts b/src/material-icons/src/scripts/helpers/titleCase.ts new file mode 100644 index 0000000..3c13d2b --- /dev/null +++ b/src/material-icons/src/scripts/helpers/titleCase.ts @@ -0,0 +1,7 @@ +/** TitleCase all words in a string */ +export const toTitleCase = (str: string): string => { + return str.replace( + /\w\S*/g, + (txt) => txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase() + ); +}; diff --git a/src/material-icons/src/scripts/icons/checks/checkIconAvailability.ts b/src/material-icons/src/scripts/icons/checks/checkIconAvailability.ts new file mode 100644 index 0000000..25badd7 --- /dev/null +++ b/src/material-icons/src/scripts/icons/checks/checkIconAvailability.ts @@ -0,0 +1,258 @@ +import { readdir } from 'node:fs'; +import { join, parse } from 'node:path'; +import { + type CloneOptions, + type DefaultIcon, + type FileIcon, + type FolderIcon, + type FolderTheme, + fileIcons, + folderIcons, + highContrastColorFileEnding, + languageIcons, + lightColorFileEnding, + openedFolder, +} from '../../../core'; +import { green, red } from '../../helpers/painter'; +import { similarity } from '../../helpers/similarity'; + +/** + * Defines the folder where all icon files are located. + */ +const folderPath = join('icons'); + +/** + * Defines an array with all icons that can be found in the file system. + */ +const availableIcons: Record = {}; + +/** + * Utility type that represents a File or Folder icon that has a clone property + * defined. + */ +type CloneIcon = (FileIcon & FolderIcon) & { clone: CloneOptions }; + +/** + * Save the misconfigured icons. + */ +const wrongIconNames: Record = { + fileIcons: [], + folderIcons: [], + languageIcons: [], +}; + +/** + * Get all icon file names from the file system. + */ +const fsReadAllIconFiles = ( + err: NodeJS.ErrnoException | null, + files: string[] +) => { + if (err) { + throw Error(err.message); + } + + files.forEach((file) => { + const fileName = file; + const iconName = parse(file).name; + availableIcons[iconName] = fileName; + }); + + // check icon configurations + checkFileIcons(); + checkFolderIcons(); + checkLanguageIcons(); + + // show error messages + handleErrors(); +}; + +// read from the file system +export const check = () => readdir(folderPath, fsReadAllIconFiles); + +/** + * Check if the file icons from the configuration are available on the file system. + */ +const checkFileIcons = () => { + [...fileIcons.icons, fileIcons.defaultIcon].forEach((icon) => { + isIconAvailable(icon, IconType.FileIcons, IconColor.Default); + isIconAvailable(icon, IconType.FileIcons, IconColor.Light); + isIconAvailable(icon, IconType.FileIcons, IconColor.HighContrast); + }); +}; + +const isIconAvailable = ( + icon: FileIcon | FolderIcon | DefaultIcon, + iconType: IconType, + iconColor: IconColor, + hasOpenedFolder?: boolean +) => { + const isClone = isCloneIcon(icon); + + let iconName = isClone + ? getCloneBaseName(icon, iconType, hasOpenedFolder) + : `${icon.name}${hasOpenedFolder ? openedFolder : ''}`; + + if (!isClone && icon.light && iconColor === IconColor.Light) { + iconName += lightColorFileEnding; + } + if (!isClone && icon.highContrast && iconColor === IconColor.HighContrast) { + iconName += highContrastColorFileEnding; + } + + if ( + !availableIcons[iconName] && + wrongIconNames[iconType].indexOf(iconName) === -1 + ) { + wrongIconNames[iconType].push(iconName); + } +}; + +/** + * Type guard to check if the icon is a clone icon + */ +const isCloneIcon = ( + icon: FileIcon | FolderIcon | DefaultIcon +): icon is CloneIcon => { + return ( + (icon as CloneIcon).clone && + (icon as FileIcon | FolderIcon).clone?.base !== undefined + ); +}; + +/** + * Get the base file name of a clone icon. + */ +const getCloneBaseName = ( + icon: CloneIcon, + iconType: IconType, + hasOpenedFolder?: boolean +) => { + const clone = icon.clone; + const folderBase = + iconType === IconType.FolderIcons + ? clone.base === 'folder' + ? 'folder' + : clone.base.startsWith('folder-') + ? clone.base + : `folder-${clone?.base}` + : clone.base; + + return `${folderBase}${hasOpenedFolder ? openedFolder : ''}`; +}; + +/** + * Check if the folder icons from the configuration are available on the file system. + */ +const checkFolderIcons = () => { + folderIcons + .map((theme) => (theme.name === 'none' ? [] : getAllFolderIcons(theme))) + .reduce((a, b) => a.concat(b)) + .forEach((icon) => { + if (icon) { + isIconAvailable(icon, IconType.FolderIcons, IconColor.Default); + isIconAvailable(icon, IconType.FolderIcons, IconColor.Default, true); + isIconAvailable(icon, IconType.FolderIcons, IconColor.Light); + isIconAvailable(icon, IconType.FolderIcons, IconColor.Light, true); + isIconAvailable(icon, IconType.FolderIcons, IconColor.HighContrast); + isIconAvailable( + icon, + IconType.FolderIcons, + IconColor.HighContrast, + true + ); + } + }); +}; + +const getAllFolderIcons = (theme: FolderTheme) => { + const icons = theme.icons ? theme.icons : []; + return [theme.defaultIcon, theme.rootFolder, ...icons].filter( + (icon) => icon !== undefined + ); // filter undefined root folder icons +}; + +/** + * Check if the language icons from the configuration are available on the file system. + */ +const checkLanguageIcons = () => { + languageIcons.forEach((lang) => { + const icon = lang.icon; + isIconAvailable(icon, IconType.LanguageIcons, IconColor.Default); + isIconAvailable(icon, IconType.LanguageIcons, IconColor.Light); + isIconAvailable(icon, IconType.LanguageIcons, IconColor.HighContrast); + }); +}; + +/** + * Show error messages in the terminal. + */ +const handleErrors = () => { + const amountOfErrors = + wrongIconNames.fileIcons.length + + wrongIconNames.folderIcons.length + + wrongIconNames.languageIcons.length; + if (amountOfErrors > 0) { + console.log( + '> Material Icon Theme:', + red(`Found ${amountOfErrors} error(s) in the icon configuration!`) + ); + } else { + console.log( + '> Material Icon Theme:', + green('Passed icon availability checks!') + ); + } + logIconInformation(wrongIconNames.fileIcons, 'File icons'); + logIconInformation(wrongIconNames.folderIcons, 'Folder icons'); + logIconInformation(wrongIconNames.languageIcons, 'Language icons'); + + if (amountOfErrors > 0) { + throw new Error( + 'Found some wrong file definitions in the icon configuration.' + ); + } +}; + +const logIconInformation = (wrongIcons: string[], title: string) => { + if (wrongIcons.length === 0) return; + console.log(`\n${title}:\n--------------------------------`); + wrongIcons.forEach((icon) => { + const suggestion = Object.keys(availableIcons).find((i) => { + return similarity(icon, i) > 0.75; + }); + const suggestionString = suggestion + ? ` (Did you mean ${green(suggestion)}?)` + : ''; + const isWrongLightVersion = icon.endsWith(lightColorFileEnding); + const isWrongLightVersionString = isWrongLightVersion + ? ` (There is no light icon for ${green( + icon.slice(0, -6) + )}! Set the light option to false!)` + : ''; + const isWrongHighContrastVersion = icon.endsWith( + highContrastColorFileEnding + ); + const isWrongHighContrastVersionString = isWrongHighContrastVersion + ? ` (There is no high contrast icon for ${green( + icon.slice(0, -13) + )}! Set the highContrast option to false!)` + : ''; + console.log( + red(`Icon not found: ${icon}.svg`) + + `${suggestionString}${isWrongLightVersionString}${isWrongHighContrastVersionString}` + ); + }); +}; + +enum IconType { + FileIcons = 'fileIcons', + FolderIcons = 'folderIcons', + LanguageIcons = 'languageIcons', +} + +enum IconColor { + Default = 'default', + Light = 'light', + HighContrast = 'highContrast', +} diff --git a/src/material-icons/src/scripts/icons/checks/checkIconConflicts.ts b/src/material-icons/src/scripts/icons/checks/checkIconConflicts.ts new file mode 100644 index 0000000..7629d83 --- /dev/null +++ b/src/material-icons/src/scripts/icons/checks/checkIconConflicts.ts @@ -0,0 +1,155 @@ +import { fileIcons, folderIcons, languageIcons } from '../../../core'; +import { green, red } from '../../helpers/painter'; + +/** + * Store all icons that are wrong configured + */ +const allConflicts: { + fileIcons: { + fileExtensions: Record; + fileNames: Record; + }; + folderIcons: Record; + languageIcons: Record; +} = { + fileIcons: { + fileExtensions: {}, + fileNames: {}, + }, + folderIcons: {}, + languageIcons: {}, +}; + +export const check = () => { + checkFolderIcons(); + checkFileIcons(); + checkLanguageIcons(); + + handleErrors(); +}; + +const checkFileIcons = () => { + checkForConflictsInFileIcons('fileExtensions'); + checkForConflictsInFileIcons('fileNames'); +}; + +const checkForConflictsInFileIcons = ( + fileIconDefinitionType: 'fileExtensions' | 'fileNames' +) => { + const icons: Record = {}; + fileIcons.icons.forEach((icon) => { + if (!icon[fileIconDefinitionType]) return; + (icon[fileIconDefinitionType] ?? []) + .map((d) => d.toLowerCase()) + .forEach((definition) => { + if ( + !icons[definition] || + (icon.enabledFor && icon.enabledFor.length > 0) + ) { + icons[definition] = icon.name; + } else { + if (!allConflicts.fileIcons[fileIconDefinitionType][definition]) { + allConflicts.fileIcons[fileIconDefinitionType][definition] = [ + icons[definition], + icon.name, + ]; + } else { + allConflicts.fileIcons[fileIconDefinitionType][definition].push( + icon.name + ); + } + } + }); + }); +}; + +const checkFolderIcons = () => { + folderIcons.forEach((theme) => { + if (!theme.icons) return; + const icons: Record = {}; + theme.icons.forEach((icon) => { + icon.folderNames + .map((f) => f.toLowerCase()) + .forEach((folderName) => { + if ( + !icons[folderName] || + (icon.enabledFor && icon.enabledFor.length > 0) + ) { + icons[folderName] = icon.name; + } else { + if (!allConflicts.folderIcons[folderName]) { + allConflicts.folderIcons[folderName] = [ + icons[folderName], + icon.name, + ]; + } else { + allConflicts.folderIcons[folderName].push(icon.name); + } + } + }); + }); + }); +}; + +const checkLanguageIcons = () => { + const icons: Record = {}; + languageIcons.forEach((langIcon) => { + langIcon.ids + .map((id) => id.toLowerCase()) + .forEach((id) => { + if (!icons[id]) { + icons[id] = langIcon.icon.name; + } else { + if (!allConflicts.languageIcons[id]) { + allConflicts.languageIcons[id] = [icons[id], langIcon.icon.name]; + } else { + allConflicts.languageIcons[id].push(langIcon.icon.name); + } + } + }); + }); +}; + +const handleErrors = () => { + if ( + [ + ...Object.keys(allConflicts.fileIcons.fileExtensions), + ...Object.keys(allConflicts.fileIcons.fileNames), + ...Object.keys(allConflicts.folderIcons), + ...Object.keys(allConflicts.languageIcons), + ].length > 0 + ) { + console.log('> Material Icon Theme:', red('Icon conflicts:')); + console.log(red('--------------------------------------')); + + printErrorMessage(allConflicts.fileIcons.fileExtensions, 'fileExtension'); + printErrorMessage(allConflicts.fileIcons.fileNames, 'fileName'); + printErrorMessage(allConflicts.folderIcons, 'folderName'); + printErrorMessage(allConflicts.languageIcons, 'languageId'); + + console.log('\n' + red('Please check the wrong icon configurations!\n')); + process.exit(1); + } else { + console.log( + '> Material Icon Theme:', + green('Passed icon conflict checks!') + ); + } +}; + +const printErrorMessage = ( + icons: Record, + definitionType: string +) => { + const keys = Object.keys(icons); + keys.forEach((key) => { + const conflictIcons = icons[key]; + console.log( + red( + `For ${definitionType} "${key}" are ${ + conflictIcons.length + } icons defined: [${conflictIcons.join(', ')}]` + ) + ); + }); +}; diff --git a/src/material-icons/src/scripts/icons/checks/checkIconUsage.ts b/src/material-icons/src/scripts/icons/checks/checkIconUsage.ts new file mode 100644 index 0000000..9a04eb0 --- /dev/null +++ b/src/material-icons/src/scripts/icons/checks/checkIconUsage.ts @@ -0,0 +1,140 @@ +import { readdir } from 'node:fs'; +import { join, parse } from 'node:path'; + +import { + type DefaultIcon, + type FolderIcon, + type FolderTheme, + fileIcons, + folderIcons, + highContrastColorFileEnding, + languageIcons, + lightColorFileEnding, + openedFolder, +} from '../../../core'; +import { green, red } from '../../helpers/painter'; + +/** + * Defines the folder where all icon files are located. + */ +const folderPath = join('icons'); + +/** + * Defines an array with all icons that can be found in the file system. + */ +const availableIcons: { [s: string]: string } = {}; + +/** + * Get all icon file names from the file system. + */ +const fsReadAllIconFiles = ( + error: NodeJS.ErrnoException | null, + files: string[] +) => { + if (error) { + throw Error(error.message); + } + + files.forEach((file) => { + const fileName = file; + const iconName = parse(file).name.replace('.clone', ''); + availableIcons[iconName] = fileName; + }); + + checkUsageOfAllIcons(); + handleErrors(); +}; + +const checkUsageOfAllIcons = () => { + const usedFileIcons: string[] = getAllUsedFileIcons(); + const usedFolderIcons: string[] = getAllUsedFolderIcons(); + const usedLanguageIcons: string[] = getAllUsedLanguageIcons(); + + [...usedFileIcons, ...usedFolderIcons, ...usedLanguageIcons].forEach( + (icon) => { + delete availableIcons[icon]; + } + ); +}; + +const handleErrors = () => { + const amountOfUnusedIcons = Object.keys(availableIcons).length; + if (amountOfUnusedIcons === 0) { + console.log('> Material Icon Theme:', green('Passed icon usage checks!')); + } else { + console.log( + '> Material Icon Theme: ' + red(`${amountOfUnusedIcons} unused icon(s):`) + ); + Object.keys(availableIcons).forEach((icon) => { + console.log(red(`- ${availableIcons[icon]}`)); + }); + throw new Error('Found unused icon files!'); + } +}; + +// read from the file system +export const check = () => readdir(folderPath, fsReadAllIconFiles); + +const getAllUsedFileIcons = (): string[] => { + return [ + fileIcons.defaultIcon.name, + fileIcons.defaultIcon.light + ? fileIcons.defaultIcon.name + lightColorFileEnding + : '', + fileIcons.defaultIcon.highContrast + ? fileIcons.defaultIcon.name + highContrastColorFileEnding + : '', + ...fileIcons.icons.map((icon) => icon.name), + ...fileIcons.icons + .filter((icon) => icon.light) + .map((icon) => icon.name + lightColorFileEnding), + ...fileIcons.icons + .filter((icon) => icon.highContrast) + .map((icon) => icon.name + highContrastColorFileEnding), + ].filter((f) => f !== ''); +}; + +const getAllUsedFolderIcons = (): string[] => { + const icons = folderIcons + .map((theme) => (theme.name === 'none' ? [] : getAllFolderIcons(theme))) + .reduce((a, b) => a.concat(b)); + return icons + .map((icon) => { + return [ + icon.name, + icon.name + openedFolder, + icon.light ? icon.name + lightColorFileEnding : '', + icon.light ? icon.name + openedFolder + lightColorFileEnding : '', + icon.highContrast ? icon.name + highContrastColorFileEnding : '', + icon.highContrast + ? icon.name + openedFolder + highContrastColorFileEnding + : '', + ]; + }) + .filter((icon) => icon !== undefined) + .reduce((a, b) => a.concat(b)); +}; + +const getAllFolderIcons = ( + theme: FolderTheme +): (FolderIcon | DefaultIcon)[] => { + const icons = theme.icons || []; + const allFolderIcons = [theme.defaultIcon, ...icons]; + if (theme.rootFolder) { + allFolderIcons.push(theme.rootFolder); + } + return allFolderIcons; +}; + +const getAllUsedLanguageIcons = (): string[] => { + const icons = [ + ...languageIcons.map((lang) => lang.icon.name), + ...languageIcons + .filter((lang) => lang.icon.light) + .map((lang) => lang.icon.name + lightColorFileEnding), + ...languageIcons + .filter((lang) => lang.icon.highContrast) + .map((lang) => lang.icon.name + highContrastColorFileEnding), + ]; + return icons; +}; diff --git a/src/material-icons/src/scripts/icons/checks/run.ts b/src/material-icons/src/scripts/icons/checks/run.ts new file mode 100644 index 0000000..70e2a42 --- /dev/null +++ b/src/material-icons/src/scripts/icons/checks/run.ts @@ -0,0 +1,7 @@ +import { check as checkAvailability } from './checkIconAvailability'; +import { check as checkIconConflicts } from './checkIconConflicts'; +import { check as checkIconUsage } from './checkIconUsage'; + +checkAvailability(); +checkIconUsage(); +checkIconConflicts(); diff --git a/src/material-icons/src/scripts/icons/generateClones.ts b/src/material-icons/src/scripts/icons/generateClones.ts new file mode 100644 index 0000000..a76cc13 --- /dev/null +++ b/src/material-icons/src/scripts/icons/generateClones.ts @@ -0,0 +1,19 @@ +import { + fileIcons, + folderIcons, + generateConfiguredClones, + generateManifest, +} from '../../core'; + +/** + * This file is meant to be executed exclusively by npm scripts. + */ +try { + console.log('Generating icon clones...'); + const manifest = generateManifest(); + generateConfiguredClones(folderIcons, manifest); + generateConfiguredClones(fileIcons, manifest); +} catch (error) { + console.error(error); + throw Error('Could not generate clones!'); +} diff --git a/src/material-icons/src/scripts/icons/generateJson.ts b/src/material-icons/src/scripts/icons/generateJson.ts new file mode 100644 index 0000000..cbcb921 --- /dev/null +++ b/src/material-icons/src/scripts/icons/generateJson.ts @@ -0,0 +1,24 @@ +/** + * This file is meant to be executed exclusively by npm scripts. + */ + +import { + generateFileIcons, + generateFolderIcons, + generateManifest, + getDefaultConfig, +} from '../../core'; + +try { + // Generate default file and folder icons + const config = getDefaultConfig(); + generateFileIcons(config.files.color, config.opacity, config.saturation); + generateFolderIcons(config.folders.color, config.opacity, config.saturation); + + const manifest = generateManifest(); + // Print manifest to stdout so that scripts can consume it + console.log(JSON.stringify(manifest)); +} catch (error) { + console.error(error); + throw Error('An error while generating the manifest occurred!'); +} diff --git a/src/material-icons/src/scripts/models/scripts/contributors/contributor.ts b/src/material-icons/src/scripts/models/scripts/contributors/contributor.ts new file mode 100644 index 0000000..30e7b87 --- /dev/null +++ b/src/material-icons/src/scripts/models/scripts/contributors/contributor.ts @@ -0,0 +1,5 @@ +export type Contributor = { + login: string; + // biome-ignore lint/style/useNamingConvention: + avatar_url: string; +}; diff --git a/src/material-icons/src/scripts/models/scripts/contributors/contributorsConfig.ts b/src/material-icons/src/scripts/models/scripts/contributors/contributorsConfig.ts new file mode 100644 index 0000000..f81ecff --- /dev/null +++ b/src/material-icons/src/scripts/models/scripts/contributors/contributorsConfig.ts @@ -0,0 +1,10 @@ +export type ContributorsConfig = { + /** Owner of the repository */ + owner: string; + + /** Name of the repository */ + repo: string; + + /** Size of a contributor's profile image in pixels */ + imageSize: number; +}; diff --git a/src/material-icons/src/scripts/module/prepare.ts b/src/material-icons/src/scripts/module/prepare.ts new file mode 100644 index 0000000..3486636 --- /dev/null +++ b/src/material-icons/src/scripts/module/prepare.ts @@ -0,0 +1,30 @@ +import { copyFile } from 'node:fs/promises'; +import { join } from 'node:path'; +import { spawn } from 'bun'; + +/** + * Prepare the module for publishing. + * + * This script sets the main field in the package.json to the correct path and copies the README.md to the root directory. + */ +const prepareModule = async () => { + try { + const setMain = spawn([ + 'npm', + 'pkg', + 'set', + 'main=./dist/module/index.cjs', + ]); + await setMain; + + //copy readme into root directory + const readmePath = join(process.cwd(), 'src', 'module', 'README.md'); + console.log('Copying README.md to root directory...'); + await copyFile(readmePath, 'README.md'); + } catch (error) { + console.error('Error preparing the module:', error); + process.exit(1); + } +}; + +prepareModule(); diff --git a/src/material-icons/src/scripts/preview/preview.ts b/src/material-icons/src/scripts/preview/preview.ts new file mode 100644 index 0000000..abae098 --- /dev/null +++ b/src/material-icons/src/scripts/preview/preview.ts @@ -0,0 +1,163 @@ +import { join } from 'node:path'; +import { writeToFile } from '../../core'; +import { green, red } from '../helpers/painter'; +import { createScreenshot } from '../helpers/screenshots'; +import { toTitleCase } from './../helpers/titleCase'; + +const htmlDoctype = ''; +const cssFilePath = 'style.css'; +const styling = ``; + +const createHTMLTableHeadRow = (amount: number) => { + const pair = ` + Icon + Name + `; + const columns = [...Array(amount)].map(() => pair).join(''); + return ` + + ${columns} + + `; +}; + +const createHTMLTableBodyRows = (items: IconDefinition[][]) => { + let rows = ''; + items.forEach((row) => { + const columns = row + .map( + (icon) => ` + + ${
+                  icon.label
+                } + + ${toTitleCase(icon.label)} + ` + ) + .join(''); + const tableRow = ` + + ${columns} + + `; + rows = rows + tableRow; + }); + return rows; +}; + +const createHTMLTable = (headRow: string, bodyRows: string) => ` + + ${headRow} + ${bodyRows} +
    +`; + +const createPreviewTable = (icons: IconDefinition[][], size: number) => { + const table = + htmlDoctype + + styling + + createHTMLTable( + createHTMLTableHeadRow(size), + createHTMLTableBodyRows(icons) + ); + return table; +}; + +const savePreview = async ( + fileName: string, + size: number, + icons: IconDefinition[][] +) => { + const filePath = join(__dirname, fileName + '.html'); + + // write the html file with the icon table + await writeToFile(filePath, createPreviewTable(icons, size)); + + // create the image + createScreenshot(filePath, fileName) + .then(() => { + console.log( + '> Material Icon Theme:', + green(`Successfully created ${fileName} preview image!`) + ); + }) + .catch(() => { + throw Error(red(`Error while creating ${fileName} preview image`)); + }); +}; + +const getIconDefinitionsMatrix = ( + icons: IconDefinition[], + size: number, + excluded: string[] = [] +): IconDefinition[][] => { + const iconList = icons.sort((a, b) => a.label.localeCompare(b.label)); + trimIconListToSize(iconList, size, excluded); + + // list for the columns with the icons + const matrix: IconDefinition[][] = []; + + // calculate the amount of icons per column + const itemsPerColumn = Math.floor(iconList.length / size); + + // create the columns with the icons + let counter = 0; + for (let c = 0; c < itemsPerColumn; c++) { + matrix[c] = []; + } + for (let s = 0; s < size; s++) { + for (let i = 0; i < itemsPerColumn; i++) { + matrix[i][s] = iconList[counter]; + counter++; + } + } + + return matrix; +}; + +/** + * Function that generates the preview image for specific icons. + * @param name name of the preview + * @param icons icons for the preview + * @param size amount of table columns + * @param trimmableIcons List of icons that can possibly be trimmed + */ +export const generatePreview = ( + name: string, + icons: IconDefinition[], + size: number, + trimmableIcons: string[] = [] +) => { + savePreview( + name, + size, + getIconDefinitionsMatrix(icons, size, trimmableIcons) + ); +}; + +type IconDefinition = { + iconName: string; + label: string; +}; + +/** + * Trim the list of icons into the matrix + * @param iconList List of icons + * @param size Amount of columns + * @param trimmableIcons List of icons that can possibly be trimmed + */ +const trimIconListToSize = ( + iconList: IconDefinition[], + size: number, + trimmableIcons: string[] +) => { + while (iconList.length % size !== 0) { + iconList.splice( + iconList.findIndex( + (i) => i.iconName === trimmableIcons[iconList.length % size] + ), + 1 + ); + } +}; diff --git a/src/material-icons/src/scripts/preview/run.ts b/src/material-icons/src/scripts/preview/run.ts new file mode 100644 index 0000000..d96bc62 --- /dev/null +++ b/src/material-icons/src/scripts/preview/run.ts @@ -0,0 +1,47 @@ +import { fileIcons } from '../../core/icons/fileIcons'; +import { folderIcons } from '../../core/icons/folderIcons'; +import { languageIcons } from '../../core/icons/languageIcons'; +import { generatePreview } from './preview'; + +const filterDuplicates = (icons: string[]) => { + return [...new Set(icons)]; +}; + +const basicFileIcons = filterDuplicates( + fileIcons.icons + // remove icons that are clones + .filter((i) => i.clone === undefined) + .map((i) => i.name) + // merge language icons + .concat(languageIcons.map((i) => i.icon.name)) +).map((i) => ({ iconName: i, label: i })); + +const folderThemes = filterDuplicates( + folderIcons + .map((theme) => { + const folders = []; + if (theme.icons && theme.icons.length > 0) { + folders.push( + ...theme.icons + // remove icons that are clones + .filter((i) => i.clone === undefined) + .map((i) => i.name) + ); + } + return [...folders]; + }) + .reduce((a, b) => a.concat(b)) +).map((i) => ({ iconName: i, label: i.replace('folder-', '') })); + +generatePreview('fileIcons', basicFileIcons, 5, [ + 'virtual', + 'powerpoint', + 'word', + 'credits', +]); +generatePreview('folderIcons', folderThemes, 5, [ + 'folder-aurelia', + 'folder-phpmailer', + 'folder-syntax', + 'folder-ansible', +]); diff --git a/src/material-icons/src/scripts/preview/style.css b/src/material-icons/src/scripts/preview/style.css new file mode 100644 index 0000000..6a7d7e7 --- /dev/null +++ b/src/material-icons/src/scripts/preview/style.css @@ -0,0 +1,48 @@ +:root { + --main-bg-color: #1e1e1e; +} + +body { + margin: 0; + padding: 0; +} + +table { + font-family: arial, sans-serif; + border-collapse: collapse; + width: 100%; + background: var(--main-bg-color); + color: rgb(250, 250, 250); + font-size: 1rem; +} + +td, +th { + border: 0px solid #dddddd; + text-align: left; + padding: 8px; +} + +tr:last-child { + border-bottom: 0.5rem solid var(--main-bg-color); +} + +tr:first-child { + border-top: 0.5rem solid var(--main-bg-color); + border-bottom: 0.5rem solid var(--main-bg-color); +} + +.icon { + width: 2rem; + text-align: center; + padding: 0.5rem 1rem 0.5rem 1rem; +} + +.iconName { + min-width: 9rem; +} + +img { + width: 30px; + height: auto; +} diff --git a/src/material-icons/src/scripts/svg/checkSvgColors.ts b/src/material-icons/src/scripts/svg/checkSvgColors.ts new file mode 100644 index 0000000..6818349 --- /dev/null +++ b/src/material-icons/src/scripts/svg/checkSvgColors.ts @@ -0,0 +1,43 @@ +import { spawn } from 'bun'; + +/** + * Check changed (not yet committed) SVG files for correct colors. + */ +const checkColors = async () => { + try { + // Execute Git command to get list of modified SVG files + const gitProcess = spawn([ + 'git', + 'ls-files', + '-mo', + '--exclude-standard', + '--', + '*.svg', + ]); + const { stdout } = await gitProcess; + const output = await new Response(stdout).text(); + const svgFiles = output.trim().split('\n').join(' '); + console.log('SVG files to check:', svgFiles); + + if (svgFiles) { + const command = [ + 'svg-color-linter', + '--colors', + 'material-colors.yml', + ...svgFiles.split(' '), + ]; + const linterProcess = spawn(command); + const { stdout } = await linterProcess; + const linterOutput = await new Response(stdout).text(); + + console.log('Colors check output:\n\n', linterOutput); + } else { + console.log('No SVG files to check.'); + } + } catch (error) { + console.error('Error checking colors:', error); + process.exit(1); + } +}; + +checkColors(); diff --git a/src/material-icons/svgo.config.js b/src/material-icons/svgo.config.js new file mode 100644 index 0000000..78c46f2 --- /dev/null +++ b/src/material-icons/svgo.config.js @@ -0,0 +1,16 @@ +module.exports = { + multipass: true, + precision: 2, + plugins: [ + { + name: 'preset-default', + }, + 'convertStyleToAttrs', + 'removeDimensions', + 'removeOffCanvasPaths', + 'removeScriptElement', + 'removeStyleElement', + 'reusePaths', + 'sortAttrs', + ], +}; diff --git a/src/material-icons/tsconfig.declarations.json b/src/material-icons/tsconfig.declarations.json new file mode 100644 index 0000000..205df69 --- /dev/null +++ b/src/material-icons/tsconfig.declarations.json @@ -0,0 +1,11 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "declaration": true, + "emitDeclarationOnly": true, + "noEmit": false, + "declarationDir": "./dist/types", + "declarationMap": true + }, + "include": ["src/module/index.ts"] +} diff --git a/src/material-icons/tsconfig.json b/src/material-icons/tsconfig.json new file mode 100644 index 0000000..2153993 --- /dev/null +++ b/src/material-icons/tsconfig.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "lib": ["ESNext"], + "target": "ESNext", + "module": "ESNext", + "moduleDetection": "force", + "jsx": "react-jsx", + "allowJs": true, + "types": ["bun-types"], + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "noEmit": true, + + /* Linting */ + "skipLibCheck": true, + "strict": true, + "noImplicitAny": true, + "noFallthroughCasesInSwitch": true, + "forceConsistentCasingInFileNames": true + } +}