├── .all-contributorsrc ├── .commitlintrc.yml ├── .github ├── CODEOWNERS ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── icon_request.md └── workflows │ ├── build.yml │ └── release.yml ├── .gitignore ├── .gitmodules ├── .idea ├── .gitignore ├── a-file-icon-vscode.iml ├── codeStyles │ ├── Project.xml │ └── codeStyleConfig.xml ├── dictionaries ├── encodings.xml ├── git_toolbox_prj.xml ├── highlightedFiles.xml ├── icon.svg ├── inspectionProfiles │ ├── Project_Default.xml │ └── profiles_settings.xml ├── misc.xml ├── modules.xml └── vcs.xml ├── .markdownlint.yaml ├── .markdownlintignore ├── .nvmrc ├── .pre-commit-config.yaml ├── .prettierrc ├── .releaserc.js ├── .svglintrc.js ├── .vscode ├── extensions.json ├── launch.json ├── settings.json └── tasks.json ├── .vscodeignore ├── .yamllint.yaml ├── CHANGELOG.md ├── LICENSE.md ├── README.md ├── build ├── web-extension.webpack.config.js └── webpack.config.js ├── bun.lockb ├── docs ├── arrowStyles.png ├── commandPalette.png ├── folderColor.png ├── folderTheme.png ├── iconPacks.png ├── opacity.png ├── prodIcon.png ├── productIconTheme.png └── saturation.png ├── esbuild.js ├── eslint.config.mjs ├── logo.png ├── logo.svg ├── package.json ├── package.nls.de.json ├── package.nls.es.json ├── package.nls.fr.json ├── package.nls.ja.json ├── package.nls.json ├── package.nls.nl.json ├── package.nls.pl.json ├── package.nls.pt-BR.json ├── package.nls.pt-PT.json ├── package.nls.ru.json ├── package.nls.zh-CN.json ├── package.nls.zh-TW.json ├── productIcons ├── a-file-icon-vscode-product-icon-theme.json └── a-file-icon-vscode.woff ├── renovate.json ├── src ├── @types │ ├── associations.ts │ ├── config.ts │ ├── i18next.d.ts │ ├── iconTypes.ts │ ├── languages.ts │ └── types.ts ├── commands │ └── commands.ts ├── extension.ts ├── helpers │ ├── arrowThemes.ts │ ├── constants.ts │ ├── customIcons.ts │ ├── folderThemes.ts │ ├── iconPacks.ts │ ├── opacities.ts │ ├── saturations.ts │ ├── themes.ts │ ├── utils.ts │ └── vscodeUtils.ts ├── i18n │ ├── i18next.ts │ └── locales │ │ ├── de.json │ │ ├── en.json │ │ ├── es.json │ │ ├── fr.json │ │ ├── ja.json │ │ ├── nl.json │ │ ├── pl.json │ │ ├── pt-br.json │ │ ├── pt-pt.json │ │ ├── ru.json │ │ ├── uk.json │ │ ├── zh-cn.json │ │ └── zh-tw.json ├── icons │ ├── configUtils.ts │ ├── fileIcons.ts │ ├── files │ │ ├── a.ts │ │ ├── archive.ts │ │ ├── audio.ts │ │ ├── b.ts │ │ ├── binaries.ts │ │ ├── c.ts │ │ ├── config.ts │ │ ├── custom.ts │ │ ├── d.ts │ │ ├── e.ts │ │ ├── f.ts │ │ ├── g.ts │ │ ├── h.ts │ │ ├── i.ts │ │ ├── images.ts │ │ ├── index.ts │ │ ├── j.ts │ │ ├── k.ts │ │ ├── l.ts │ │ ├── languages.ts │ │ ├── least.ts │ │ ├── m.ts │ │ ├── n.ts │ │ ├── numbers.ts │ │ ├── o.ts │ │ ├── p.ts │ │ ├── q.ts │ │ ├── r.ts │ │ ├── s.ts │ │ ├── t.ts │ │ ├── tests.ts │ │ ├── u.ts │ │ ├── v.ts │ │ ├── video.ts │ │ ├── w.ts │ │ ├── x.ts │ │ ├── y.ts │ │ └── z.ts │ ├── folderIcons.ts │ ├── folders │ │ ├── a.ts │ │ ├── b.ts │ │ ├── c.ts │ │ ├── d.ts │ │ ├── e.ts │ │ ├── f.ts │ │ ├── g.ts │ │ ├── h.ts │ │ ├── i.ts │ │ ├── index.ts │ │ ├── j.ts │ │ ├── k.ts │ │ ├── l.ts │ │ ├── m.ts │ │ ├── n.ts │ │ ├── o.ts │ │ ├── p.ts │ │ ├── q.ts │ │ ├── r.ts │ │ ├── s.ts │ │ ├── t.ts │ │ ├── u.ts │ │ ├── v.ts │ │ ├── w.ts │ │ ├── x.ts │ │ ├── y.ts │ │ └── z.ts │ ├── generators │ │ ├── AbstractJsonGenerator.ts │ │ ├── FileJsonGenerator.ts │ │ ├── FolderColorService.ts │ │ ├── FolderJsonGenerator.ts │ │ ├── IconThemeGenerator.ts │ │ ├── LanguageJsonGenerator.ts │ │ ├── OpacityService.ts │ │ ├── ProductThemeGenerator.ts │ │ ├── SaturationService.ts │ │ └── index.ts │ ├── index.ts │ └── languageIcons.ts ├── models │ ├── IconConfiguration.ts │ └── ProductConfiguration.ts ├── pickers │ ├── ArrowThemePicker.ts │ ├── FolderColorPicker.ts │ ├── FolderThemePicker.ts │ ├── IconPackPicker.ts │ ├── OpacityPicker.ts │ ├── SaturationPicker.ts │ └── index.ts ├── scripts │ ├── helpers │ │ ├── painter.ts │ │ └── screenshots.ts │ └── icons │ │ ├── checks │ │ ├── checkIconAvailability.ts │ │ ├── checkIconConflicts.ts │ │ ├── checkIconUsage.ts │ │ └── runChecks.ts │ │ ├── generateJson.ts │ │ └── webfont.ts ├── services │ ├── ConfigChangeDetector.ts │ ├── ConfigService.ts │ ├── LoggingService.ts │ ├── NotificationsService.ts │ ├── UpdatesService.ts │ └── index.ts └── web │ └── extension.ts ├── svgo.config.js ├── techstack.md ├── techstack.yml └── tsconfig.json /.all-contributorsrc: -------------------------------------------------------------------------------- 1 | { 2 | "files": [ 3 | "README.md" 4 | ], 5 | "imageSize": 100, 6 | "commit": false, 7 | "contributors": [ 8 | { 9 | "login": "Unthrottled", 10 | "name": "Alex Simons", 11 | "avatar_url": "https://avatars.githubusercontent.com/u/15972415?v=4", 12 | "profile": "https://unthrottled.io", 13 | "contributions": [ 14 | "infra", 15 | "code", 16 | "plugin" 17 | ] 18 | }, 19 | { 20 | "login": "Joristdh", 21 | "name": "Joris te Dorsthorst", 22 | "avatar_url": "https://avatars.githubusercontent.com/u/6518350?v=4", 23 | "profile": "https://Joristdh.web.app", 24 | "contributions": [ 25 | "ideas" 26 | ] 27 | }, 28 | { 29 | "login": "godfather1103", 30 | "name": "Jack Chu", 31 | "avatar_url": "https://avatars.githubusercontent.com/u/11797964?v=4", 32 | "profile": "https://github.com/godfather1103", 33 | "contributions": [ 34 | "bug" 35 | ] 36 | }, 37 | { 38 | "login": "donniean", 39 | "name": "Donnie An", 40 | "avatar_url": "https://avatars.githubusercontent.com/u/12584040?v=4", 41 | "profile": "https://github.com/donniean", 42 | "contributions": [ 43 | "code" 44 | ] 45 | }, 46 | { 47 | "login": "amstiel", 48 | "name": "Alexey Kunitsky", 49 | "avatar_url": "https://avatars.githubusercontent.com/u/9428948?v=4", 50 | "profile": "https://github.com/amstiel", 51 | "contributions": [ 52 | "code", 53 | "ideas" 54 | ] 55 | }, 56 | { 57 | "login": "aparajita", 58 | "name": "Aparajita Fishman", 59 | "avatar_url": "https://avatars.githubusercontent.com/u/22218?v=4", 60 | "profile": "https://github.com/aparajita", 61 | "contributions": [ 62 | "ideas", 63 | "code" 64 | ] 65 | } 66 | ], 67 | "contributorsPerLine": 7, 68 | "projectName": "a-file-icon-idea", 69 | "projectOwner": "mallowigi", 70 | "repoType": "github", 71 | "repoHost": "https://github.com", 72 | "skipCi": true 73 | } 74 | -------------------------------------------------------------------------------- /.commitlintrc.yml: -------------------------------------------------------------------------------- 1 | # yaml-language-server: $schema=https://json.schemastore.org/commitlintrc.json 2 | 3 | extends: 4 | - '@commitlint/config-conventional' 5 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | @mallowigi -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | github: [mallowigi] 3 | opencollective: ['https://opencollective.com/atom-material-themes-and-plugins'] 4 | custom: ['https://paypal.me/mallowigi'] 5 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Computer information (please complete the following information):** 27 | - OS edition: [e.g. Windows 10 Home] 28 | - OS build: [e.g. 19042.1165] 29 | - Browser [e.g. chrome, safari] 30 | - Version [e.g. 22] 31 | - VSCode version [e.g. 1.59.1] 32 | 33 | **Additional context** 34 | Add any other context about the problem here. 35 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/icon_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Icon Request 3 | about: Ask for specific icons to be added 4 | title: '[Icon Request] ' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Icon Type** 11 | - [ ] Folder 12 | - [ ] File 13 | 14 | **Folder Names** 15 | 16 | - ... 17 | 18 | **File Names** 19 | 20 | - ... 21 | 22 | **Graphic ideas** 23 | 24 | A clear description of the icon you would like. If the icons are separate for folder and files, please create separate issues. 25 | 26 | **Additional context** 27 | Add any other context about the problem here. 28 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: Build + Test 2 | 3 | on: [push, pull_request] 4 | 5 | jobs: 6 | test: 7 | runs-on: ${{ matrix.os }} 8 | strategy: 9 | matrix: 10 | os: [windows-latest, ubuntu-latest] 11 | node-version: [16.x] 12 | 13 | name: ${{ matrix.os }} (Node.js ${{ matrix.node-version }}) 14 | 15 | steps: 16 | - name: Checkout 🛎 17 | uses: actions/checkout@v3 18 | - name: Setup Node.js ${{ matrix.node-version }} ⚙ 19 | uses: actions/setup-node@v3 20 | with: 21 | node-version: ${{ matrix.node-version }} 22 | - name: Run display server 🖥 23 | run: /usr/bin/Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 & echo "Started xvfb" 24 | shell: bash 25 | if: ${{ success() && matrix.os == 'ubuntu-latest' }} 26 | - name: Install node_modules 📦 27 | run: npm ci 28 | - name: Cache node_modules 💾 29 | uses: actions/cache@v3 30 | env: 31 | cache-name: cache-node-modules 32 | with: 33 | # npm cache files are stored in `~/.npm` on Linux/macOS 34 | path: ~/.npm 35 | key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} 36 | restore-keys: | 37 | ${{ runner.os }}-build-${{ env.cache-name }}- 38 | ${{ runner.os }}-build- 39 | ${{ runner.os }}- 40 | - name: Test + Build 🚀 41 | run: | 42 | npm test 43 | npm run vscode:prepublish 44 | env: 45 | DISPLAY: ':99.0' 46 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release + Publish 2 | 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | versionChange: 7 | type: choice 8 | description: Select the version change 9 | required: true 10 | options: 11 | - major 12 | - minor 13 | - patch 14 | 15 | jobs: 16 | release: 17 | runs-on: ubuntu-latest 18 | env: 19 | VERSION_CHANGE: ${{ github.event.inputs.versionChange }} 20 | steps: 21 | - name: Checkout 🛎️ 22 | uses: actions/checkout@v3 23 | with: 24 | fetch-depth: 0 25 | - name: Setup Node.js ⚙️ 26 | uses: actions/setup-node@v3 27 | with: 28 | node-version: 'lts/*' 29 | registry-url: 'https://registry.npmjs.org' 30 | - name: Install node_modules 📦 31 | run: | 32 | npm ci 33 | npm install --global vsce 34 | - name: Update version ↗ 35 | run: | 36 | git config --global user.name 'Elior Boukhobza' 37 | git config --global user.email 'mallowigi@users.noreply.github.com' 38 | git config --global push.followTags true 39 | npm version ${{ env.VERSION_CHANGE }} -m "Release %s" 40 | - name: Get meta data 🔍 41 | run: | 42 | NODE_VERSION=$(node -p -e "require('./package.json').version") 43 | echo VERSION=$NODE_VERSION >> $GITHUB_ENV 44 | NODE_NAME=$(node -p -e "require('./package.json').name") 45 | echo NAME=$NODE_NAME >> $GITHUB_ENV 46 | NODE_DISPLAY_NAME=$(node -p -e "require('./package.json').displayName") 47 | echo DISPLAY_NAME=$NODE_DISPLAY_NAME >> $GITHUB_ENV 48 | - name: Build ⚒️ 49 | run: vsce package 50 | - name: Push tags 📌 51 | run: git push 52 | - name: Release ${{ env.VERSION }} 🔆 53 | uses: softprops/action-gh-release@v1 54 | with: 55 | files: ${{ env.NAME }}-${{ env.VERSION }}.vsix 56 | tag_name: v${{ env.VERSION }} 57 | name: ${{ env.DISPLAY_NAME }} v${{ env.VERSION }} 58 | generate_release_notes: true 59 | - name: Publish to Open VSX Registry 🌐 60 | uses: HaaLeo/publish-vscode-extension@v1 61 | with: 62 | pat: ${{ secrets.OPEN_VSX_TOKEN }} 63 | extensionFile: ${{ env.NAME }}-${{ env.VERSION }}.vsix 64 | - name: Publish to Visual Studio Marketplace 🌐 65 | uses: HaaLeo/publish-vscode-extension@v1 66 | with: 67 | pat: ${{ secrets.VS_MARKETPLACE_TOKEN }} 68 | registryUrl: https://marketplace.visualstudio.com 69 | extensionFile: ${{ env.NAME }}-${{ env.VERSION }}.vsix 70 | - name: Publish to NPM Registry 🌐 71 | run: npm publish 72 | env: 73 | NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} 74 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | out 2 | dist 3 | 4 | node_modules 5 | 6 | .vscode-test/** 7 | *.vsix 8 | 9 | productIcons/folder.svg 10 | productIcons/folder-open.svg 11 | productIcons/folder-root.svg 12 | productIcons/folder-root-open.svg 13 | 14 | src/scripts/preview/*.html 15 | src/scripts/contributors/*.html -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "iconGenerator"] 2 | path = iconGenerator 3 | url = git@github.com:mallowigi/iconGenerator.git 4 | -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | # Editor-based HTTP Client requests 5 | /httpRequests/ 6 | # Datasource local storage ignored files 7 | /dataSources/ 8 | /dataSources.local.xml 9 | -------------------------------------------------------------------------------- /.idea/a-file-icon-vscode.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /.idea/codeStyles/codeStyleConfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | -------------------------------------------------------------------------------- /.idea/dictionaries: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/git_toolbox_prj.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 14 | 15 | -------------------------------------------------------------------------------- /.idea/highlightedFiles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 17 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.markdownlint.yaml: -------------------------------------------------------------------------------- 1 | # yaml-language-server: $schema=https://json.schemastore.org/markdownlint.json 2 | 3 | # https://github.com/DavidAnson/markdownlint/blob/main/schema/.markdownlint.yaml 4 | # https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md 5 | 6 | # Default state for all rules 7 | default: true 8 | 9 | MD013: 10 | line_length: 300 11 | 12 | MD024: false 13 | 14 | MD033: false 15 | -------------------------------------------------------------------------------- /.markdownlintignore: -------------------------------------------------------------------------------- 1 | .github/**/* 2 | CHANGELOG.md 3 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | 22 2 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "endOfLine": "auto", 3 | "printWidth": 120, 4 | "semi": true, 5 | "singleQuote": true, 6 | "tabWidth": 2, 7 | "trailingComma": "es5" 8 | } 9 | -------------------------------------------------------------------------------- /.releaserc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | // https://github.com/semantic-release/semantic-release/blob/master/docs/extending/plugins-list.md 3 | plugins: [ 4 | [ 5 | "@semantic-release/commit-analyzer", 6 | { 7 | preset: "conventionalcommits", 8 | }, 9 | ], 10 | [ 11 | "@semantic-release/release-notes-generator", 12 | { 13 | preset: "conventionalcommits", 14 | }, 15 | ], 16 | // disabled due to authentication https://github.com/semantic-release/git#git-authentication 17 | [ 18 | "@semantic-release/changelog", 19 | { 20 | changelogTitle: ` 21 | # Changelog 22 | 23 | All notable changes to this project will be documented in this file. 24 | 25 | The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).`, 26 | }, 27 | ], 28 | [ 29 | "@semantic-release/npm", 30 | { 31 | npmPublish: false, 32 | tarballDir: ".", 33 | }, 34 | ], 35 | [ 36 | "@semantic-release-plus/docker", 37 | { 38 | name: "adm-dal", 39 | registry: "884661243007.dkr.ecr.us-east-1.amazonaws.com", 40 | publishChannelTag: true, 41 | skipLogin: true, 42 | }, 43 | ], 44 | [ 45 | "@semantic-release-plus/docker", 46 | { 47 | name: "adm-dal", 48 | registry: "884661243007.dkr.ecr.eu-central-1.amazonaws.com", 49 | publishChannelTag: true, 50 | skipLogin: true, 51 | }, 52 | ], 53 | [ 54 | "@semantic-release/git", 55 | { 56 | message: "chore(release): ${nextRelease.version} ${nextRelease.notes}", 57 | assets: [ 58 | "CHANGELOG.md", 59 | "package.json", 60 | "package-lock.json", 61 | ], 62 | }, 63 | ], 64 | [ 65 | "@semantic-release/github", 66 | { 67 | successComment: 68 | ":tada: This ${issue.pull_request ? 'pull request' : 'issue'} is included in [version ${nextRelease.version}](${releases.filter(release => /github.com/i.test(release.url))[0].url}) :tada:", 69 | assets: ["*.tgz"], 70 | }, 71 | ], 72 | ], 73 | tagFormat: "${version}", 74 | branches: [ 75 | { name: "master" }, 76 | ], 77 | }; 78 | -------------------------------------------------------------------------------- /.svglintrc.js: -------------------------------------------------------------------------------- 1 | /* 2 | * The MIT License (MIT) 3 | * 4 | * Copyright (c) 2015-2022 Elior "Mallowigi" Boukhobza 5 | * 6 | * Permission is hereby granted, free of charge, to any person obtaining a copy 7 | * of this software and associated documentation files (the "Software"), to deal 8 | * in the Software without restriction, including without limitation the rights 9 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | * copies of the Software, and to permit persons to whom the Software is 11 | * furnished to do so, subject to the following conditions: 12 | * 13 | * The above copyright notice and this permission notice shall be included in all 14 | * copies or substantial portions of the Software. 15 | * 16 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | * SOFTWARE. 23 | * 24 | * 25 | */ 26 | 27 | module.exports = { 28 | rules: { 29 | attr: { 30 | 'rule::selector': 'viewBox', 31 | }, 32 | }, 33 | }; 34 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["dbaeumer.vscode-eslint", "esbenp.prettier-vscode"] 3 | } 4 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | // A launch configuration that compiles the extension and then opens it inside a new window 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | { 6 | "version": "0.2.0", 7 | "configurations": [ 8 | { 9 | "name": "Launch Extension", 10 | "type": "extensionHost", 11 | "request": "launch", 12 | "runtimeExecutable": "${execPath}", 13 | "args": ["--extensionDevelopmentPath=${workspaceFolder}"], 14 | "outFiles": ["${workspaceFolder}/dist/**/*.js"], 15 | "smartStep": true, 16 | "preLaunchTask": "npm: build" 17 | }, 18 | { 19 | "name": "Run Web Extension in VS Code", 20 | "type": "pwa-extensionHost", 21 | "debugWebWorkerHost": true, 22 | "request": "launch", 23 | "args": ["--extensionDevelopmentPath=${workspaceFolder}", "--extensionDevelopmentKind=web"], 24 | "outFiles": ["${workspaceFolder}/dist/web/**/*.js"], 25 | "preLaunchTask": "npm: watch-web" 26 | }, 27 | { 28 | "name": "Launch Tests", 29 | "type": "extensionHost", 30 | "request": "launch", 31 | "runtimeExecutable": "${execPath}", 32 | "args": [ 33 | "--extensionDevelopmentPath=${workspaceFolder}", 34 | "--extensionTestsPath=${workspaceFolder}/out/test/spec/index" 35 | ], 36 | "outFiles": ["${workspaceFolder}/out/test/**/*.js"], 37 | "preLaunchTask": "npm: pretest" 38 | } 39 | ] 40 | } 41 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "files.exclude": { 3 | "out": false 4 | }, 5 | "search.exclude": { 6 | "out": true 7 | }, 8 | "editor.defaultFormatter": "esbenp.prettier-vscode", 9 | "editor.codeActionsOnSave": { 10 | "source.fixAll.eslint": true 11 | }, 12 | "eslint.validate": ["typescript"], 13 | "editor.formatOnSave": true, 14 | "i18n-ally.localesPaths": [ 15 | "src/i18n", 16 | "src/locales", 17 | "src/messages", 18 | "src/models/i18n", 19 | "src/models/icons/languages", 20 | "iconGenerator/examples/folders/i18n", 21 | "iconGenerator/examples/folders/lang", 22 | "iconGenerator/examples/folders/langs", 23 | "iconGenerator/examples/folders/language", 24 | "iconGenerator/examples/folders/languages", 25 | "iconGenerator/examples/folders/locale", 26 | "iconGenerator/examples/folders/locales", 27 | "iconGenerator/examples/folders/messages" 28 | ], 29 | "a-file-icon-vscode.arrowTheme": "material" 30 | } 31 | -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | // See https://go.microsoft.com/fwlink/?LinkId=733558 2 | // for the documentation about the tasks.json format 3 | { 4 | "version": "2.0.0", 5 | "tasks": [ 6 | { 7 | "type": "npm", 8 | "script": "build", 9 | "problemMatcher": "$tsc-watch", 10 | "isBackground": true, 11 | "presentation": { 12 | "reveal": "never" 13 | }, 14 | "group": { 15 | "kind": "build", 16 | "isDefault": true 17 | } 18 | }, 19 | { 20 | "type": "npm", 21 | "script": "lint", 22 | "problemMatcher": ["$eslint-stylish"] 23 | }, 24 | { 25 | "type": "npm", 26 | "script": "watch-web", 27 | "group": "build", 28 | "isBackground": true, 29 | "problemMatcher": ["$ts-webpack-watch", "$tslint-webpack-watch"] 30 | } 31 | ] 32 | } 33 | -------------------------------------------------------------------------------- /.vscodeignore: -------------------------------------------------------------------------------- 1 | .vscode/** 2 | .github/** 3 | .vscode-test/** 4 | out/** 5 | test/** 6 | src/** 7 | scripts/** 8 | **/*.map 9 | .gitignore 10 | tsconfig.json 11 | tslint.json 12 | images/** 13 | vsc-extension-quickstart.md 14 | logo.svg 15 | node_modules 16 | package-lock.json 17 | yarn.lock 18 | build/** 19 | svgo.config.js 20 | .eslintignore 21 | material-colors.yml -------------------------------------------------------------------------------- /.yamllint.yaml: -------------------------------------------------------------------------------- 1 | extends: default 2 | 3 | rules: 4 | braces: 5 | forbid: non-empty 6 | brackets: 7 | forbid: false 8 | comments: 9 | min-spaces-from-content: 1 10 | document-end: disable 11 | document-start: disable 12 | line-length: 13 | max: 300 14 | truthy: 15 | check-keys: false 16 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | Copyright (c) 2023 Elior "Mallowigi" Boukhobza and Philipp "PKief" Kief 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated 5 | documentation files (the "Software"), to deal in the Software without restriction, including without limitation the 6 | rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit 7 | persons to whom the Software is furnished to do so, subject to the following conditions: 8 | 9 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the 10 | Software. 11 | 12 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE 13 | WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 14 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 15 | OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 16 | -------------------------------------------------------------------------------- /build/web-extension.webpack.config.js: -------------------------------------------------------------------------------- 1 | /*--------------------------------------------------------------------------------------------- 2 | * Copyright (c) Microsoft Corporation. All rights reserved. 3 | * Licensed under the MIT License. See License.txt in the project root for license information. 4 | *--------------------------------------------------------------------------------------------*/ 5 | 6 | //@ts-check 7 | 'use strict'; 8 | 9 | //@ts-check 10 | /** @typedef {import('webpack').Configuration} WebpackConfig **/ 11 | 12 | const path = require('path'); 13 | const webpack = require('webpack'); 14 | 15 | module.exports = /** @type WebpackConfig */ { 16 | context: path.dirname(__dirname), 17 | mode: 'none', // this leaves the source code as close as possible to the original (when packaging we set this to 'production') 18 | target: 'webworker', // extensions run in a webworker context 19 | entry: { 20 | extension: './src/web/extension.ts', 21 | }, 22 | resolve: { 23 | mainFields: ['browser', 'module', 'main'], 24 | extensions: ['.ts', '.js'], // support ts-files and js-files 25 | alias: {}, 26 | fallback: { 27 | assert: require.resolve('assert'), 28 | path: false, 29 | fs: false, 30 | }, 31 | }, 32 | module: { 33 | rules: [ 34 | { 35 | test: /\.ts$/, 36 | exclude: /node_modules/, 37 | use: [ 38 | { 39 | loader: 'ts-loader', 40 | }, 41 | ], 42 | }, 43 | ], 44 | }, 45 | plugins: [ 46 | new webpack.ProvidePlugin({ 47 | process: 'process/browser', 48 | }), 49 | ], 50 | externals: { 51 | vscode: 'commonjs vscode', // ignored because it doesn't exist 52 | }, 53 | performance: { 54 | hints: false, 55 | }, 56 | output: { 57 | filename: '[name].js', 58 | path: path.join(__dirname, '../dist/web'), 59 | libraryTarget: 'commonjs', 60 | }, 61 | devtool: 'nosources-source-map', 62 | }; 63 | -------------------------------------------------------------------------------- /build/webpack.config.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | const path = require("path"); 4 | 5 | /** @type {import("webpack").Configuration} */ 6 | const config = { 7 | context: path.dirname(__dirname), 8 | target: "node", 9 | node: { 10 | __dirname: false, 11 | __filename: false 12 | }, 13 | entry: "./src/extension.ts", 14 | output: { 15 | path: path.resolve(__dirname, "../dist"), 16 | filename: "extension.js", 17 | libraryTarget: "commonjs2", 18 | devtoolModuleFilenameTemplate: "../[resource-path]", 19 | clean: true 20 | }, 21 | devtool: "source-map", 22 | externals: { 23 | vscode: "commonjs vscode" 24 | }, 25 | resolve: { 26 | alias: { 27 | src: path.resolve(__dirname, "..", "src") 28 | }, 29 | extensions: [".ts", ".js", ".json"] 30 | }, 31 | module: { 32 | rules: [ 33 | { 34 | test: /\.ts$/, 35 | exclude: /node_modules/, 36 | use: "ts-loader" 37 | } 38 | ] 39 | } 40 | }; 41 | 42 | module.exports = config; 43 | -------------------------------------------------------------------------------- /bun.lockb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AtomMaterialUI/a-file-icon-vscode/329cfa9d91f25e7f2a9e06d5d7e82e3712228b0e/bun.lockb -------------------------------------------------------------------------------- /docs/arrowStyles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AtomMaterialUI/a-file-icon-vscode/329cfa9d91f25e7f2a9e06d5d7e82e3712228b0e/docs/arrowStyles.png -------------------------------------------------------------------------------- /docs/commandPalette.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AtomMaterialUI/a-file-icon-vscode/329cfa9d91f25e7f2a9e06d5d7e82e3712228b0e/docs/commandPalette.png -------------------------------------------------------------------------------- /docs/folderColor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AtomMaterialUI/a-file-icon-vscode/329cfa9d91f25e7f2a9e06d5d7e82e3712228b0e/docs/folderColor.png -------------------------------------------------------------------------------- /docs/folderTheme.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AtomMaterialUI/a-file-icon-vscode/329cfa9d91f25e7f2a9e06d5d7e82e3712228b0e/docs/folderTheme.png -------------------------------------------------------------------------------- /docs/iconPacks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AtomMaterialUI/a-file-icon-vscode/329cfa9d91f25e7f2a9e06d5d7e82e3712228b0e/docs/iconPacks.png -------------------------------------------------------------------------------- /docs/opacity.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AtomMaterialUI/a-file-icon-vscode/329cfa9d91f25e7f2a9e06d5d7e82e3712228b0e/docs/opacity.png -------------------------------------------------------------------------------- /docs/prodIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AtomMaterialUI/a-file-icon-vscode/329cfa9d91f25e7f2a9e06d5d7e82e3712228b0e/docs/prodIcon.png -------------------------------------------------------------------------------- /docs/productIconTheme.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AtomMaterialUI/a-file-icon-vscode/329cfa9d91f25e7f2a9e06d5d7e82e3712228b0e/docs/productIconTheme.png -------------------------------------------------------------------------------- /docs/saturation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AtomMaterialUI/a-file-icon-vscode/329cfa9d91f25e7f2a9e06d5d7e82e3712228b0e/docs/saturation.png -------------------------------------------------------------------------------- /esbuild.js: -------------------------------------------------------------------------------- 1 | const esbuild = require('esbuild'); 2 | 3 | const production = process.argv.includes('--production'); 4 | const watch = process.argv.includes('--watch'); 5 | 6 | async function main() { 7 | const context = await esbuild.context({ 8 | entryPoints: ['src/extension.ts'], 9 | bundle: true, 10 | format: 'cjs', 11 | minify: production, 12 | sourcemap: !production, 13 | sourcesContent: false, 14 | platform: 'node', 15 | outfile: 'dist/extension.js', 16 | external: ['vscode'], 17 | logLevel: 'silent', 18 | plugins: [ 19 | /* add to the end of plugins array */ 20 | esbuildProblemMatcherPlugin 21 | ] 22 | }); 23 | if (watch) { 24 | await context.watch(); 25 | } else { 26 | await context.rebuild(); 27 | await context.dispose(); 28 | } 29 | } 30 | 31 | /** 32 | * @type {import('esbuild').Plugin} 33 | */ 34 | const esbuildProblemMatcherPlugin = { 35 | name: 'esbuild-problem-matcher', 36 | 37 | setup(build) { 38 | build.onStart(() => { 39 | console.log('[watch] build started'); 40 | }); 41 | build.onEnd(result => { 42 | for (const {text, location} of result.errors) { 43 | console.error(`✘ [ERROR] ${text}`); 44 | console.error(` ${location.file}:${location.line}:${location.column}:`); 45 | } 46 | console.log('[watch] build finished'); 47 | }); 48 | } 49 | }; 50 | 51 | // eslint-disable-next-line unicorn/prefer-top-level-await 52 | main().catch(error => { 53 | console.error(error); 54 | // eslint-disable-next-line unicorn/no-process-exit 55 | process.exit(1); 56 | }); 57 | -------------------------------------------------------------------------------- /logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AtomMaterialUI/a-file-icon-vscode/329cfa9d91f25e7f2a9e06d5d7e82e3712228b0e/logo.png -------------------------------------------------------------------------------- /package.nls.de.json: -------------------------------------------------------------------------------- 1 | { 2 | "command.activateIcons": "Icon Theme aktivieren", 3 | "command.changeArrowTheme": "Explorer Pfeilsymbole umschalten", 4 | "command.changeFolderColor": "Ordner Farbe ändern", 5 | "command.changeFolderTheme": "Ordner Thema auswählen", 6 | "command.changeOpacity": "Deckkraft verändern", 7 | "command.changeSaturation": "Sättigung verändern", 8 | "command.restoreDefaultConfig": "Standard Einstellungen wiederherstellen", 9 | "command.toggleGrayscale": "Graustufen umschalten", 10 | "command.toggleIconPacks": "Icon Packs konfigurieren", 11 | "configuration.activeIconPacks": "Icon-Pack auswählen, die bestimme Icons aktivieren.", 12 | "configuration.activeIconPacks.angular": "Icons für Angular", 13 | "configuration.activeIconPacks.nest": "Icons für NestJS.", 14 | "configuration.activeIconPacks.ngrx": "Icons für Angular und Ngrx", 15 | "configuration.activeIconPacks.none": "Kein Icon-Pack aktiviert.", 16 | "configuration.activeIconPacks.phalcon": "Icons für Phalcon.", 17 | "configuration.activeIconPacks.rails": "Icons für Rails.", 18 | "configuration.activeIconPacks.react": "Icons für React", 19 | "configuration.activeIconPacks.recoil": "Icons für Recoil.", 20 | "configuration.activeIconPacks.redux": "Icons für React und Redux", 21 | "configuration.activeIconPacks.volt": "Icons für Volt.", 22 | "configuration.activeIconPacks.vue": "Icons für Vue.", 23 | "configuration.activeIconPacks.vuex": "Icons für Vue und Vuex.", 24 | "configuration.files.associations": "Benutzerdefinierte Datei Icons konfigurieren.", 25 | "configuration.folders.associations": "Benutzerdefinierte Ordner Icons konfigurieren.", 26 | "configuration.folders.color": "Farbe der Ordner Icons verändern.", 27 | "configuration.folders.theme": "Art der Ordner Icons auswählen.", 28 | "configuration.folders.theme.classic": "Klassische Ordner Icons auswählen.", 29 | "configuration.folders.theme.none": "Keine Ordner Icons.", 30 | "configuration.folders.theme.specific": "Spezifische Ordner Icons auswählen.", 31 | "configuration.languages.associations": "Benutzerdefinierte Language Icons konfigurieren.", 32 | "configuration.opacity": "Deckkraft der Icons anpassen.", 33 | "configuration.saturation": "Sättigung der Icons anpassen.", 34 | "configuration.showReloadMessage": "Nachricht zum Neustarten anzeigen.", 35 | "configuration.showUpdateMessage": "Nachricht bei Aktualisierungen anzeigen.", 36 | "configuration.showWelcomeMessage": "Willkommensnachricht nach der ersten Installation anzeigen.", 37 | "configuration.title": "Atom Material Icons" 38 | } 39 | -------------------------------------------------------------------------------- /package.nls.es.json: -------------------------------------------------------------------------------- 1 | { 2 | "command.activateIcons": "Activar los iconos", 3 | "command.changeArrowTheme": "Deshabilitar flechas delante de carpetas", 4 | "command.changeFolderColor": "Cambiar color de carpeta", 5 | "command.changeFolderTheme": "Personalizar iconos de carpetas", 6 | "command.changeOpacity": "Cambiar la opacidad", 7 | "command.restoreDefaultConfig": "Restaurar la configuración predeterminada", 8 | "command.toggleIconPacks": "Configurar paquetes de iconos", 9 | "configuration.activeIconPacks": "Seleccione un paquete de iconos que permita iconos específicos.", 10 | "configuration.activeIconPacks.angular": "Iconos de Angular.", 11 | "configuration.activeIconPacks.nest": "Iconos de NestJS.", 12 | "configuration.activeIconPacks.ngrx": "Iconos de Angular y ngrx.", 13 | "configuration.activeIconPacks.none": "No hay ningún paquete de iconos activo.", 14 | "configuration.activeIconPacks.phalcon": "Iconos de Phalcon.", 15 | "configuration.activeIconPacks.rails": "Iconos de Rails.", 16 | "configuration.activeIconPacks.react": "Iconos de React.", 17 | "configuration.activeIconPacks.recoil": "Iconos de Recoil.", 18 | "configuration.activeIconPacks.redux": "Iconos de React y Redux.", 19 | "configuration.activeIconPacks.volt": "Iconos de Volt.", 20 | "configuration.activeIconPacks.vue": "Iconos de Vue.", 21 | "configuration.activeIconPacks.vuex": "Iconos de Vue y Vuex.", 22 | "configuration.files.associations": "Configurar asociaciones personalizadas de iconos de archivos.", 23 | "configuration.folders.associations": "Configurar asociaciones personalizadas de iconos de carpetas.", 24 | "configuration.folders.color": "Cambia el color de las carpetas.", 25 | "configuration.folders.theme": "Seleccione el tipo de iconos de carpeta.", 26 | "configuration.folders.theme.classic": "Seleccione iconos de carpetas clásicas.", 27 | "configuration.folders.theme.none": "Sin iconos de carpeta.", 28 | "configuration.folders.theme.specific": "Seleccione iconos de carpeta específicos.", 29 | "configuration.languages.associations": "Configurar asociaciones personalizadas de iconos de idioma.", 30 | "configuration.opacity": "Cambia la opacidad de los iconos.", 31 | "configuration.showReloadMessage": "Mostrar mensaje de reinicio.", 32 | "configuration.showUpdateMessage": "Mostrar mensaje al actualizar.", 33 | "configuration.showWelcomeMessage": "Mostrar mensaje de bienvenida después de la primera instalación.", 34 | "configuration.title": "Atom Material Icons" 35 | } 36 | -------------------------------------------------------------------------------- /package.nls.fr.json: -------------------------------------------------------------------------------- 1 | { 2 | "command.activateIcons": "Activer les icônes", 3 | "command.changeArrowTheme": "Configurer les flèches devant les dossiers", 4 | "command.changeFolderColor": "Changer la couleur du dossier", 5 | "command.changeFolderTheme": "Changer le thème du dossier", 6 | "command.changeOpacity": "Changer l'opacité", 7 | "command.restoreDefaultConfig": "Restaurer le paramètre par défaut", 8 | "command.toggleIconPacks": "Configurer les Packs d'icônes", 9 | "configuration.activeIconPacks": "Sélectionner un pack d'icônes qui active des icônes spécifiques.", 10 | "configuration.activeIconPacks.angular": "Icônes pour Angular.", 11 | "configuration.activeIconPacks.nest": "Icônes pour NestJS.", 12 | "configuration.activeIconPacks.ngrx": "Icônes pour Angular et ngrx.", 13 | "configuration.activeIconPacks.none": "Aucun pack d'icônes n'est actif.", 14 | "configuration.activeIconPacks.phalcon": "Icônes pour Phalcon.", 15 | "configuration.activeIconPacks.rails": "Icônes pour Rails.", 16 | "configuration.activeIconPacks.react": "Icônes pour React.", 17 | "configuration.activeIconPacks.recoil": "Icônes pour Recoil.", 18 | "configuration.activeIconPacks.redux": "Icônes pour React et Redux.", 19 | "configuration.activeIconPacks.volt": "Icônes pour Volt.", 20 | "configuration.activeIconPacks.vue": "Icônes pour Vue.", 21 | "configuration.activeIconPacks.vuex": "Icônes pour Vue et Vuex.", 22 | "configuration.files.associations": "Configurer des associations d'icônes de fichiers personnalisés.", 23 | "configuration.folders.associations": "Configurer des associations d'icônes de dossier personnalisées.", 24 | "configuration.folders.color": "Changer la couleur des icônes du dossier.", 25 | "configuration.folders.theme": "Sélectionner le type d'icônes de dossier.", 26 | "configuration.folders.theme.classic": "Sélectionner les icônes des dossiers classiques.", 27 | "configuration.folders.theme.none": "Pas d'icônes de dossier.", 28 | "configuration.folders.theme.specific": "Sélectionner des icônes de dossiers spécifiques.", 29 | "configuration.languages.associations": "Configurer des associations d'icônes de langue personnalisées.", 30 | "configuration.opacity": "Ajuster l'opacité des icônes.", 31 | "configuration.showReloadMessage": "Afficher le message de redémarrage.", 32 | "configuration.showUpdateMessage": "Afficher le message de mise à jour.", 33 | "configuration.showWelcomeMessage": "Afficher le message de bienvenue après l'installation initiale", 34 | "configuration.title": "Atom Material Icons" 35 | } 36 | -------------------------------------------------------------------------------- /package.nls.ja.json: -------------------------------------------------------------------------------- 1 | { 2 | "command.activateIcons": "アイコンテーマを有効化", 3 | "command.changeArrowTheme": "フォルダーの矢印を切り替え", 4 | "command.changeFolderColor": "フォルダーの色を変更", 5 | "command.changeFolderTheme": "フォルダーテーマを変更", 6 | "command.changeOpacity": "不透明度を変更", 7 | "command.changeSaturation": "彩度を変更", 8 | "command.restoreDefaultConfig": "初期設定に戻す", 9 | "command.toggleGrayscale": "グレースケールを切り替え", 10 | "command.toggleIconPacks": "アイコンパックを設定", 11 | "configuration.activeIconPacks": "特定のアイコンを有効にするアイコンパックを選択する。", 12 | "configuration.activeIconPacks.angular": "Angular 用のアイコンです。", 13 | "configuration.activeIconPacks.nest": "NestJS 用のアイコンです。", 14 | "configuration.activeIconPacks.ngrx": "Angular と ngrx 用のアイコンです。", 15 | "configuration.activeIconPacks.none": "アイコンパックは有効ではありません。", 16 | "configuration.activeIconPacks.phalcon": "Phalcon 用のアイコンです。", 17 | "configuration.activeIconPacks.rails": "Rails 用のアイコンです。", 18 | "configuration.activeIconPacks.react": "React 用のアイコンです。", 19 | "configuration.activeIconPacks.recoil": "Recoil 用のアイコンです。", 20 | "configuration.activeIconPacks.redux": "React と Redux 用のアイコンです。", 21 | "configuration.activeIconPacks.volt": "Volt 用のアイ¡コンです。", 22 | "configuration.activeIconPacks.vue": "Vue 用のアイコンです。", 23 | "configuration.activeIconPacks.vuex": "Vue と Vuex 用のアイコンです。", 24 | "configuration.files.associations": "カスタムファイルアイコンの関連付けを設定する。", 25 | "configuration.folders.associations": "カスタムフォルダーアイコンの関連付けを設定する。", 26 | "configuration.folders.color": "フォルダーアイコンの色を変更する。", 27 | "configuration.folders.theme": "フォルダーアイコンの種類を設定する。", 28 | "configuration.folders.theme.classic": "クラシックフォルダーアイコンを選択する。", 29 | "configuration.folders.theme.none": "フォルダーアイコンがありません。", 30 | "configuration.folders.theme.specific": "特定のフォルダーアイコンを選択する。", 31 | "configuration.languages.associations": "カスタム言語アイコンの関連付けを設定する。", 32 | "configuration.opacity": "アイコンの不透明度を変更する。", 33 | "configuration.saturation": "アイコンの彩度を変更する。", 34 | "configuration.showReloadMessage": "再起動通知を表示する。", 35 | "configuration.showUpdateMessage": "更新のたびに更新メッセージを表示する。", 36 | "configuration.showWelcomeMessage": "初回インストール時にウェルカムメッセージを表示する。", 37 | "configuration.title": "Atom Material Icons" 38 | } 39 | -------------------------------------------------------------------------------- /package.nls.json: -------------------------------------------------------------------------------- 1 | { 2 | "command.activateIcons": "Activate Icon Theme", 3 | "command.changeArrowTheme": "Change Arrows Theme", 4 | "command.changeFolderColor": "Change Folder Color", 5 | "command.changeFolderTheme": "Change Folder Theme", 6 | "command.changeOpacity": "Change Opacity", 7 | "command.changeSaturation": "Change Saturation", 8 | "command.restoreDefaultConfig": "Restore Default Configuration", 9 | "command.toggleGrayscale": "Toggle Grayscale", 10 | "command.toggleIconPacks": "Configure Icon Packs", 11 | "configuration.activeIconPacks": "Select an icon pack that enables specific icons.", 12 | "configuration.activeIconPacks.angular": "Icons for Angular.", 13 | "configuration.activeIconPacks.nest": "Icons for NestJS.", 14 | "configuration.activeIconPacks.ngrx": "Icons for Angular and ngrx.", 15 | "configuration.activeIconPacks.none": "No icon pack enabled.", 16 | "configuration.activeIconPacks.phalcon": "Icons for Phalcon.", 17 | "configuration.activeIconPacks.rails": "Icons for Rails.", 18 | "configuration.activeIconPacks.react": "Icons for React.", 19 | "configuration.activeIconPacks.recoil": "Icons for Recoil.", 20 | "configuration.activeIconPacks.redux": "Icons for React and Redux.", 21 | "configuration.activeIconPacks.volt": "Icons for Volt.", 22 | "configuration.activeIconPacks.vue": "Icons for Vue.", 23 | "configuration.activeIconPacks.vuex": "Icons for Vue and Vuex.", 24 | "configuration.arrowTheme": "Configure the style of arrow icons", 25 | "configuration.arrowTheme.arrow": "Arrows", 26 | "configuration.arrowTheme.material": "Material (chevrons)", 27 | "configuration.arrowTheme.none": "No Arrows", 28 | "configuration.arrowTheme.plusMinus": "Plus-Minus symbols", 29 | "configuration.arrowTheme.triangle": "Triangles", 30 | "configuration.files.associations": "Set custom file icon associations.", 31 | "configuration.folders.associations": "Set custom folder icon associations.", 32 | "configuration.folders.color": "Change the color of the folder icons.", 33 | "configuration.folders.theme": "Set the type for the folder icons.", 34 | "configuration.folders.theme.classic": "Select classic folder icons.", 35 | "configuration.folders.theme.none": "No folder icons.", 36 | "configuration.folders.theme.specific": "Select specific folder icons.", 37 | "configuration.languages.associations": "Set custom language icon associations.", 38 | "configuration.opacity": "Change the opacity of the icons.", 39 | "configuration.saturation": "Change the saturation of the icons.", 40 | "configuration.showReloadMessage": "Show restart notification.", 41 | "configuration.showUpdateMessage": "Show the update message after each update.", 42 | "configuration.showWelcomeMessage": "Show the welcome message after first installation.", 43 | "configuration.title": "Atom Material Icons" 44 | } 45 | -------------------------------------------------------------------------------- /package.nls.nl.json: -------------------------------------------------------------------------------- 1 | { 2 | "command.activateIcons": "Activeer Icon Thema", 3 | "command.changeArrowTheme": "Configureer Folder Pijlen", 4 | "command.changeFolderColor": "Verander Folder Kleur", 5 | "command.changeFolderTheme": "Verander Folder Thema", 6 | "command.changeOpacity": "Verander Doorzichtbaarheid", 7 | "command.changeSaturation": "Verander Saturatie", 8 | "command.restoreDefaultConfig": "Zet Standaard Configuratie Terug", 9 | "command.toggleGrayscale": "Zet Grijstinten Aan Of Uit", 10 | "command.toggleIconPacks": "Configureer Icon Packs", 11 | "configuration.activeIconPacks": "Selecteer een iconpakket dat bepaalde icons inschakelt.", 12 | "configuration.activeIconPacks.angular": "Icons voor Angular.", 13 | "configuration.activeIconPacks.nest": "Icons voor NestJS.", 14 | "configuration.activeIconPacks.ngrx": "Icons voor Angular en ngrx.", 15 | "configuration.activeIconPacks.none": "Geen iconpakket ingeschakeld.", 16 | "configuration.activeIconPacks.phalcon": "Icons voor Phalcon.", 17 | "configuration.activeIconPacks.rails": "Icons voor Rails.", 18 | "configuration.activeIconPacks.react": "Icons voor React.", 19 | "configuration.activeIconPacks.recoil": "Icons voor Recoil.", 20 | "configuration.activeIconPacks.redux": "Icons for React en Redux.", 21 | "configuration.activeIconPacks.volt": "Icons voor Volt.", 22 | "configuration.activeIconPacks.vue": "Icons voor Vue.", 23 | "configuration.activeIconPacks.vuex": "Icons voor Vue en Vuex.", 24 | "configuration.files.associations": "Stel eigen bestandsiconen in.", 25 | "configuration.folders.associations": "Stel eigen foldericonen in.", 26 | "configuration.folders.color": "Verander de kleur van de foldericons.", 27 | "configuration.folders.theme": "Kies het type foldericons.", 28 | "configuration.folders.theme.classic": "Selecteer klassieke foldericons.", 29 | "configuration.folders.theme.none": "Geen foldericons.", 30 | "configuration.folders.theme.specific": "Selecteer bepaalde foldericons.", 31 | "configuration.languages.associations": "Stel eigen taaliconen in.", 32 | "configuration.opacity": "Verander de doorzichtbaarheid van de icons.", 33 | "configuration.saturation": "Verander de saturatie van de icons.", 34 | "configuration.showReloadMessage": "Laat de herstartnotificatie zien.", 35 | "configuration.showUpdateMessage": "Laat het updatebericht zien na elke update.", 36 | "configuration.showWelcomeMessage": "Laat het welkomstbericht zien na de eerste installatie.", 37 | "configuration.title": "Atom Material Icons" 38 | } 39 | -------------------------------------------------------------------------------- /package.nls.pl.json: -------------------------------------------------------------------------------- 1 | { 2 | "command.activateIcons": "vuexAktywuj motyw ikon", 3 | "command.changeArrowTheme": "vuexUkryj strzałki przy folderach", 4 | "command.changeFolderColor": "vuexZmień kolor folderów", 5 | "command.changeFolderTheme": "vuexZmień motyw folderów", 6 | "command.changeOpacity": "vuexZmień przezroczystość", 7 | "command.changeSaturation": "vuexZmień nasycenie ikon", 8 | "command.restoreDefaultConfig": "vuexPrzywróć domyślne ustawienia", 9 | "command.toggleGrayscale": "vuexPrzełącz czarno-białe ikony", 10 | "command.toggleIconPacks": "vuexSkonfiguruj paczki ikon", 11 | "configuration.activeIconPacks": "Wybierz paczkę dla niektórych ikon.", 12 | "configuration.activeIconPacks.angular": "Ikony dla Angulara.", 13 | "configuration.activeIconPacks.nest": "Ikony dla NestJS.", 14 | "configuration.activeIconPacks.ngrx": "Ikony dla Angulara i ngrx.", 15 | "configuration.activeIconPacks.none": "Brak włączonej paczki ikon.", 16 | "configuration.activeIconPacks.phalcon": "Ikony dla Phalcon.", 17 | "configuration.activeIconPacks.rails": "Ikony dla Rails.", 18 | "configuration.activeIconPacks.react": "Ikony dla Reacta.", 19 | "configuration.activeIconPacks.recoil": "Ikony dla Recoil.", 20 | "configuration.activeIconPacks.redux": "Ikony dla Reacta i Reduxa.", 21 | "configuration.activeIconPacks.volt": "Ikony dla Volt.", 22 | "configuration.activeIconPacks.vue": "Ikony dla Vue.", 23 | "configuration.activeIconPacks.vuex": "Ikony dla Vue i Vuex.", 24 | "configuration.files.associations": "Ustaw niestandardowe ikony plików.", 25 | "configuration.folders.associations": "Ustaw niestandardowe ikony folderów.", 26 | "configuration.folders.color": "Zmień kolor ikon folderów.", 27 | "configuration.folders.theme": "Wybierz typ ikon folderów.", 28 | "configuration.folders.theme.classic": "Wybierz klasyczne ikony folderów.", 29 | "configuration.folders.theme.none": "Brak ikon folderów.", 30 | "configuration.folders.theme.specific": "Wybierz ikony folderów.", 31 | "configuration.languages.associations": "Ustaw niestandardowe ikony języków.", 32 | "configuration.opacity": "Zmień przezroczystość ikon.", 33 | "configuration.saturation": "Zmień nasycenie ikon.", 34 | "configuration.showReloadMessage": "Wyświetl wiadomość o restarcie.", 35 | "configuration.showUpdateMessage": "Wyświetl wiadomość po każdej aktualizacji.", 36 | "configuration.showWelcomeMessage": "Wyświetl wiadomość powitalną przy pierwszej instalacji.", 37 | "configuration.title": "Atom Material Icons" 38 | } 39 | -------------------------------------------------------------------------------- /package.nls.pt-BR.json: -------------------------------------------------------------------------------- 1 | { 2 | "command.activateIcons": "vuexAtivar tema de ícones", 3 | "command.changeArrowTheme": "vuexOcultar as setas ao lado das pastas", 4 | "command.changeFolderColor": "vuexAlterar cor das pastas", 5 | "command.changeFolderTheme": "vuexAlterar tema das pastas", 6 | "command.changeOpacity": "vuexAlterar a opacidade", 7 | "command.restoreDefaultConfig": "vuexRestaurar configuração padrão", 8 | "command.toggleIconPacks": "vuexConfigurar pacote de ícones", 9 | "configuration.activeIconPacks": "Selecione um pacote de ícones que habilitam ícones específicos.", 10 | "configuration.activeIconPacks.angular": "Ícones para Angular.", 11 | "configuration.activeIconPacks.nest": "Ícones para NestJS.", 12 | "configuration.activeIconPacks.ngrx": "Ícones para Angular e ngrx.", 13 | "configuration.activeIconPacks.none": "Nenhum pacote de ícones ativado.", 14 | "configuration.activeIconPacks.phalcon": "Ícones para Phalcon.", 15 | "configuration.activeIconPacks.rails": "Ícones para Rails.", 16 | "configuration.activeIconPacks.react": "Ícones para React.", 17 | "configuration.activeIconPacks.recoil": "Ícones para Recoil.", 18 | "configuration.activeIconPacks.redux": "Ícones para React e ngrx.", 19 | "configuration.activeIconPacks.volt": "Ícones para Volt.", 20 | "configuration.activeIconPacks.vue": "Ícones para Vue.", 21 | "configuration.activeIconPacks.vuex": "Ícones para Vue e Vuex.", 22 | "configuration.files.associations": "Definir ícones para associações de arquivos customizadas.", 23 | "configuration.folders.associations": "Definir ícones para associações de pastas customizadas.", 24 | "configuration.folders.color": "Alterar a cor dos ícones das pastas.", 25 | "configuration.folders.theme": "Definir o tipo dos ícones das pastas.", 26 | "configuration.folders.theme.classic": "Selecione ícones de pastas clássicas.", 27 | "configuration.folders.theme.none": "Nenhum ícone de pasta.", 28 | "configuration.folders.theme.specific": "Selecione ícones de pastas específicas.", 29 | "configuration.languages.associations": "Definir ícones para associações de idiomas customizadas.", 30 | "configuration.opacity": "Alterar a opacidade dos ícones.", 31 | "configuration.showReloadMessage": "Mostrar mensagem da reinicialização.", 32 | "configuration.showUpdateMessage": "Mostrar mensagem de atualização após cada atualização.", 33 | "configuration.showWelcomeMessage": "Mostrar mensagem de bem-vindo após a primeira instalação.", 34 | "configuration.title": "Atom Material Icons" 35 | } 36 | -------------------------------------------------------------------------------- /package.nls.pt-PT.json: -------------------------------------------------------------------------------- 1 | { 2 | "command.activateIcons": "vuexHabilitar tema de ícones", 3 | "command.changeArrowTheme": "vuexEsconder as setas ao lado dos directórios", 4 | "command.changeFolderColor": "vuexAlterar cor dos directórios", 5 | "command.changeFolderTheme": "vuexAlterar tema dos directórios", 6 | "command.changeOpacity": "vuexAlterar a opacidade", 7 | "command.restoreDefaultConfig": "vuexRestaurar configuração padrão", 8 | "command.toggleIconPacks": "vuexConfigurar pacote de ícones", 9 | "configuration.activeIconPacks": "Selecciona um pacote de ícones que habilitam ícones específicos.", 10 | "configuration.activeIconPacks.angular": "Ícones para Angular.", 11 | "configuration.activeIconPacks.nest": "Ícones para NestJS.", 12 | "configuration.activeIconPacks.ngrx": "Ícones para Angular e ngrx.", 13 | "configuration.activeIconPacks.none": "Nenhum pacote de ícones ativado.", 14 | "configuration.activeIconPacks.phalcon": "Ícones para Phalcon.", 15 | "configuration.activeIconPacks.rails": "Ícones para Rails.", 16 | "configuration.activeIconPacks.react": "Ícones para React.", 17 | "configuration.activeIconPacks.recoil": "Ícones para Recoil.", 18 | "configuration.activeIconPacks.redux": "Ícones para React e ngrx.", 19 | "configuration.activeIconPacks.volt": "Ícones para Volt.", 20 | "configuration.activeIconPacks.vue": "Ícones para Vue.", 21 | "configuration.activeIconPacks.vuex": "Ícones para Vue e Vuex.", 22 | "configuration.files.associations": "Definir ícones para associações de ficheiros peronslizados.", 23 | "configuration.folders.associations": "Definir ícones para associações de directórios personalizados.", 24 | "configuration.folders.color": "Alterar a cor dos ícones dos directórios.", 25 | "configuration.folders.theme": "Definir o formato dos ícones dos directórios.", 26 | "configuration.folders.theme.classic": "Selecciona ícones de pastas clássicas.", 27 | "configuration.folders.theme.none": "Nenhum ícone de pasta.", 28 | "configuration.folders.theme.specific": "Selecciona ícones de pastas específicas.", 29 | "configuration.languages.associations": "Definir ícones para associações de idiomas personalizados.", 30 | "configuration.opacity": "Alterar a opacidade dos ícones.", 31 | "configuration.showReloadMessage": "Exibir mensagem da reinicialização.", 32 | "configuration.showUpdateMessage": "Exibir mensagem de actualização após cada actualização.", 33 | "configuration.showWelcomeMessage": "Exibir mensagem de boas-vindas após a primeira instalação.", 34 | "configuration.title": "Atom Material Icons" 35 | } 36 | -------------------------------------------------------------------------------- /package.nls.ru.json: -------------------------------------------------------------------------------- 1 | { 2 | "command.activateIcons": "vuexАктивировать иконки темы", 3 | "command.changeArrowTheme": "vuexСкрыть стрелки проводника перед папкой", 4 | "command.changeFolderColor": "vuexИзменить цвет папки", 5 | "command.changeFolderTheme": "vuexИзменить тему папки", 6 | "command.changeOpacity": "vuexИзменение непрозрачности", 7 | "command.restoreDefaultConfig": "vuexВосстановить настройки по умолчанию", 8 | "command.toggleIconPacks": "vuexНастроить набор иконок", 9 | "configuration.activeIconPacks": "Выберите набор значков, которые включают определенные значки.", 10 | "configuration.activeIconPacks.angular": "Иконки для Angular.", 11 | "configuration.activeIconPacks.nest": "Иконки для NestJS.", 12 | "configuration.activeIconPacks.ngrx": "Иконки для Angular и ngrx.", 13 | "configuration.activeIconPacks.none": "Папка с иконками не включена.", 14 | "configuration.activeIconPacks.phalcon": "Иконки для Phalcon.", 15 | "configuration.activeIconPacks.rails": "Иконки для Rails.", 16 | "configuration.activeIconPacks.react": "Иконки для React.", 17 | "configuration.activeIconPacks.recoil": "Иконки для Recoil.", 18 | "configuration.activeIconPacks.redux": "Иконки для React и Redux.", 19 | "configuration.activeIconPacks.volt": "Иконки для Volt.", 20 | "configuration.activeIconPacks.vue": "Иконки для Vue.", 21 | "configuration.activeIconPacks.vuex": "Иконки для Vue и Vuex.", 22 | "configuration.files.associations": "Настройка пользовательских ассоциаций значков файлов.", 23 | "configuration.folders.associations": "Настройка пользовательских ассоциаций значков папок.", 24 | "configuration.folders.color": "Изменение цвета иконок папок.", 25 | "configuration.folders.theme": "Установить тип иконок для папок.", 26 | "configuration.folders.theme.classic": "Выберите классические значки папок.", 27 | "configuration.folders.theme.none": "Нет значков папок.", 28 | "configuration.folders.theme.specific": "Выберите конкретные значки папок.", 29 | "configuration.languages.associations": "Настройка ассоциаций значков пользовательского языка.", 30 | "configuration.opacity": "Измените прозрачность значков.", 31 | "configuration.showReloadMessage": "Показывать сообщение перезагрузки.", 32 | "configuration.showUpdateMessage": "Показывать сообщение об обновлении после каждого обновления.", 33 | "configuration.showWelcomeMessage": "Показывать приветственное сообщение после первой установки.", 34 | "configuration.title": "Atom Material Icons" 35 | } 36 | -------------------------------------------------------------------------------- /package.nls.zh-CN.json: -------------------------------------------------------------------------------- 1 | { 2 | "command.activateIcons": "vuex激活Atom Material Icons文件图标主题", 3 | "command.changeArrowTheme": "vuex隐藏文件夹箭头", 4 | "command.changeFolderColor": "vuex更改文件夹颜色", 5 | "command.changeFolderTheme": "vuex切换文件夹图标", 6 | "command.changeOpacity": "vuex改变不透明度", 7 | "command.restoreDefaultConfig": "vuex恢复默认设置", 8 | "command.toggleIconPacks": "vuex选择一个图标包", 9 | "configuration.activeIconPacks": "选择一个图标包。", 10 | "configuration.activeIconPacks.angular": "Angular的图标。", 11 | "configuration.activeIconPacks.nest": "NestJS的图标。", 12 | "configuration.activeIconPacks.ngrx": "Angular和ngrx的图标。", 13 | "configuration.activeIconPacks.none": "没有启用图标包。", 14 | "configuration.activeIconPacks.phalcon": "Phalcon的图标。", 15 | "configuration.activeIconPacks.rails": "Rails的图标。", 16 | "configuration.activeIconPacks.react": "React的图标。", 17 | "configuration.activeIconPacks.recoil": "Recoil的图标。", 18 | "configuration.activeIconPacks.redux": "React和Redux的图标。", 19 | "configuration.activeIconPacks.volt": "Volt的图标。", 20 | "configuration.activeIconPacks.vue": "Vue的图标。", 21 | "configuration.activeIconPacks.vuex": "Vue和Vuex的图标。", 22 | "configuration.files.associations": "设置自定义文件图标关联。", 23 | "configuration.folders.associations": "设置自定义文件夹图标关联。", 24 | "configuration.folders.color": "更改文件夹图标的颜色。", 25 | "configuration.folders.theme": "设置文件夹图标的类型。", 26 | "configuration.folders.theme.classic": "选择经典文件夹图标。", 27 | "configuration.folders.theme.none": "没有文件夹图标。", 28 | "configuration.folders.theme.specific": "选择特定文件夹图标。", 29 | "configuration.languages.associations": "定义自定义语言映射的图标。", 30 | "configuration.opacity": "更改图标的透明度。", 31 | "configuration.showReloadMessage": "显示重启消息。", 32 | "configuration.showUpdateMessage": "更新后显示升级信息。", 33 | "configuration.showWelcomeMessage": "首次安装后显示欢迎信息。", 34 | "configuration.title": "Atom Material Icons" 35 | } 36 | -------------------------------------------------------------------------------- /package.nls.zh-TW.json: -------------------------------------------------------------------------------- 1 | { 2 | "command.activateIcons": "vuex激活Atom Material Icons文件圖標主題", 3 | "command.changeArrowTheme": "vuex隱藏文件夾箭頭", 4 | "command.changeFolderColor": "vuex更改文件夾顏色", 5 | "command.changeFolderTheme": "vuex切換文件夾圖標", 6 | "command.changeOpacity": "vuex改變不透明度", 7 | "command.restoreDefaultConfig": "vuex恢復默認設置", 8 | "command.toggleIconPacks": "vuex選擇一個圖標包", 9 | "configuration.activeIconPacks": "選擇一個圖標包。", 10 | "configuration.activeIconPacks.angular": "Angular的圖標。", 11 | "configuration.activeIconPacks.nest": "NestJS的圖標。", 12 | "configuration.activeIconPacks.ngrx": "Angular和ngrx的圖標。", 13 | "configuration.activeIconPacks.none": "沒有啟用圖標包。", 14 | "configuration.activeIconPacks.phalcon": "Phalcon的圖標。", 15 | "configuration.activeIconPacks.rails": "Rails的圖標。", 16 | "configuration.activeIconPacks.react": "React的圖標。", 17 | "configuration.activeIconPacks.recoil": "Recoil的圖標。", 18 | "configuration.activeIconPacks.redux": "React和Redux的圖標。", 19 | "configuration.activeIconPacks.volt": "Volt的圖標。", 20 | "configuration.activeIconPacks.vue": "Vue的圖標。", 21 | "configuration.activeIconPacks.vuex": "Vue和Vuex的圖標。", 22 | "configuration.files.associations": "設置自定義文件圖標關聯。", 23 | "configuration.folders.associations": "設置自定義文件夾圖標關聯。", 24 | "configuration.folders.color": "更改文件夾圖標的顏色。", 25 | "configuration.folders.theme": "設置文件夾圖標的類型。", 26 | "configuration.folders.theme.classic": "選擇經典文件夾圖標。", 27 | "configuration.folders.theme.none": "沒有文件夾圖標。", 28 | "configuration.folders.theme.specific": "選擇特定文件夾圖標。", 29 | "configuration.languages.associations": "定義自定義語言映射的圖標。", 30 | "configuration.opacity": "更改圖標的透明度。", 31 | "configuration.showReloadMessage": "顯示重啟消息。", 32 | "configuration.showUpdateMessage": "更新後顯示升級信息。", 33 | "configuration.showWelcomeMessage": "首次安裝後顯示歡迎信息。", 34 | "configuration.title": "Atom Material Icons" 35 | } 36 | -------------------------------------------------------------------------------- /productIcons/a-file-icon-vscode.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AtomMaterialUI/a-file-icon-vscode/329cfa9d91f25e7f2a9e06d5d7e82e3712228b0e/productIcons/a-file-icon-vscode.woff -------------------------------------------------------------------------------- /renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json", 3 | "extends": [ 4 | "config:base" 5 | ] 6 | } 7 | -------------------------------------------------------------------------------- /src/@types/config.ts: -------------------------------------------------------------------------------- 1 | import type { IconAssociations } from './associations'; 2 | 3 | export enum IconPack { 4 | Angular = 'angular', 5 | Angular2 = 'angular2', 6 | Nest = 'nest', 7 | Next = 'next', 8 | Ngrx = 'ngrx', 9 | Phalcon = 'phalcon', 10 | Rails = 'rails', 11 | React = 'react', 12 | Recoil = 'recoil', 13 | Redux = 'redux', 14 | Volt = 'volt', 15 | Vue = 'vue', 16 | Vuex = 'vuex', 17 | None = 'none', 18 | } 19 | 20 | export enum FolderTheme { 21 | Classic = 'classic', 22 | None = 'none', 23 | Specific = 'specific', 24 | } 25 | 26 | export enum PredefinedOpacity { 27 | Transparent = 'transparent', 28 | SemiTransparent = 'semiTransparent', 29 | Opaque = 'opaque', 30 | Custom = 'custom' 31 | } 32 | 33 | export enum PredefinedSaturation { 34 | Grayscale = 'grayscale', 35 | Desaturated = 'desaturated', 36 | Vivid = 'vivid', 37 | Custom = 'custom' 38 | } 39 | 40 | export type AtomConfig = { 41 | activeIconPacks: IconPack[], 42 | arrowTheme: ArrowTheme, 43 | filesAssociations?: IconAssociations, 44 | foldersAssociations?: IconAssociations, 45 | folderColor: string, 46 | folderTheme: FolderTheme, 47 | languagesAssociations?: IconAssociations, 48 | opacity: number, 49 | saturation: number, 50 | showReloadMessage: boolean, 51 | showUpdateMessage: boolean, 52 | showWelcomeMessage: boolean, 53 | } 54 | 55 | export enum UpdateStatus { 56 | NeverUsedBefore, 57 | Updated, 58 | Current, 59 | } 60 | 61 | export enum FileMappingType { 62 | FileExtensions = 'fileExtensions', 63 | FileNames = 'fileNames', 64 | } 65 | 66 | export type Theme = { 67 | accent: string; 68 | attributes: string; 69 | background: string; 70 | blue: string; 71 | border: string; 72 | button: string; 73 | className: string; 74 | classes: string; 75 | comments: string; 76 | contrast: string; 77 | cyan: string; 78 | dark: boolean; 79 | desc: string 80 | disabled: string; 81 | error: string; 82 | excluded: string; 83 | foreground: string; 84 | functions: string; 85 | gray: string; 86 | green: string; 87 | hl: string; 88 | id: string; 89 | keywords: string; 90 | links: string; 91 | name2: string; 92 | name: string; 93 | notif: string; 94 | numbers: string; 95 | operators: string; 96 | orange: string; 97 | parameters: string; 98 | purple: string; 99 | red: string; 100 | scheme: string; 101 | second: string; 102 | selectBg: string; 103 | selectFg2: string; 104 | selectFg: string; 105 | strings: string; 106 | table: string; 107 | tags: string; 108 | text: string; 109 | tree: string; 110 | vars: string; 111 | white: string; 112 | yellow: string; 113 | } 114 | 115 | export type ThemeColor = { 116 | name: string, 117 | color: string; 118 | } 119 | 120 | export enum ArrowTheme { 121 | Material = 'material', 122 | Triangle = 'triangle', 123 | PlusMinus = 'plusMinus', 124 | Arrow = 'arrow', 125 | None = 'none', 126 | } 127 | -------------------------------------------------------------------------------- /src/@types/i18next.d.ts: -------------------------------------------------------------------------------- 1 | import 'i18next'; 2 | 3 | declare module 'i18next' { 4 | // eslint-disable-next-line @typescript-eslint/consistent-type-definitions 5 | interface CustomTypeOptions { 6 | returnNull: false; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/@types/languages.ts: -------------------------------------------------------------------------------- 1 | import type {env} from 'vscode'; 2 | 3 | export type Language = 4 | | 'de' 5 | | 'en' 6 | | 'es' 7 | | 'fr' 8 | | 'ja' 9 | | 'nl' 10 | | 'pl' 11 | | 'pt-br' 12 | | 'pt-pt' 13 | | 'ru' 14 | | 'uk' 15 | | 'zh-cn' 16 | | 'zh-tw'; 17 | 18 | export type EnvLanguage = Language & typeof env.language; 19 | -------------------------------------------------------------------------------- /src/@types/types.ts: -------------------------------------------------------------------------------- 1 | export type RequireAtLeastOne = { 2 | [K in Keys]-?: Partial>> & Required>; 3 | }[Keys] & Pick>; 4 | -------------------------------------------------------------------------------- /src/commands/commands.ts: -------------------------------------------------------------------------------- 1 | import { EXTENSION_KEY } from 'src/helpers/constants'; 2 | import { iconPackPicker } from 'src/pickers'; 3 | import { arrowThemePicker } from 'src/pickers/ArrowThemePicker'; 4 | import { folderColorPicker } from 'src/pickers/FolderColorPicker'; 5 | import { folderThemePicker } from 'src/pickers/FolderThemePicker'; 6 | import { opacityPicker } from 'src/pickers/OpacityPicker'; 7 | import { saturationPicker } from 'src/pickers/SaturationPicker'; 8 | import { logger, configService } from 'src/services'; 9 | import { commands } from 'vscode'; 10 | 11 | const changeFolderColor = async () => { 12 | logger.info('Open select folder color popup'); 13 | await folderColorPicker.openQuickPicker(); 14 | }; 15 | 16 | const changeFolderTheme = async () => { 17 | logger.info('Open select folder theme popup'); 18 | await folderThemePicker.openQuickPicker(); 19 | }; 20 | 21 | const toggleIconPacks = async () => { 22 | logger.info('Open toggle icon pack popup'); 23 | await iconPackPicker.openQuickPicker(); 24 | }; 25 | 26 | const changeOpacity = async () => { 27 | logger.info('Open opacity selection popup'); 28 | await opacityPicker.openQuickPicker(); 29 | }; 30 | 31 | const changeSaturation = async () => { 32 | logger.info('Open saturation selection popup'); 33 | await saturationPicker.openQuickPicker(); 34 | }; 35 | 36 | const changeArrowTheme = async () => { 37 | logger.info('Open select arrow theme popup'); 38 | await arrowThemePicker.openQuickPicker(); 39 | }; 40 | 41 | const restoreDefaultConfig = async () => { 42 | logger.info('Resetting default config'); 43 | configService.resetConfig(); 44 | }; 45 | 46 | const extensionCommands: Record Promise> = { 47 | changeArrowTheme, 48 | changeFolderColor, 49 | changeFolderTheme, 50 | changeOpacity, 51 | changeSaturation, 52 | restoreDefaultConfig, 53 | toggleIconPacks, 54 | }; 55 | 56 | /** 57 | * List of registered commands from package.json 58 | * @type {Disposable[]} 59 | */ 60 | export const registeredCommands = Object.keys(extensionCommands).map((commandName) => { 61 | const callCommand = () => extensionCommands[commandName](); 62 | return commands.registerCommand( 63 | `${EXTENSION_KEY}.${commandName}`, 64 | callCommand, 65 | ); 66 | }); 67 | -------------------------------------------------------------------------------- /src/extension.ts: -------------------------------------------------------------------------------- 1 | import { registeredCommands } from 'src/commands/commands'; 2 | import { VERSION_KEY } from 'src/helpers/constants'; 3 | import { initI18next } from 'src/i18n/i18next'; 4 | import { configChangeDetector } from 'src/services/ConfigChangeDetector'; 5 | import { logger } from 'src/services/LoggingService'; 6 | import { notificationsService } from 'src/services/NotificationsService'; 7 | import { updatesService } from 'src/services/UpdatesService'; 8 | import { window, workspace } from 'vscode'; 9 | 10 | import type { ExtensionContext } from 'vscode'; 11 | 12 | /** 13 | * When the extension gets activated 14 | * @param {ExtensionContext} context 15 | * @returns {Promise} 16 | */ 17 | export const activate = async (context: ExtensionContext) => { 18 | try { 19 | // Translations 20 | await initI18next(); 21 | logger.debug('Translations loaded.'); 22 | 23 | // Init for sync 24 | context.globalState.setKeysForSync([VERSION_KEY]); 25 | 26 | // checking for updates 27 | logger.debug('Checking for new updates...'); 28 | const status = await updatesService.checkUpdateStatus(context.globalState); 29 | 30 | // Start notification 31 | notificationsService.showStartMessages(status); 32 | 33 | // Subscribe to the extension commands 34 | context.subscriptions.push(...registeredCommands); 35 | 36 | // Initially trigger the config change detection 37 | configChangeDetector.listenForChanges(); 38 | 39 | // Observe changes in the config 40 | workspace.onDidChangeConfiguration(() => configChangeDetector.listenForChanges()); 41 | 42 | // Observe if the window got focused to trigger config changes 43 | window.onDidChangeWindowState((state) => { 44 | if (state.focused) { 45 | // configChangeDetector.listenForChanges(); 46 | } 47 | }); 48 | } 49 | catch (error) { 50 | logger.error(String(error)); 51 | } 52 | }; 53 | 54 | /** This method is called when the extension is deactivated */ 55 | export const deactivate = () => { 56 | // do nothing 57 | }; 58 | -------------------------------------------------------------------------------- /src/helpers/arrowThemes.ts: -------------------------------------------------------------------------------- 1 | import i18next from 'i18next'; 2 | import { ArrowTheme } from 'src/@types/config'; 3 | import { QuickPickItemKind } from 'vscode'; 4 | 5 | type ArrowThemeQuickPickItem = { 6 | icon?: string; 7 | id?: ArrowTheme, 8 | order: number; 9 | kind: QuickPickItemKind; 10 | title?: string; 11 | description?: string; 12 | } 13 | 14 | export const getArrowThemes = (): ArrowThemeQuickPickItem[] => { 15 | return [ 16 | { 17 | description: i18next.t('arrowThemes.material'), 18 | icon: '$(atom-arrows-material)', 19 | id: ArrowTheme.Material, 20 | kind: QuickPickItemKind.Default, 21 | order: 1, 22 | title: i18next.t('material'), 23 | }, 24 | { 25 | description: i18next.t('arrowThemes.triangle'), 26 | icon: '$(atom-arrows-triangles)', 27 | id: ArrowTheme.Triangle, 28 | kind: QuickPickItemKind.Default, 29 | order: 1, 30 | title: i18next.t('triangle'), 31 | }, 32 | { 33 | description: i18next.t('arrowThemes.plusMinus'), 34 | icon: '$(atom-arrows-plusMinus)', 35 | id: ArrowTheme.PlusMinus, 36 | kind: QuickPickItemKind.Default, 37 | order: 1, 38 | title: i18next.t('plusMinus'), 39 | }, 40 | { 41 | description: i18next.t('arrowThemes.arrow'), 42 | icon: '$(atom-arrows-arrows)', 43 | id: ArrowTheme.Arrow, 44 | kind: QuickPickItemKind.Default, 45 | order: 1, 46 | title: i18next.t('arrows'), 47 | }, 48 | { 49 | kind: QuickPickItemKind.Separator, 50 | order: 1, 51 | }, 52 | { 53 | description: i18next.t('arrowThemes.none'), 54 | id: ArrowTheme.None, 55 | kind: QuickPickItemKind.Default, 56 | order: 2, 57 | title: i18next.t('none'), 58 | }, 59 | ]; 60 | }; 61 | -------------------------------------------------------------------------------- /src/helpers/constants.ts: -------------------------------------------------------------------------------- 1 | export const ICON_THEME_KEY = 'workbench.iconTheme'; 2 | export const EXTENSION_KEY = 'a-file-icon-vscode'; 3 | export const PUBLISHER_ID = 'atommaterial'; 4 | export const FONT_NAME = `${EXTENSION_KEY}.woff`; 5 | export const EXTENSION_ID = `${PUBLISHER_ID}.${EXTENSION_KEY}`; 6 | export const VERSION_KEY = `${EXTENSION_KEY}.version`; 7 | export const JSON_FILE_NAME = `${EXTENSION_KEY}-icon-theme.json`; 8 | export const JSON_PRODUCT_FILE_NAME = `${EXTENSION_KEY}-product-icon-theme.json`; 9 | 10 | export const DEFAULT_FOLDER_COLOR = '#90a4ae'; 11 | export const DEFAULT_OPACITY = 1; 12 | export const DEFAULT_SATURATION = 1; 13 | 14 | export const FOLDER_PREFIX = 'folder-'; 15 | export const ICON_GENERATOR_PATH = 'iconGenerator/assets/icons'; 16 | export const FILES_SUBPATH = 'files'; 17 | export const FOLDERS_SUBPATH = 'folders'; 18 | export const FOLDERS_OPEN_SUBPATH = 'foldersOpen'; 19 | export const DIST_PATH = 'dist'; 20 | 21 | export const getFilesPath = (prefix: string) => `${prefix}/${FILES_SUBPATH}`; 22 | export const getFoldersPath = (prefix: string) => `${prefix}/${FOLDERS_SUBPATH}`; 23 | export const getFoldersOpenPath = (prefix: string) => `${prefix}/${FOLDERS_OPEN_SUBPATH}`; 24 | 25 | export const ICON_FOLDER_PATH = `./../iconGenerator/assets/icons`; 26 | export const FILES_FOLDER_PATH = getFilesPath(ICON_FOLDER_PATH); 27 | export const FOLDERS_FOLDER_PATH = getFoldersPath(ICON_FOLDER_PATH); 28 | export const FOLDERS_OPEN_FOLDER_PATH = getFoldersOpenPath(ICON_FOLDER_PATH); 29 | 30 | export const RELATIVE_DIST = `./../dist`; 31 | export const RELATIVE_DIST_FILES_FOLDER_PATH = getFilesPath(RELATIVE_DIST); 32 | export const RELATIVE_DIST_FOLDERS_FOLDER_PATH = getFoldersPath(RELATIVE_DIST); 33 | export const RELATIVE_DIST_FOLDERS_OPEN_FOLDER_PATH = getFoldersOpenPath(RELATIVE_DIST); 34 | 35 | export const DARK_FILE_ENDING = '_dark'; 36 | export const HIGH_CONTRAST_FILE_ENDING = '_highContrast'; 37 | export const WILDCARD_PATTERN = new RegExp(/^\*{1,2}\./); 38 | export const OPENED_FOLDER_SUFFIX = '-open'; 39 | -------------------------------------------------------------------------------- /src/helpers/customIcons.ts: -------------------------------------------------------------------------------- 1 | import { dirname, join } from 'node:path'; 2 | 3 | import type { AtomConfig } from 'src/@types/config'; 4 | 5 | export const getCustomIconPaths = (options: AtomConfig) => { 6 | return Object.values(options?.filesAssociations ?? {}) 7 | .filter((v) => v.match(/^[./]+/)) // <- custom dirs have a relative path to the dist folder 8 | .map((v) => dirname(join(__dirname, v))); 9 | }; 10 | -------------------------------------------------------------------------------- /src/helpers/folderThemes.ts: -------------------------------------------------------------------------------- 1 | import i18next from 'i18next'; 2 | import { FolderTheme } from 'src/@types/config'; 3 | import { QuickPickItemKind } from 'vscode'; 4 | 5 | type FolderThemeQuickPickItem = { 6 | icon?: string; 7 | id?: FolderTheme, 8 | order: number; 9 | kind: QuickPickItemKind; 10 | title?: string; 11 | description?: string; 12 | } 13 | 14 | /** 15 | * Returns the folder themes. 16 | * @returns {Record} 17 | */ 18 | export const getFolderThemes = (): FolderThemeQuickPickItem[] => { 19 | return [ 20 | { 21 | description: i18next.t('folderThemes.specificFolders'), 22 | icon: '$(atom-folder-specific)', 23 | id: FolderTheme.Specific, 24 | kind: QuickPickItemKind.Default, 25 | order: 1, 26 | title: i18next.t('specific'), 27 | }, 28 | { 29 | description: i18next.t('folderThemes.classicFolders'), 30 | icon: '$(atom-folder-classic)', 31 | id: FolderTheme.Classic, 32 | kind: QuickPickItemKind.Default, 33 | order: 1, 34 | title: i18next.t('classic'), 35 | }, 36 | { 37 | kind: QuickPickItemKind.Separator, 38 | order: 1, 39 | }, 40 | { 41 | description: i18next.t('folderThemes.noFolders'), 42 | id: FolderTheme.None, 43 | kind: QuickPickItemKind.Default, 44 | order: 2, 45 | title: i18next.t('none'), 46 | }, 47 | ]; 48 | }; 49 | -------------------------------------------------------------------------------- /src/helpers/opacities.ts: -------------------------------------------------------------------------------- 1 | import i18next from 'i18next'; 2 | import { PredefinedOpacity } from 'src/@types/config'; 3 | import { QuickPickItemKind } from 'vscode'; 4 | 5 | type OpacityQuickPickItem = { 6 | description?: string; 7 | icon?: string; 8 | id?: PredefinedOpacity, 9 | kind: QuickPickItemKind; 10 | title?: string; 11 | order: number; 12 | value?: number; 13 | } 14 | 15 | /** 16 | * Returns the opacities 17 | */ 18 | export const getOpacities = (): OpacityQuickPickItem[] => { 19 | return [ 20 | { 21 | description: i18next.t('opacity.transparent'), 22 | id: PredefinedOpacity.Transparent, 23 | kind: QuickPickItemKind.Default, 24 | order: 1, 25 | title: i18next.t('transparent'), 26 | value: 0, 27 | }, 28 | { 29 | description: i18next.t('opacity.semiTransparent'), 30 | id: PredefinedOpacity.SemiTransparent, 31 | kind: QuickPickItemKind.Default, 32 | order: 1, 33 | title: i18next.t('semiTransparent'), 34 | value: 0.7, 35 | }, 36 | { 37 | description: i18next.t('opacity.opaque'), 38 | id: PredefinedOpacity.Opaque, 39 | kind: QuickPickItemKind.Default, 40 | order: 1, 41 | title: i18next.t('opaque'), 42 | value: 1, 43 | }, 44 | { 45 | kind: QuickPickItemKind.Separator, 46 | order: 1, 47 | }, 48 | { 49 | description: i18next.t('customOpacity'), 50 | id: PredefinedOpacity.Custom, 51 | kind: QuickPickItemKind.Default, 52 | order: 2, 53 | title: i18next.t('custom'), 54 | }, 55 | ]; 56 | }; 57 | -------------------------------------------------------------------------------- /src/helpers/saturations.ts: -------------------------------------------------------------------------------- 1 | import i18next from 'i18next'; 2 | import { PredefinedSaturation } from 'src/@types/config'; 3 | import { QuickPickItemKind } from 'vscode'; 4 | 5 | type SaturationQuickPickItem = { 6 | description?: string; 7 | icon?: string; 8 | id?: PredefinedSaturation, 9 | kind: QuickPickItemKind; 10 | title?: string; 11 | order: number; 12 | value?: number; 13 | } 14 | 15 | /** 16 | * Returns the opacities 17 | */ 18 | export const getSaturations = (): SaturationQuickPickItem[] => { 19 | return [ 20 | { 21 | description: i18next.t('saturation.grayscale'), 22 | id: PredefinedSaturation.Grayscale, 23 | kind: QuickPickItemKind.Default, 24 | order: 1, 25 | title: i18next.t('grayscales'), 26 | value: 0, 27 | }, 28 | { 29 | description: i18next.t('saturation.desaturated'), 30 | id: PredefinedSaturation.Desaturated, 31 | kind: QuickPickItemKind.Default, 32 | order: 1, 33 | title: i18next.t('desaturated'), 34 | value: 0.7, 35 | }, 36 | { 37 | description: i18next.t('saturation.vivid'), 38 | id: PredefinedSaturation.Vivid, 39 | kind: QuickPickItemKind.Default, 40 | order: 1, 41 | title: i18next.t('vivid'), 42 | value: 1, 43 | }, 44 | { 45 | kind: QuickPickItemKind.Separator, 46 | order: 1, 47 | }, 48 | { 49 | description: i18next.t('customSaturation'), 50 | icon: '$(atom-folder-classic)', 51 | id: PredefinedSaturation.Custom, 52 | kind: QuickPickItemKind.Default, 53 | order: 2, 54 | title: i18next.t('custom'), 55 | }, 56 | ]; 57 | }; 58 | -------------------------------------------------------------------------------- /src/helpers/utils.ts: -------------------------------------------------------------------------------- 1 | const editDistance = (s1: string, s2: string) => { 2 | s1 = s1.toLowerCase(); 3 | s2 = s2.toLowerCase(); 4 | 5 | const costs = new Array(); 6 | for (let i = 0; i <= s1.length; i++) { 7 | let lastValue = i; 8 | for (let j = 0; j <= s2.length; j++) { 9 | if (i === 0) { 10 | costs[j] = j; 11 | } else { 12 | if (j > 0) { 13 | let newValue = costs[j - 1]; 14 | if (s1.charAt(i - 1) !== s2.charAt(j - 1)) { 15 | newValue = Math.min(Math.min(newValue, lastValue), costs[j]) + 1; 16 | } 17 | costs[j - 1] = lastValue; 18 | lastValue = newValue; 19 | } 20 | } 21 | } 22 | if (i > 0) { 23 | costs[s2.length] = lastValue; 24 | } 25 | } 26 | return costs[s2.length]; 27 | }; 28 | 29 | /** TitleCase all words in a string */ 30 | export const toTitleCase = (string_: string): string => { 31 | return string_.replaceAll(/\w\S*/g, (txt) => txt.charAt(0).toUpperCase() + txt.slice(1).toLowerCase()); 32 | }; 33 | 34 | /** 35 | * Find the enum by value 36 | */ 37 | export const findEnumKey = >(myEnum: T, enumValue: string): keyof T | null => { 38 | const keys = Object.keys(myEnum).filter((x) => myEnum[x] === enumValue); 39 | return keys.length > 0 ? keys[0] : null; 40 | }; 41 | 42 | /** 43 | * Return the levenshtein distance between two strings 44 | * @param {string} s1 45 | * @param {string} s2 46 | * @returns {number} 47 | */ 48 | export const similarity = (s1: string, s2: string) => { 49 | let longer = s1; 50 | let shorter = s2; 51 | if (s1.length < s2.length) { 52 | longer = s2; 53 | shorter = s1; 54 | } 55 | const longerLength = longer.length; 56 | if (longerLength === 0) { 57 | return 1; 58 | } 59 | return (longerLength - editDistance(longer, shorter)) / longerLength; 60 | }; 61 | 62 | export const getHash = (value: string) => { 63 | let hash = 0; 64 | let chr = 0; 65 | 66 | if (value.length === 0) { 67 | return hash; 68 | } 69 | for (let index = 0; index < value.length; index++) { 70 | chr = value.charCodeAt(index); 71 | hash = (hash << 5) - hash + chr; 72 | hash = Math.trunc(hash); // Convert to 32bit integer 73 | } 74 | return hash; 75 | }; 76 | 77 | export const getSVGRootElement = (svg: string) => { 78 | const result = new RegExp(/]*>/).exec(svg); 79 | return result?.[0]; 80 | }; 81 | 82 | export const isValidHexColorCode = (color: string) => { 83 | const hexPattern = new RegExp(/^#([\dA-Fa-f]{6}|[\dA-Fa-f]{3})$/); 84 | return color.length > 0 && hexPattern.test(color); 85 | }; -------------------------------------------------------------------------------- /src/helpers/vscodeUtils.ts: -------------------------------------------------------------------------------- 1 | import { readFileSync } from 'node:fs'; 2 | import { join } from 'node:path'; 3 | import { EXTENSION_ID, JSON_FILE_NAME, JSON_PRODUCT_FILE_NAME } from 'src/helpers/constants'; 4 | import { env, Uri, extensions } from 'vscode'; 5 | 6 | import type { IconConfiguration } from 'src/models/IconConfiguration'; 7 | import type { ProductConfiguration } from 'src/models/ProductConfiguration'; 8 | 9 | /** 10 | * Open a browser to the given url 11 | * @param {string} url 12 | */ 13 | export const openBrowser = (url: string) => { 14 | env.openExternal(Uri.parse(url)); 15 | }; 16 | 17 | /** Return the path of the extension in the file system. */ 18 | export const getExtensionPath = () => { 19 | return extensions.getExtension(EXTENSION_ID)?.extensionPath ?? ''; 20 | }; 21 | 22 | /** 23 | * Get the icon-theme.json file 24 | * @returns {any} 25 | */ 26 | export const getIconThemeFile = (): IconConfiguration => { 27 | const iconJSONPath = join(getExtensionPath(), 'dist', JSON_FILE_NAME); 28 | 29 | try { 30 | const data = readFileSync(iconJSONPath, 'utf8'); 31 | return JSON.parse(data); 32 | } 33 | catch (error) { 34 | console.error(error); 35 | throw new Error('Failed to read icon-theme.json file'); 36 | 37 | } 38 | }; 39 | 40 | /** 41 | * Get the product-theme.json file 42 | */ 43 | export const getProductThemeFile = (): ProductConfiguration => { 44 | const iconJSONPath = join(getExtensionPath(), 'dist', JSON_PRODUCT_FILE_NAME); 45 | 46 | try { 47 | const data = readFileSync(iconJSONPath, 'utf8'); 48 | return JSON.parse(data); 49 | } 50 | catch (error) { 51 | console.error(error); 52 | throw new Error('Failed to read product-theme.json file'); 53 | } 54 | }; -------------------------------------------------------------------------------- /src/i18n/i18next.ts: -------------------------------------------------------------------------------- 1 | import i18next from 'i18next'; 2 | import { env } from 'vscode'; 3 | 4 | import type { EnvLanguage } from 'src/@types/languages'; 5 | 6 | /** 7 | * Gets the current vs code language 8 | */ 9 | const getCurrentLanguage = () => env.language as EnvLanguage; 10 | 11 | /** 12 | * Initialize the translations 13 | */ 14 | export const initI18next = async () => { 15 | await i18next 16 | .init({ 17 | debug: true, 18 | fallbackLng: 'en', 19 | interpolation: { 20 | escapeValue: false, 21 | }, 22 | keySeparator: '.', 23 | lng: getCurrentLanguage(), 24 | ns: ['translation'], 25 | nsSeparator: false, 26 | resources: { 27 | // Cannot find a way to use dynamic import with module: commonjs, so fuck it and lets load them all 28 | de: { translation: await import('./locales/de.json') }, 29 | en: { translation: await import('./locales/en.json') }, 30 | es: { translation: await import('./locales/es.json') }, 31 | fr: { translation: await import('./locales/fr.json') }, 32 | ja: { translation: await import('./locales/ja.json') }, 33 | nl: { translation: await import('./locales/nl.json') }, 34 | pl: { translation: await import('./locales/pl.json') }, 35 | 'pt-br': { translation: await import('./locales/pt-br.json') }, 36 | 'pt-pt': { translation: await import('./locales/pt-pt.json') }, 37 | ru: { translation: await import('./locales/ru.json') }, 38 | uk: { translation: await import('./locales/uk.json') }, 39 | 'zh-cn': { translation: await import('./locales/zh-cn.json') }, 40 | 'zh-tw': { translation: await import('./locales/zh-tw.json') }, 41 | }, 42 | returnNull: false, 43 | }); 44 | }; 45 | -------------------------------------------------------------------------------- /src/i18n/locales/de.json: -------------------------------------------------------------------------------- 1 | { 2 | "activate": "Aktivieren", 3 | "activated": "Atom Material Icons ist jetzt aktiviert.", 4 | "arrowThemes": { 5 | "arrow": "Pfeilsymbole", 6 | "material": "Materialsymbole", 7 | "none": "Keine Symbole", 8 | "pickTheme": "Wählen Sie den Stil der Pfeile", 9 | "plusMinus": "Plus-Minus Symbole", 10 | "triangle": "Dreieck-Symbole" 11 | }, 12 | "arrows": "Pfeile", 13 | "classic": "Klassisch", 14 | "confirmReload": "VS Code muss neu gestartet werden, um die Änderungen an den Icons zu aktivieren.", 15 | "custom": "Benutzerdefinierte", 16 | "customOpacity": "Geben Sie einen benutzerdefinierten Deckkraftwert ein", 17 | "customSaturation": "Geben Sie einen benutzerdefinierten Sättigungswert ein", 18 | "desaturated": "Entsättigt", 19 | "explorerArrows": { 20 | "disable": "Explorer Pfeile ausblenden", 21 | "enable": "Explorer Pfeile anzeigen", 22 | "toggle": "Pfeile im Explorer anpassen" 23 | }, 24 | "folderThemes": { 25 | "classicFolders": "Klassische Ordner Icons auswählen", 26 | "noFolders": "Keine Ordner Icons", 27 | "specificFolders": "Spezifische Ordner Icons auswählen" 28 | }, 29 | "folders": { 30 | "color": "Wähle eine Ordner Farbe", 31 | "disabled": "Keine Ordner Icons", 32 | "hexCode": "Gebe einen HEX Farbcode ein", 33 | "theme": { 34 | "description": "Wählen Sie das Ordnerthema '{{name}}' ({{color}})" 35 | }, 36 | "toggleIcons": "Wähle ein Ordner Design", 37 | "wrongHexCode": "Ungültiger HEX Farbcode" 38 | }, 39 | "grayscale": { 40 | "disable": "Deaktiviert graustufige Icons", 41 | "enable": "Aktiviert graustufige Icons", 42 | "toggle": "Schaltet graustufige Icons um" 43 | }, 44 | "grayscales": "Graustufe", 45 | "howToActivate": "Wie Icons aktivieren?", 46 | "iconPacks": { 47 | "description": "Das '{{name}}' Icon Pack auswählen", 48 | "disabled": "Icon Packs deaktivieren", 49 | "selectPack": "Icon Pack auswählen" 50 | }, 51 | "material": "Material", 52 | "neverShowAgain": "Nicht mehr zeigen", 53 | "none": "Keine", 54 | "opacity": { 55 | "inputPlaceholder": "Wert der Deckkraft (zwischen 0 und 1)", 56 | "opaque": "Symbole undurchsichtig machen", 57 | "semiTransparent": "Symbole halbtransparent machen", 58 | "transparent": "Symbole transparent machen", 59 | "wrongValue": "Der Wert muss zwischen 0 und 1 liegen!" 60 | }, 61 | "opaque": "Opak", 62 | "outdatedVersion": "VS Code muss aktualisiert werden, um diesen Befehl auszuführen.", 63 | "plusMinus": "Plus-Minus", 64 | "readChangelog": "Änderungsprotokoll lesen", 65 | "reload": "Neu starten", 66 | "saturation": { 67 | "desaturated": "Icons entsättigt machen (ca. 70% Sättigung)", 68 | "grayscale": "Symbole Graustufen (0% Sättigung)", 69 | "inputPlaceholder": "Wert der Sättigung (zwischen 0 und 1)", 70 | "vivid": "Symbole lebendig machen (100% Sättigung)", 71 | "wrongValue": "Der Wert muss zwischen 0 und 1 liegen!" 72 | }, 73 | "selectOpacity": "Wählen Sie einen Wert für die Deckkraft aus", 74 | "selectSaturation": "Wählen Sie eine Sättigungsoption aus", 75 | "semiTransparent": "Halbtransparente", 76 | "specific": "Spezifische", 77 | "themeInstalled": "Atom Material Icons wurde installiert.", 78 | "themeUpdated": "Das Atom Material Icons wurde aktualisiert.", 79 | "toggleSwitch": { 80 | "off": "AUS", 81 | "on": "EIN" 82 | }, 83 | "transparent": "Transparent", 84 | "triangle": "Dreiecke", 85 | "updateVSCode": "VS Code aktualisieren", 86 | "vivid": "Lebendigen Farben" 87 | } 88 | -------------------------------------------------------------------------------- /src/i18n/locales/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "activate": "Activate", 3 | "activated": "Atom Material Icons is active.", 4 | "arrowThemes": { 5 | "arrow": "Arrow Icons", 6 | "material": "Material Icons", 7 | "none": "No Arrows", 8 | "pickTheme": "Select the style of arrows", 9 | "plusMinus": "Plus-Minus Icons", 10 | "triangle": "Triangle Icons" 11 | }, 12 | "arrows": "Arrows", 13 | "classic": "Classic", 14 | "confirmReload": "You have to restart VS Code to activate the changes to the icons.", 15 | "custom": "Custom", 16 | "customOpacity": "Enter a custom opacity value", 17 | "customSaturation": "Enter a custom saturation value", 18 | "desaturated": "Desaturated", 19 | "explorerArrows": { 20 | "disable": "Hide folder arrows", 21 | "enable": "Show folder arrows", 22 | "toggle": "Toggle folder arrows" 23 | }, 24 | "folderThemes": { 25 | "classicFolders": "Select classic folders icons", 26 | "noFolders": "No folder icons", 27 | "specificFolders": "Select specific folder icons" 28 | }, 29 | "folders": { 30 | "color": "Choose a folder color", 31 | "disabled": "No folder icons", 32 | "hexCode": "Insert a HEX color code", 33 | "theme": { 34 | "description": "Select the '{{name}}' folder theme ({{color}})" 35 | }, 36 | "toggleIcons": "Pick a folder theme", 37 | "wrongHexCode": "Invalid HEX color code!" 38 | }, 39 | "grayscale": { 40 | "disable": "Disable monochromatic icons", 41 | "enable": "Enable monochromatic icons", 42 | "toggle": "Toggle monochromatic icons" 43 | }, 44 | "grayscales": "Grayscale", 45 | "howToActivate": "How to activate icons", 46 | "iconPacks": { 47 | "description": "Select the '{{name}}' icon pack", 48 | "disabled": "Disable icon packs", 49 | "selectPack": "Select an icon pack" 50 | }, 51 | "material": "Material", 52 | "neverShowAgain": "Never show again", 53 | "none": "None", 54 | "opacity": { 55 | "inputPlaceholder": "Opacity value (between 0 and 1)", 56 | "opaque": "Make icons opaque", 57 | "semiTransparent": "Make icons semi-transparent", 58 | "transparent": "Make icons transparent", 59 | "wrongValue": "The value must be between 0 and 1!" 60 | }, 61 | "opaque": "Opaque", 62 | "outdatedVersion": "You have to update VS Code to use this command.", 63 | "plusMinus": "Plus-Minus", 64 | "readChangelog": "Read changelog", 65 | "reload": "Restart", 66 | "saturation": { 67 | "desaturated": "Make icons desaturated (about 70% saturation)", 68 | "grayscale": "Make icons grayscale (0% saturation)", 69 | "inputPlaceholder": "Saturation value (between 0 and 1)", 70 | "vivid": "Make icons vivid (100% saturation)", 71 | "wrongValue": "The value must be between 0 and 1!" 72 | }, 73 | "selectOpacity": "Select an opacity value", 74 | "selectSaturation": "Select a saturation option", 75 | "semiTransparent": "Semi-Transparent", 76 | "specific": "Specific", 77 | "themeInstalled": "Atom Material Icons has been installed.", 78 | "themeUpdated": "Atom Material Icons has been updated.", 79 | "toggleSwitch": { 80 | "off": "OFF", 81 | "on": "ON" 82 | }, 83 | "transparent": "Transparent", 84 | "triangle": "Triangles", 85 | "updateVSCode": "Update VS Code", 86 | "vivid": "Vivid Colors" 87 | } 88 | -------------------------------------------------------------------------------- /src/i18n/locales/ja.json: -------------------------------------------------------------------------------- 1 | { 2 | "activate": "有効化", 3 | "activated": "Atom Material Icons は有効です。", 4 | "arrowThemes": { 5 | "arrow": "矢印アイコン", 6 | "material": "マテリアルアイコン", 7 | "none": "アイコンなし", 8 | "pickTheme": "矢印のスタイルを選択する", 9 | "plusMinus": "プラス・マイナスアイコン", 10 | "triangle": "三角形アイコン" 11 | }, 12 | "arrows": "矢印", 13 | "classic": "クラシック", 14 | "confirmReload": "アイコンの変更を反映するには VS Code を再起動する必要があります。", 15 | "custom": "カスタム", 16 | "customOpacity": "カスタムの不透明度値を入力する", 17 | "customSaturation": "カスタム彩度値を入力する", 18 | "desaturated": "彩度", 19 | "explorerArrows": { 20 | "disable": "フォルダーの矢印を隠す", 21 | "enable": "フォルダーの矢印を表示する", 22 | "toggle": "フォルダーの矢印を切り替える" 23 | }, 24 | "folderThemes": { 25 | "classicFolders": "クラシックフォルダーアイコンを選択する", 26 | "noFolders": "フォルダーアイコンなし", 27 | "specificFolders": "特定のフォルダーアイコンを選択する" 28 | }, 29 | "folders": { 30 | "color": "フォルダーの色を切り替える", 31 | "disabled": "フォルダーアイコンを表示しない", 32 | "hexCode": "HEX カラーコードを入力する", 33 | "theme": { 34 | "description": "フォルダテーマ 「{{name}}」({{color}})を選択する" 35 | }, 36 | "toggleIcons": "フォルダーアイコンを切り替える", 37 | "wrongHexCode": "無効な HEX カラーコードです!" 38 | }, 39 | "grayscale": { 40 | "disable": "グレースケールアイコンを無効にする", 41 | "enable": "グレースケールアイコンを有効にする", 42 | "toggle": "グレースケールアイコンを切り替える" 43 | }, 44 | "grayscales": "グレースケール", 45 | "howToActivate": "アイコンの有効化方法", 46 | "iconPacks": { 47 | "description": "アイコンパック 「{{name}}」 を選択する", 48 | "disabled": "アイコンパックを無効化する", 49 | "selectPack": "アイコンパックを選択する" 50 | }, 51 | "material": "マテリアル", 52 | "neverShowAgain": "今後は表示しない", 53 | "none": "なし", 54 | "opacity": { 55 | "inputPlaceholder": "不透明度(0〜1)", 56 | "opaque": "アイコンを不透明にする", 57 | "semiTransparent": "アイコンを半透明にする", 58 | "transparent": "アイコンを透明にする", 59 | "wrongValue": "値は0から1の間にしてください!" 60 | }, 61 | "opaque": "不透明", 62 | "outdatedVersion": "このコマンドを使用するには VS Code を更新する必要があります。", 63 | "plusMinus": "プラス・マイナス", 64 | "readChangelog": "変更履歴を読む", 65 | "reload": "再起動", 66 | "saturation": { 67 | "desaturated": "アイコンの彩度を下げます(彩度約70%)", 68 | "grayscale": "アイコンをグレースケールにする(彩度0%)", 69 | "inputPlaceholder": "彩度(0〜1)", 70 | "vivid": "アイコンを鮮やかにする(彩度100%)", 71 | "wrongValue": "値は0から1の間にしてください!" 72 | }, 73 | "selectOpacity": "不透明度の値を選択する", 74 | "selectSaturation": "彩度オプションを選択する", 75 | "semiTransparent": "半透明", 76 | "specific": "特定", 77 | "themeInstalled": "Atom Material Icons がインストールされました。", 78 | "themeUpdated": "Atom Material Icons が更新されました。", 79 | "toggleSwitch": { 80 | "off": "OFF", 81 | "on": "ON" 82 | }, 83 | "transparent": "透明", 84 | "triangle": "三角形", 85 | "updateVSCode": "VS Code を更新", 86 | "vivid": "鮮やかな色" 87 | } 88 | -------------------------------------------------------------------------------- /src/i18n/locales/nl.json: -------------------------------------------------------------------------------- 1 | { 2 | "activate": "Activeer", 3 | "activated": "Atom Material Icons Thema is actief.", 4 | "arrowThemes": { 5 | "arrow": "Pijlpictogrammen", 6 | "material": "Material pictogrammen", 7 | "none": "Geen pictogrammen", 8 | "pickTheme": "Selecteer de stijl van de pijlen", 9 | "plusMinus": "Plus-Minus pictogrammen", 10 | "triangle": "Driehoeken pictogrammen" 11 | }, 12 | "arrows": "Pijlen", 13 | "classic": "Klassiek", 14 | "confirmReload": "Je moet VS Code herstarten om de veranderingen in icons te activeren.", 15 | "custom": "Aangepaste", 16 | "customOpacity": "Voer een aangepaste opaciteitswaarde in", 17 | "customSaturation": "Voer een aangepaste saturatiewaarde in", 18 | "desaturated": "Onverzadigde", 19 | "explorerArrows": { 20 | "disable": "Verberg folderpijlen", 21 | "enable": "Laat folderpijlen zien", 22 | "toggle": "Zet folderpijlen aan of uit" 23 | }, 24 | "folderThemes": { 25 | "classicFolders": "Selecteer klassieke foldericons", 26 | "noFolders": "Geen foldericons", 27 | "specificFolders": "Selecteer bepaalde foldericons" 28 | }, 29 | "folders": { 30 | "color": "Kies een folderkleur", 31 | "disabled": "Geen foldericons", 32 | "hexCode": "Voeg een HEX kleurcode in", 33 | "theme": { 34 | "description": "Selecteer het mapthema '{{name}}' ({{color}})" 35 | }, 36 | "toggleIcons": "Kies een folderthema", 37 | "wrongHexCode": "Ongeldige HEX kleurcode!" 38 | }, 39 | "grayscale": { 40 | "disable": "Zet grijsgetinte icons uit", 41 | "enable": "Zet grijsgetinte icons aan", 42 | "toggle": "Zet grijsgetinte icons aan of uit" 43 | }, 44 | "grayscales": "Grijstinten", 45 | "howToActivate": "Hoe je icons activeert", 46 | "iconPacks": { 47 | "description": "Selecteer het '{{name}}' iconpakket", 48 | "disabled": "Zet iconpaketten uit", 49 | "selectPack": "Selecteer een iconpakket" 50 | }, 51 | "material": "Material", 52 | "neverShowAgain": "Nooit meer laten zien", 53 | "none": "Geen", 54 | "opacity": { 55 | "inputPlaceholder": "Doorzichtbaarheidswaarde (tussen 0 en 1)", 56 | "opaque": "Maak pictogrammen ondoorzichtig", 57 | "semiTransparent": "Maak pictogrammen semi-transparant", 58 | "transparent": "Maak pictogrammen transparant", 59 | "wrongValue": "De waarde moet tussen de 0 en 1 zijn!" 60 | }, 61 | "opaque": "Opaak", 62 | "outdatedVersion": "Je moet VS Code updaten om dit commando te kunnen gebruiken.", 63 | "plusMinus": "Plus-Minus", 64 | "readChangelog": "Lees de changelog", 65 | "reload": "Herstart", 66 | "saturation": { 67 | "desaturated": "Pictogrammen desatureren (ongeveer 70% verzadiging)", 68 | "grayscale": "Pictogrammen grijstinten maken (0% verzadiging)", 69 | "inputPlaceholder": "Saturatiewaarde (tussen 0 en 1)", 70 | "vivid": "Pictogrammen levendig maken (100% verzadiging)", 71 | "wrongValue": "De waarde moet tussen de 0 en 1 zijn!" 72 | }, 73 | "selectOpacity": "Selecteer een opaciteitswaarde", 74 | "selectSaturation": "Selecteer een saturatieoptie", 75 | "semiTransparent": "Semi-Transparante", 76 | "specific": "Specifiek", 77 | "themeInstalled": "Atom Material Icons Thema is geïnstalleerd.", 78 | "themeUpdated": "Atom Material Icons Thema is geüpdated.", 79 | "toggleSwitch": { 80 | "off": "UIT", 81 | "on": "AAN" 82 | }, 83 | "transparent": "Transparant", 84 | "triangle": "Driehoeken", 85 | "updateVSCode": "Update VS Code", 86 | "vivid": "Levendige kleuren" 87 | } 88 | -------------------------------------------------------------------------------- /src/i18n/locales/pl.json: -------------------------------------------------------------------------------- 1 | { 2 | "activate": "Aktywuj", 3 | "activated": "Motyw Atom Material Icons jest aktywny.", 4 | "arrowThemes": { 5 | "arrow": "Ikony strzałek", 6 | "material": "Ikony Material", 7 | "none": "Bez ikon", 8 | "pickTheme": "Wybierz styl strzałek", 9 | "plusMinus": "Ikony Plus-Minus", 10 | "triangle": "Ikony trójkątów" 11 | }, 12 | "arrows": "Strzały", 13 | "classic": "Klasyczne", 14 | "confirmReload": "Musisz zrestartować VS Code, aby uaktywnić zmiany ikon.", 15 | "custom": "Niestandardowy", 16 | "customOpacity": "Wprowadź niestandardową wartość nieprzezroczystości", 17 | "customSaturation": "Wprowadź niestandardową wartość nasycenia", 18 | "desaturated": "Desaturacja", 19 | "explorerArrows": { 20 | "disable": "Schowaj strzałki przy folderach", 21 | "enable": "Pokaż strzałki przy folderach", 22 | "toggle": "Przełącz strzałki przy folderach" 23 | }, 24 | "folderThemes": { 25 | "classicFolders": "Wybierz klasyczne ikony folderów", 26 | "noFolders": "Brak ikon folderów", 27 | "specificFolders": "Wybierz ikony folderów" 28 | }, 29 | "folders": { 30 | "color": "Wybierz kolor folderów", 31 | "disabled": "Brak ikon folderów", 32 | "hexCode": "Podaj kolor w formacie HEX", 33 | "theme": { 34 | "description": "Wybierz motyw folderu '{{name}}' ({{color}})" 35 | }, 36 | "toggleIcons": "Wybierz motyw folderów", 37 | "wrongHexCode": "Nieprawidłowy kolor HEX!" 38 | }, 39 | "grayscale": { 40 | "disable": "Wyłącz czarno-białe ikony", 41 | "enable": "Włącz czarno-białe ikony", 42 | "toggle": "Przełącz czarno-białe ikony" 43 | }, 44 | "grayscales": "Czarno-białe", 45 | "howToActivate": "Jak aktywować ikony", 46 | "iconPacks": { 47 | "description": "Wybierz paczkę ikon '{{name}}'", 48 | "disabled": "Wyłącz paczki ikon", 49 | "selectPack": "Wybierz paczkę ikon" 50 | }, 51 | "material": "Materiał", 52 | "neverShowAgain": "Nigdy więcej nie pokazuj", 53 | "none": "Bez", 54 | "opacity": { 55 | "inputPlaceholder": "Wartość przezroczystości (pomiędzy 0 a 1)", 56 | "opaque": "Ustaw ikony jako nieprzezroczyste", 57 | "semiTransparent": "Uczyń ikony półprzezroczystymi", 58 | "transparent": "Uczyń ikony przezroczystymi", 59 | "wrongValue": "Wartość musi być pomiędzy 0 i 1!" 60 | }, 61 | "opaque": "Nieprzezroczysty", 62 | "outdatedVersion": "Musisz zaktualizować VS Code, aby użyć tej komendy.", 63 | "plusMinus": "Plus-Minus", 64 | "readChangelog": "Przeczytaj listę zmian", 65 | "reload": "Restartuj", 66 | "saturation": { 67 | "desaturated": "Uczyń ikony desaturacji (około 70% nasycenia)", 68 | "grayscale": "Ustaw ikony w skali szarości (nasycenie 0%)", 69 | "inputPlaceholder": "Wartość nasycenia (pomiędzy 0 a 1)", 70 | "vivid": "Uczyń ikony żywymi (nasycenie 100%)", 71 | "wrongValue": "Wartość musi być pomiędzy 0 i 1!" 72 | }, 73 | "selectOpacity": "Wybierz wartość nieprzezroczystości", 74 | "selectSaturation": "Wybierz opcję nasycenia", 75 | "semiTransparent": "Półprzezroczysty", 76 | "specific": "Określony", 77 | "themeInstalled": "Motyw Atom Material Icons został zainstalowany.", 78 | "themeUpdated": "Motyw Atom Material Icons został zaktualizowany.", 79 | "toggleSwitch": { 80 | "off": "WYŁĄCZONE", 81 | "on": "WŁĄCZONE" 82 | }, 83 | "transparent": "Przezroczysty", 84 | "triangle": "Trójkąty", 85 | "updateVSCode": "Zaktualizuj VS Code", 86 | "vivid": "Żywe kolory" 87 | } 88 | -------------------------------------------------------------------------------- /src/i18n/locales/ru.json: -------------------------------------------------------------------------------- 1 | { 2 | "activate": "Активировать", 3 | "activated": "Atom Material Icons активен.", 4 | "arrowThemes": { 5 | "arrow": "Иконки со стрелками", 6 | "material": "Материаль иконки", 7 | "none": "Ни иконы", 8 | "pickTheme": "Выберите стиля использования стрелки", 9 | "plusMinus": "Иконки Плюс-Минус", 10 | "triangle": "Иконки треугольников" 11 | }, 12 | "arrows": "Стрелы", 13 | "classic": "Классический", 14 | "confirmReload": "Нужно перезапустить VS Code для активации иконок.", 15 | "custom": "Пользовательский", 16 | "customOpacity": "Введите пользовательское значение прозрачности", 17 | "customSaturation": "Введите пользовательское значение насыщения", 18 | "desaturated": "Ненасыщенный", 19 | "explorerArrows": { 20 | "disable": "Скрыть стрелки у папок", 21 | "enable": "Показать стрелки у папок", 22 | "toggle": "Показать/скрыть стрелки у папок" 23 | }, 24 | "folderThemes": { 25 | "classicFolders": "Выберите классические значки папок", 26 | "noFolders": "Нет значков папок", 27 | "specificFolders": "Выберите конкретные значки папок" 28 | }, 29 | "folders": { 30 | "color": "Выбрать цвет папки", 31 | "disabled": "Нет иконок для папки", 32 | "hexCode": "Вставить HEX-код цвета", 33 | "theme": { 34 | "description": "Выберите тему папки '{{name}}' ({{color}})" 35 | }, 36 | "toggleIcons": "Выбрать тему папки", 37 | "wrongHexCode": "Неверный HEX-код цвета!" 38 | }, 39 | "grayscale": { 40 | "disable": "Отключить значки в оттенках серого", 41 | "enable": "Включить значки в оттенках серого", 42 | "toggle": "Переключение серых значков" 43 | }, 44 | "grayscales": "Оттенках серого", 45 | "howToActivate": "Как активировать иконки", 46 | "iconPacks": { 47 | "description": "Выбрать '{{name}}' набор иконок", 48 | "disabled": "Выключить набор иконок", 49 | "selectPack": "Выбрать набор иконок" 50 | }, 51 | "material": "Материаль", 52 | "neverShowAgain": "Никогда не показывать снова", 53 | "none": "без", 54 | "opacity": { 55 | "inputPlaceholder": "Значение непрозрачности (между 0 и 1)", 56 | "opaque": "Сделать иконки непрозрачными", 57 | "semiTransparent": "Сделать иконки полупрозрачными", 58 | "transparent": "Сделать иконки прозрачными", 59 | "wrongValue": "Значение должно быть между 0 и 1!" 60 | }, 61 | "opaque": "Непрозрачный", 62 | "outdatedVersion": "Нужно обновить VS Code, чтобы использовать эту команду.", 63 | "plusMinus": "Плюс-Минус", 64 | "readChangelog": "Смотреть список изменений", 65 | "reload": "Перезагрузить", 66 | "saturation": { 67 | "desaturated": "Сделать иконки десатурированными (около 70% насыщения)", 68 | "grayscale": "Сделать иконки серого (0% насыщения)", 69 | "inputPlaceholder": "Значение насыщенности (между 0 и 1)", 70 | "vivid": "Сделать иконки яркими (100% насыщенность)", 71 | "wrongValue": "Значение должно быть между 0 и 1!" 72 | }, 73 | "selectOpacity": "Выбрать значение непрозрачности", 74 | "selectSaturation": "Выберите параметр насыщения", 75 | "semiTransparent": "Полупрозрачный", 76 | "specific": "Спесифический", 77 | "themeInstalled": "Atom Material Icons был установлен.", 78 | "themeUpdated": "Atom Material Icons был обновлен.", 79 | "toggleSwitch": { 80 | "off": "Выключить", 81 | "on": "Включить" 82 | }, 83 | "transparent": "Прозрачный", 84 | "triangle": "Треугольники", 85 | "updateVSCode": "Обновить VS Code", 86 | "vivid": "Яркие цвета" 87 | } 88 | -------------------------------------------------------------------------------- /src/i18n/locales/uk.json: -------------------------------------------------------------------------------- 1 | { 2 | "activate": "Активувати", 3 | "activated": "Atom Material Icons активований.", 4 | "arrowThemes": { 5 | "arrow": "Піктограми стрілок", 6 | "material": "Піктограми Матеріал", 7 | "none": "Немає піктограм", 8 | "pickTheme": "Виберіть стиль стрілок", 9 | "plusMinus": "Піктограми Плюс-Мінус", 10 | "triangle": "Піктограми трикутника" 11 | }, 12 | "arrows": "Стріли", 13 | "classic": "Класичний", 14 | "confirmReload": "Необхідно перезавантажити VS Code, щоб активувати зміни значків.", 15 | "custom": "Персоналізовано", 16 | "customOpacity": "Введіть нетипове значення непрозорості", 17 | "customSaturation": "Введіть нетипове значення насиченості", 18 | "desaturated": "Десатураны", 19 | "explorerArrows": { 20 | "disable": "Приховати стрілки папки", 21 | "enable": "Показати стрілки папки", 22 | "toggle": "Стрілки для перемикання папок" 23 | }, 24 | "folderThemes": { 25 | "classicFolders": "Виберіть класичні піктограми тек", 26 | "noFolders": "без піктограм тек", 27 | "specificFolders": "Виберіть конкретне піктограми тек" 28 | }, 29 | "folders": { 30 | "color": "Виберіть колір папки", 31 | "disabled": "Немає піктограм папок", 32 | "hexCode": "Введіть HEX колірний код", 33 | "theme": { 34 | "description": "Виберіть тему теки '{{name}}' ({{color}})" 35 | }, 36 | "toggleIcons": "Переключити теку icons", 37 | "wrongHexCode": "Недійсний HEX колірний код!" 38 | }, 39 | "grayscale": { 40 | "disable": "Вимкнути значки у відтінках сірого", 41 | "enable": "Увімкнути значки у відтінках сірого", 42 | "toggle": "Перемикання значків у відтінках сірого" 43 | }, 44 | "grayscales": "Градації сірого", 45 | "howToActivate": "Як активувати значки", 46 | "iconPacks": { 47 | "description": "Виберіть набір значків '{{name}}'", 48 | "disabled": "Вимкнути пакети значків", 49 | "selectPack": "Виберіть набір іконок" 50 | }, 51 | "material": "Матеріал", 52 | "neverShowAgain": "Ніколи не показувати знову", 53 | "none": "без", 54 | "opacity": { 55 | "inputPlaceholder": "Значення непрозорості (від 0 до 1)", 56 | "opaque": "Зробити ікони непрозорими", 57 | "semiTransparent": "Зробити ікони напівпрозорими", 58 | "transparent": "Зробити ікони прозорими", 59 | "wrongValue": "Значення має бути від 0 до 1!" 60 | }, 61 | "opaque": "Непрозорий", 62 | "outdatedVersion": "Ви повинні оновити VS Code, щоб використовувати цю команду.", 63 | "plusMinus": "Плюс-Мінус", 64 | "readChangelog": "Прочитати зміни", 65 | "reload": "Перезавантажити", 66 | "saturation": { 67 | "desaturated": "Зробити піктограми насиченними (приблизно 70% насиченості)", 68 | "grayscale": "Зробити піктограми градації сірого (0% насиченості)", 69 | "inputPlaceholder": "Значення насичення (від 0 до 1)", 70 | "vivid": "Зробити піктограми яскравими (насиченість 100%)", 71 | "wrongValue": "Значення має бути від 0 до 1!" 72 | }, 73 | "selectOpacity": "Виберіть значення непрозорості", 74 | "selectSaturation": "Виберіть параметр насиченості", 75 | "semiTransparent": "Напівпрозорий", 76 | "specific": "Конкретне", 77 | "themeInstalled": "Atom Material Icons був встановлений.", 78 | "themeUpdated": "Atom Material Icons був оновлений.", 79 | "toggleSwitch": { 80 | "off": "Відключити", 81 | "on": "Включити" 82 | }, 83 | "transparent": "Прозорий", 84 | "triangle": "Трикутники", 85 | "updateVSCode": "Оновити VS Code", 86 | "vivid": "Яскраві кольори" 87 | } 88 | -------------------------------------------------------------------------------- /src/i18n/locales/zh-cn.json: -------------------------------------------------------------------------------- 1 | { 2 | "activate": "激活", 3 | "activated": "Atom Material Icons 主题图标已激活", 4 | "arrowThemes": { 5 | "arrow": "箭头图标", 6 | "material": "材料图标", 7 | "none": "无图标", 8 | "pickTheme": "选择箭头的样式", 9 | "plusMinus": "正负图标", 10 | "triangle": "三角形图标" 11 | }, 12 | "arrows": "箭头", 13 | "classic": "经典", 14 | "confirmReload": "你必须重启VS Code来应用对图标的更改", 15 | "custom": "自定义", 16 | "customOpacity": "输入自定义不透明度值", 17 | "customSaturation": "输入自定义饱和度值", 18 | "desaturated": "不饱和", 19 | "explorerArrows": { 20 | "disable": "隐藏文件夹箭头", 21 | "enable": "显示文件夹箭头", 22 | "toggle": "切换文件夹箭头" 23 | }, 24 | "folderThemes": { 25 | "classicFolders": "选择经典文件夹图标", 26 | "noFolders": "没有文件夹图标", 27 | "specificFolders": "选择特定文件夹图标" 28 | }, 29 | "folders": { 30 | "color": "选择一个文件夹颜色", 31 | "disabled": "不显示文件夹图标", 32 | "hexCode": "插入HEX颜色代码", 33 | "theme": { 34 | "description": "选择'{{name}}'资料夹主题 ({{color}})" 35 | }, 36 | "toggleIcons": "切换文件夹图标的显示", 37 | "wrongHexCode": "无效的HEX颜色代码!" 38 | }, 39 | "grayscale": { 40 | "disable": "禁用灰度图标", 41 | "enable": "启用灰度图标", 42 | "toggle": "切换灰度图标" 43 | }, 44 | "grayscales": "灰度", 45 | "howToActivate": "如何激活图标", 46 | "iconPacks": { 47 | "description": "选择%0符号", 48 | "disabled": "禁用图标包", 49 | "selectPack": "选择图标包" 50 | }, 51 | "material": "材料", 52 | "neverShowAgain": "不再显示", 53 | "none": "没有", 54 | "opacity": { 55 | "inputPlaceholder": "不透明度值(0和1之间)", 56 | "opaque": "使图标不透明", 57 | "semiTransparent": "使图标半透明", 58 | "transparent": "使图标透明", 59 | "wrongValue": "该值必须介于0和1之间!" 60 | }, 61 | "opaque": "不透明", 62 | "outdatedVersion": "你必须更新VS Code才能使用该命令", 63 | "plusMinus": "图标", 64 | "readChangelog": "阅读更新日志", 65 | "reload": "重启", 66 | "saturation": { 67 | "desaturated": "使图标不饱和(约70%饱和度)", 68 | "grayscale": "使图标呈灰度(0%饱和度)", 69 | "inputPlaceholder": "饱和度值(在0和1之间)。", 70 | "vivid": "使图标生动(100%饱和度)", 71 | "wrongValue": "该值必须在0和1之间!" 72 | }, 73 | "selectOpacity": "选择不透明度值", 74 | "selectSaturation": "选择饱和选项", 75 | "semiTransparent": "半透明", 76 | "specific": "特定", 77 | "themeInstalled": "Atom Material Icons 主题图标已安装", 78 | "themeUpdated": "Atom Material Icons 主题图标已更新", 79 | "toggleSwitch": { 80 | "off": "OFF", 81 | "on": "ON" 82 | }, 83 | "transparent": "透明", 84 | "triangle": "三角形", 85 | "updateVSCode": "更新VS Code", 86 | "vivid": "生动的色彩" 87 | } 88 | -------------------------------------------------------------------------------- /src/i18n/locales/zh-tw.json: -------------------------------------------------------------------------------- 1 | { 2 | "activate": "激活", 3 | "activated": "Atom Material Icons 主題圖標已激活", 4 | "arrowThemes": { 5 | "arrow": "箭頭圖示", 6 | "material": "材質圖示", 7 | "none": "無圖示", 8 | "pickTheme": "選擇箭頭的樣式", 9 | "plusMinus": "加減號圖示", 10 | "triangle": "三角形圖示" 11 | }, 12 | "arrows": "箭頭", 13 | "classic": "典文", 14 | "confirmReload": "你必須重啟VS Code來應用對圖標的更改", 15 | "custom": "自定義", 16 | "customOpacity": "輸入自定義不透明度值", 17 | "customSaturation": "輸入自定義飽和度值", 18 | "desaturated": "不飽和", 19 | "explorerArrows": { 20 | "disable": "隱藏文件夾箭頭", 21 | "enable": "顯示文件夾箭頭", 22 | "toggle": "切換文件夾箭頭" 23 | }, 24 | "folderThemes": { 25 | "classicFolders": "選擇經典文件夾圖標", 26 | "noFolders": "沒有文件夾圖標", 27 | "specificFolders": "選擇特定文件夾圖標" 28 | }, 29 | "folders": { 30 | "color": "選擇一個文件夾顏色", 31 | "disabled": "不顯示文件夾圖標", 32 | "hexCode": "插入HEX顏色代碼", 33 | "theme": { 34 | "description": "選擇文件夾主題'{{name}}' ({{color}})" 35 | }, 36 | "toggleIcons": "切換文件夾圖標的顯示", 37 | "wrongHexCode": "無效的HEX顏色代碼!" 38 | }, 39 | "grayscale": { 40 | "disable": "禁用灰度圖標", 41 | "enable": "啟用灰度圖標", 42 | "toggle": "切換灰度圖標" 43 | }, 44 | "grayscales": "灰度", 45 | "howToActivate": "如何激活圖標", 46 | "iconPacks": { 47 | "description": "選擇%0符號", 48 | "disabled": "禁用圖標包", 49 | "selectPack": "選擇圖標包" 50 | }, 51 | "material": "材料", 52 | "neverShowAgain": "不再顯示", 53 | "none": "沒有", 54 | "opacity": { 55 | "inputPlaceholder": "不透明度值(0和1之間)", 56 | "opaque": "使圖示不透明", 57 | "semiTransparent": "使圖示半透明", 58 | "transparent": "使圖示透明", 59 | "wrongValue": "該值必須介於0和1之間!" 60 | }, 61 | "opaque": "不透明", 62 | "outdatedVersion": "你必須更新VS Code才能使用該命令", 63 | "plusMinus": "加減號", 64 | "readChangelog": "閲讀更新日志", 65 | "reload": "重啟", 66 | "saturation": { 67 | "desaturated": "使圖示不飽和(約70%飽和度)", 68 | "grayscale": "使圖示灰度(0% 飽與度)", 69 | "inputPlaceholder": "飽和度值(在0和1之間)。", 70 | "vivid": "使圖示生動(100% 飽和度)", 71 | "wrongValue": "該值必須在0和1之間!" 72 | }, 73 | "selectOpacity": "選擇不透明度值", 74 | "selectSaturation": "選擇飽和度選項", 75 | "semiTransparent": "半透明", 76 | "specific": "特定", 77 | "themeInstalled": "Atom Material Icons 主題圖標已安裝", 78 | "themeUpdated": "Atom Material Icons 主題圖標已更新", 79 | "toggleSwitch": { 80 | "off": "OFF", 81 | "on": "ON" 82 | }, 83 | "transparent": "透明", 84 | "triangle": "三角形", 85 | "updateVSCode": "更新VS Code", 86 | "vivid": "鮮豔的色彩" 87 | } 88 | -------------------------------------------------------------------------------- /src/icons/configUtils.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Get the default config 3 | * @returns {AtomConfig} 4 | * @private 5 | */ 6 | import { FolderTheme, IconPack, ArrowTheme } from 'src/@types/config'; 7 | import { DEFAULT_FOLDER_COLOR, DEFAULT_OPACITY, DEFAULT_SATURATION } from 'src/helpers/constants'; 8 | import { getHash } from 'src/helpers/utils'; 9 | 10 | import type { AtomConfig } from 'src/@types/config'; 11 | 12 | /** 13 | * Return the default config 14 | * @returns {AtomConfig} 15 | */ 16 | export const getDefaultConfig = (): AtomConfig => { 17 | return { 18 | activeIconPacks: [IconPack.Rails, IconPack.Angular, IconPack.React, IconPack.Phalcon], 19 | arrowTheme: ArrowTheme.Material, 20 | folderColor: DEFAULT_FOLDER_COLOR, 21 | folderTheme: FolderTheme.Specific, 22 | opacity: DEFAULT_OPACITY, 23 | saturation: DEFAULT_SATURATION, 24 | showReloadMessage: true, 25 | showUpdateMessage: true, 26 | showWelcomeMessage: true, 27 | }; 28 | }; 29 | 30 | /** 31 | * Generates a hash of the current config 32 | */ 33 | export const getFileConfigHash = (config: AtomConfig): string => { 34 | const defaults = getDefaultConfig(); 35 | let fileConfigString = ''; 36 | 37 | if ( 38 | config.saturation !== defaults.saturation || 39 | config.opacity !== defaults.opacity || 40 | config.folderColor !== defaults.folderColor 41 | ) { 42 | fileConfigString += `~${getHash(JSON.stringify(config))}`; 43 | } 44 | return fileConfigString; 45 | }; 46 | -------------------------------------------------------------------------------- /src/icons/files/archive.ts: -------------------------------------------------------------------------------- 1 | export const archive = [ 2 | { 3 | fileExtensions: [ 4 | '7z', 5 | '7zip', 6 | 'bz2', 7 | 'ear', 8 | 'egg', 9 | 'gz', 10 | 'gzip', 11 | ], 12 | name: 'archive', 13 | }, 14 | { 15 | fileExtensions: [ 16 | 'hak', 17 | 'hqx', 18 | 'lz', 19 | 'lzma', 20 | 'lzo', 21 | 'pzip', 22 | 'rar', 23 | 'saz', 24 | 'sit', 25 | ], 26 | name: 'archive2', 27 | }, 28 | { 29 | fileExtensions: [ 30 | 'tar', 31 | 'tgz', 32 | 'tlz', 33 | 'whl', 34 | 'xar', 35 | 'xz', 36 | 'z', 37 | 'zip', 38 | 'zipx', 39 | ], 40 | name: 'archive3', 41 | }, 42 | ]; 43 | -------------------------------------------------------------------------------- /src/icons/files/audio.ts: -------------------------------------------------------------------------------- 1 | export const audio = [ 2 | { 3 | fileExtensions: [ 4 | 'aac', 5 | 'ac3', 6 | 'aiff', 7 | 'amr', 8 | 'au', 9 | 'cda', 10 | 'f4a', 11 | 'f4b', 12 | 'f4p', 13 | 'flac', 14 | ], 15 | name: 'audio', 16 | }, 17 | { 18 | fileExtensions: [ 19 | 'it', 20 | 'm3u', 21 | 'm4a', 22 | 'm4b', 23 | 'm4p', 24 | 'mid', 25 | 'midi', 26 | 'mka', 27 | 'mp3', 28 | 'mpc', 29 | ], 30 | name: 'audio2', 31 | }, 32 | { 33 | fileExtensions: [ 34 | 'oga', 35 | 'ogg', 36 | 'opus', 37 | 'ra', 38 | 'rmi', 39 | 's3m', 40 | 'snd', 41 | 'sndh', 42 | 'son', 43 | 'vox', 44 | 'wav', 45 | 'wma', 46 | ], 47 | name: 'audio3', 48 | }, 49 | ]; 50 | -------------------------------------------------------------------------------- /src/icons/files/binaries.ts: -------------------------------------------------------------------------------- 1 | export const binaries = [ 2 | { 3 | fileExtensions: [ 4 | 'axf', 5 | 'bin', 6 | 'bsdiff', 7 | 'dat', 8 | 'db-journal', 9 | 'elf', 10 | ], 11 | name: 'binary', 12 | } 13 | , 14 | { 15 | fileExtensions: [ 16 | 'gco', 17 | 'la', 18 | 'objdump', 19 | 'pak', 20 | 'prx', 21 | 'rnd', 22 | 'swp', 23 | ], 24 | name: 'binariesother', 25 | }, 26 | ]; 27 | -------------------------------------------------------------------------------- /src/icons/files/config.ts: -------------------------------------------------------------------------------- 1 | export const config = [ 2 | { 3 | fileNames: [ 4 | 'config.json', 5 | 'config.txt', 6 | 'config.yaml', 7 | 'config.yml', 8 | 9 | 'configs.json', 10 | 'configs.txt', 11 | 'configs.yaml', 12 | 'configs.yml', 13 | 14 | 'option.json', 15 | 'option.txt', 16 | 'option.yaml', 17 | 'option.yml', 18 | 19 | 'options.json', 20 | 'options.txt', 21 | 'options.yaml', 22 | 'options.yml', 23 | 24 | 'pref.json', 25 | 'pref.txt', 26 | 'pref.yaml', 27 | 'pref.yml', 28 | 29 | 'prefs.json', 30 | 'prefs.txt', 31 | 'prefs.yaml', 32 | 'prefs.yml', 33 | 34 | 'setting.json', 35 | 'setting.txt', 36 | 'setting.yaml', 37 | 'setting.yml', 38 | 39 | 'settings.json', 40 | 'settings.txt', 41 | 'settings.yaml', 42 | 'settings.yml', 43 | ], 44 | name: 'preferences', 45 | }, 46 | { 47 | fileNames: [ 48 | 'config/json', 49 | 'config/yaml', 50 | 'config/yml', 51 | 52 | 'configs/json', 53 | 'configs/yaml', 54 | 'configs/yml', 55 | 56 | 'option/json', 57 | 'option/yaml', 58 | 'option/yml', 59 | 60 | 'options/json', 61 | 'options/yaml', 62 | 'options/yml', 63 | 64 | 'pref/json', 65 | 'pref/yaml', 66 | 'pref/yml', 67 | 68 | 'prefs/json', 69 | 'prefs/yaml', 70 | 'prefs/yml', 71 | 72 | 'setting/json', 73 | 'setting/yaml', 74 | 'setting/yml', 75 | 76 | 'settings/json', 77 | 'settings/yaml', 78 | 'settings/yml', 79 | ], 80 | name: 'preferencesfiles', 81 | }, 82 | { 83 | fileExtensions: [ 84 | 'env', 85 | 'env.dev', 86 | 'env.prod', 87 | 'env.test', 88 | 'ini', 89 | 'kys', 90 | 'ld', 91 | 'ldif', 92 | 'lds', 93 | 'mcf', 94 | ], 95 | name: 'envs', 96 | }, 97 | { 98 | fileExtensions: [ 99 | 'env/env', 100 | 'env/ini', 101 | 'env/conf', 102 | ], 103 | name: 'envfiles', 104 | }, 105 | { 106 | fileNames: [ 107 | 'config.yaml', 108 | 'config.yml', 109 | 'config.json', 110 | 'settings.yml', 111 | 'settings.yaml', 112 | 'settings.json', 113 | 'options.yml', 114 | 'options.yaml', 115 | 'options.json', 116 | 'prefs.yml', 117 | 'prefs.yaml', 118 | 'prefs.json', 119 | ], 120 | name: 'configs', 121 | }, 122 | { 123 | fileExtensions: ['cfg', 'cnf', 'conf', 'config', 'pref', 'prefs'], 124 | fileNames: ['cnf', 'conf', 'config', 'pref', 'prefs'], 125 | light: true, 126 | name: 'pref', 127 | }, 128 | { 129 | fileExtensions: ['git', 'git-submodules', 'gitattributes', 'gitkeep', 'gitmodules', 'gitrc', 'keep', 'lfsconfig'], 130 | name: 'git', 131 | }, 132 | ]; 133 | -------------------------------------------------------------------------------- /src/icons/files/custom.ts: -------------------------------------------------------------------------------- 1 | export const custom = [ 2 | { 3 | fileNames: [ 4 | 'index.html', 5 | 'index.htm', 6 | 'index.phtml', 7 | 'index.pug', 8 | 'index.jade', 9 | 'index.hbs', 10 | 'index.handlebars', 11 | 'index.twig', 12 | 'index.php', 13 | 'index.jsp', 14 | 'index.ejs', 15 | ], 16 | name: 'indexhtml', 17 | }, 18 | { 19 | fileNames: [ 20 | 'index.cjs', 21 | 'index.coffee', 22 | 'index.css', 23 | 'index.dart', 24 | 'index.es6', 25 | 'index.js', 26 | 'index.jsx', 27 | 'index.mjs', 28 | 'index.scss', 29 | 'index.svelte', 30 | 'index.ts', 31 | 'index.tsx', 32 | 'index.vue', 33 | ], 34 | name: 'index', 35 | }, 36 | { 37 | fileNames: ['architecture', 'architecture.md', 'architecture.rst', 'architecture.txt'], 38 | name: 'architecture', 39 | }, 40 | { 41 | fileNames: [ 42 | '.github/build.yaml', 43 | '.github/build.yml', 44 | '.github/ci.yaml', 45 | '.github/ci.yml', 46 | '.github/config.yaml', 47 | '.github/config.yml', 48 | '.github/main.yaml', 49 | '.github/main.yml', 50 | '.github/release.yaml', 51 | '.github/release.yml', 52 | '.github/workflow.yaml', 53 | '.github/workflow.yml', 54 | ], 55 | name: 'githubActions', 56 | }, 57 | { 58 | fileNames: ['CODE_OF_CONDUCT.md', 'CODE_OF_CONDUCT.txt'], 59 | name: 'githubCode', 60 | }, 61 | { 62 | fileNames: ['CONTRIBUTING.md', 'CONTRIBUTING.txt'], 63 | name: 'githubContributing', 64 | }, 65 | { 66 | fileNames: [ 67 | 'COMMIT_MESSAGE_TEMPLATE.md', 68 | 'COMMIT_MESSAGE_TEMPLATE.txt', 69 | 'PULL_REQUEST_TEMPLATE.md', 70 | 'PULL_REQUEST_TEMPLATE.txt', 71 | 'TEMPLATE.md', 72 | 'TEMPLATE.txt', 73 | ], 74 | light: true, 75 | name: 'github', 76 | }, 77 | { 78 | fileNames: ['readme', 'readme.md', 'readme.txt'], 79 | light: true, 80 | name: 'readme', 81 | }, 82 | { 83 | fileNames: ['COMMIT_EDITMSG', 'ATOM_COMMIT_EDITMSG'], 84 | name: 'gitcommit', 85 | }, 86 | { 87 | fileNames: ['COMMIT_MESSAGE_CONVENTION.md', 'COMMIT_MESSAGE_CONVENTION.txt'], 88 | name: 'githubCommit', 89 | }, 90 | { 91 | fileNames: ['MERGE_HEAD', 'MERGE_MODE', 'MERGE_MSG'], 92 | name: 'gitmerge', 93 | }, 94 | { 95 | fileNames: ['install', 'install.md', 'install.sh', 'install.txt', 'install.yaml', 'install.yml'], 96 | name: 'install', 97 | }, 98 | { 99 | fileNames: ['funding', 'funding.md', 'funding.sh', 'funding.txt', 'funding.yaml', 'funding.yml'], 100 | name: 'funding', 101 | }, 102 | { 103 | fileNames: ['stale.yml', 'stale.yaml'], 104 | name: 'stalebot', 105 | }, 106 | { 107 | fileExtensions: ['bundle.properties', 'messages/properties'], 108 | name: 'i18nProperties', 109 | }, 110 | { 111 | fileExtensions: ['bundle.java', 'messages/java'], 112 | name: 'i18nJava', 113 | }, 114 | { 115 | fileExtensions: ['bundle.kt', 'messages/kt'], 116 | name: 'i18nKotlin', 117 | }, 118 | { 119 | fileNames: ['application.conf', 'reference.conf', 'spray.conf'], 120 | name: 'spray', 121 | }, 122 | ]; 123 | -------------------------------------------------------------------------------- /src/icons/files/images.ts: -------------------------------------------------------------------------------- 1 | export const images = [ 2 | { 3 | fileExtensions: ['jpg', 'jpeg'], 4 | name: 'jpg', 5 | }, 6 | { 7 | fileExtensions: ['gif', 'gifv'], 8 | name: 'gif', 9 | }, 10 | { 11 | fileExtensions: ['png', 'apng'], 12 | name: 'png', 13 | }, 14 | { 15 | fileExtensions: ['cur', 'icns', 'ico', 'icon', 'iconpackage'], 16 | name: 'icon', 17 | }, 18 | { 19 | fileExtensions: ['bmp', 'jbmp', 'wbmp'], 20 | name: 'bmp', 21 | }, 22 | { 23 | fileExtensions: [ 24 | 'bpg', 25 | 'djvu', 26 | 'dpx', 27 | 'jng', 28 | 'jps', 29 | 'jxr', 30 | ], 31 | name: 'image', 32 | }, 33 | { 34 | fileExtensions: [ 35 | 'dcm', 36 | 'ecw', 37 | 'hdp', 38 | 'hdr', 39 | 'heic', 40 | 'heif', 41 | 'iff', 42 | ], 43 | name: 'image2', 44 | }, 45 | { 46 | fileExtensions: [ 47 | 'pcx', 48 | 'pict', 49 | 'pxb', 50 | 'pxg', 51 | 'pxm', 52 | 'pxr', 53 | 'pxs', 54 | 'raw', 55 | 'sgi', 56 | 'tga', 57 | 'tiff', 58 | 'vsdm', 59 | 'wbm', 60 | ], 61 | name: 'image3', 62 | }, 63 | { 64 | fileExtensions: ['svg', 'svgz'], 65 | light: true, 66 | name: 'svg', 67 | }, 68 | { 69 | fileExtensions: ['webp'], 70 | name: 'webp', 71 | }, 72 | ]; 73 | -------------------------------------------------------------------------------- /src/icons/files/index.ts: -------------------------------------------------------------------------------- 1 | export * from './a'; 2 | export * from './archive'; 3 | export * from './audio'; 4 | export * from './b'; 5 | export * from './binaries'; 6 | export * from './c'; 7 | export * from './config'; 8 | export * from './custom'; 9 | export * from './d'; 10 | export * from './e'; 11 | export * from './f'; 12 | export * from './g'; 13 | export * from './h'; 14 | export * from './i'; 15 | export * from './images'; 16 | export * from './j'; 17 | export * from './k'; 18 | export * from './l'; 19 | export * from './languages'; 20 | export * from './least'; 21 | export * from './m'; 22 | export * from './n'; 23 | export * from './numbers'; 24 | export * from './o'; 25 | export * from './p'; 26 | export * from './q'; 27 | export * from './r'; 28 | export * from './s'; 29 | export * from './t'; 30 | export * from './tests'; 31 | export * from './u'; 32 | export * from './v'; 33 | export * from './video'; 34 | export * from './w'; 35 | export * from './x'; 36 | export * from './y'; 37 | export * from './z'; 38 | -------------------------------------------------------------------------------- /src/icons/files/languages.ts: -------------------------------------------------------------------------------- 1 | export const languages = [ 2 | { 3 | fileExtensions: ['clj', 'cljc', 'cljs', 'cljx', 'clojure', 'hic', 'rg'], 4 | name: 'clojure', 5 | }, 6 | { 7 | fileExtensions: ['cjsx', 'coffee', 'iced', 'litcoffee'], 8 | name: 'coffeescript', 9 | }, 10 | { 11 | fileExtensions: ['css', 'tss'], 12 | light: true, 13 | name: 'css', 14 | }, 15 | { 16 | fileExtensions: ['dart'], 17 | name: 'dart', 18 | }, 19 | { 20 | fileExtensions: ['d', 'di'], 21 | name: 'dlang', 22 | }, 23 | { 24 | fileExtensions: ['go', 'golang'], 25 | name: 'go', 26 | }, 27 | { 28 | fileExtensions: ['dtml', 'htm', 'html', 'isml', 'kit', 'mhtml', 'scaml', 'xhtml'], 29 | name: 'html', 30 | }, 31 | { 32 | fileExtensions: ['java', 'jar', 'war'], 33 | name: 'java', 34 | }, 35 | { 36 | fileExtensions: ['min.cjs', 'min.es6', 'min.js', 'min.jsx', 'min.mjs', 'min.ts', 'min.tsx'], 37 | name: 'jsmin', 38 | }, 39 | { 40 | fileExtensions: ['jsx', 'tsx'], 41 | name: 'jsx', 42 | }, 43 | { 44 | fileExtensions: ['cjs', 'es6', 'js', 'mjs'], 45 | name: 'js', 46 | }, 47 | { 48 | fileExtensions: ['cson', 'ejson', 'json', 'jsonc', 'ndjson', 'rsj', 'rdjson', 'ston'], 49 | name: 'json', 50 | }, 51 | { 52 | fileExtensions: ['kotlin', 'kt', 'ktm'], 53 | name: 'kotlin', 54 | }, 55 | { 56 | fileExtensions: ['kts'], 57 | name: 'kotlinscript', 58 | }, 59 | { 60 | fileExtensions: ['less'], 61 | name: 'less', 62 | }, 63 | { 64 | fileExtensions: ['lua', 'luacheckrc', 'pd_lua', 'rbxs', 'rockspec', 'wlua'], 65 | name: 'lua', 66 | }, 67 | { 68 | fileExtensions: ['nginx', 'nginxconf'], 69 | fileNames: ['nginx.conf'], 70 | name: 'nginx', 71 | }, 72 | { 73 | fileExtensions: ['perl', 'ph', 'pl', 'pl6', 'pm', 'pm6', 'psgi'], 74 | name: 'perl', 75 | }, 76 | { 77 | fileExtensions: ['php'], 78 | name: 'php', 79 | }, 80 | { 81 | fileExtensions: [ 82 | 'ipy', 83 | 'pep', 84 | 'py', 85 | 'py3', 86 | 'pyi', 87 | 'pyp', 88 | 'pyt', 89 | 'python', 90 | 'pyw', 91 | 'pyz', 92 | ], 93 | name: 'python', 94 | }, 95 | { 96 | fileExtensions: [ 97 | 'gyp', 98 | 'gypi', 99 | 'pyde', 100 | 'rpy', 101 | 'tac', 102 | 'wsgi', 103 | 'xpy', 104 | ], 105 | name: 'python2', 106 | }, 107 | { 108 | fileExtensions: ['rabl', 'rb', 'ruby'], 109 | name: 'ruby', 110 | }, 111 | { 112 | fileExtensions: ['sass', 'sassrc', 'sassrc.js'], 113 | name: 'sass', 114 | }, 115 | { 116 | fileExtensions: ['scss', 'scssrc', 'scssrc.cjs', 'scssrc.js', 'scssrc.mjs'], 117 | name: 'scss', 118 | }, 119 | { 120 | fileExtensions: ['scala'], 121 | name: 'scala', 122 | }, 123 | { 124 | fileExtensions: ['sh'], 125 | name: 'shell', 126 | }, 127 | { 128 | fileExtensions: ['sql'], 129 | name: 'sql', 130 | }, 131 | { 132 | fileExtensions: ['swift'], 133 | name: 'swift', 134 | }, 135 | { 136 | fileExtensions: ['template'], 137 | name: 'template', 138 | }, 139 | { 140 | fileExtensions: ['toml'], 141 | name: 'toml', 142 | }, 143 | { 144 | fileExtensions: ['abt', 'ans', 'brf', 'dri', 'lcov', 'no', 'rtf', 'txt'], 145 | name: 'text', 146 | }, 147 | { 148 | fileExtensions: ['ts', 'tslint'], 149 | name: 'typeScript', 150 | }, 151 | ]; 152 | -------------------------------------------------------------------------------- /src/icons/files/least.ts: -------------------------------------------------------------------------------- 1 | export const least = [ 2 | { 3 | fileExtensions: ['class', 'ko', 'o', 'out', 'pyc', 'pyo'], 4 | name: 'class', 5 | }, 6 | { 7 | fileExtensions: [ 8 | '2da', 9 | 'db', 10 | 'db2', 11 | 'db3', 12 | 'dbi', 13 | 'ddl', 14 | 'dict', 15 | 'edn', 16 | 'od', 17 | 'schema', 18 | ], 19 | name: 'db', 20 | }, 21 | { 22 | fileExtensions: [ 23 | 'cbor', 24 | 'eign', 25 | 'fea', 26 | 'onlydata', 27 | 'pytb', 28 | 'syntax', 29 | 'tgn', 30 | ], 31 | name: 'db2', 32 | }, 33 | { 34 | fileExtensions: [ 35 | 'icondb.js', 36 | 'termcap', 37 | 'terminfo', 38 | ], 39 | name: 'db3', 40 | }, 41 | { 42 | fileExtensions: ['dfont', 'eot', 'otf', 'pfa', 'pfb', 'pfm', 'tfm', 'ttc', 'ttf', 'woff', 'woff2'], 43 | name: 'font', 44 | }, 45 | { 46 | fileExtensions: ['lock'], 47 | name: 'lock', 48 | }, 49 | { 50 | fileExtensions: ['jmd', 'markdown', 'md', 'mdown', 'mkd', 'mkdn', 'mkdown', 'pmd'], 51 | name: 'markdown', 52 | }, 53 | { 54 | fileExtensions: ['vue'], 55 | name: 'vue', 56 | }, 57 | { 58 | fileExtensions: ['fxml', 'jnlp', 'jrxml', 'rng', 'xml', 'xsl', 'xslt', 'xul'], 59 | name: 'xml', 60 | }, 61 | { 62 | fileExtensions: ['wsdl'], 63 | name: 'wsdl', 64 | }, 65 | { 66 | fileExtensions: ['xsd'], 67 | name: 'xsd', 68 | }, 69 | { 70 | fileExtensions: ['info', 'yaml', 'yml'], 71 | name: 'yaml', 72 | }, 73 | ]; 74 | -------------------------------------------------------------------------------- /src/icons/files/numbers.ts: -------------------------------------------------------------------------------- 1 | export const numbers = [ 2 | { 3 | fileExtensions: [ 4 | '11ty.cjs', 5 | '11ty.js', 6 | '11ty.mjs', 7 | '11ty.ts', 8 | '11tyignore', 9 | 'eleventy.cjs', 10 | 'eleventy.js', 11 | 'eleventy.mjs', 12 | 'eleventy.ts', 13 | 'eleventyignore', 14 | ], 15 | light: true, 16 | name: '11ty', 17 | }, 18 | { 19 | fileExtensions: ['bsl', 'mdo', 'os', 'sdbl'], 20 | name: '1c', 21 | }, 22 | { 23 | fileExtensions: ['ac', 'c4d', 'cginc', 'dxf', 'geo', 'obj', 'shader', 'stl', 'tesc', 'tese'], 24 | name: '3d', 25 | }, 26 | { 27 | fileExtensions: ['3dm', '3dmodel'], 28 | name: '3dmodel', 29 | }, 30 | { 31 | fileExtensions: ['3ds', 'dwg', 'osl'], 32 | name: '3dsmax', 33 | }, 34 | { 35 | fileExtensions: ['4db', '4dm'], 36 | name: '4d', 37 | }, 38 | ]; 39 | -------------------------------------------------------------------------------- /src/icons/files/o.ts: -------------------------------------------------------------------------------- 1 | export const oFiles = [ 2 | { 3 | fileExtensions: ['ob', 'ob2'], 4 | name: 'oberon', 5 | }, 6 | { 7 | fileExtensions: ['mm', 'm'], 8 | name: 'objc', 9 | }, 10 | { 11 | fileExtensions: ['j', 'sj'], 12 | name: 'objj', 13 | }, 14 | { 15 | fileExtensions: ['ml', 'ml4', 'mli', 'mll', 'mly', 'ocaml', 'ocamllex', 'ocamlyacc'], 16 | name: 'ocaml', 17 | }, 18 | { 19 | fileExtensions: ['octave', 'octave_hist', 'octaverc'], 20 | name: 'octave', 21 | }, 22 | { 23 | fileExtensions: ['odin'], 24 | name: 'odin', 25 | }, 26 | { 27 | fileExtensions: ['o3', 'ogone'], 28 | name: 'ogone', 29 | }, 30 | { 31 | fileExtensions: ['gdiagramstyle', 'graffle', 'gstencil', 'gtemplate'], 32 | name: 'omnigraffle', 33 | }, 34 | { 35 | fileExtensions: ['one', 'onenote'], 36 | name: 'onenote', 37 | }, 38 | { 39 | fileExtensions: ['ooc'], 40 | name: 'ooc', 41 | }, 42 | { 43 | fileExtensions: ['opa'], 44 | name: 'opa', 45 | }, 46 | { 47 | fileExtensions: ['opam'], 48 | name: 'opam', 49 | }, 50 | { 51 | fileNames: ['openapi.json', 'openapi.yml', 'openapi.yaml'], 52 | name: 'openapi', 53 | }, 54 | { 55 | fileExtensions: ['bsd', 'openbsd'], 56 | name: 'openbsd', 57 | }, 58 | { 59 | fileExtensions: ['opencl'], 60 | name: 'opencl', 61 | }, 62 | { 63 | fileExtensions: ['abl', 'p'], 64 | name: 'progress', 65 | }, 66 | { 67 | fileExtensions: ['exr'], 68 | name: 'openexr', 69 | }, 70 | { 71 | fileExtensions: ['glsl', 'glslv', 'gsh', 'gshader'], 72 | name: 'opengl', 73 | }, 74 | { 75 | fileExtensions: ['vert', 'vertex', 'vrx', 'vsh', 'vshader'], 76 | name: 'vertex', 77 | }, 78 | { 79 | fileExtensions: ['fp', 'fra', 'frag', 'fsh', 'fshader'], 80 | name: 'shader', 81 | }, 82 | { 83 | fileExtensions: ['things'], 84 | name: 'openhab', 85 | }, 86 | { 87 | fileExtensions: ['p5i'], 88 | name: 'openindiana', 89 | }, 90 | { 91 | fileExtensions: ['fodg', 'fodp', 'fods', 'fodt', 'odb', 'odf', 'odg', 'odp', 'ods', 'otg', 'otp', 'ots', 'ott'], 92 | name: 'openoffice', 93 | }, 94 | { 95 | fileExtensions: ['rego'], 96 | name: 'openpolicy', 97 | }, 98 | { 99 | fileExtensions: ['scad', 'jscad'], 100 | name: 'openscad', 101 | }, 102 | { 103 | fileExtensions: ['aki', 'ami', 'ari', 'ova', 'ovf'], 104 | name: 'openstack', 105 | }, 106 | { 107 | fileExtensions: ['opensolaris', 'solaris'], 108 | name: 'opensolaris', 109 | }, 110 | { 111 | fileExtensions: ['hlb', 'cld'], 112 | name: 'openvms', 113 | }, 114 | { 115 | fileExtensions: ['ovpn'], 116 | name: 'openvpn', 117 | }, 118 | { 119 | fileNames: ['vdev1', 'vdev2001'], 120 | name: 'openzfs', 121 | }, 122 | { 123 | fileExtensions: ['org'], 124 | name: 'orgmode', 125 | }, 126 | { 127 | fileExtensions: ['pck', 'pkb', 'pkh', 'plb', 'pls', 'plsql'], 128 | name: 'oracle', 129 | }, 130 | { 131 | fileExtensions: ['dmg'], 132 | name: 'finder', 133 | }, 134 | { 135 | fileExtensions: ['bcmx', 'nk2', 'oab', 'oft', 'otm', 'pst'], 136 | name: 'outlook', 137 | }, 138 | { 139 | fileExtensions: ['oxygene'], 140 | name: 'oxygene', 141 | }, 142 | { 143 | fileExtensions: ['oz'], 144 | name: 'oz', 145 | }, 146 | ]; 147 | -------------------------------------------------------------------------------- /src/icons/files/q.ts: -------------------------------------------------------------------------------- 1 | export const qFiles = [ 2 | { 3 | fileExtensions: ['qs'], 4 | light: true, 5 | name: 'qsharp', 6 | }, 7 | { 8 | fileExtensions: ['qasm', 'qiskit'], 9 | name: 'qiskit', 10 | }, 11 | { 12 | fileExtensions: ['qvb', 'qvd', 'qvf', 'qvs', 'qvt', 'qvw', 'qvx'], 13 | name: 'qlikview', 14 | }, 15 | { 16 | fileExtensions: ['qodana.yml', 'qodana.yaml'], 17 | fileNames: ['qodana.yml', 'qodana.yaml'], 18 | name: 'qodana', 19 | }, 20 | { 21 | fileExtensions: ['qbs', 'qml', 'qmldir', 'qmlproject', 'qmltypes', 'qrc', 'qss'], 22 | name: 'qt', 23 | }, 24 | { 25 | fileNames: ['quasar.conf.cjs', 'quasar.conf.js', 'quasar.conf.mjs', 'quasar.conf.ts'], 26 | name: 'quasar', 27 | }, 28 | { 29 | fileExtensions: ['qtn'], 30 | name: 'quantum', 31 | }, 32 | { 33 | fileNames: ['quokka.jsx', 'quokka.js', 'quokka.cjs', 'quokka.mjs', 'quokka.ts', 'quokka.tsx'], 34 | name: 'quokka', 35 | }, 36 | ]; 37 | -------------------------------------------------------------------------------- /src/icons/files/u.ts: -------------------------------------------------------------------------------- 1 | export const uFiles = [ 2 | { 3 | fileExtensions: ['glif', 'ufo', 'ufoz'], 4 | name: 'ufo', 5 | }, 6 | { 7 | fileNames: ['uikit.cjs', 'uikit.js', 'uikit.min.cjs', 'uikit.min.js', 'uikit.min.mjs', 'uikit.mjs'], 8 | name: 'uikit', 9 | }, 10 | { 11 | fileExtensions: ['umirc', 'umirc.js', 'umirc.ts', 'umirc.tsx', 'umirc.cjs', 'umirc.jsx', 'umirc.mjs'], 12 | name: 'umi', 13 | }, 14 | { 15 | fileExtensions: ['iuml', 'plantuml', 'pu', 'puml', 'uml', 'wsd'], 16 | name: 'uml', 17 | }, 18 | { 19 | fileExtensions: ['unicode'], 20 | name: 'unicode', 21 | }, 22 | { 23 | fileExtensions: [ 24 | 'unibeautifyrc.cjs', 25 | 'unibeautifyrc.js', 26 | 'unibeautifyrc.json', 27 | 'unibeautifyrc.mjs', 28 | 'unibeautifyrc.ts', 29 | 'unibeautifyrc.yaml', 30 | 'unibeautifyrc.yml', 31 | ], 32 | fileNames: [ 33 | 'unibeautify.config.cjs', 34 | 'unibeautify.config.js', 35 | 'unibeautify.config.json', 36 | 'unibeautify.config.mjs', 37 | 'unibeautify.config.ts', 38 | 'unibeautify.config.yaml', 39 | 'unibeautify.config.yml', 40 | ], 41 | name: 'unibeautify', 42 | }, 43 | { 44 | fileExtensions: ['unibeautifyrc'], 45 | fileNames: [ 46 | 'unibeautifyrc.config.cjs', 47 | 'unibeautifyrc.config.js', 48 | 'unibeautifyrc.config.json', 49 | 'unibeautifyrc.config.mjs', 50 | 'unibeautifyrc.config.ts', 51 | 'unibeautifyrc.config.yaml', 52 | 'unibeautifyrc.config.yml', 53 | ], 54 | name: 'unibeautifyrc', 55 | }, 56 | { 57 | fileExtensions: [ 58 | 'anim', 59 | 'asset', 60 | 'cubemap', 61 | 'meta', 62 | 'ply', 63 | 'prefab', 64 | 'u3d', 65 | 'unity', 66 | 'unity3d', 67 | 'unitypackage', 68 | 'unityproj', 69 | ], 70 | name: 'unity', 71 | }, 72 | { 73 | fileExtensions: ['uof', 'uop', 'uos', 'uot'], 74 | name: 'uos', 75 | }, 76 | { 77 | fileExtensions: ['u'], 78 | name: 'unison', 79 | }, 80 | { 81 | fileNames: [ 82 | 'unlicence', 83 | 'unlicence.md', 84 | 'unlicence.rst', 85 | 'unlicence.txt', 86 | 'unlicense', 87 | 'unlicense.md', 88 | 'unlicense.rst', 89 | 'unlicense.txt', 90 | ], 91 | name: 'unlicense', 92 | }, 93 | { 94 | fileExtensions: ['uno', 'unoproj'], 95 | name: 'uno', 96 | }, 97 | { 98 | fileNames: [ 99 | 'uno.config.cjs', 100 | 'uno.config.js', 101 | 'uno.config.mjs', 102 | 'uno.config.ts', 103 | 'unocss.config.cjs', 104 | 'unocss.config.js', 105 | 'unocss.config.mjs', 106 | 'unocss.config.ts', 107 | ], 108 | name: 'unocss', 109 | }, 110 | { 111 | fileExtensions: [ 112 | 'uasset', 113 | 'uax', 114 | 'uc', 115 | 'ukx', 116 | 'umap', 117 | 'umx', 118 | 'unr', 119 | 'upkg', 120 | 'upl', 121 | 'uplugin', 122 | 'uproject', 123 | 'utx', 124 | 'uz', 125 | ], 126 | name: 'unreal', 127 | }, 128 | { 129 | fileExtensions: ['ur', 'urs'], 130 | name: 'urweb', 131 | }, 132 | ]; 133 | -------------------------------------------------------------------------------- /src/icons/files/video.ts: -------------------------------------------------------------------------------- 1 | export const video = [ 2 | { 3 | fileExtensions: [ 4 | '3g2', 5 | '3gp', 6 | '3gp2', 7 | '3gpp', 8 | 'amv', 9 | 'asf', 10 | 'asx', 11 | 'avi', 12 | 'divx', 13 | 'dvd', 14 | ], 15 | name: 'video', 16 | }, 17 | { 18 | fileExtensions: [ 19 | 'flv', 20 | 'h264', 21 | 'm2v', 22 | 'm4v', 23 | 'mk3d', 24 | 'mks', 25 | 'mkv', 26 | 'mov', 27 | 'mp4', 28 | 'mpeg', 29 | 'mpg', 30 | ], 31 | name: 'video2', 32 | }, 33 | { 34 | fileExtensions: [ 35 | 'ogm', 36 | 'ogv', 37 | 'qt', 38 | 'rm', 39 | 'rmvb', 40 | 'tape', 41 | 'vob', 42 | 'webm', 43 | 'wmv', 44 | 'yuv', 45 | ], 46 | name: 'video3', 47 | }, 48 | ]; 49 | -------------------------------------------------------------------------------- /src/icons/files/x.ts: -------------------------------------------------------------------------------- 1 | export const xFiles = [ 2 | { 3 | fileExtensions: ['x10'], 4 | name: 'x10', 5 | }, 6 | { 7 | fileExtensions: [ 8 | 'Xauthority', 9 | 'Xclients', 10 | 'Xinitrc', 11 | 'Xinputrc', 12 | 'Xprofile', 13 | 'Xresources', 14 | 'Xscreensaver', 15 | 'Xsession', 16 | 'Xsession-errors', 17 | 'Xsessionrc', 18 | 'Xusers', 19 | 'Xvnc-session', 20 | ], 21 | name: 'x11', 22 | }, 23 | { 24 | fileExtensions: ['workbook'], 25 | name: 'xamarin', 26 | }, 27 | { 28 | fileExtensions: ['xc'], 29 | name: 'xmos', 30 | }, 31 | { 32 | fileExtensions: [ 33 | 'mode1v3', 34 | 'mode3v3', 35 | 'xcassets', 36 | 'xccheckout', 37 | 'xcconfig', 38 | 'xcdatamodel', 39 | 'xclangspec', 40 | 'xcmappingmodel', 41 | 'xcodeproj', 42 | 'xcplayground', 43 | 'xcplugindata', 44 | 'xcscheme', 45 | 'xcsettings', 46 | 'xctarget', 47 | 'xctask', 48 | 'xctemplate', 49 | 'xcuserstate', 50 | 'xcworkspace', 51 | 'xcworkspacedata', 52 | ], 53 | name: 'xcode', 54 | }, 55 | { 56 | fileExtensions: ['xib'], 57 | name: 'xib', 58 | }, 59 | { 60 | fileExtensions: ['xlf', 'xliff'], 61 | name: 'xliff', 62 | }, 63 | { 64 | fileNames: ['xmake.lua'], 65 | name: 'xmake', 66 | }, 67 | { 68 | fileExtensions: ['machine.cjs', 'machine.js', 'machine.mjs', 'machine.ts'], 69 | name: 'xstate', 70 | }, 71 | { 72 | fileExtensions: ['xtend'], 73 | name: 'xtend', 74 | }, 75 | { 76 | fileExtensions: ['xojo_code', 'xojo_menu', 'xojo_report', 'xojo_script', 'xojo_toolbar', 'xojo_window'], 77 | name: 'xojo', 78 | }, 79 | { 80 | fileExtensions: ['xsp-config', 'xsp.metadata'], 81 | name: 'xpages', 82 | }, 83 | { 84 | fileExtensions: ['xquery'], 85 | name: 'xquery', 86 | }, 87 | { 88 | fileExtensions: ['xpl', 'xproc'], 89 | name: 'xproc', 90 | }, 91 | { 92 | fileNames: ['xubuntu.iso', 'xubuntu.deb'], 93 | name: 'xubuntu', 94 | }, 95 | ]; 96 | -------------------------------------------------------------------------------- /src/icons/files/y.ts: -------------------------------------------------------------------------------- 1 | export const yFiles = [ 2 | { 3 | fileExtensions: ['yamllint', 'yamllint.yml', 'yamllint.yaml'], 4 | name: 'yamllint', 5 | }, 6 | { 7 | fileExtensions: ['yaspellerignore', 'yaspellerrc', 'yaspellerrc.json'], 8 | name: 'yandex', 9 | }, 10 | { 11 | fileExtensions: ['yang'], 12 | name: 'yang', 13 | }, 14 | { 15 | fileExtensions: ['yar', 'yara'], 16 | name: 'yara', 17 | }, 18 | { 19 | fileExtensions: ['yarnrc', 'yarnrc.yml', 'yarnrc.yaml'], 20 | fileNames: ['yarn.json', 'yarn.js'], 21 | name: 'yarn', 22 | }, 23 | { 24 | fileNames: ['yarn.lock'], 25 | name: 'yarnlock', 26 | }, 27 | { 28 | fileExtensions: ['yarn-integrity', 'yarn-metadata', 'yarnclean'], 29 | name: 'yarnclean', 30 | }, 31 | { 32 | fileExtensions: ['yardopts'], 33 | name: 'yard', 34 | }, 35 | { 36 | fileExtensions: ['yasm'], 37 | name: 'yasm', 38 | }, 39 | { 40 | fileExtensions: ['yo-rc.json'], 41 | name: 'yeoman', 42 | }, 43 | { 44 | fileExtensions: ['yona'], 45 | name: 'yona', 46 | }, 47 | { 48 | fileExtensions: ['yorick'], 49 | name: 'yorick', 50 | }, 51 | { 52 | fileExtensions: ['yue'], 53 | name: 'yue', 54 | }, 55 | { 56 | fileNames: [ 57 | 'yahoo-config.cjs', 58 | 'yahoo-config.js', 59 | 'yahoo-config.mjs', 60 | 'yahoo-config.ts', 61 | 'yui-config.cjs', 62 | 'yui-config.js', 63 | 'yui-config.mjs', 64 | 'yui-config.ts', 65 | 'yui-min.js', 66 | 'yui.cjs', 67 | 'yui.js', 68 | 'yui.min.js', 69 | 'yui.mjs', 70 | 'yui.ts', 71 | ], 72 | name: 'yui', 73 | }, 74 | { 75 | fileExtensions: ['yvmrc'], 76 | name: 'yvmrc', 77 | }, 78 | ]; 79 | -------------------------------------------------------------------------------- /src/icons/files/z.ts: -------------------------------------------------------------------------------- 1 | export const zFiles = [ 2 | { 3 | fileExtensions: ['zbr', 'zpr', 'ztl'], 4 | name: 'zbrush', 5 | }, 6 | { 7 | fileNames: ['zeit.json'], 8 | light: true, 9 | name: 'zeit', 10 | }, 11 | { 12 | fileExtensions: ['zeitignore'], 13 | name: 'zeitignore', 14 | }, 15 | { 16 | fileExtensions: ['zep', 'zephir'], 17 | name: 'zephir', 18 | }, 19 | { 20 | fileExtensions: ['zig'], 21 | name: 'zig', 22 | }, 23 | { 24 | fileExtensions: ['plx', 'z180', 'z180asm', 'z280', 'z280asm', 'z380', 'z380asm', 'z80', 'z80asm', 'zilog'], 25 | name: 'zilog', 26 | }, 27 | { 28 | fileExtensions: ['zimpl', 'zmpl', 'zpl'], 29 | name: 'zimpl', 30 | }, 31 | { 32 | fileNames: ['zorinos.iso', 'zorinos.deb'], 33 | name: 'zorinos', 34 | }, 35 | { 36 | fileExtensions: ['mud', 'xzap', 'zabstr', 'zap', 'zil', 'zork'], 37 | name: 'zork', 38 | }, 39 | { 40 | fileExtensions: ['zs'], 41 | name: 'zenscript', 42 | }, 43 | { 44 | fileExtensions: ['zsrc', 'zsrc.json'], 45 | name: 'zsrc', 46 | }, 47 | ]; 48 | -------------------------------------------------------------------------------- /src/icons/folderIcons.ts: -------------------------------------------------------------------------------- 1 | import { 2 | aFolders, 3 | bFolders, 4 | cFolders, 5 | dFolders, 6 | eFolders, 7 | fFolders, 8 | gFolders, 9 | hFolders, 10 | iFolders, 11 | jFolders, 12 | kFolders, 13 | lFolders, 14 | mFolders, 15 | nFolders, 16 | oFolders, 17 | pFolders, 18 | qFolders, 19 | rFolders, 20 | sFolders, 21 | tFolders, 22 | uFolders, 23 | vFolders, 24 | wFolders, 25 | xFolders, 26 | yFolders, 27 | zFolders, 28 | } from 'src/icons/folders'; 29 | 30 | import type { FolderAssociations } from 'src/@types/associations'; 31 | 32 | /** 33 | * Defines folder icons 34 | */ 35 | export const folderIcons: FolderAssociations[] = [ 36 | { 37 | defaultIcon: { name: 'folder' }, 38 | icons: [ 39 | // region [A] 40 | ...aFolders, 41 | // endregion 42 | 43 | // region [B] 44 | ...bFolders, 45 | // endregion 46 | 47 | // region [C] 48 | ...cFolders, 49 | 50 | // endregion 51 | 52 | // region [D] 53 | ...dFolders, 54 | // endregion 55 | 56 | // region [E] 57 | ...eFolders, 58 | 59 | // endregion 60 | 61 | // region [F] 62 | ...fFolders, 63 | 64 | // endregion 65 | 66 | // region [G] 67 | ...gFolders, 68 | 69 | // endregion 70 | 71 | // region [H] 72 | ...hFolders, 73 | 74 | // endregion 75 | 76 | // region [I] 77 | ...iFolders, 78 | 79 | // endregion 80 | 81 | // region [J] 82 | ...jFolders, 83 | // endregion 84 | 85 | // region [K] 86 | ...kFolders, 87 | // endregion 88 | 89 | // region [L] 90 | ...lFolders, 91 | 92 | // endregion 93 | 94 | // region [M] 95 | ...mFolders, 96 | 97 | // endregion 98 | 99 | // region [N] 100 | ...nFolders, 101 | // endregion 102 | 103 | // region [O] 104 | ...oFolders, 105 | // endregion 106 | 107 | // region [P] 108 | ...pFolders, 109 | // endregion 110 | 111 | // region [Q] 112 | ...qFolders, 113 | // endregion 114 | 115 | // region [R] 116 | ...rFolders, 117 | // endregion 118 | 119 | // region [S] 120 | ...sFolders, 121 | // endregion 122 | 123 | // region [T] 124 | ...tFolders, 125 | // endregion 126 | 127 | // region [U] 128 | ...uFolders, 129 | // endregion 130 | 131 | // region [V] 132 | ...vFolders, 133 | // endregion 134 | 135 | // region [W] 136 | ...wFolders, 137 | // endregion 138 | 139 | // region [X] 140 | xFolders, 141 | // endregion 142 | 143 | // region [Y] 144 | yFolders, 145 | // endregion 146 | 147 | // region [Z] 148 | zFolders, 149 | // endregion 150 | ], 151 | name: 'specific', 152 | rootFolder: { name: 'folder-root' }, 153 | }, 154 | { 155 | defaultIcon: { name: 'folder' }, 156 | name: 'classic', 157 | rootFolder: { name: 'folder-root' }, 158 | }, 159 | { defaultIcon: { name: '' }, name: 'none' }, 160 | ]; 161 | -------------------------------------------------------------------------------- /src/icons/folders/b.ts: -------------------------------------------------------------------------------- 1 | export const bFolders = [ 2 | { 3 | folderNames: [ 4 | 'abstract', 5 | 'abstracts', 6 | 'base', 7 | 'bases', 8 | 'parent', 9 | 'parents', 10 | ], 11 | name: 'base', 12 | }, 13 | { 14 | folderNames: ['bazaar', 'bzr'], 15 | name: 'bazaar', 16 | }, 17 | { 18 | folderNames: [ 19 | 'benchmark', 20 | 'benchmarks', 21 | 'hprof', 22 | 'measure', 23 | 'measures', 24 | 'perf', 25 | 'performance', 26 | 'performances', 27 | 'perfs', 28 | 'profiler', 29 | 'profilers', 30 | ], 31 | name: 'benchmark', 32 | }, 33 | { 34 | folderNames: ['bitcoin'], 35 | name: 'bitcoin', 36 | }, 37 | { 38 | folderNames: ['bloc', 'blocs'], 39 | name: 'bloc', 40 | }, 41 | { 42 | folderNames: ['blueprint', 'blueprints'], 43 | name: 'blueprint', 44 | }, 45 | { 46 | folderNames: ['bower', 'bower_components'], 47 | name: 'bower', 48 | }, 49 | { 50 | folderNames: ['bot', 'bots', 'robot', 'robots'], 51 | name: 'bot', 52 | }, 53 | { 54 | folderNames: ['buildkite'], 55 | name: 'buildkite', 56 | }, 57 | ]; 58 | -------------------------------------------------------------------------------- /src/icons/folders/d.ts: -------------------------------------------------------------------------------- 1 | export const dFolders = [ 2 | { 3 | folderNames: ['dapr'], 4 | name: 'dapr', 5 | }, 6 | { 7 | folderNames: ['dart'], 8 | name: 'dart', 9 | }, 10 | { 11 | folderNames: [ 12 | 'database', 13 | 'databases', 14 | 'db', 15 | 'migrate', 16 | 'migrations', 17 | 'repo', 18 | 'repos', 19 | 'repositories', 20 | 'repository', 21 | ], 22 | name: 'db', 23 | }, 24 | { 25 | folderNames: ['debian', 'deb'], 26 | name: 'debian', 27 | }, 28 | { 29 | folderNames: [ 30 | 'bug', 31 | 'bugs', 32 | 'debug', 33 | 'debugger', 34 | 'debuggers', 35 | 'debugging', 36 | ], 37 | name: 'debug', 38 | }, 39 | { 40 | folderNames: ['annotation', 'annotations', 'decorator', 'decorators'], 41 | name: 'decorators', 42 | }, 43 | { 44 | folderNames: ['delta', 'deltas', 'diff', 'diffs'], 45 | name: 'delta', 46 | }, 47 | { 48 | folderNames: ['deno'], 49 | name: 'deno', 50 | }, 51 | { 52 | folderNames: ['dependabot'], 53 | name: 'dependabot', 54 | }, 55 | { 56 | folderNames: [ 57 | 'deploy', 58 | 'deployer', 59 | 'deployment', 60 | 'deployments', 61 | 'deploys', 62 | ], 63 | name: 'deploy', 64 | }, 65 | { 66 | folderNames: ['devcontainer', 'devcontainers'], 67 | name: 'devcontainer', 68 | }, 69 | { 70 | folderNames: [ 71 | 'build', 72 | 'dist', 73 | 'distribution', 74 | 'distributions', 75 | 'out', 76 | 'output', 77 | 'release', 78 | 'releases', 79 | ], 80 | name: 'dist', 81 | }, 82 | { 83 | folderNames: ['docker', 'dockerfile', 'dockerfiles', 'dockerhub'], 84 | name: 'docker', 85 | }, 86 | { 87 | folderNames: [ 88 | 'doc', 89 | 'docs', 90 | 'documentation', 91 | 'documentations', 92 | 'text', 93 | 'texts', 94 | ], 95 | name: 'docs', 96 | }, 97 | { 98 | folderNames: ['domain', 'domains'], 99 | name: 'domain', 100 | }, 101 | { 102 | folderNames: ['download', 'downloads', 'dl', 'dls'], 103 | name: 'download', 104 | }, 105 | { 106 | folderNames: ['drizzle'], 107 | name: 'drizzle', 108 | }, 109 | { 110 | folderNames: ['dropbox', 'dropbox.cache'], 111 | name: 'dropbox', 112 | }, 113 | { 114 | folderNames: ['dub'], 115 | name: 'dub', 116 | }, 117 | { 118 | folderNames: ['dump', 'dumps'], 119 | name: 'dump', 120 | }, 121 | { 122 | folderNames: ['dvc'], 123 | name: 'dvc', 124 | }, 125 | ]; 126 | -------------------------------------------------------------------------------- /src/icons/folders/e.ts: -------------------------------------------------------------------------------- 1 | export const eFolders = [ 2 | { 3 | folderNames: ['e2e', 'e2e-tests', 'scenario', 'scenarios'], 4 | name: 'e2e', 5 | }, 6 | { 7 | folderNames: [ 8 | 'eb-extensions', 9 | 'elastic', 10 | 'elasticbeanstalk', 11 | 'elasticsearch', 12 | ], 13 | name: 'elastic', 14 | }, 15 | { 16 | folderNames: ['electron', 'electron-builder'], 17 | name: 'electron', 18 | }, 19 | { 20 | folderNames: ['eex', 'elixir', 'elixir_ls', 'ex', 'leex'], 21 | name: 'elixir', 22 | }, 23 | { 24 | folderNames: ['emacs', 'emacs.d'], 25 | name: 'emacs', 26 | }, 27 | { 28 | folderNames: ['empty', 'empties', 'stock', 'stocks'], 29 | name: 'empty', 30 | }, 31 | { 32 | folderNames: ['env', 'envs', 'environment', 'environments'], 33 | name: 'env', 34 | }, 35 | { 36 | folderNames: [ 37 | 'error', 38 | 'errors', 39 | 'exception', 40 | 'exceptions', 41 | 'crash', 42 | 'crashes', 43 | ], 44 | name: 'error', 45 | }, 46 | { 47 | folderNames: ['event', 'events', 'signal', 'signals'], 48 | name: 'events', 49 | }, 50 | { 51 | folderNames: [ 52 | 'demo', 53 | 'demos', 54 | 'example', 55 | 'examples', 56 | 'sample', 57 | 'samples', 58 | ], 59 | name: 'examples', 60 | }, 61 | { 62 | folderNames: [ 63 | 'exclude', 64 | 'excludes', 65 | 'export', 66 | 'exported', 67 | 'exports', 68 | 'ignore', 69 | 'ignores', 70 | ], 71 | name: 'exclude', 72 | }, 73 | { 74 | folderNames: ['expo', 'expo-shared'], 75 | name: 'expo', 76 | }, 77 | ]; 78 | -------------------------------------------------------------------------------- /src/icons/folders/f.ts: -------------------------------------------------------------------------------- 1 | export const fFolders = [ 2 | { 3 | folderNames: ['fastlane'], 4 | name: 'fastlane', 5 | }, 6 | { 7 | folderNames: ['faq', 'faqs'], 8 | name: 'faq', 9 | }, 10 | { 11 | folderNames: ['favorite', 'favorites', 'favourite', 'favourites', 'fav', 'favs', 'bookmark', 'bookmarks'], 12 | name: 'favorites', 13 | }, 14 | { 15 | folderNames: ['feature', 'features', 'feat', 'feats'], 16 | name: 'features', 17 | }, 18 | { 19 | folderNames: ['firebase'], 20 | name: 'firebase', 21 | }, 22 | { 23 | folderNames: [ 24 | 'fabricator', 25 | 'fabricators', 26 | 'factories', 27 | 'factory', 28 | 'fixture', 29 | 'fixtures', 30 | ], 31 | name: 'fixtures', 32 | }, 33 | { 34 | folderNames: ['flow', 'flow-typed', 'def', 'defs'], 35 | name: 'flow', 36 | }, 37 | { 38 | folderNames: ['fluig'], 39 | name: 'fluig', 40 | }, 41 | { 42 | folderNames: ['flutter'], 43 | name: 'flutter', 44 | }, 45 | { 46 | folderNames: ['font', 'fonts', 'typeface', 'typefaces', 'glyph', 'glyphs'], 47 | name: 'fonts', 48 | }, 49 | { 50 | folderNames: [ 51 | 'func', 52 | 'funcs', 53 | 'function', 54 | 'functions', 55 | 'handler', 56 | 'handlers', 57 | 'lambda', 58 | 'lambdas', 59 | 'service', 60 | 'services', 61 | 'proc', 62 | 'procs', 63 | 'procedure', 64 | 'procedures', 65 | 'rpc', 66 | ], 67 | name: 'functions', 68 | }, 69 | ]; 70 | -------------------------------------------------------------------------------- /src/icons/folders/g.ts: -------------------------------------------------------------------------------- 1 | export const gFolders = [ 2 | { 3 | folderNames: ['gcloud', 'gcp'], 4 | name: 'gcloud', 5 | }, 6 | { 7 | folderNames: [ 8 | 'auto', 9 | 'autogen', 10 | 'gen', 11 | 'generated', 12 | 'generator', 13 | 'generators', 14 | ], 15 | name: 'generated', 16 | }, 17 | { 18 | folderNames: ['git', 'gitignore', 'gitattributes', 'submodules'], 19 | name: 'git', 20 | }, 21 | { 22 | folderNames: ['github'], 23 | name: 'github', 24 | }, 25 | { 26 | folderNames: ['gitlab'], 27 | name: 'gitlab', 28 | }, 29 | { 30 | folderNames: ['global', 'globals'], 31 | name: 'global', 32 | }, 33 | { 34 | folderNames: ['gradle', 'gradles'], 35 | name: 'gradle', 36 | }, 37 | { 38 | folderNames: ['graphql', 'gql', 'schema', 'schemas'], 39 | name: 'graphql', 40 | }, 41 | { 42 | folderNames: ['grunt', 'gruntfile', 'gruntfiles'], 43 | name: 'grunt', 44 | }, 45 | { 46 | folderNames: [ 47 | 'dev', 48 | 'develop', 49 | 'development', 50 | 'guard', 51 | 'guardfile', 52 | 'guardfiles', 53 | ], 54 | name: 'guard', 55 | }, 56 | { 57 | folderNames: ['gulp', 'gulpfile', 'gulpfiles'], 58 | name: 'gulp', 59 | }, 60 | ]; 61 | -------------------------------------------------------------------------------- /src/icons/folders/h.ts: -------------------------------------------------------------------------------- 1 | export const hFolders = [ 2 | { 3 | folderNames: ['hasura'], 4 | name: 'hasura', 5 | }, 6 | { 7 | folderNames: ['haxe', 'hxml', 'haxelib', 'haxe_libraries'], 8 | name: 'haxelib', 9 | }, 10 | { 11 | folderNames: [ 12 | 'chart', 13 | 'charts', 14 | 'helm', 15 | 'helmchart', 16 | 'helmcharts', 17 | 'helmfile', 18 | 'helmfiles', 19 | ], 20 | name: 'helm', 21 | }, 22 | { 23 | folderNames: ['helper', 'helpers', 'help', 'helps'], 24 | name: 'helper', 25 | }, 26 | { 27 | folderNames: [ 28 | 'home', 29 | 'homepage', 30 | 'start', 31 | 'tuto', 32 | 'tutorial', 33 | 'tutorials', 34 | 'tutos', 35 | ], 36 | name: 'home', 37 | }, 38 | { 39 | folderNames: ['hook', 'hooks', 'trigger', 'triggers', 'composable', 'composables'], 40 | name: 'hook', 41 | }, 42 | { 43 | folderNames: ['husky'], 44 | name: 'husky', 45 | }, 46 | ]; 47 | -------------------------------------------------------------------------------- /src/icons/folders/i.ts: -------------------------------------------------------------------------------- 1 | export const iFolders = [ 2 | { 3 | folderNames: [ 4 | 'g11n', 5 | 'i18n', 6 | 'l10n', 7 | 'lang', 8 | 'langs', 9 | 'language', 10 | 'languages', 11 | 'locale', 12 | 'locales', 13 | 'localization', 14 | 'translation', 15 | 'translations', 16 | ], 17 | name: 'i18n', 18 | }, 19 | { 20 | folderNames: [ 21 | 'favicon', 22 | 'favicons', 23 | 'glyph', 24 | 'glyphs', 25 | 'icns', 26 | 'ico', 27 | 'icon', 28 | 'icons', 29 | ], 30 | name: 'icons', 31 | }, 32 | { 33 | folderNames: ['idea', 'META-INF', 'intellijPlatform'], 34 | name: 'idea', 35 | }, 36 | { 37 | folderNames: [ 38 | 'figure', 39 | 'figures', 40 | 'gallery', 41 | 'image', 42 | 'images', 43 | 'img', 44 | 'imgs', 45 | 'media', 46 | 'medias', 47 | 'pic', 48 | 'pics', 49 | 'picture', 50 | 'pictures', 51 | 'png', 52 | 'pngs', 53 | 'jpg', 54 | 'jpeg', 55 | 'gif', 56 | ], 57 | name: 'images', 58 | }, 59 | { 60 | folderNames: [ 61 | 'concern', 62 | 'concerns', 63 | 'dep', 64 | 'dependencies', 65 | 'dependency', 66 | 'deps', 67 | 'import', 68 | 'imported', 69 | 'imports', 70 | 'inc', 71 | 'include', 72 | 'included', 73 | 'includes', 74 | ], 75 | name: 'include', 76 | }, 77 | { 78 | folderNames: ['info', 'infos', 'information', 'informations'], 79 | name: 'info', 80 | }, 81 | { 82 | folderNames: [ 83 | 'init', 84 | 'initialization', 85 | 'initializer', 86 | 'initializers', 87 | 'startup', 88 | ], 89 | name: 'init', 90 | }, 91 | { 92 | folderNames: [ 93 | 'di', 94 | 'inject', 95 | 'injection', 96 | 'injections', 97 | 'injector', 98 | 'injectors', 99 | 'injects', 100 | ], 101 | name: 'injection', 102 | }, 103 | { 104 | folderNames: ['interceptor', 'interceptors'], 105 | name: 'interceptor', 106 | }, 107 | { 108 | folderNames: ['internal', 'internals'], 109 | name: 'internal', 110 | }, 111 | { 112 | folderNames: ['island', 'islands'], 113 | name: 'islands', 114 | }, 115 | { 116 | folderNames: ['istanbul', 'nyc', 'nyc_output', 'nyc-output'], 117 | name: 'istanbul', 118 | }, 119 | { 120 | folderNames: ['lproj', 'xcassets'], 121 | name: 'ios', 122 | }, 123 | { 124 | folderNames: ['ios', 'iosapp', 'ios-app'], 125 | name: 'iosapp', 126 | }, 127 | ]; 128 | -------------------------------------------------------------------------------- /src/icons/folders/index.ts: -------------------------------------------------------------------------------- 1 | export * from './a'; 2 | export * from './b'; 3 | export * from './c'; 4 | export * from './d'; 5 | export * from './e'; 6 | export * from './f'; 7 | export * from './g'; 8 | export * from './h'; 9 | export * from './i'; 10 | export * from './j'; 11 | export * from './k'; 12 | export * from './l'; 13 | export * from './m'; 14 | export * from './n'; 15 | export * from './o'; 16 | export * from './p'; 17 | export * from './q'; 18 | export * from './r'; 19 | export * from './s'; 20 | export * from './t'; 21 | export * from './u'; 22 | export * from './v'; 23 | export * from './w'; 24 | export * from './x'; 25 | export * from './y'; 26 | export * from './z'; 27 | -------------------------------------------------------------------------------- /src/icons/folders/j.ts: -------------------------------------------------------------------------------- 1 | export const jFolders = [ 2 | { 3 | folderNames: ['java', 'jdk'], 4 | name: 'java', 5 | }, 6 | { 7 | folderNames: ['js', 'javascript', 'javascripts'], 8 | name: 'js', 9 | }, 10 | { 11 | folderNames: ['jest', 'jest-cache', 'jest-coverage'], 12 | name: 'jest', 13 | }, 14 | { 15 | folderNames: [ 16 | 'j2', 17 | 'jinja', 18 | 'jinja-templates', 19 | 'jinja2', 20 | 'jinja_templates', 21 | ], 22 | name: 'jinja', 23 | }, 24 | { 25 | folderNames: ['job', 'jobs', 'resque'], 26 | name: 'job', 27 | }, 28 | { 29 | folderNames: [ 30 | 'json', 31 | 'jsons', 32 | 'serialization', 33 | 'serializer', 34 | 'serializers', 35 | ], 36 | name: 'json', 37 | }, 38 | { 39 | folderNames: [ 40 | 'jwt', 41 | 'jwt-keys', 42 | 'jwt_keys', 43 | 'jwtkeys', 44 | 'token', 45 | 'tokens', 46 | ], 47 | name: 'jwt', 48 | }, 49 | ]; 50 | -------------------------------------------------------------------------------- /src/icons/folders/k.ts: -------------------------------------------------------------------------------- 1 | export const kFolders = [ 2 | { 3 | folderNames: [ 4 | 'key', 5 | 'keys', 6 | 'secret', 7 | 'secrets', 8 | 'cert', 9 | 'certs', 10 | 'certificate', 11 | 'certificates', 12 | 'pem', 13 | 'pems', 14 | 'ssl', 15 | 'ssh', 16 | 'auth', 17 | 'authentication', 18 | 'authenticators', 19 | ], 20 | name: 'keys', 21 | }, 22 | { 23 | folderNames: ['kivy', 'kv'], 24 | name: 'kivy', 25 | }, 26 | { 27 | folderNames: ['kotlin', 'kt', 'kts'], 28 | name: 'kotlin', 29 | }, 30 | { 31 | folderNames: [ 32 | 'k8s', 33 | 'k8ses', 34 | 'kube', 35 | 'kubernetes', 36 | 'kubes', 37 | 'minikube', 38 | ], 39 | name: 'kubernetes', 40 | }, 41 | { 42 | folderNames: ['kustomize', 'kustomization', 'kustomizations'], 43 | name: 'kustomize', 44 | }, 45 | ]; 46 | -------------------------------------------------------------------------------- /src/icons/folders/l.ts: -------------------------------------------------------------------------------- 1 | export const lFolders = [ 2 | { 3 | folderNames: [ 4 | 'fragment', 5 | 'fragments', 6 | 'layout', 7 | 'layouts', 8 | 'partial', 9 | 'partials', 10 | ], 11 | name: 'layouts', 12 | }, 13 | { 14 | folderNames: ['less'], 15 | name: 'less', 16 | }, 17 | { 18 | folderNames: ['linux', 'unix', 'nux', 'gnu'], 19 | name: 'linux', 20 | }, 21 | { 22 | folderNames: ['log', 'logs'], 23 | name: 'logs', 24 | }, 25 | { 26 | folderNames: ['lua', 'luac', 'luau'], 27 | name: 'lua', 28 | }, 29 | ]; 30 | -------------------------------------------------------------------------------- /src/icons/folders/n.ts: -------------------------------------------------------------------------------- 1 | export const nFolders = [ 2 | { 3 | folderNames: [ 4 | 'geo', 5 | 'nav', 6 | 'navigate', 7 | 'navigation', 8 | 'navigations', 9 | 'navs', 10 | ], 11 | name: 'navigation', 12 | }, 13 | { 14 | folderNames: ['netlify'], 15 | name: 'netlify', 16 | }, 17 | { 18 | folderNames: ['next'], 19 | name: 'next', 20 | }, 21 | { 22 | folderNames: ['node', 'node_modules', 'nodejs', 'npm'], 23 | name: 'node', 24 | }, 25 | { 26 | folderNames: [ 27 | 'jupyter', 28 | 'jupyter-notebook', 29 | 'jupyter-notebooks', 30 | 'notebook', 31 | 'notebooks', 32 | 'ipynb', 33 | ], 34 | name: 'notebooks', 35 | }, 36 | { 37 | folderNames: [ 38 | 'flash', 39 | 'notif', 40 | 'notification', 41 | 'notifications', 42 | 'notifs', 43 | ], 44 | name: 'notification', 45 | }, 46 | { 47 | folderNames: ['nuget', 'nupkg'], 48 | name: 'nuget', 49 | }, 50 | { 51 | folderNames: ['nuxt'], 52 | name: 'nuxt', 53 | }, 54 | { 55 | folderNames: ['nx'], 56 | name: 'nx', 57 | }, 58 | ]; 59 | -------------------------------------------------------------------------------- /src/icons/folders/o.ts: -------------------------------------------------------------------------------- 1 | export const oFolders = [ 2 | { 3 | folderNames: ['openshift'], 4 | name: 'openshift', 5 | }, 6 | { 7 | folderNames: ['order', 'orders', 'list', 'lists', 'listing', 'listings'], 8 | name: 'orders', 9 | }, 10 | { 11 | folderNames: [ 12 | 'etc', 13 | 'extra', 14 | 'extras', 15 | 'misc', 16 | 'miscellaneous', 17 | 'other', 18 | 'others', 19 | ], 20 | name: 'other', 21 | }, 22 | ]; 23 | -------------------------------------------------------------------------------- /src/icons/folders/p.ts: -------------------------------------------------------------------------------- 1 | export const pFolders = [ 2 | { 3 | folderNames: [ 4 | 'bundle', 5 | 'bundles', 6 | 'module', 7 | 'modules', 8 | 'package', 9 | 'packages', 10 | 'paket', 11 | 'pkg', 12 | 'pkgs', 13 | ], 14 | name: 'packages', 15 | }, 16 | { 17 | folderNames: ['parcel', 'parcel-cache'], 18 | name: 'parcel', 19 | }, 20 | { 21 | folderNames: ['perl', 'pl'], 22 | name: 'perl', 23 | }, 24 | { 25 | folderNames: ['acrobat', 'adobe', 'pdf', 'pdfs'], 26 | name: 'pdf', 27 | }, 28 | { 29 | folderNames: ['pdm-build', 'pdm-plugins'], 30 | name: 'pdm', 31 | }, 32 | { 33 | folderNames: ['php', 'phpcs', 'phpmailer', 'phpt', 'phtml'], 34 | name: 'php', 35 | }, 36 | { 37 | folderNames: ['pinia'], 38 | name: 'pinia', 39 | }, 40 | { 41 | folderNames: ['pipe', 'pipes', 'filter', 'filters'], 42 | name: 'pipe', 43 | }, 44 | { 45 | folderNames: ['plastic'], 46 | name: 'plastic', 47 | }, 48 | { 49 | folderNames: ['pio', 'pioenv', 'pioenvs', 'platformio'], 50 | name: 'platformio', 51 | }, 52 | { 53 | folderNames: ['playwright', 'pw'], 54 | name: 'playwright', 55 | }, 56 | { 57 | folderNames: [ 58 | 'extension', 59 | 'extensions', 60 | 'mu-plugin', 61 | 'mu-plugins', 62 | 'plugin', 63 | 'plugins', 64 | 'mod', 65 | 'mods', 66 | ], 67 | name: 'plugin', 68 | }, 69 | { 70 | folderNames: ['post', 'posts'], 71 | name: 'posts', 72 | }, 73 | { 74 | folderNames: ['proto', 'protobuf'], 75 | name: 'protobuf', 76 | }, 77 | { 78 | folderNames: ['prisma'], 79 | name: 'prisma', 80 | }, 81 | { 82 | folderNames: ['private', 'privates'], 83 | name: 'private', 84 | }, 85 | { 86 | folderNames: ['profile', 'profiles', 'persona', 'personas'], 87 | name: 'profile', 88 | }, 89 | { 90 | folderNames: ['project', 'projects', 'proj'], 91 | name: 'project', 92 | }, 93 | { 94 | folderNames: ['folder', 'folders', 'workspace', 'workspaces'], 95 | name: 'projects', 96 | }, 97 | { 98 | folderNames: ['provider', 'providers'], 99 | name: 'providers', 100 | }, 101 | { 102 | folderNames: ['python', 'py', 'pytest_cache', '__pycache__'], 103 | name: 'python', 104 | }, 105 | ]; 106 | -------------------------------------------------------------------------------- /src/icons/folders/q.ts: -------------------------------------------------------------------------------- 1 | export const qFolders = [ 2 | { 3 | folderNames: ['quasar'], 4 | name: 'quasar', 5 | }, 6 | { 7 | folderNames: ['qtn', 'quantum'], 8 | name: 'quantum', 9 | }, 10 | { 11 | folderNames: ['query', 'queries'], 12 | name: 'queries', 13 | }, 14 | { 15 | folderNames: ['bull', 'mq', 'queue', 'queues'], 16 | name: 'queue', 17 | }, 18 | ]; 19 | -------------------------------------------------------------------------------- /src/icons/folders/r.ts: -------------------------------------------------------------------------------- 1 | export const rFolders = [ 2 | { 3 | folderNames: [ 4 | 'jsx', 5 | 'react', 6 | 'react-native', 7 | 'react-scripts', 8 | 'react_components', 9 | 'react_scripts', 10 | 'tsx', 11 | ], 12 | name: 'react', 13 | }, 14 | { 15 | folderNames: ['redhat', 's2i'], 16 | name: 'redhat', 17 | }, 18 | { 19 | folderNames: ['redis'], 20 | name: 'redis', 21 | }, 22 | { 23 | folderNames: ['redwood'], 24 | name: 'redwood', 25 | }, 26 | { 27 | folderNames: ['coil', 'recoil'], 28 | name: 'recoil', 29 | }, 30 | { 31 | folderNames: ['flux', 'organism', 'organisms', 'redux', 'rtk'], 32 | name: 'redux', 33 | }, 34 | { 35 | folderNames: ['action', 'actions', 'redux-actions'], 36 | name: 'redux-actions', 37 | }, 38 | { 39 | folderNames: ['epic', 'epics', 'redux-epics'], 40 | name: 'redux-epics', 41 | }, 42 | { 43 | folderNames: ['reducer', 'reducers', 'redux-reducers'], 44 | name: 'redux-reducers', 45 | }, 46 | { 47 | folderNames: [ 48 | 'effect', 49 | 'effects', 50 | 'redux-effects', 51 | 'redux-sagas', 52 | 'saga', 53 | 'sagas', 54 | ], 55 | name: 'redux-sagas', 56 | }, 57 | { 58 | folderNames: [ 59 | 'redux-states', 60 | 'redux-stores', 61 | 'state', 62 | 'states', 63 | 'store', 64 | 'stores', 65 | ], 66 | name: 'redux-stores', 67 | }, 68 | { 69 | folderNames: ['relay'], 70 | name: 'relay', 71 | }, 72 | { 73 | folderNames: ['resolver', 'resolvers', 'value', 'values'], 74 | name: 'resolver', 75 | }, 76 | { 77 | folderNames: [ 78 | 'asset', 79 | 'assets', 80 | 'report', 81 | 'reports', 82 | 'res', 83 | 'resource', 84 | 'resources', 85 | ], 86 | name: 'resource', 87 | }, 88 | { 89 | folderNames: [ 90 | 'pr', 91 | 'prs', 92 | 'pull', 93 | 'pullrequest', 94 | 'pullrequests', 95 | 'pulls', 96 | 'review', 97 | 'reviewed', 98 | 'reviews', 99 | 'revision', 100 | 'revisions', 101 | ], 102 | name: 'reviews', 103 | }, 104 | { 105 | folderNames: ['root', 'roots'], 106 | name: 'root', 107 | }, 108 | { 109 | folderNames: ['route', 'routes', 'router', 'routers', 'routing'], 110 | name: 'routes', 111 | }, 112 | { 113 | folderNames: [ 114 | 'gem', 115 | 'gem_rbs_collection', 116 | 'gems', 117 | 'rb', 118 | 'rubies', 119 | 'ruby', 120 | 'sig', 121 | ], 122 | name: 'ruby', 123 | }, 124 | { 125 | folderNames: [ 126 | 'rule', 127 | 'rules', 128 | 'validation', 129 | 'validations', 130 | 'validator', 131 | 'validators', 132 | ], 133 | name: 'rules', 134 | }, 135 | { 136 | folderNames: ['cargo', 'rust', 'rs'], 137 | name: 'rust', 138 | }, 139 | ]; 140 | -------------------------------------------------------------------------------- /src/icons/folders/t.ts: -------------------------------------------------------------------------------- 1 | export const tFolders = [ 2 | { 3 | folderNames: ['target', 'targets'], 4 | name: 'target', 5 | }, 6 | { 7 | folderNames: [ 8 | 'cli', 9 | 'cmd', 10 | 'command', 11 | 'commands', 12 | 'console', 13 | 'consoles', 14 | 'run', 15 | 'task', 16 | 'tasks', 17 | 'terminal', 18 | 'ticket', 19 | 'tickets', 20 | 'workflow', 21 | 'workflows', 22 | 'shell', 23 | 'bash', 24 | 'zsh', 25 | 'fish', 26 | ], 27 | name: 'tasks', 28 | }, 29 | { 30 | folderNames: ['taskfile', 'taskfiles'], 31 | name: 'taskfile', 32 | }, 33 | { 34 | folderNames: ['tauri', 'src-tauri'], 35 | name: 'tauri', 36 | }, 37 | { 38 | folderNames: ['tech', 'technologies', 'technology'], 39 | name: 'tech', 40 | }, 41 | { 42 | folderNames: [ 43 | 'cache', 44 | 'caches', 45 | 'temp', 46 | 'temporary', 47 | 'temps', 48 | 'tmp', 49 | 'tmps', 50 | ], 51 | name: 'temp', 52 | }, 53 | { 54 | folderNames: [ 55 | '__tests__', 56 | 'junit', 57 | 'phpunit', 58 | 'pytest', 59 | 'rspec', 60 | 'spec', 61 | 'specs', 62 | 'test', 63 | 'testcase', 64 | 'testcases', 65 | 'tests', 66 | 'unit', 67 | 'units', 68 | ], 69 | name: 'tests', 70 | }, 71 | { 72 | folderNames: [ 73 | 'hcl', 74 | 'terraform', 75 | 'terragrunt', 76 | 'tf', 77 | 'tfstate', 78 | 'tfvars', 79 | ], 80 | name: 'terraform', 81 | }, 82 | { 83 | folderNames: ['textmate', 'tmbundle'], 84 | name: 'textmate', 85 | }, 86 | { 87 | folderNames: ['trait', 'traits'], 88 | name: 'trait', 89 | }, 90 | { 91 | folderNames: [ 92 | 'color', 93 | 'colors', 94 | 'design', 95 | 'designs', 96 | 'palette', 97 | 'palettes', 98 | 'scheme', 99 | 'schemes', 100 | 'skin', 101 | 'skins', 102 | 'theme', 103 | 'themes', 104 | ], 105 | name: 'themes', 106 | }, 107 | { 108 | folderNames: [ 109 | 'tool', 110 | 'toolbox', 111 | 'toolboxes', 112 | 'toolkit', 113 | 'toolkits', 114 | 'tools', 115 | 'util', 116 | 'utilities', 117 | 'utility', 118 | 'utils', 119 | 'tooling', 120 | 'devtools', 121 | ], 122 | name: 'tools', 123 | }, 124 | { 125 | folderNames: ['protheus', 'totvs', 'advpl'], 126 | name: 'totvs', 127 | }, 128 | { 129 | folderNames: [ 130 | '@types', 131 | 'interface', 132 | 'interfaces', 133 | 'ts', 134 | 'tsconfig', 135 | 'type', 136 | 'types', 137 | 'typescript', 138 | 'typings', 139 | ], 140 | name: 'ts', 141 | }, 142 | ]; 143 | -------------------------------------------------------------------------------- /src/icons/folders/u.ts: -------------------------------------------------------------------------------- 1 | export const uFolders = [ 2 | { 3 | folderNames: ['ui', 'gui', 'ux', 'figma'], 4 | name: 'ui', 5 | }, 6 | { 7 | folderNames: ['unity', 'unity3d'], 8 | name: 'unity', 9 | }, 10 | { 11 | folderNames: [ 12 | 'update', 13 | 'updated', 14 | 'updates', 15 | 'upgrade', 16 | 'upgraded', 17 | 'upgrades', 18 | 'upload', 19 | 'uploaded', 20 | 'uploads', 21 | ], 22 | name: 'upload', 23 | }, 24 | { 25 | folderNames: [ 26 | 'account', 27 | 'accounts', 28 | 'contact', 29 | 'contacts', 30 | 'friend', 31 | 'friends', 32 | 'member', 33 | 'members', 34 | 'partner', 35 | 'partners', 36 | 'profile', 37 | 'profiles', 38 | 'role', 39 | 'roles', 40 | 'user', 41 | 'users', 42 | ], 43 | name: 'users', 44 | }, 45 | ]; 46 | -------------------------------------------------------------------------------- /src/icons/folders/v.ts: -------------------------------------------------------------------------------- 1 | export const vFolders = [ 2 | { 3 | folderNames: ['vagrant', 'vagrant.d', 'vagrantfile', 'vagrantfiles'], 4 | name: 'vagrant', 5 | }, 6 | { 7 | folderNames: [ 8 | 'lib', 9 | 'libraries', 10 | 'library', 11 | 'libs', 12 | 'lib64', 13 | 'pod', 14 | 'pods', 15 | 'stdlib', 16 | 'vendor', 17 | 'vendors', 18 | ], 19 | name: 'lib', 20 | }, 21 | { 22 | folderNames: ['venv', 'virtualenv'], 23 | name: 'venv', 24 | }, 25 | { 26 | folderNames: ['now', 'vercel'], 27 | name: 'vercel', 28 | }, 29 | { 30 | folderNames: ['verdaccio'], 31 | name: 'verdaccio', 32 | }, 33 | { 34 | folderNames: ['movie', 'movies', 'video', 'videos'], 35 | name: 'video', 36 | }, 37 | { 38 | folderNames: [ 39 | 'html', 40 | 'page', 41 | 'pages', 42 | 'template', 43 | 'templates', 44 | 'view', 45 | 'views', 46 | 'webpage', 47 | 'webpages', 48 | ], 49 | name: 'views', 50 | }, 51 | { 52 | folderNames: ['crud', 'viewmodel', 'viewmodels'], 53 | name: 'viewmodel', 54 | }, 55 | { 56 | folderNames: ['desktop', 'virtual', 'vm', 'vms'], 57 | name: 'vm', 58 | }, 59 | { 60 | folderNames: ['vs', 'visualstudio', 'vsix'], 61 | name: 'vs', 62 | }, 63 | { 64 | folderNames: ['vitepress'], 65 | name: 'vitepress', 66 | }, 67 | { 68 | folderNames: ['vscode', 'vscode-test', 'vssettings'], 69 | name: 'vscode', 70 | }, 71 | { 72 | folderNames: ['vue'], 73 | name: 'vue', 74 | }, 75 | { 76 | folderNames: ['vuepress'], 77 | name: 'vuepress', 78 | }, 79 | { 80 | folderNames: ['vuex'], 81 | name: 'vuex', 82 | }, 83 | ]; 84 | -------------------------------------------------------------------------------- /src/icons/folders/w.ts: -------------------------------------------------------------------------------- 1 | export const wFolders = [ 2 | { 3 | folderNames: [ 4 | 'public', 5 | 'public_html', 6 | 'static', 7 | 'web', 8 | 'website', 9 | 'websites', 10 | 'www', 11 | 'wwwroot', 12 | ], 13 | name: 'web', 14 | }, 15 | { 16 | folderNames: ['web', 'webcomponents', 'web-components'], 17 | name: 'webcomponents', 18 | }, 19 | { 20 | folderNames: ['webpack', 'webpack.d', 'webpackfile', 'webpackfiles'], 21 | name: 'webpack', 22 | }, 23 | { 24 | folderNames: ['windows', 'win', 'win32', 'win64'], 25 | name: 'windows', 26 | }, 27 | { 28 | folderNames: ['wine'], 29 | name: 'wine', 30 | }, 31 | { 32 | folderNames: ['woocommerce'], 33 | name: 'woocommerce', 34 | }, 35 | { 36 | folderNames: ['woodpecker'], 37 | name: 'woodpecker', 38 | }, 39 | { 40 | folderNames: [ 41 | 'wordpress', 42 | 'wp', 43 | 'wp-admin', 44 | 'wp-content', 45 | 'wp-includes', 46 | ], 47 | name: 'wordpress', 48 | }, 49 | ]; 50 | -------------------------------------------------------------------------------- /src/icons/folders/x.ts: -------------------------------------------------------------------------------- 1 | export const xFolders = { 2 | folderNames: ['xstate', 'machine', 'machines'], 3 | name: 'xstate', 4 | }; 5 | -------------------------------------------------------------------------------- /src/icons/folders/y.ts: -------------------------------------------------------------------------------- 1 | export const yFolders = { 2 | folderNames: ['yarn'], 3 | name: 'yarn', 4 | }; 5 | -------------------------------------------------------------------------------- /src/icons/folders/z.ts: -------------------------------------------------------------------------------- 1 | export const zFolders = { 2 | folderNames: ['zod'], 3 | name: 'zod', 4 | }; 5 | -------------------------------------------------------------------------------- /src/icons/generators/AbstractJsonGenerator.ts: -------------------------------------------------------------------------------- 1 | import type { IconConfiguration } from 'src/models/IconConfiguration'; 2 | import type { AtomConfig } from 'src/@types/config'; 3 | 4 | export abstract class AbstractJsonGenerator { 5 | protected constructor(protected readonly atomConfig: AtomConfig, protected readonly iconConfig: IconConfiguration) {} 6 | } 7 | -------------------------------------------------------------------------------- /src/icons/generators/FolderColorService.ts: -------------------------------------------------------------------------------- 1 | import { isValidHexColorCode } from 'src/helpers/utils'; 2 | 3 | class FolderColorService { 4 | /** 5 | * Apply the given opacity to the passed svg string 6 | * @param {string} svg 7 | * @param {string} folderColor 8 | * @returns {string} 9 | */ 10 | public applyFolderColor(svg: string, folderColor: string): string { 11 | let updatedRootElement: string = svg; 12 | 13 | if (folderColor !== undefined && isValidHexColorCode(folderColor)) { 14 | updatedRootElement = this.replaceFill(updatedRootElement, folderColor); 15 | } 16 | 17 | return updatedRootElement; 18 | } 19 | 20 | private replaceFill(svg: string, folderColor: string): string { 21 | const pattern = new RegExp(/fill="#[\dA-Fa-f]{6}"/g); 22 | const themedPattern = new RegExp(/themed="true"/g); 23 | 24 | if (pattern.test(svg) && themedPattern.test(svg)) { 25 | return svg.replace(pattern, ` fill="${folderColor}"`); 26 | } 27 | return svg; 28 | } 29 | } 30 | 31 | export const folderColorService = new FolderColorService(); 32 | -------------------------------------------------------------------------------- /src/icons/generators/OpacityService.ts: -------------------------------------------------------------------------------- 1 | import { getSVGRootElement } from 'src/helpers/utils'; 2 | 3 | class OpacityService { 4 | /** 5 | * Apply the given opacity to the passed svg string 6 | * @param {string} svg 7 | * @param {number} opacity 8 | * @returns {string} 9 | */ 10 | public applyOpacity(svg: string, opacity: number): string { 11 | const svgRootElement = getSVGRootElement(svg); 12 | if (!svgRootElement) return svg; 13 | 14 | let updatedRootElement: string; 15 | 16 | if (opacity !== undefined && opacity < 1) { 17 | updatedRootElement = this.addOpacityAttribute(svgRootElement, opacity); 18 | } else { 19 | updatedRootElement = this.removeOpacityAttribute(svgRootElement); 20 | } 21 | 22 | return svg.replace(/]*>/, updatedRootElement); 23 | } 24 | 25 | private addOpacityAttribute(svgRoot: string, opacity: number): string { 26 | const pattern = new RegExp(/\sopacity="[\d.]+"/); 27 | // if the opacity attribute already exists 28 | if (pattern.test(svgRoot)) { 29 | return svgRoot.replace(pattern, ` opacity="${opacity}"`); 30 | } else { 31 | return svgRoot.replace(/^]*>/, updatedRootElement); 26 | if (saturation !== undefined && saturation < 1) { 27 | updatedSVG = this.addFilterElement(updatedSVG, saturation); 28 | } 29 | else { 30 | updatedSVG = this.removeFilterElement(updatedSVG); 31 | } 32 | 33 | return updatedSVG; 34 | } 35 | 36 | private addFilterAttribute(svgRoot: string): string { 37 | const pattern = new RegExp(/\sfilter="[^"]+?"/); 38 | // if the filter attribute already exists 39 | if (pattern.test(svgRoot)) { 40 | return svgRoot.replace(pattern, ' filter="url(#saturation)"'); 41 | } 42 | else { 43 | return svgRoot.replace(/^(.*<\/svg>)/); 54 | const filterElement = ``; 55 | if (pattern.test(svg)) { 56 | return svg.replace(pattern, `${filterElement}$1`); 57 | } 58 | else { 59 | return svg.replace(/<\/svg>/, `${filterElement}`); 60 | } 61 | } 62 | 63 | private removeFilterElement(svg: string) { 64 | const pattern = new RegExp(/(.*<\/svg>)/); 65 | return svg.replace(pattern, '$1'); 66 | } 67 | } 68 | 69 | export const saturationService = new SaturationService(); 70 | -------------------------------------------------------------------------------- /src/icons/generators/index.ts: -------------------------------------------------------------------------------- 1 | export { FileJsonGenerator } from './FileJsonGenerator'; 2 | export { IconThemeGenerator } from './IconThemeGenerator'; 3 | export { FolderJsonGenerator } from './FolderJsonGenerator'; 4 | export { AbstractJsonGenerator } from './AbstractJsonGenerator'; 5 | export { LanguageJsonGenerator } from './LanguageJsonGenerator'; 6 | -------------------------------------------------------------------------------- /src/icons/index.ts: -------------------------------------------------------------------------------- 1 | export { fileIcons } from './fileIcons'; 2 | export { folderIcons } from './folderIcons'; 3 | export { languageIcons } from './languageIcons'; 4 | -------------------------------------------------------------------------------- /src/models/IconConfiguration.ts: -------------------------------------------------------------------------------- 1 | import type { AtomConfig } from 'src/@types/config'; 2 | 3 | type IconDefinition = { 4 | iconPath: string; 5 | }; 6 | 7 | /** 8 | * A model representing the icon theme configuration. 9 | * See https://code.visualstudio.com/api/extension-guides/file-icon-theme 10 | */ 11 | export class IconConfiguration { 12 | /** 13 | * Path to the fallback default file icon 14 | */ 15 | file?: string; 16 | /** 17 | * Path to the fallback default folder icon 18 | */ 19 | folder?: string; 20 | /** 21 | * Path to the fallback default folder icon when expanded 22 | */ 23 | folderExpanded?: string; 24 | 25 | /** 26 | * Associate folder names to paths 27 | */ 28 | folderNames?: Record; 29 | /** 30 | * Associate folder names to paths when expanded 31 | * @type {Record} 32 | */ 33 | folderNamesExpanded?: Record; 34 | 35 | /** 36 | * Root folder icon 37 | */ 38 | rootFolder?: string; 39 | /** 40 | * Root folder icon when expanded 41 | */ 42 | rootFolderExpanded?: string; 43 | 44 | /** 45 | * Associate file extensions to paths 46 | */ 47 | fileExtensions?: Record; 48 | /** 49 | * Associate file names to paths 50 | */ 51 | fileNames?: Record; 52 | 53 | /** 54 | * Associate language ids to paths 55 | */ 56 | languageIds?: Record; 57 | 58 | /** 59 | * Associate icon definitions to paths 60 | * @type {Record} 61 | */ 62 | iconDefinitions?: Record; 63 | 64 | /** 65 | * Light variants 66 | * @type {IconConfiguration} 67 | */ 68 | light?: IconConfiguration; 69 | /** 70 | * High contrast variants 71 | * @type {IconConfiguration} 72 | */ 73 | highContrast?: IconConfiguration; 74 | 75 | /** 76 | * Atom file config 77 | */ 78 | atomConfig?: Partial; 79 | 80 | constructor(options: Partial = {}) { 81 | this.iconDefinitions = {}; 82 | 83 | this.folderNames = {}; 84 | this.folderNamesExpanded = {}; 85 | 86 | this.fileExtensions = {}; 87 | this.fileNames = {}; 88 | 89 | this.languageIds = {}; 90 | 91 | this.light = { 92 | fileExtensions: {}, 93 | fileNames: {}, 94 | }; 95 | 96 | this.highContrast = { 97 | fileExtensions: {}, 98 | fileNames: {}, 99 | }; 100 | 101 | this.atomConfig = options; 102 | } 103 | } 104 | -------------------------------------------------------------------------------- /src/models/ProductConfiguration.ts: -------------------------------------------------------------------------------- 1 | import { EXTENSION_KEY, FONT_NAME } from 'src/helpers/constants'; 2 | 3 | import type { AtomConfig } from 'src/@types/config'; 4 | 5 | type IconDefinition = { 6 | fontCharacter: string; 7 | }; 8 | 9 | type FontDefinition = { 10 | id: string; 11 | src: Array<{ format: 'woff', path: string }>; 12 | style: 'normal'; 13 | weight: 'normal'; 14 | } 15 | 16 | /** 17 | * A model representing the icon theme configuration. 18 | * See https://code.visualstudio.com/api/extension-guides/file-icon-theme 19 | */ 20 | export class ProductConfiguration { 21 | 22 | /** 23 | * Associate icon definitions to font characters. 24 | * @type {Record} 25 | */ 26 | iconDefinitions: Record; 27 | 28 | /** 29 | * Font definition. 30 | * @type {FontDefinition[]} 31 | */ 32 | fonts: FontDefinition[] = [ 33 | { 34 | 'id': EXTENSION_KEY, 35 | 'src': [ 36 | { 37 | 'format': 'woff', 38 | 'path': `../productIcons/${FONT_NAME}`, 39 | }, 40 | ], 41 | 'style': 'normal', 42 | 'weight': 'normal', 43 | }, 44 | ]; 45 | 46 | /** 47 | * Atom file config 48 | */ 49 | atomConfig?: Partial; 50 | 51 | constructor(options: Partial = {}) { 52 | this.iconDefinitions = {}; 53 | 54 | this.atomConfig = options; 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /src/pickers/ArrowThemePicker.ts: -------------------------------------------------------------------------------- 1 | import i18next from 'i18next'; 2 | import { ArrowTheme } from 'src/@types/config'; 3 | import { getArrowThemes } from 'src/helpers/arrowThemes'; 4 | import { findEnumKey } from 'src/helpers/utils'; 5 | import { configService } from 'src/services/ConfigService'; 6 | import { type QuickPickItem, window, QuickPickItemKind } from 'vscode'; 7 | 8 | type ArrowThemeQuickPickItem = QuickPickItem & { id?: ArrowTheme }; 9 | 10 | export class ArrowThemePicker { 11 | async openQuickPicker() { 12 | const currentTheme = configService.arrowTheme; 13 | const response = await this.showQuickPickItems(currentTheme); 14 | 15 | if (response) { 16 | this.handleQuickPickActions(response); 17 | } 18 | } 19 | 20 | /** 21 | * Show quick pick items for folder themes 22 | * @private 23 | * @param currentTheme 24 | */ 25 | private showQuickPickItems(currentTheme: ArrowTheme) { 26 | const isNoneActive = this.isNoneActive(currentTheme); 27 | const arrowThemes = getArrowThemes(); 28 | 29 | const options = arrowThemes.map((theme): ArrowThemeQuickPickItem => { 30 | const isSeparator = theme.kind === QuickPickItemKind.Separator; 31 | 32 | if (isSeparator || !theme.id) { 33 | return { 34 | kind: QuickPickItemKind.Separator, 35 | label: '', 36 | }; 37 | } 38 | 39 | const picked = isNoneActive ? false : this.isThemePicked(currentTheme, theme.id); 40 | return ({ 41 | description: theme.title, 42 | detail: theme.description, 43 | id: theme.id, 44 | label: picked ? '$(check)' : theme.icon ?? '', 45 | picked: picked, 46 | }); 47 | }); 48 | 49 | return window.showQuickPick(options, { 50 | ignoreFocusOut: false, 51 | matchOnDescription: true, 52 | matchOnDetail: true, 53 | placeHolder: i18next.t('arrowThemes.pickTheme'), 54 | }); 55 | } 56 | 57 | /** 58 | * Checks if no theme is active 59 | * @returns {boolean} 60 | * @private 61 | * @param arrowTheme 62 | */ 63 | private isNoneActive(arrowTheme: ArrowTheme): boolean { 64 | return arrowTheme === ArrowTheme.None; 65 | } 66 | 67 | /** 68 | * Handle selection 69 | * @private 70 | * @param decision 71 | */ 72 | private handleQuickPickActions(decision: ArrowThemeQuickPickItem): void { 73 | if (!decision || !decision.id) return; 74 | const enumKey = findEnumKey(ArrowTheme, decision.id); 75 | 76 | configService.arrowTheme = enumKey ? ArrowTheme[enumKey] : ArrowTheme.None; 77 | } 78 | 79 | /** 80 | * Checks if a theme is active 81 | * @param {FolderTheme} currentTheme 82 | * @param {FolderTheme} id 83 | * @returns {boolean} 84 | * @private 85 | */ 86 | private isThemePicked(currentTheme: ArrowTheme, id: ArrowTheme) { 87 | return currentTheme === id; 88 | } 89 | } 90 | 91 | export const arrowThemePicker = new ArrowThemePicker(); 92 | -------------------------------------------------------------------------------- /src/pickers/FolderThemePicker.ts: -------------------------------------------------------------------------------- 1 | import i18next from 'i18next'; 2 | import { FolderTheme } from 'src/@types/config'; 3 | import { getFolderThemes } from 'src/helpers/folderThemes'; 4 | import { findEnumKey } from 'src/helpers/utils'; 5 | import { configService } from 'src/services/ConfigService'; 6 | import { type QuickPickItem, window, QuickPickItemKind } from 'vscode'; 7 | 8 | class FolderThemePicker { 9 | async openQuickPicker() { 10 | const currentTheme = configService.folderTheme; 11 | const response = await this.showQuickPickItems(currentTheme); 12 | 13 | if (response) { 14 | this.handleQuickPickActions(response); 15 | } 16 | } 17 | 18 | /** 19 | * Show quick pick items for folder themes 20 | * @private 21 | * @param currentTheme 22 | */ 23 | private showQuickPickItems(currentTheme: FolderTheme) { 24 | const isNoneActive = this.isNoneActive(currentTheme); 25 | const folderThemes = getFolderThemes(); 26 | 27 | const options = folderThemes.map((theme): QuickPickItem => { 28 | const isSeparator = theme.kind === QuickPickItemKind.Separator; 29 | 30 | if (isSeparator || !theme.id) { 31 | return { 32 | kind: QuickPickItemKind.Separator, 33 | label: '', 34 | }; 35 | } 36 | 37 | const picked = isNoneActive ? false : this.isThemePicked(currentTheme, theme.id); 38 | return ({ 39 | description: theme.title, 40 | detail: theme.description, 41 | label: picked ? '$(check)' : theme.icon ?? '', 42 | picked: picked, 43 | }); 44 | }); 45 | 46 | return window.showQuickPick(options, { 47 | ignoreFocusOut: false, 48 | matchOnDescription: true, 49 | matchOnDetail: true, 50 | placeHolder: i18next.t('folders.toggleIcons'), 51 | }); 52 | } 53 | 54 | /** 55 | * Checks if no theme is active 56 | * @returns {boolean} 57 | * @private 58 | * @param folderTheme 59 | */ 60 | private isNoneActive(folderTheme: FolderTheme): boolean { 61 | return folderTheme === FolderTheme.None; 62 | } 63 | 64 | /** 65 | * Handle selection 66 | * @private 67 | * @param decision 68 | */ 69 | private handleQuickPickActions(decision: QuickPickItem): void { 70 | if (!decision || !decision.description) return; 71 | const enumKey = findEnumKey(FolderTheme, decision.description.toLowerCase()); 72 | 73 | configService.folderTheme = enumKey ? FolderTheme[enumKey] : FolderTheme.None; 74 | } 75 | 76 | /** 77 | * Checks if a theme is active 78 | * @param {FolderTheme} currentTheme 79 | * @param {FolderTheme} id 80 | * @returns {boolean} 81 | * @private 82 | */ 83 | private isThemePicked(currentTheme: FolderTheme, id: FolderTheme) { 84 | return currentTheme === id; 85 | } 86 | } 87 | 88 | export const folderThemePicker = new FolderThemePicker(); 89 | -------------------------------------------------------------------------------- /src/pickers/IconPackPicker.ts: -------------------------------------------------------------------------------- 1 | import i18next from 'i18next'; 2 | import { IconPack } from 'src/@types/config'; 3 | import { getIconPacks } from 'src/helpers/iconPacks'; 4 | import { findEnumKey } from 'src/helpers/utils'; 5 | import { configService } from 'src/services/ConfigService'; 6 | import { type QuickPickItem, QuickPickItemKind, window } from 'vscode'; 7 | 8 | class IconPackPicker { 9 | async openQuickPicker() { 10 | const activeIconPacks = configService.activeIconPacks; 11 | const response = await this.showQuickPickItems(activeIconPacks); 12 | 13 | if (response) { 14 | this.handleQuickPickActions(response); 15 | } 16 | } 17 | 18 | /** 19 | * Show quick pick items for icon packs 20 | * @param {IconPack} activeIconPacks current active pack 21 | * @private 22 | */ 23 | private showQuickPickItems(activeIconPacks: IconPack[]) { 24 | const isNoneActive = this.isNoneActive(activeIconPacks); 25 | const iconPacks = getIconPacks(); 26 | 27 | const options: QuickPickItem[] = iconPacks.map((pack) => { 28 | const isSeparator = pack.kind === QuickPickItemKind.Separator; 29 | 30 | if (isSeparator || !pack.id) { 31 | return { 32 | kind: QuickPickItemKind.Separator, 33 | label: '', 34 | }; 35 | } 36 | 37 | return { 38 | description: pack.title, 39 | detail: i18next.t('iconPacks.description', { name: pack.title }), 40 | label: pack.icon ?? '', 41 | picked: isNoneActive ? false : this.isPackActive(activeIconPacks, pack.id), 42 | }; 43 | }); 44 | 45 | return window.showQuickPick(options, { 46 | canPickMany: true, 47 | ignoreFocusOut: false, 48 | matchOnDescription: true, 49 | matchOnDetail: true, 50 | placeHolder: i18next.t('iconPacks.selectPack'), 51 | }); 52 | } 53 | 54 | /** 55 | * Handle selection 56 | * @private 57 | * @param actions 58 | */ 59 | private handleQuickPickActions(actions: QuickPickItem[]): void { 60 | if (!actions || actions.length === 0) return; 61 | 62 | const decisions = actions.map((action) => action.description?.toLowerCase() ?? ''); 63 | configService.activeIconPacks = this.findIconPacks(decisions); 64 | } 65 | 66 | /** 67 | * Checks if the current pack is selected 68 | * @param {IconPack} activeIconPacks 69 | * @param {string} pack 70 | * @returns {boolean} 71 | * @private 72 | */ 73 | private isPackActive(activeIconPacks: IconPack[], pack: IconPack): boolean { 74 | return activeIconPacks.some((activePack) => activePack.toLowerCase() === pack.toLowerCase()); 75 | } 76 | 77 | /** 78 | * Checks if no pack is active 79 | * @param {IconPack} activeIconPacks 80 | * @returns {boolean} 81 | * @private 82 | */ 83 | private isNoneActive(activeIconPacks: IconPack[]): boolean { 84 | return this.isPackActive(activeIconPacks, IconPack.None); 85 | } 86 | 87 | /** 88 | * Find the icon pack of the selected decision 89 | * @returns {IconPack} 90 | * @private 91 | * @param decisions 92 | */ 93 | private findIconPacks(decisions: string[]): IconPack[] { 94 | return decisions.map((decision) => { 95 | const enumKey = findEnumKey(IconPack, decision); 96 | return enumKey ? IconPack[enumKey] : IconPack.None; 97 | }); 98 | } 99 | } 100 | 101 | export const iconPackPicker = new IconPackPicker(); 102 | -------------------------------------------------------------------------------- /src/pickers/OpacityPicker.ts: -------------------------------------------------------------------------------- 1 | import i18next from 'i18next'; 2 | import { getOpacities } from 'src/helpers/opacities'; 3 | import { configService } from 'src/services/ConfigService'; 4 | import { type QuickPickItem, window } from 'vscode'; 5 | 6 | class OpacityPicker { 7 | async openQuickPicker() { 8 | const opacity = configService.opacity; 9 | const response = await this.showQuickPickItems(opacity); 10 | 11 | if (response) { 12 | this.handleQuickPickActions(response); 13 | } 14 | } 15 | 16 | /** 17 | * Show quick pick items for opacity options 18 | * @private 19 | * @param opacity 20 | */ 21 | private showQuickPickItems(opacity: number) { 22 | const opacities = getOpacities(); 23 | 24 | const options = opacities.map((item): QuickPickItem => { 25 | const picked = this.isOpacityPicked(opacity, item.value); 26 | return ({ 27 | description: item.title, 28 | detail: item.description, 29 | kind: item.kind, 30 | label: picked ? '$(check)' : '', 31 | picked, 32 | }); 33 | }); 34 | 35 | return window.showQuickPick(options, { 36 | ignoreFocusOut: false, 37 | matchOnDescription: true, 38 | matchOnDetail: true, 39 | placeHolder: i18next.t('selectOpacity'), 40 | }); 41 | } 42 | 43 | /** 44 | * Handle selection 45 | * @private 46 | * @param decision 47 | */ 48 | private async handleQuickPickActions(decision: QuickPickItem) { 49 | if (!decision || !decision.description) return; 50 | 51 | if (decision.description === i18next.t('custom')) { 52 | await this.handleCustom(); 53 | } 54 | else { 55 | configService.opacity = this.findOpacity(decision); 56 | } 57 | } 58 | 59 | /** 60 | * Finds the opacity in the options list 61 | * @param {QuickPickItem} decision 62 | * @returns {number} 63 | * @private 64 | */ 65 | private findOpacity(decision: QuickPickItem): number { 66 | const foundTheme = getOpacities().find((item) => item.title === decision.description); 67 | return foundTheme?.value ?? 1; 68 | } 69 | 70 | /** 71 | * Handles the custom opacity input 72 | * @returns {Promise} 73 | * @private 74 | */ 75 | private async handleCustom() { 76 | const opacity = await window.showInputBox({ 77 | ignoreFocusOut: true, 78 | placeHolder: i18next.t('opacity.inputPlaceholder'), 79 | validateInput: (value) => { 80 | if (!this.isValid(Number(value))) { 81 | return i18next.t('opacity.wrongValue'); 82 | } 83 | return; 84 | }, 85 | }); 86 | 87 | if (opacity) { 88 | configService.opacity = Number(opacity); 89 | } 90 | } 91 | 92 | private isOpacityPicked(opacity: number, value: number | undefined) { 93 | return opacity === value; 94 | } 95 | 96 | /** 97 | * Validate the opacity value. 98 | * @param opacity Opacity value 99 | */ 100 | private isValid(opacity: number | undefined) { 101 | return opacity !== undefined && opacity <= 1 && opacity >= 0; 102 | } 103 | } 104 | 105 | export const opacityPicker = new OpacityPicker(); 106 | -------------------------------------------------------------------------------- /src/pickers/SaturationPicker.ts: -------------------------------------------------------------------------------- 1 | import i18next from 'i18next'; 2 | import { getSaturations } from 'src/helpers/saturations'; 3 | import { configService } from 'src/services/ConfigService'; 4 | import { type QuickPickItem, window } from 'vscode'; 5 | 6 | class SaturationPicker { 7 | async openQuickPicker() { 8 | const saturation = configService.saturation; 9 | const response = await this.showQuickPickItems(saturation); 10 | 11 | if (response) { 12 | this.handleQuickPickActions(response); 13 | } 14 | } 15 | 16 | /** 17 | * Show quick pick items for saturation options 18 | * @private 19 | * @param saturation 20 | */ 21 | private showQuickPickItems(saturation: number) { 22 | const saturations = getSaturations(); 23 | 24 | const options = saturations.map((item): QuickPickItem => { 25 | const picked = this.isSaturationPicked(saturation, item.value); 26 | return ({ 27 | description: item.title, 28 | detail: item.description, 29 | kind: item.kind, 30 | label: picked ? '$(check)' : '', 31 | picked, 32 | }); 33 | }); 34 | 35 | return window.showQuickPick(options, { 36 | ignoreFocusOut: false, 37 | matchOnDescription: true, 38 | matchOnDetail: true, 39 | placeHolder: i18next.t('selectSaturation'), 40 | }); 41 | } 42 | 43 | /** 44 | * Handle selection 45 | * @private 46 | * @param decision 47 | */ 48 | private async handleQuickPickActions(decision: QuickPickItem) { 49 | if (!decision || !decision.description) return; 50 | 51 | if (decision.description === i18next.t('custom')) { 52 | await this.handleCustom(); 53 | } 54 | else { 55 | configService.saturation = this.findSaturation(decision); 56 | } 57 | } 58 | 59 | /** 60 | * Finds the opacity in the options list 61 | * @param {QuickPickItem} decision 62 | * @returns {number} 63 | * @private 64 | */ 65 | private findSaturation(decision: QuickPickItem): number { 66 | const foundTheme = getSaturations().find((item) => item.title === decision.description); 67 | return foundTheme?.value ?? 1; 68 | } 69 | 70 | /** 71 | * Handles the custom opacity input 72 | * @returns {Promise} 73 | * @private 74 | */ 75 | private async handleCustom() { 76 | const opacity = await window.showInputBox({ 77 | ignoreFocusOut: true, 78 | placeHolder: i18next.t('saturation.inputPlaceholder'), 79 | validateInput: (value) => { 80 | if (!this.isValid(Number(value))) { 81 | return i18next.t('saturation.wrongValue'); 82 | } 83 | return; 84 | }, 85 | }); 86 | 87 | if (opacity) { 88 | configService.saturation = Number(opacity); 89 | } 90 | } 91 | 92 | private isSaturationPicked(opacity: number, value: number | undefined) { 93 | return opacity === value; 94 | } 95 | 96 | /** 97 | * Validate the saturation value. 98 | * @param saturation Saturation value 99 | */ 100 | private isValid(saturation: number | undefined) { 101 | return saturation !== undefined && saturation <= 1 && saturation >= 0; 102 | } 103 | } 104 | 105 | export const saturationPicker = new SaturationPicker(); 106 | -------------------------------------------------------------------------------- /src/pickers/index.ts: -------------------------------------------------------------------------------- 1 | export { opacityPicker } from './OpacityPicker'; 2 | export { iconPackPicker } from './IconPackPicker'; 3 | export { saturationPicker } from './SaturationPicker'; 4 | export { folderColorPicker } from './FolderColorPicker'; 5 | export { folderThemePicker } from './FolderThemePicker'; 6 | export { arrowThemePicker } from './ArrowThemePicker'; 7 | -------------------------------------------------------------------------------- /src/scripts/helpers/painter.ts: -------------------------------------------------------------------------------- 1 | // colored console output 2 | 3 | export const red = (value: string) => `\x1b[31m${value}\x1b[0m`; 4 | export const green = (value: string) => `\x1b[32m${value}\x1b[0m`; 5 | export const yellow = (value: string) => `\x1b[33m${value}\x1b[0m`; 6 | -------------------------------------------------------------------------------- /src/scripts/helpers/screenshots.ts: -------------------------------------------------------------------------------- 1 | import path from 'path'; 2 | import puppeteer from 'puppeteer'; 3 | 4 | /** 5 | * Create a screenshot from an HTML file and save it as image. 6 | * @param filePath Path of an HTML file 7 | * @param fileName Name of the output image 8 | */ 9 | export const createScreenshot = async (filePath: string, fileName: string) => { 10 | try { 11 | const htmlFilePath = path.join('file:', filePath); 12 | const browser = await puppeteer.launch(); 13 | const page = await browser.newPage(); 14 | await page.setViewport({ 15 | height: 10, 16 | width: 1000, 17 | }); 18 | 19 | await page.goto(htmlFilePath); 20 | 21 | await page.screenshot({ 22 | path: `images/${fileName}.png`, 23 | omitBackground: true, 24 | fullPage: true, 25 | }); 26 | 27 | await browser.close(); 28 | } catch (error) { 29 | console.error(error); 30 | throw Error('Could not create screenshot for a preview'); 31 | } 32 | }; 33 | -------------------------------------------------------------------------------- /src/scripts/icons/checks/runChecks.ts: -------------------------------------------------------------------------------- 1 | import { checkIconAvailability } from './checkIconAvailability'; 2 | import { checkIconConflicts } from './checkIconConflicts'; 3 | import { checkIconUsage } from './checkIconUsage'; 4 | 5 | if (false) { 6 | checkIconAvailability(); 7 | checkIconUsage(); 8 | checkIconConflicts(); 9 | } -------------------------------------------------------------------------------- /src/scripts/icons/generateJson.ts: -------------------------------------------------------------------------------- 1 | import { IconThemeGenerator } from 'src/icons/generators/IconThemeGenerator'; 2 | import { ProductThemeGenerator } from 'src/icons/generators/ProductThemeGenerator'; 3 | 4 | const iconThemeGenerator = new IconThemeGenerator(); 5 | iconThemeGenerator.createJsonTheme(); 6 | 7 | const productThemeGenerator = new ProductThemeGenerator(); 8 | productThemeGenerator.createJsonTheme(); 9 | -------------------------------------------------------------------------------- /src/scripts/icons/webfont.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable unicorn/prefer-top-level-await */ 2 | import { writeJSONSync } from 'fs-extra'; 3 | import { writeFileSync } from 'node:fs'; 4 | import { webfont } from 'webfont'; 5 | 6 | const fontName = 'a-file-icon-vscode'; 7 | const START_CODEPOINT = 0xEA_00; 8 | 9 | const formatUnicode = (codepoint: number | string) => { 10 | return `\\${codepoint.toString(16)}`; 11 | }; 12 | 13 | webfont({ 14 | centerHorizontally: true, 15 | files: 'iconGenerator/assets/icons/*/*.svg', 16 | fixedWidth: true, 17 | fontHeight: 1024, 18 | fontName, 19 | formats: ['woff'], 20 | glyphTransformFn: (object) => { 21 | const filePath = object as { path?: string }; 22 | 23 | console.log('filePath %s - %s', filePath.path, object.name); 24 | switch (true) { 25 | case filePath.path?.includes('foldersOpen/'): { 26 | object.name = `folder-open_${object.name}`; 27 | break; 28 | } 29 | case filePath.path?.includes('folders/'): { 30 | object.name = `folder_${object.name}`; 31 | break; 32 | } 33 | case filePath.path?.includes('files/'): { 34 | object.name = `file_${object.name}`; 35 | break; 36 | } 37 | } 38 | 39 | return object; 40 | }, 41 | normalize: true, 42 | prependUnicode: false, 43 | startUnicode: START_CODEPOINT, 44 | }) 45 | .then((result) => { 46 | const icons = result.glyphsData ?? []; 47 | 48 | writeJSONSync(`productIcons/${fontName}-product-icon-theme.json`, 49 | { 50 | fonts: [ 51 | { 52 | id: fontName, 53 | src: [ 54 | { 55 | format: 'woff', 56 | path: `./${fontName}.woff`, 57 | }, 58 | ], 59 | style: 'normal', 60 | weight: 'normal', 61 | }, 62 | ], 63 | 64 | iconDefinitions: Object.fromEntries(icons.map((icon, index) => [icon.metadata?.name, { 65 | fontCharacter: formatUnicode(START_CODEPOINT + index), 66 | }])), 67 | 68 | }, 69 | { spaces: 2 }, 70 | ); 71 | 72 | writeFileSync('productIcons/a-file-icon-vscode.woff', result.woff as Uint8Array, 'utf8'); 73 | }) 74 | .catch((error) => { 75 | console.error(error); 76 | }); -------------------------------------------------------------------------------- /src/services/ConfigChangeDetector.ts: -------------------------------------------------------------------------------- 1 | import { getIconThemeFile, getProductThemeFile } from 'src/helpers/vscodeUtils'; 2 | import { IconThemeGenerator } from 'src/icons/generators'; 3 | import { ProductThemeGenerator } from 'src/icons/generators/ProductThemeGenerator'; 4 | import { configService } from 'src/services/ConfigService'; 5 | 6 | import type { AtomConfig } from 'src/@types/config'; 7 | import type { IconConfiguration } from 'src/models/IconConfiguration'; 8 | import type { ProductConfiguration } from 'src/models/ProductConfiguration'; 9 | 10 | /** 11 | * This class is responsible for detecting changes in the config file and 12 | * updating the icon theme accordingly. 13 | */ 14 | class ConfigChangeDetector { 15 | listenForChanges() { 16 | const iconDelta = this.getIconDelta(); 17 | const productDelta = this.getProductDelta(); 18 | 19 | if (Object.keys(iconDelta).length > 0) { 20 | const iconThemeGenerator = new IconThemeGenerator(iconDelta); 21 | iconThemeGenerator.createJsonTheme(); 22 | } 23 | 24 | if (Object.keys(productDelta).length > 0) { 25 | const productThemeGenerator = new ProductThemeGenerator(productDelta); 26 | productThemeGenerator.createJsonTheme(); 27 | } 28 | } 29 | 30 | private getIconDelta() { 31 | const oldConfig = getIconThemeFile(); 32 | return this.compareIconConfigs(oldConfig); 33 | } 34 | 35 | private getProductDelta() { 36 | const oldConfig = getProductThemeFile(); 37 | return this.compareProductConfigs(oldConfig); 38 | } 39 | 40 | private compareIconConfigs(oldConfig: IconConfiguration): Partial { 41 | return configService.getIconConfigChanges(oldConfig); 42 | } 43 | 44 | private compareProductConfigs(oldConfig: ProductConfiguration): Partial { 45 | return configService.getProductConfigChanges(oldConfig); 46 | } 47 | } 48 | 49 | export const configChangeDetector = new ConfigChangeDetector(); 50 | -------------------------------------------------------------------------------- /src/services/LoggingService.ts: -------------------------------------------------------------------------------- 1 | import { window, LogLevel } from 'vscode'; 2 | 3 | export class LoggingService { 4 | public logLevel: LogLevel = LogLevel.Info; 5 | private outputChannel = window.createOutputChannel('Atom Material Icons'); 6 | 7 | /** 8 | * Logs a debug message 9 | * @param {string} message 10 | * @param data 11 | */ 12 | public debug(message: string, data?: unknown) { 13 | if ([LogLevel.Off, LogLevel.Info, LogLevel.Warning, LogLevel.Error].includes(this.logLevel)) { 14 | return; 15 | } 16 | 17 | this.log(message, 'DEBUG'); 18 | if (data) { 19 | this.logObject(data); 20 | } 21 | } 22 | 23 | /** 24 | * Logs an info message 25 | * @param {string} message 26 | * @param data 27 | */ 28 | public info(message: string, data?: unknown) { 29 | if ([LogLevel.Off, LogLevel.Warning, LogLevel.Error].includes(this.logLevel)) { 30 | return; 31 | } 32 | 33 | this.log(message, 'INFO'); 34 | if (data) { 35 | this.logObject(data); 36 | } 37 | } 38 | 39 | /** 40 | * Logs a warning 41 | * @param {string} message 42 | * @param data 43 | */ 44 | public warn(message: string, data?: unknown) { 45 | if ([LogLevel.Off, LogLevel.Error].includes(this.logLevel)) { 46 | return; 47 | } 48 | 49 | this.log(message, 'WARN'); 50 | if (data) { 51 | this.logObject(data); 52 | } 53 | } 54 | 55 | /** 56 | * Logs an error 57 | * @param {string} message 58 | * @param data 59 | */ 60 | public error(message: string, data?: unknown) { 61 | if ([LogLevel.Off].includes(this.logLevel)) { 62 | return; 63 | } 64 | 65 | this.log(message, 'ERROR'); 66 | if (data) { 67 | this.logObject(data); 68 | } 69 | } 70 | 71 | /** 72 | * Show the output channel 73 | */ 74 | public show() { 75 | this.outputChannel.show(); 76 | } 77 | 78 | private log(message: string, prefix: string): void { 79 | const title = new Date().toLocaleTimeString(); 80 | this.outputChannel.appendLine(`["${prefix}" - ${title}] ${message}`); 81 | } 82 | 83 | private logObject(data: unknown): void { 84 | const message = JSON.stringify(data, null, 2); 85 | this.outputChannel.appendLine(message); 86 | } 87 | } 88 | 89 | export const logger = new LoggingService(); -------------------------------------------------------------------------------- /src/services/UpdatesService.ts: -------------------------------------------------------------------------------- 1 | import { UpdateStatus } from 'src/@types/config'; 2 | import { EXTENSION_ID, VERSION_KEY } from 'src/helpers/constants'; 3 | import { configService } from 'src/services/ConfigService'; 4 | import { logger } from 'src/services/LoggingService'; 5 | import { extensions } from 'vscode'; 6 | 7 | import type { Memento } from 'vscode'; 8 | 9 | export class UpdatesService { 10 | /** 11 | * Checks the current version of the plugin, prompting for updates if needed 12 | * @param {Memento} state 13 | */ 14 | async checkUpdateStatus(state: Memento) { 15 | try { 16 | const ownVersion = state.get(VERSION_KEY); 17 | const pluginVersion = this.getPluginVersion(); 18 | logger.info(`Current Version: ${ownVersion}, Plugin Version: ${pluginVersion}`); 19 | 20 | // First installation 21 | if (ownVersion === undefined || typeof ownVersion !== 'string') { 22 | await this.updateStateVersion(state); 23 | 24 | return configService.isAlreadyActivated() 25 | ? UpdateStatus.Updated 26 | : UpdateStatus.NeverUsedBefore; 27 | } 28 | else if (pluginVersion && this.isGreaterVersion(pluginVersion, ownVersion)) { 29 | await this.updateStateVersion(state); 30 | 31 | return UpdateStatus.Updated; 32 | } 33 | else { 34 | return UpdateStatus.Current; 35 | } 36 | } 37 | catch (error) { 38 | logger.error(String(error)); 39 | return UpdateStatus.Current; 40 | } 41 | } 42 | 43 | /** 44 | * Return the currently available version of the plugin 45 | * @returns {string | undefined} 46 | * @private 47 | */ 48 | getPluginVersion(): string | undefined { 49 | const extension = extensions.getExtension(EXTENSION_ID); 50 | 51 | return extension?.packageJSON.version; 52 | } 53 | 54 | /** 55 | * Update the state version with the one from the marketplace 56 | * @param {Memento} state 57 | * @returns {Promise} 58 | * @private 59 | */ 60 | private async updateStateVersion(state: Memento): Promise { 61 | const currentVersion = this.getPluginVersion(); 62 | if (currentVersion) { 63 | return state.update(VERSION_KEY, currentVersion); 64 | } 65 | } 66 | 67 | /** 68 | * Compares the plugin version to the state version. 69 | * @param {string} pluginVersion 70 | * @param {string} ownVersion 71 | * @returns {Boolean} 72 | * @private 73 | */ 74 | private isGreaterVersion(pluginVersion: string, ownVersion: string): boolean { 75 | return pluginVersion.localeCompare( 76 | ownVersion, 77 | undefined, 78 | { numeric: true, sensitivity: 'base' }, 79 | ) === 1; 80 | } 81 | } 82 | 83 | export const updatesService = new UpdatesService(); -------------------------------------------------------------------------------- /src/services/index.ts: -------------------------------------------------------------------------------- 1 | export { configService } from './ConfigService'; 2 | export { logger } from './LoggingService'; 3 | export { updatesService } from './UpdatesService'; 4 | export { configChangeDetector } from './ConfigChangeDetector'; 5 | export { notificationsService } from './NotificationsService'; -------------------------------------------------------------------------------- /src/web/extension.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * This method is called when the extension is activated. 3 | * It initializes the core functionality of the extension. 4 | */ 5 | export const activate = async () => { 6 | // do nothing 7 | }; 8 | 9 | /** This method is called when the extension is deactivated */ 10 | export const deactivate = () => { 11 | // do nothing 12 | }; 13 | -------------------------------------------------------------------------------- /svgo.config.js: -------------------------------------------------------------------------------- 1 | const { extendDefaultPlugins } = require('svgo'); 2 | 3 | module.exports = { 4 | precision: 2, 5 | plugins: extendDefaultPlugins([ 6 | 'removeDimensions', 7 | 'removeOffCanvasPaths', 8 | 'removeStyleElement', 9 | 'removeScriptElement', 10 | 'reusePaths', 11 | ]) 12 | } -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowSyntheticDefaultImports": true, 4 | "baseUrl": ".", 5 | "esModuleInterop": true, 6 | "incremental": true, 7 | "isolatedModules": true, 8 | "lib": [ 9 | "es2023", 10 | "dom" 11 | ], 12 | "module": "commonjs", 13 | "moduleResolution": "Node", 14 | "noFallthroughCasesInSwitch": true, 15 | "noImplicitAny": true, 16 | "noImplicitOverride": true, 17 | "noImplicitReturns": true, 18 | "noUnusedLocals": false, 19 | "noUnusedParameters": false, 20 | "outDir": "out", 21 | "resolveJsonModule": true, 22 | "sourceMap": true, 23 | "strict": true, 24 | "strictNullChecks": true, 25 | "strictPropertyInitialization": true, 26 | "target": "es2020" 27 | }, 28 | "ts-node": { 29 | "require": [ 30 | "tsconfig-paths/register" 31 | ] 32 | }, 33 | "exclude": [ 34 | "iconGenerator/**/*" 35 | ] 36 | } 37 | --------------------------------------------------------------------------------