├── .nvmrc
├── .github
├── CODEOWNERS
├── FUNDING.yml
├── ISSUE_TEMPLATE
│ ├── icon_request.md
│ └── bug_report.md
└── workflows
│ ├── build.yml
│ └── release.yml
├── .markdownlintignore
├── bun.lockb
├── logo.png
├── docs
├── opacity.png
├── prodIcon.png
├── iconPacks.png
├── saturation.png
├── arrowStyles.png
├── folderColor.png
├── folderTheme.png
├── commandPalette.png
└── productIconTheme.png
├── src
├── icons
│ ├── folders
│ │ ├── y.ts
│ │ ├── z.ts
│ │ ├── x.ts
│ │ ├── q.ts
│ │ ├── o.ts
│ │ ├── l.ts
│ │ ├── index.ts
│ │ ├── u.ts
│ │ ├── k.ts
│ │ ├── h.ts
│ │ ├── j.ts
│ │ ├── w.ts
│ │ ├── n.ts
│ │ ├── b.ts
│ │ ├── g.ts
│ │ ├── f.ts
│ │ ├── e.ts
│ │ ├── v.ts
│ │ ├── p.ts
│ │ ├── d.ts
│ │ ├── i.ts
│ │ ├── t.ts
│ │ └── r.ts
│ ├── index.ts
│ ├── generators
│ │ ├── index.ts
│ │ ├── AbstractJsonGenerator.ts
│ │ ├── FolderColorService.ts
│ │ ├── OpacityService.ts
│ │ └── SaturationService.ts
│ ├── files
│ │ ├── binaries.ts
│ │ ├── archive.ts
│ │ ├── video.ts
│ │ ├── audio.ts
│ │ ├── numbers.ts
│ │ ├── q.ts
│ │ ├── index.ts
│ │ ├── z.ts
│ │ ├── images.ts
│ │ ├── least.ts
│ │ ├── y.ts
│ │ ├── x.ts
│ │ ├── config.ts
│ │ ├── u.ts
│ │ ├── custom.ts
│ │ ├── o.ts
│ │ └── languages.ts
│ ├── configUtils.ts
│ └── folderIcons.ts
├── @types
│ ├── types.ts
│ ├── i18next.d.ts
│ ├── languages.ts
│ └── config.ts
├── scripts
│ ├── helpers
│ │ ├── painter.ts
│ │ └── screenshots.ts
│ └── icons
│ │ ├── checks
│ │ └── runChecks.ts
│ │ ├── generateJson.ts
│ │ └── webfont.ts
├── services
│ ├── index.ts
│ ├── ConfigChangeDetector.ts
│ ├── LoggingService.ts
│ └── UpdatesService.ts
├── pickers
│ ├── index.ts
│ ├── FolderThemePicker.ts
│ ├── ArrowThemePicker.ts
│ ├── OpacityPicker.ts
│ ├── SaturationPicker.ts
│ └── IconPackPicker.ts
├── web
│ └── extension.ts
├── helpers
│ ├── customIcons.ts
│ ├── folderThemes.ts
│ ├── opacities.ts
│ ├── saturations.ts
│ ├── vscodeUtils.ts
│ ├── arrowThemes.ts
│ ├── constants.ts
│ └── utils.ts
├── models
│ ├── ProductConfiguration.ts
│ └── IconConfiguration.ts
├── i18n
│ ├── i18next.ts
│ └── locales
│ │ ├── zh-cn.json
│ │ ├── zh-tw.json
│ │ ├── ja.json
│ │ ├── en.json
│ │ ├── pl.json
│ │ ├── ru.json
│ │ ├── uk.json
│ │ ├── nl.json
│ │ ├── de.json
│ │ └── es.json
├── extension.ts
└── commands
│ └── commands.ts
├── .vscode
├── extensions.json
├── tasks.json
├── settings.json
└── launch.json
├── .gitmodules
├── productIcons
└── a-file-icon-vscode.woff
├── renovate.json
├── .commitlintrc.yml
├── .prettierrc
├── .idea
├── encodings.xml
├── codeStyles
│ └── codeStyleConfig.xml
├── inspectionProfiles
│ └── profiles_settings.xml
├── .gitignore
├── dictionaries
├── modules.xml
├── git_toolbox_prj.xml
├── vcs.xml
├── highlightedFiles.xml
└── a-file-icon-vscode.iml
├── .gitignore
├── svgo.config.js
├── .yamllint.yaml
├── .vscodeignore
├── .markdownlint.yaml
├── tsconfig.json
├── LICENSE.md
├── .svglintrc.js
├── esbuild.js
├── package.nls.zh-CN.json
├── package.nls.zh-TW.json
├── .all-contributorsrc
├── package.nls.ja.json
├── package.nls.ru.json
├── package.nls.es.json
├── package.nls.pl.json
├── package.nls.pt-BR.json
├── package.nls.nl.json
├── package.nls.fr.json
├── .releaserc.js
├── package.nls.pt-PT.json
├── package.nls.de.json
└── package.nls.json
/.nvmrc:
--------------------------------------------------------------------------------
1 | 22
2 |
--------------------------------------------------------------------------------
/.github/CODEOWNERS:
--------------------------------------------------------------------------------
1 | @mallowigi
--------------------------------------------------------------------------------
/.markdownlintignore:
--------------------------------------------------------------------------------
1 | .github/**/*
2 | CHANGELOG.md
3 |
--------------------------------------------------------------------------------
/bun.lockb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AtomMaterialUI/a-file-icon-vscode/HEAD/bun.lockb
--------------------------------------------------------------------------------
/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AtomMaterialUI/a-file-icon-vscode/HEAD/logo.png
--------------------------------------------------------------------------------
/docs/opacity.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AtomMaterialUI/a-file-icon-vscode/HEAD/docs/opacity.png
--------------------------------------------------------------------------------
/docs/prodIcon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AtomMaterialUI/a-file-icon-vscode/HEAD/docs/prodIcon.png
--------------------------------------------------------------------------------
/docs/iconPacks.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AtomMaterialUI/a-file-icon-vscode/HEAD/docs/iconPacks.png
--------------------------------------------------------------------------------
/docs/saturation.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AtomMaterialUI/a-file-icon-vscode/HEAD/docs/saturation.png
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | "recommendations": ["dbaeumer.vscode-eslint", "esbenp.prettier-vscode"]
3 | }
4 |
--------------------------------------------------------------------------------
/docs/arrowStyles.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AtomMaterialUI/a-file-icon-vscode/HEAD/docs/arrowStyles.png
--------------------------------------------------------------------------------
/docs/folderColor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AtomMaterialUI/a-file-icon-vscode/HEAD/docs/folderColor.png
--------------------------------------------------------------------------------
/docs/folderTheme.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AtomMaterialUI/a-file-icon-vscode/HEAD/docs/folderTheme.png
--------------------------------------------------------------------------------
/docs/commandPalette.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AtomMaterialUI/a-file-icon-vscode/HEAD/docs/commandPalette.png
--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "iconGenerator"]
2 | path = iconGenerator
3 | url = git@github.com:mallowigi/iconGenerator.git
4 |
--------------------------------------------------------------------------------
/docs/productIconTheme.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AtomMaterialUI/a-file-icon-vscode/HEAD/docs/productIconTheme.png
--------------------------------------------------------------------------------
/src/icons/folders/x.ts:
--------------------------------------------------------------------------------
1 | export const xFolders = {
2 | folderNames: ['xstate', 'machine', 'machines'],
3 | name: 'xstate',
4 | };
5 |
--------------------------------------------------------------------------------
/productIcons/a-file-icon-vscode.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AtomMaterialUI/a-file-icon-vscode/HEAD/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 |
--------------------------------------------------------------------------------
/.commitlintrc.yml:
--------------------------------------------------------------------------------
1 | # yaml-language-server: $schema=https://json.schemastore.org/commitlintrc.json
2 |
3 | extends:
4 | - '@commitlint/config-conventional'
5 |
--------------------------------------------------------------------------------
/src/icons/index.ts:
--------------------------------------------------------------------------------
1 | export { fileIcons } from './fileIcons';
2 | export { folderIcons } from './folderIcons';
3 | export { languageIcons } from './languageIcons';
4 |
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "endOfLine": "auto",
3 | "printWidth": 120,
4 | "semi": true,
5 | "singleQuote": true,
6 | "tabWidth": 2,
7 | "trailingComma": "es5"
8 | }
9 |
--------------------------------------------------------------------------------
/.idea/encodings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/codeStyles/codeStyleConfig.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/.idea/inspectionProfiles/profiles_settings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/.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 |
--------------------------------------------------------------------------------
/src/@types/types.ts:
--------------------------------------------------------------------------------
1 | export type RequireAtLeastOne = {
2 | [K in Keys]-?: Partial>> & Required>;
3 | }[Keys] & Pick>;
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/dictionaries:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/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/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 |
--------------------------------------------------------------------------------
/.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
--------------------------------------------------------------------------------
/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';
--------------------------------------------------------------------------------
/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 | }
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.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 |
--------------------------------------------------------------------------------
/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/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/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/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 |
--------------------------------------------------------------------------------
/.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
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/.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 |
--------------------------------------------------------------------------------
/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/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/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/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/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 |
--------------------------------------------------------------------------------
/.idea/git_toolbox_prj.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/.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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/.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 |
--------------------------------------------------------------------------------
/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/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 |
--------------------------------------------------------------------------------
/.idea/highlightedFiles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/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/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 |
--------------------------------------------------------------------------------
/.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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/.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 |
--------------------------------------------------------------------------------
/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/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/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/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/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/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/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/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/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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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/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/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 |
--------------------------------------------------------------------------------
/.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 |
--------------------------------------------------------------------------------
/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/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/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(/