diff --git a/.gulp/interfaces/itheme-icons-accents.ts b/.gulp/interfaces/itheme-icons-accents.ts index a6acb63..e2a5324 100644 --- a/.gulp/interfaces/itheme-icons-accents.ts +++ b/.gulp/interfaces/itheme-icons-accents.ts @@ -1,10 +1,8 @@ -interface IIconObject { - iconPath: string -} +import { IThemeIconsItem } from "./itheme-icons-item"; export interface IThemeIconsAccents { iconDefinitions: { - _folder_open: IIconObject; - _folder_open_build: IIconObject; + _folder_open: IThemeIconsItem; + _folder_open_build: IThemeIconsItem; } } \ No newline at end of file diff --git a/.gulp/interfaces/itheme-icons-item.ts b/.gulp/interfaces/itheme-icons-item.ts new file mode 100644 index 0000000..1a5c615 --- /dev/null +++ b/.gulp/interfaces/itheme-icons-item.ts @@ -0,0 +1,3 @@ +export interface IThemeIconsItem { + iconPath: string; +} \ No newline at end of file diff --git a/.gulp/interfaces/itheme-icons-variants.ts b/.gulp/interfaces/itheme-icons-variants.ts index 0f9cad9..6c38f1a 100644 --- a/.gulp/interfaces/itheme-icons-variants.ts +++ b/.gulp/interfaces/itheme-icons-variants.ts @@ -1,12 +1,10 @@ -export interface IThemeIconsVariantsItem { - iconPath: string; -} +import { IThemeIconsItem } from "./itheme-icons-item"; export interface IThemeIconsVariants { iconDefinitions: { - "_folder_dark": IThemeIconsVariantsItem; - "_folder_dark-build": IThemeIconsVariantsItem; - "_file_folder": IThemeIconsVariantsItem; - "_file_folder-build": IThemeIconsVariantsItem; + "_folder_dark": IThemeIconsItem; + "_folder_dark-build": IThemeIconsItem; + "_file_folder": IThemeIconsItem; + "_file_folder-build": IThemeIconsItem; } } \ No newline at end of file diff --git a/.gulp/tasks/icons-accents.ts b/.gulp/tasks/icons-accents.ts index 3500b62..153bfe5 100644 --- a/.gulp/tasks/icons-accents.ts +++ b/.gulp/tasks/icons-accents.ts @@ -6,7 +6,7 @@ import * as path from 'path'; import { MESSAGE_GENERATED, MESSAGE_ICON_ACCENTS_ERROR } from "../consts/log"; import { CHARSET } from "../../extensions/consts/files"; -import { IThemeConfigCommons } from '../../extensions/interfaces/icommons'; +import { IDefaults } from "../../extensions/interfaces/idefaults"; import { IThemeIconsAccents } from "../interfaces/itheme-icons-accents"; import PATHS from '../../extensions/consts/paths' @@ -14,7 +14,7 @@ import PATHS from '../../extensions/consts/paths' // import { writePackageJSON } from "../helpers/contribute-icon-theme"; const BASE_ICON_THEME_PATH: string = path.join(process.cwd(), PATHS.THEMES, './Material-Theme-Icons.json'); -const THEME_COMMONS: IThemeConfigCommons = require('../../extensions/commands/accents-setter/commons.json'); +const DEFAULTS: IDefaults = require('../../extensions/defaults.json'); // const PACKAGE_JSON: IPackageJSON = require('../../package.json'); // const PACKAGE_JSON_ICON_THEME: IPackageJSONThemeIcons = { @@ -79,7 +79,7 @@ function replaceWhiteSpaces(input: string): string { */ function writeSVGIcon(fromFile: string, toFile: string, accent: string): void { let fileContent: string = fs.readFileSync(normalizeIconPath(fromFile), CHARSET); - let content: string = replaceSVGColour(fileContent, THEME_COMMONS.accents[accent]); + let content: string = replaceSVGColour(fileContent, DEFAULTS.accents[accent]); toFile = normalizeIconPath(toFile); fs.writeFileSync(toFile, content); @@ -94,7 +94,7 @@ export default gulp.task('build:icons.accents', cb => { try { basetheme = require(BASE_ICON_THEME_PATH); - Object.keys(THEME_COMMONS.accents).forEach(key => { + Object.keys(DEFAULTS.accents).forEach(key => { let iconName = replaceWhiteSpaces(key); let themecopy: IThemeIconsAccents = JSON.parse(JSON.stringify(basetheme)); let themePath: string = path.join(PATHS.THEMES, `./Material-Theme-Icons-${ key }.json`); diff --git a/.gulp/tasks/icons.ts b/.gulp/tasks/icons.ts index 7bd6e59..f640008 100644 --- a/.gulp/tasks/icons.ts +++ b/.gulp/tasks/icons.ts @@ -7,8 +7,8 @@ import * as path from 'path'; import { HR, MESSAGE_GENERATED, MESSAGE_ICON_ERROR } from './../consts/log'; import { CHARSET } from "../../extensions/consts/files"; +import { IGenericObject } from "../../extensions/interfaces/igeneric-object"; import { IIcon } from './../interfaces/iicon'; -import { IPlainObject } from '../interfaces/iplain-object'; import paths from '../../extensions/consts/paths'; /** @@ -32,7 +32,7 @@ export default gulp.task('build:icons', cb => { let fileNames: string[] = fs.readdirSync(path.join(paths.SRC, `./icons/svgs`)); let icons: IIcon[] = fileNames.map(fileName => iconFactory(fileName)); let partials: string[] = fs.readdirSync(path.join(paths.SRC, `./icons/partials`)); - let partialsData: IPlainObject = {}; + let partialsData: IGenericObject = {}; let pathTemp: string = './themes/.material-theme-icons.tmp'; icons[icons.length - 1].last = true; diff --git a/.gulp/tasks/themes.ts b/.gulp/tasks/themes.ts index 9b062d7..34d5c84 100644 --- a/.gulp/tasks/themes.ts +++ b/.gulp/tasks/themes.ts @@ -7,10 +7,11 @@ import * as path from 'path'; import { HR, MESSAGE_GENERATED, MESSAGE_THEME_VARIANT_PARSE_ERROR } from './../consts/log'; import { CHARSET } from "../../extensions/consts/files"; +import { IDefaults } from "../../extensions/interfaces/idefaults"; import { IThemeVariant } from './../interfaces/itheme-variant'; import paths from '../../extensions/consts/paths'; -let commons = require('../../extensions/commands/accents-setter/commons.json'); +let commons: IDefaults = require('../../extensions/defaults.json'); let themeTemplateFileContent: string = fs.readFileSync(path.join(paths.SRC, `/themes/theme-template-color-theme.json`), CHARSET); let themeVariants: IThemeVariant[] = []; diff --git a/extensions/commands/accents-setter/index.ts b/extensions/commands/accents-setter/index.ts index a61e167..9d79de2 100644 --- a/extensions/commands/accents-setter/index.ts +++ b/extensions/commands/accents-setter/index.ts @@ -1,16 +1,13 @@ import * as vscode from 'vscode'; -import { getCurrentThemeIconsID, reloadWindow } from "../../helpers/vscode"; -import { getDefaultValues, getThemeIconsByContributeID, getThemeIconsContribute, writeFile } from "../../helpers/fs"; -import { hasAccentChanged, isMaterialThemeIcons, updateAccent } from "../../helpers/settings"; - import {IAccentCustomProperty} from '../../interfaces/iaccent-custom-property'; +import { IDefaults } from "../../interfaces/idefaults"; import {IGenericObject} from '../../interfaces/igeneric-object'; -import {IThemeConfigCommons} from '../../interfaces/icommons'; +import { updateAccent } from "../../helpers/settings"; const REGEXP_HEX: RegExp = /^#([0-9A-F]{6}|[0-9A-F]{8})$/i; -let themeConfigCommon: IThemeConfigCommons = require('./commons.json'); +let themeConfigCommon: IDefaults = require('../../defaults.json'); let accentsProperties: IGenericObject = { "activityBarBadge.background": { alpha: 100, @@ -70,42 +67,6 @@ function assignColorCustomizations(colour: string, config: any): void { }); } -/** - * Assigns related icons theme name by accent name - * @param accentName - */ -export function assignIconTheme(accentName: string | undefined): void { - // let accentValue: string; - let themeIconsID: string = getCurrentThemeIconsID(); - - if (isMaterialThemeIcons(themeIconsID)) { - let defaults = getDefaultValues(); - let theme = getThemeIconsByContributeID(themeIconsID); - let themeContribute = getThemeIconsContribute(themeIconsID); - - if (accentName !== undefined) { - accentName = accentName.replace(/\s+/, '-'); - theme.iconDefinitions._folder_open.iconPath = defaults.icons.theme.iconDefinitions._folder_open.iconPath.replace('.svg', `.accent.${ accentName }.svg`); - theme.iconDefinitions._folder_open_build.iconPath = defaults.icons.theme.iconDefinitions._folder_open_build.iconPath.replace('.svg', `.accent.${ accentName }.svg`); - } else { - theme.iconDefinitions._folder_open.iconPath = defaults.icons.theme.iconDefinitions._folder_open.iconPath; - theme.iconDefinitions._folder_open_build.iconPath = defaults.icons.theme.iconDefinitions._folder_open_build.iconPath; - } - - writeFile(themeContribute.path, JSON.stringify(theme)); - - // updateAccent(accentName); - - if (hasAccentChanged(accentName)) { - reloadWindow(); - } - // vscode.workspace.getConfiguration().update('workbench.iconTheme', themeIconsID, true).then(() => { - // In order to load modified icons we will have to reload the whole window. - // }); - } - updateAccent(accentName); -} - /** * Determines if a string is a valid colour * @param {(string | null | undefined)} colour @@ -123,9 +84,12 @@ function isValidColour(colour: string | null | undefined): boolean { * @param {string} accentSelected * @param {*} config */ -function setWorkbenchOptions(accentSelected: string, config: any): void { +function setWorkbenchOptions(accentSelected: string | undefined, config: any): void { vscode.workspace.getConfiguration().update('workbench.colorCustomizations', config, true).then(() => { - vscode.window.showInformationMessage(`${ accentSelected } set`); + // let message: string = accentSelected !== undefined ? `${ accentSelected } set` : `Accents removed`; + updateAccent(accentSelected); + // vscode.window.showInformationMessage(message).then(() => { + // }); }, reason => { vscode.window.showErrorMessage(reason); }); @@ -164,13 +128,12 @@ export const THEME_ACCENTS_SETTER = () => { // break; case purgeColourKey: assignColorCustomizations(undefined, config); - setWorkbenchOptions(accentSelected, config); - assignIconTheme(undefined); + setWorkbenchOptions(undefined, config); break; default: assignColorCustomizations(themeConfigCommon.accents[accentSelected], config); setWorkbenchOptions(accentSelected, config); - assignIconTheme(accentSelected); + // assignIconTheme(accentSelected); break; } }); diff --git a/extensions/commands/theme-icons/index.ts b/extensions/commands/theme-icons/index.ts index dc2985d..c398965 100644 --- a/extensions/commands/theme-icons/index.ts +++ b/extensions/commands/theme-icons/index.ts @@ -3,50 +3,51 @@ import * as vscode from 'vscode'; import { getAbsolutePath, getDefaultValues, getThemeIconsByContributeID, getThemeIconsContribute } from "../../helpers/fs"; import { getCurrentThemeID, getCurrentThemeIconsID, reloadWindow } from "../../helpers/vscode"; -import { shouldReloadWindow, updateSettingsTheme, updateSettingsThemeIcons } from "../../helpers/settings"; +import { getCustomSettings, isAccent, shouldReloadWindow } from "../../helpers/settings"; import { CHARSET } from "../../consts/files"; import { IPackageJSONThemeIcons } from "../../interfaces/ipackage.json"; import { IThemeIcons } from "../../interfaces/itheme-icons"; -import { assignIconTheme } from "../accents-setter/index"; export const THEME_CHANGE_LISTENER = () => { vscode.workspace.onDidChangeConfiguration(() => { - let cacheKey: string = 'materialTheme.cache.workbench.accent'; - let cache = vscode.workspace.getConfiguration().get(cacheKey); let themeID: string = getCurrentThemeID(); let themeIconsID: string = getCurrentThemeIconsID(); if (themeIconsID && /material-theme/i.test(themeIconsID)) { + let customSettings = getCustomSettings(); let defaults = getDefaultValues(); + let accentName = customSettings.accent; let variantNames: string[] = themeID.split('Material Theme'); let variantName: string = variantNames[1] === undefined ? '' : variantNames[1].trim(); let themeContribute: IPackageJSONThemeIcons = getThemeIconsContribute(themeIconsID); let theme: IThemeIcons = getThemeIconsByContributeID(themeIconsID); let themepath: string = getAbsolutePath(themeContribute.path); - let shouldReload: boolean = shouldReloadWindow(themeID, themeIconsID); + + if (isAccent(accentName, defaults)) { + let _accentName = accentName.replace(/\s+/, '-'); + theme.iconDefinitions._folder_open.iconPath = defaults.icons.theme.iconDefinitions._folder_open.iconPath.replace('.svg', `.accent.${ _accentName }.svg`); + theme.iconDefinitions._folder_open_build.iconPath = defaults.icons.theme.iconDefinitions._folder_open_build.iconPath.replace('.svg', `.accent.${ _accentName }.svg`); + } else { + theme.iconDefinitions._folder_open.iconPath = defaults.icons.theme.iconDefinitions._folder_open.iconPath; + theme.iconDefinitions._folder_open_build.iconPath = defaults.icons.theme.iconDefinitions._folder_open_build.iconPath; + } theme.iconDefinitions._folder_dark.iconPath = defaults.icons.theme.iconDefinitions._folder_dark.iconPath.replace('.svg', `${ variantName }.svg`); theme.iconDefinitions._file_folder.iconPath = defaults.icons.theme.iconDefinitions._file_folder.iconPath.replace('.svg', `${ variantName }.svg`); theme.iconDefinitions["_file_folder-build"].iconPath = defaults.icons.theme.iconDefinitions["_file_folder-build"].iconPath.replace('.svg', `${ variantName }.svg`); - if (!!cache && cache.globalValue) { - assignIconTheme(cacheKey); - } - - updateSettingsTheme(themeID); - updateSettingsThemeIcons(themeIconsID); - - console.log( - theme.iconDefinitions._folder_dark.iconPath - , theme.iconDefinitions._file_folder.iconPath - ) - - fs.writeFileSync(themepath, JSON.stringify(theme), CHARSET); - - vscode.workspace.getConfiguration().update('workbench.iconTheme', themeIconsID, true).then(() => { - if (shouldReload) { - reloadWindow(); + fs.writeFile(themepath, JSON.stringify(theme), { encoding: CHARSET }, (error) => { + if (error) { + console.trace(error); + return; + } + if (shouldReloadWindow(themeID, themeIconsID)) { + vscode.window.showInformationMessage('Material theme requires VS Code reload in order to look very good').then(() => { + reloadWindow(); + }, (error) => { + console.log(error); + }); } }); } diff --git a/extensions/defaults.json b/extensions/defaults.json index e2a2584..7423212 100644 --- a/extensions/defaults.json +++ b/extensions/defaults.json @@ -1,4 +1,22 @@ { + "accents": { + "Acid Lime": "#C6FF00", + "Blue": "#2979FF", + "Breaking Bad": "#388E3C", + "Bright Teal": "#64FFDA", + "Cyan": "#00BCD4", + "Graphite": "#616161", + "Indigo": "#5C6BC0", + "Lime": "#7CB342", + "Orange": "#FF7042", + "Pink": "#FF4081", + "Purple": "#AB47BC", + "Red": "#E57373", + "Sky": "#84FFFF", + "Tomato": "#F44336", + "Teal": "#80CBC4", + "Yellow": "#FFA000" + }, "icons": { "theme": { "iconDefinitions": { diff --git a/extensions/helpers/settings.ts b/extensions/helpers/settings.ts index 6d108e0..9b3f654 100644 --- a/extensions/helpers/settings.ts +++ b/extensions/helpers/settings.ts @@ -1,5 +1,6 @@ import * as vscode from 'vscode'; +import { IDefaults } from "../interfaces/idefaults"; import { IThemeCustomProperties } from "../interfaces/itheme-custom-properties"; import { getPackageJSON } from "./fs"; @@ -8,8 +9,8 @@ import { getPackageJSON } from "./fs"; * @export * @returns {(string | null)} */ -export function getAccent(): string | null { - return vscode.workspace.getConfiguration().get('materialTheme.cache.workbench.accent', null); +export function getAccent(): string | undefined { + return getCustomSettings().accent; } /** @@ -22,13 +23,14 @@ export function getCustomSettings(): IThemeCustomProperties { } /** - * Determines if the accent name has changed + * Checks if a given string could be an accent + * * @export * @param {string} accentName * @returns {boolean} */ -export function hasAccentChanged(accentName: string): boolean { - return accentName !== getAccent(); +export function isAccent(accentName: string, defaults: IDefaults): boolean { + return Object.keys(defaults.accents).filter(name => name === accentName).length > 0; } /** @@ -54,15 +56,29 @@ export function isMaterialThemeIcons(themeIconsName: string): boolean { } /** - * Sets custom properties in custom settings + * Sets a custom property in custom settings * @export * @param {string} settingname * @param {*} value */ -export function setCustomSetting(settingname: string, value: any): void { +export function setCustomSetting(settingname: string, value: any): Thenable { let settings: any = getCustomSettings(); settings[settingname] = value; - vscode.workspace.getConfiguration().update('materialTheme.cache.workbench.settings', settings, true); + return vscode.workspace.getConfiguration().update('materialTheme.cache.workbench.settings', settings, true); +} + +/** + * Sets custom properties in custom settings + * @export + * @param {*} settingsObject + * @returns {Thenable} + */ +export function setCustomSettings(settingsObject: IThemeCustomProperties): Thenable { + let settings: any = getCustomSettings(); + + Object.keys(settingsObject).forEach(key => settings[key] = (settingsObject as any)[key]); + + return vscode.workspace.getConfiguration().update('materialTheme.cache.workbench.settings', settings, true); } /** @@ -80,7 +96,7 @@ export function shouldReloadWindow(themeColour: string, themeIcons: string): boo let customSettings = getCustomSettings(); - return customSettings.themeColours !== themeColour || customSettings.themeIcons !== themeIcons; + return customSettings.themeColours !== themeColour || customSettings.themeIcons !== themeIcons || customSettings.accent !== customSettings.accentPrevious; } /** @@ -88,24 +104,17 @@ export function shouldReloadWindow(themeColour: string, themeIcons: string): boo * @export * @param {string} accentName */ -export function updateAccent(accentName: string): void { - vscode.workspace.getConfiguration().update('materialTheme.cache.workbench.accent', accentName, true); -} +export function updateAccent(accentName: string): Thenable { + let config: IThemeCustomProperties = {}; + let prevaccent = getAccent(); -/** - * Updates theme name to custom settings - * @export - * @param {string} themeName - */ -export function updateSettingsTheme(themeName: string): void { - setCustomSetting('themeColours', themeName); -} + if (prevaccent !== undefined && prevaccent !== accentName) { + config.accentPrevious = prevaccent; + } else if (accentName === undefined) { + config.accentPrevious = undefined; + } -/** - * Updates icons theme name to custom settings - * @export - * @param {string} themeName - */ -export function updateSettingsThemeIcons(themeName: string): void { - setCustomSetting('themeIcons', themeName); + config.accent = accentName; + + return setCustomSettings(config); } \ No newline at end of file diff --git a/extensions/interfaces/idefaults.ts b/extensions/interfaces/idefaults.ts index 6a07b1b..a9b90f1 100644 --- a/extensions/interfaces/idefaults.ts +++ b/extensions/interfaces/idefaults.ts @@ -1,8 +1,14 @@ export interface IDefaults { + accents: IAccents; icons: IDefaultsThemeIcons; themeVariants: IDefaultsThemeVariant; } +export interface IAccents { + teal: string; + [index: string]: string; +} + export interface IDefaultsThemeIcons { theme: { iconDefinitions: { diff --git a/extensions/interfaces/itheme-custom-properties.ts b/extensions/interfaces/itheme-custom-properties.ts index 46de6e2..e801dc8 100644 --- a/extensions/interfaces/itheme-custom-properties.ts +++ b/extensions/interfaces/itheme-custom-properties.ts @@ -1,4 +1,6 @@ export interface IThemeCustomProperties { + accent?: string; + accentPrevious?: string; themeColours?: string; themeIcons?: string; } \ No newline at end of file diff --git a/package.json b/package.json index 9c61217..aaf64b8 100644 --- a/package.json +++ b/package.json @@ -54,23 +54,11 @@ ], "configuration": { "properties": { - "materialTheme.cache.workbench.accent": { - "default": "", - "type": "string", - "title": "Accent selected", - "description": "Theme's current accent." - }, - "materialTheme.cache.workbench.colorCustomizations": { - "default": {}, - "type": "object", - "title": "Previous color customizations", - "description": "Keeps in cache your previous color customizations." - }, "materialTheme.cache.workbench.settings": { "default": {}, "type": "object", "title": "Custom material theme settings", - "description": "Keeps in cache your previous color customizations." + "description": "Material theme settings object." } } }, diff --git a/themes/Material-Theme-Icons.json b/themes/Material-Theme-Icons.json index f0dbeba..f0af7a0 100644 --- a/themes/Material-Theme-Icons.json +++ b/themes/Material-Theme-Icons.json @@ -1 +1 @@ -{"iconDefinitions":{"_folder_dark":{"iconPath":"../icons/folder.svg"},"_folder_dark_build":{"iconPath":"../icons/folder-build.svg"},"_folder_light":{"iconPath":"../icons/folder-light.svg"},"_folder_light_build":{"iconPath":"../icons/folder-light-build.svg"},"_folder_open":{"iconPath":"../icons/folder-outline.svg"},"_folder_open_build":{"iconPath":"../icons/folder-outline-build.svg"},"_file_dark":{"iconPath":"../icons/file.svg"},"_file_.DS_Store":{"iconPath":"../icons/.DS_Store.svg"},"_file_actionscript":{"iconPath":"../icons/actionscript.svg"},"_file_ai":{"iconPath":"../icons/ai.svg"},"_file_android":{"iconPath":"../icons/android.svg"},"_file_angular":{"iconPath":"../icons/angular.svg"},"_file_applescript":{"iconPath":"../icons/applescript.svg"},"_file_arduino":{"iconPath":"../icons/arduino.svg"},"_file_assembly":{"iconPath":"../icons/assembly.svg"},"_file_autohotkey":{"iconPath":"../icons/autohotkey.svg"},"_file_bower":{"iconPath":"../icons/bower.svg"},"_file_c":{"iconPath":"../icons/c.svg"},"_file_certificate":{"iconPath":"../icons/certificate.svg"},"_file_changelog":{"iconPath":"../icons/changelog.svg"},"_file_clojure":{"iconPath":"../icons/clojure.svg"},"_file_cmake":{"iconPath":"../icons/cmake.svg"},"_file_cmd":{"iconPath":"../icons/cmd.svg"},"_file_coffee":{"iconPath":"../icons/coffee.svg"},"_file_console":{"iconPath":"../icons/console.svg"},"_file_contributing":{"iconPath":"../icons/contributing.svg"},"_file_cpp":{"iconPath":"../icons/cpp.svg"},"_file_credits":{"iconPath":"../icons/credits.svg"},"_file_csharp":{"iconPath":"../icons/csharp.svg"},"_file_css-map":{"iconPath":"../icons/css-map.svg"},"_file_css":{"iconPath":"../icons/css.svg"},"_file_dart":{"iconPath":"../icons/dart.svg"},"_file_database":{"iconPath":"../icons/database.svg"},"_file_dlang":{"iconPath":"../icons/dlang.svg"},"_file_docker":{"iconPath":"../icons/docker.svg"},"_file_document":{"iconPath":"../icons/document.svg"},"_file_email":{"iconPath":"../icons/email.svg"},"_file_exe":{"iconPath":"../icons/exe.svg"},"_file_favicon":{"iconPath":"../icons/favicon.svg"},"_file_file":{"iconPath":"../icons/file.svg"},"_file_flash":{"iconPath":"../icons/flash.svg"},"_file_flow":{"iconPath":"../icons/flow.svg"},"_file_folder-build":{"iconPath":"../icons/folder-build.svg"},"_file_folder-light-build":{"iconPath":"../icons/folder-light-build.svg"},"_file_folder-light":{"iconPath":"../icons/folder-light.svg"},"_file_folder-outline-build":{"iconPath":"../icons/folder-outline-build.svg"},"_file_folder-outline":{"iconPath":"../icons/folder-outline.svg"},"_file_folder":{"iconPath":"../icons/folder.svg"},"_file_font":{"iconPath":"../icons/font.svg"},"_file_fsharp":{"iconPath":"../icons/fsharp.svg"},"_file_git":{"iconPath":"../icons/git.svg"},"_file_github":{"iconPath":"../icons/github.svg"},"_file_go":{"iconPath":"../icons/go.svg"},"_file_gopher":{"iconPath":"../icons/gopher.svg"},"_file_gradle":{"iconPath":"../icons/gradle.svg"},"_file_graphql":{"iconPath":"../icons/graphql.svg"},"_file_groovy":{"iconPath":"../icons/groovy.svg"},"_file_grunt":{"iconPath":"../icons/grunt.svg"},"_file_gulp":{"iconPath":"../icons/gulp.svg"},"_file_haml":{"iconPath":"../icons/haml.svg"},"_file_haskell":{"iconPath":"../icons/haskell.svg"},"_file_html":{"iconPath":"../icons/html.svg"},"_file_image":{"iconPath":"../icons/image.svg"},"_file_ionic":{"iconPath":"../icons/ionic.svg"},"_file_java":{"iconPath":"../icons/java.svg"},"_file_javascript-map":{"iconPath":"../icons/javascript-map.svg"},"_file_js":{"iconPath":"../icons/js.svg"},"_file_json":{"iconPath":"../icons/json.svg"},"_file_key":{"iconPath":"../icons/key.svg"},"_file_kotlin":{"iconPath":"../icons/kotlin.svg"},"_file_less":{"iconPath":"../icons/less.svg"},"_file_lib":{"iconPath":"../icons/lib.svg"},"_file_license":{"iconPath":"../icons/license.svg"},"_file_lua":{"iconPath":"../icons/lua.svg"},"_file_markdown":{"iconPath":"../icons/markdown.svg"},"_file_markup":{"iconPath":"../icons/markup.svg"},"_file_movie":{"iconPath":"../icons/movie.svg"},"_file_music":{"iconPath":"../icons/music.svg"},"_file_mustache":{"iconPath":"../icons/mustache.svg"},"_file_mxml":{"iconPath":"../icons/mxml.svg"},"_file_nodejs":{"iconPath":"../icons/nodejs.svg"},"_file_npm":{"iconPath":"../icons/npm.svg"},"_file_ocaml":{"iconPath":"../icons/ocaml.svg"},"_file_pdf":{"iconPath":"../icons/pdf.svg"},"_file_php":{"iconPath":"../icons/php.svg"},"_file_polymer":{"iconPath":"../icons/polymer.svg"},"_file_postcss":{"iconPath":"../icons/postcss.svg"},"_file_powerpoint":{"iconPath":"../icons/powerpoint.svg"},"_file_pp":{"iconPath":"../icons/pp.svg"},"_file_procfile":{"iconPath":"../icons/procfile.svg"},"_file_pug":{"iconPath":"../icons/pug.svg"},"_file_python":{"iconPath":"../icons/python.svg"},"_file_r":{"iconPath":"../icons/r.svg"},"_file_rails":{"iconPath":"../icons/rails.svg"},"_file_raml":{"iconPath":"../icons/raml.svg"},"_file_react":{"iconPath":"../icons/react.svg"},"_file_readme":{"iconPath":"../icons/readme.svg"},"_file_ruby":{"iconPath":"../icons/ruby.svg"},"_file_rust":{"iconPath":"../icons/rust.svg"},"_file_sass":{"iconPath":"../icons/sass.svg"},"_file_settings":{"iconPath":"../icons/settings.svg"},"_file_sketch":{"iconPath":"../icons/sketch.svg"},"_file_star":{"iconPath":"../icons/star.svg"},"_file_stylus":{"iconPath":"../icons/stylus.svg"},"_file_sublime":{"iconPath":"../icons/sublime.svg"},"_file_svg":{"iconPath":"../icons/svg.svg"},"_file_swc":{"iconPath":"../icons/swc.svg"},"_file_swift":{"iconPath":"../icons/swift.svg"},"_file_swig":{"iconPath":"../icons/swig.svg"},"_file_table":{"iconPath":"../icons/table.svg"},"_file_tex":{"iconPath":"../icons/tex.svg"},"_file_todo":{"iconPath":"../icons/todo.svg"},"_file_tune":{"iconPath":"../icons/tune.svg"},"_file_twig":{"iconPath":"../icons/twig.svg"},"_file_typescript":{"iconPath":"../icons/typescript.svg"},"_file_typescript_def":{"iconPath":"../icons/typescript_def.svg"},"_file_url":{"iconPath":"../icons/url.svg"},"_file_virtual":{"iconPath":"../icons/virtual.svg"},"_file_visualstudio":{"iconPath":"../icons/visualstudio.svg"},"_file_vue":{"iconPath":"../icons/vue.svg"},"_file_webpack":{"iconPath":"../icons/webpack.svg"},"_file_word":{"iconPath":"../icons/word.svg"},"_file_xaml":{"iconPath":"../icons/xaml.svg"},"_file_xml":{"iconPath":"../icons/xml.svg"},"_file_yaml":{"iconPath":"../icons/yaml.svg"},"_file_yarn":{"iconPath":"../icons/yarn.svg"},"_file_zip":{"iconPath":"../icons/zip.svg"}},"fileExtensions":{"cmd":"_file_cmd","mustache":"_file_mustache","rails":"_file_rails","styl":"_file_stylus","twig":"_file_twig","swig":"_file_swig","sketch":"_file_sketch","do":"_file_todo","sublime-settings":"_file_sublime","sublime-theme":"_file_sublime","sublime-commands":"_file_sublime","sublime-menu":"_file_sublime","html":"_file_html","jade":"_file_pug","pug":"_file_pug","md":"_file_markdown","md.rendered":"_file_markdown","markdown":"_file_markdown","markdown.rendered":"_file_markdown","css":"_file_css","postcss":"_file_postcss","scss":"_file_sass","sass":"_file_sass","less":"_file_less","json":"_file_json","yaml":"_file_yaml","YAML-tmLanguage":"_file_yaml","yml":"_file_yaml","xml":"_file_xml","plist":"_file_xml","xsd":"_file_xml","dtd":"_file_xml","xsl":"_file_xml","xslt":"_file_xml","resx":"_file_xml","iml":"_file_xml","xquery":"_file_xml","tmLanguage":"_file_xml","png":"_file_image","jpeg":"_file_image","jpg":"_file_image","gif":"_file_image","svg":"_file_svg","eps":"_file_svg","ai":"_file_ai","ico":"_file_image","tif":"_file_image","tiff":"_file_image","psd":"_file_image","psb":"_file_image","ami":"_file_image","apx":"_file_image","bmp":"_file_image","bpg":"_file_image","brk":"_file_image","cur":"_file_image","dds":"_file_image","dng":"_file_image","exr":"_file_image","fpx":"_file_image","gbr":"_file_image","img":"_file_image","jbig2":"_file_image","jb2":"_file_image","jng":"_file_image","jxr":"_file_image","pbm":"_file_image","pgf":"_file_image","pic":"_file_image","raw":"_file_image","webp":"_file_image","php":"_file_php","js":"_file_js","ejs":"_file_js","jsx":"_file_react","ini":"_file_settings","dlc":"_file_settings","dll":"_file_settings","config":"_file_settings","conf":"_file_settings","esx":"_file_js","ts":"_file_typescript","tsx":"_file_react","d.ts":"_file_typescript_def","pdf":"_file_pdf","xlsx":"_file_table","xls":"_file_table","csv":"_file_table","vscodeignore":"_file_vs","vsixmanifest":"_file_vs","suo":"_file_vs","sln":"_file_vs","pdb":"_file_database","cs":"_file_csharp","csx":"_file_csharp","csproj":"_file_vs","zip":"_file_zip","tar":"_file_zip","gz":"_file_zip","xz":"_file_zip","bzip2":"_file_zip","gzip":"_file_zip","7z":"_file_zip","7zip":"_file_zip","pzip":"_file_zip","wim":"_file_zip","rar":"_file_zip","tgz":"_file_zip","exe":"_file_exe","msi":"_file_exe","java":"_file_java","jar":"_file_java","jsp":"_file_java","c":"_file_c","h":"_file_c","m":"_file_c","cc":"_file_cpp","cpp":"_file_cpp","c++":"_file_cpp","hpp":"_file_cpp","mm":"_file_cpp","cxx":"_file_cpp","go":"_file_go","py":"_file_python","url":"_file_url","sh":"_file_console","bat":"_file_console","ps1":"_file_console","fish":"_file_console","bash":"_file_console","gradle":"_file_gradle","doc":"_file_word","docx":"_file_word","rtf":"_file_word","properties":"_file_settings","prop":"_file_settings","settings":"_file_settings","sql":"_file_database","accdb":"_file_database","mdb":"_file_database","cer":"_file_certificate","cert":"_file_certificate","crt":"_file_certificate","pub":"_file_key","key":"_file_key","pem":"_file_key","asc":"_file_key","woff":"_file_font","woff2":"_file_font","ttf":"_file_font","eot":"_file_font","suit":"_file_font","otf":"_file_font","bmap":"_file_font","fnt":"_file_font","odttf":"_file_font","ttc":"_file_font","font":"_file_font","fonts":"_file_font","sui":"_file_font","ntf":"_file_font","mrf":"_file_font","lib":"_file_lib","rb":"_file_ruby","erb":"_file_ruby","fs":"_file_fsharp","fsx":"_file_fsharp","fsi":"_file_fsharp","fsproj":"_file_fsharp","manifest":"_file_xml","swift":"_file_swift","ino":"_file_arduino","dockerignore":"_file_docker","tex":"_file_tex","bib":"_file_lib","pptx":"_file_powerpoint","ppt":"_file_powerpoint","pptm":"_file_powerpoint","potx":"_file_powerpoint","pot":"_file_powerpoint","potm":"_file_powerpoint","ppsx":"_file_powerpoint","ppsm":"_file_powerpoint","pps":"_file_powerpoint","ppam":"_file_powerpoint","ppa":"_file_powerpoint","webm":"_file_movie","mkv":"_file_movie","flv":"_file_movie","vob":"_file_movie","ogv":"_file_movie","ogg":"_file_movie","gifv":"_file_movie","avi":"_file_movie","mov":"_file_movie","qt":"_file_movie","wmv":"_file_movie","yuv":"_file_movie","rm":"_file_movie","rmvb":"_file_movie","mp4":"_file_movie","m4v":"_file_movie","mpg":"_file_movie","mp2":"_file_movie","mpeg":"_file_movie","mpe":"_file_movie","mpv":"_file_movie","m2v":"_file_movie","vdi":"_file_virtual","vbox":"_file_virtual","vbox-prev":"_file_virtual","ics":"_file_email","mp3":"_file_music","flac":"_file_music","m4a":"_file_music","wma":"_file_music","aiff":"_file_music","coffee":"_file_coffee","txt":"_file_document","sqlite":"_file_database","graphql":"_file_graphql","gql":"_file_graphql","props":"_file_settings","toml":"_file_settings","rs":"_file_rust","raml":"_file_raml","xaml":"_file_xaml","prefs":"_file_settings","hs":"_file_haskell","kt":"_file_kotlin","project":"_file_xml","patch":"_file_git","dockerfile":"_file_docker","vb":"_file_vs","lua":"_file_lua","clj":"_file_clojure","groovy":"_file_groovy","r":"_file_r","rst":"_file_markdown","dart":"_file_dart","as":"_file_actionscript","mxml":"_file_mxml","ahk":"_file_autohotkey","swf":"_file_flash","swc":"_file_swc","cmake":"_file_cmake","asm":"_file_assembly","a51":"_file_assembly","inc":"_file_assembly","nasm":"_file_assembly","s":"_file_assembly","ms":"_file_assembly","agc":"_file_assembly","ags":"_file_assembly","aea":"_file_assembly","argus":"_file_assembly","mitigus":"_file_assembly","binsource":"_file_assembly","vue":"_file_vue","ml":"_file_ocaml","mli":"_file_ocaml","cmx":"_file_ocaml","js.map":"_file_jsmap","css.map":"_file_cssmap","tmTheme":"_file_markup","pp":"_file_pp","applescript":"_file_applescript","haml":"_file_haml"},"fileNames":{"gruntfile.js":"_file_grunt","bower.json":"_file_bower",".bowerrc":"_file_bower","webpack.js":"_file_webpack","webpack.config.js":"_file_webpack","webpack.dev.js":"_file_webpack","webpack.prod.js":"_file_webpack","webpack.common.js":"_file_webpack","webpackfile.js":"_file_webpack","ionic.config.json":"_file_ionic",".io-config.json":"_file_ionic","gulpfile.js":"_file_gulp","gulpfile.babel.js":"_file_gulp","package.json":"_file_npm","gradle.properties":"_file_gradle","gradlew":"_file_gradle",".jscsrc":"_file_json",".jshintrc":"_file_json",".jshintignore":"_file_settings",".npmignore":"_file_npm","tsconfig.json":"_file_json","tslint.json":"_file_json","androidmanifest.xml":"_file_android","gradle-wrapper.properties":"_file_gradle",".editorconfig":"_file_settings","procfile":"_file_procfile",".env":"_file_tune","dockerfile":"_file_docker","license":"_file_license","license.md":"_file_license","license.md.rendered":"_file_license","license.txt":"_file_license",".babelrc":"_file_json",".eslintrc":"_file_yaml",".buildignore":"_file_settings",".htaccess":"_file_xml","composer.lock":"_file_json",".gitignore":"_file_git",".gitconfig":"_file_git",".gitattributes":"_file_git",".gitmodules":"_file_git",".gitkeep":"_file_git","yarn.lock":"_file_yarn",".yarnclean":"_file_yarn",".yarn-integrity":"_file_yarn","yarn-error.log":"_file_yarn","contributing.md":"_file_contributing","contributing.md.rendered":"_file_contributing","readme.md":"_file_readme","readme.md.rendered":"_file_readme",".mailmap":"_file_email","makefile":"_file_settings","changelog":"_file_changelog","changelog.md":"_file_changelog","changelog.md.rendered":"_file_changelog","CREDITS":"_file_credits","credits.txt":"_file_credits","credits.md":"_file_credits","credits.md.rendered":"_file_credits",".flowconfig":"_file_flow",".jsbeautifyrc":"_file_json","git-history":"_file_git","angular-cli.json":"_file_angular","app.module.ts":"_file_angular","favicon.ico":"_file_favicon"},"file":"_file_dark","folder":"_folder_dark","folderExpanded":"_folder_open","languageIds":{"git":"_file_git"},"light":{"folderExpanded":"_folder_open","folder":"_folder_light","folderNames":{"node_modules":"_file_nodejs",".git":"_file_git",".github":"_file_github",".gulp":"_file_gulp","bower_components":"_file_bower","build":"_folder_light_build","dist":"_folder_light_build"},"folderNamesExpanded":{"node_modules":"_file_nodejs",".git":"_file_git",".github":"_file_github",".gulp":"_file_gulp","bower_components":"_file_bower","build":"_folder_light_build","dist":"_folder_light_build"}},"folderNames":{"node_modules":"_file_nodejs",".git":"_file_git",".github":"_file_github",".gulp":"_file_gulp","bower_components":"_file_bower","build":"_folder_dark_build","dist":"_folder_dark_build"},"folderNamesExpanded":{"node_modules":"_file_nodejs",".git":"_file_git",".github":"_file_github",".gulp":"_file_gulp","bower_components":"_file_bower","build":"_folder_open_build","dist":"_folder_open_build"}} +{"iconDefinitions":{"_folder_dark":{"iconPath":"../icons/folder.svg"},"_folder_dark_build":{"iconPath":"../icons/folder-build.svg"},"_folder_light":{"iconPath":"../icons/folder-light.svg"},"_folder_light_build":{"iconPath":"../icons/folder-light-build.svg"},"_folder_open":{"iconPath":"../icons/folder-outline.svg"},"_folder_open_build":{"iconPath":"../icons/folder-outline-build.svg"},"_file_dark":{"iconPath":"../icons/file.svg"},"_file_actionscript":{"iconPath":"../icons/actionscript.svg"},"_file_ai":{"iconPath":"../icons/ai.svg"},"_file_android":{"iconPath":"../icons/android.svg"},"_file_angular":{"iconPath":"../icons/angular.svg"},"_file_applescript":{"iconPath":"../icons/applescript.svg"},"_file_arduino":{"iconPath":"../icons/arduino.svg"},"_file_assembly":{"iconPath":"../icons/assembly.svg"},"_file_autohotkey":{"iconPath":"../icons/autohotkey.svg"},"_file_bower":{"iconPath":"../icons/bower.svg"},"_file_c":{"iconPath":"../icons/c.svg"},"_file_certificate":{"iconPath":"../icons/certificate.svg"},"_file_changelog":{"iconPath":"../icons/changelog.svg"},"_file_clojure":{"iconPath":"../icons/clojure.svg"},"_file_cmake":{"iconPath":"../icons/cmake.svg"},"_file_cmd":{"iconPath":"../icons/cmd.svg"},"_file_coffee":{"iconPath":"../icons/coffee.svg"},"_file_console":{"iconPath":"../icons/console.svg"},"_file_contributing":{"iconPath":"../icons/contributing.svg"},"_file_cpp":{"iconPath":"../icons/cpp.svg"},"_file_credits":{"iconPath":"../icons/credits.svg"},"_file_csharp":{"iconPath":"../icons/csharp.svg"},"_file_css-map":{"iconPath":"../icons/css-map.svg"},"_file_css":{"iconPath":"../icons/css.svg"},"_file_dart":{"iconPath":"../icons/dart.svg"},"_file_database":{"iconPath":"../icons/database.svg"},"_file_dlang":{"iconPath":"../icons/dlang.svg"},"_file_docker":{"iconPath":"../icons/docker.svg"},"_file_document":{"iconPath":"../icons/document.svg"},"_file_email":{"iconPath":"../icons/email.svg"},"_file_exe":{"iconPath":"../icons/exe.svg"},"_file_favicon":{"iconPath":"../icons/favicon.svg"},"_file_file":{"iconPath":"../icons/file.svg"},"_file_flash":{"iconPath":"../icons/flash.svg"},"_file_flow":{"iconPath":"../icons/flow.svg"},"_file_folder-build":{"iconPath":"../icons/folder-build.svg"},"_file_folder-light-build":{"iconPath":"../icons/folder-light-build.svg"},"_file_folder-light":{"iconPath":"../icons/folder-light.svg"},"_file_folder-outline-build":{"iconPath":"../icons/folder-outline-build.svg"},"_file_folder-outline":{"iconPath":"../icons/folder-outline.svg"},"_file_folder":{"iconPath":"../icons/folder.svg"},"_file_font":{"iconPath":"../icons/font.svg"},"_file_fsharp":{"iconPath":"../icons/fsharp.svg"},"_file_git":{"iconPath":"../icons/git.svg"},"_file_github":{"iconPath":"../icons/github.svg"},"_file_go":{"iconPath":"../icons/go.svg"},"_file_gopher":{"iconPath":"../icons/gopher.svg"},"_file_gradle":{"iconPath":"../icons/gradle.svg"},"_file_graphql":{"iconPath":"../icons/graphql.svg"},"_file_groovy":{"iconPath":"../icons/groovy.svg"},"_file_grunt":{"iconPath":"../icons/grunt.svg"},"_file_gulp":{"iconPath":"../icons/gulp.svg"},"_file_haml":{"iconPath":"../icons/haml.svg"},"_file_haskell":{"iconPath":"../icons/haskell.svg"},"_file_html":{"iconPath":"../icons/html.svg"},"_file_image":{"iconPath":"../icons/image.svg"},"_file_ionic":{"iconPath":"../icons/ionic.svg"},"_file_java":{"iconPath":"../icons/java.svg"},"_file_javascript-map":{"iconPath":"../icons/javascript-map.svg"},"_file_js":{"iconPath":"../icons/js.svg"},"_file_json":{"iconPath":"../icons/json.svg"},"_file_key":{"iconPath":"../icons/key.svg"},"_file_kotlin":{"iconPath":"../icons/kotlin.svg"},"_file_less":{"iconPath":"../icons/less.svg"},"_file_lib":{"iconPath":"../icons/lib.svg"},"_file_license":{"iconPath":"../icons/license.svg"},"_file_lua":{"iconPath":"../icons/lua.svg"},"_file_markdown":{"iconPath":"../icons/markdown.svg"},"_file_markup":{"iconPath":"../icons/markup.svg"},"_file_movie":{"iconPath":"../icons/movie.svg"},"_file_music":{"iconPath":"../icons/music.svg"},"_file_mustache":{"iconPath":"../icons/mustache.svg"},"_file_mxml":{"iconPath":"../icons/mxml.svg"},"_file_nodejs":{"iconPath":"../icons/nodejs.svg"},"_file_npm":{"iconPath":"../icons/npm.svg"},"_file_ocaml":{"iconPath":"../icons/ocaml.svg"},"_file_pdf":{"iconPath":"../icons/pdf.svg"},"_file_php":{"iconPath":"../icons/php.svg"},"_file_polymer":{"iconPath":"../icons/polymer.svg"},"_file_postcss":{"iconPath":"../icons/postcss.svg"},"_file_powerpoint":{"iconPath":"../icons/powerpoint.svg"},"_file_pp":{"iconPath":"../icons/pp.svg"},"_file_procfile":{"iconPath":"../icons/procfile.svg"},"_file_pug":{"iconPath":"../icons/pug.svg"},"_file_python":{"iconPath":"../icons/python.svg"},"_file_r":{"iconPath":"../icons/r.svg"},"_file_rails":{"iconPath":"../icons/rails.svg"},"_file_raml":{"iconPath":"../icons/raml.svg"},"_file_react":{"iconPath":"../icons/react.svg"},"_file_readme":{"iconPath":"../icons/readme.svg"},"_file_ruby":{"iconPath":"../icons/ruby.svg"},"_file_rust":{"iconPath":"../icons/rust.svg"},"_file_sass":{"iconPath":"../icons/sass.svg"},"_file_settings":{"iconPath":"../icons/settings.svg"},"_file_sketch":{"iconPath":"../icons/sketch.svg"},"_file_star":{"iconPath":"../icons/star.svg"},"_file_stylus":{"iconPath":"../icons/stylus.svg"},"_file_sublime":{"iconPath":"../icons/sublime.svg"},"_file_svg":{"iconPath":"../icons/svg.svg"},"_file_swc":{"iconPath":"../icons/swc.svg"},"_file_swift":{"iconPath":"../icons/swift.svg"},"_file_swig":{"iconPath":"../icons/swig.svg"},"_file_table":{"iconPath":"../icons/table.svg"},"_file_tex":{"iconPath":"../icons/tex.svg"},"_file_todo":{"iconPath":"../icons/todo.svg"},"_file_tune":{"iconPath":"../icons/tune.svg"},"_file_twig":{"iconPath":"../icons/twig.svg"},"_file_typescript":{"iconPath":"../icons/typescript.svg"},"_file_typescript_def":{"iconPath":"../icons/typescript_def.svg"},"_file_url":{"iconPath":"../icons/url.svg"},"_file_virtual":{"iconPath":"../icons/virtual.svg"},"_file_visualstudio":{"iconPath":"../icons/visualstudio.svg"},"_file_vue":{"iconPath":"../icons/vue.svg"},"_file_webpack":{"iconPath":"../icons/webpack.svg"},"_file_word":{"iconPath":"../icons/word.svg"},"_file_xaml":{"iconPath":"../icons/xaml.svg"},"_file_xml":{"iconPath":"../icons/xml.svg"},"_file_yaml":{"iconPath":"../icons/yaml.svg"},"_file_yarn":{"iconPath":"../icons/yarn.svg"},"_file_zip":{"iconPath":"../icons/zip.svg"}},"fileExtensions":{"cmd":"_file_cmd","mustache":"_file_mustache","rails":"_file_rails","styl":"_file_stylus","twig":"_file_twig","swig":"_file_swig","sketch":"_file_sketch","do":"_file_todo","sublime-settings":"_file_sublime","sublime-theme":"_file_sublime","sublime-commands":"_file_sublime","sublime-menu":"_file_sublime","html":"_file_html","jade":"_file_pug","pug":"_file_pug","md":"_file_markdown","md.rendered":"_file_markdown","markdown":"_file_markdown","markdown.rendered":"_file_markdown","css":"_file_css","postcss":"_file_postcss","scss":"_file_sass","sass":"_file_sass","less":"_file_less","json":"_file_json","yaml":"_file_yaml","YAML-tmLanguage":"_file_yaml","yml":"_file_yaml","xml":"_file_xml","plist":"_file_xml","xsd":"_file_xml","dtd":"_file_xml","xsl":"_file_xml","xslt":"_file_xml","resx":"_file_xml","iml":"_file_xml","xquery":"_file_xml","tmLanguage":"_file_xml","png":"_file_image","jpeg":"_file_image","jpg":"_file_image","gif":"_file_image","svg":"_file_svg","eps":"_file_svg","ai":"_file_ai","ico":"_file_image","tif":"_file_image","tiff":"_file_image","psd":"_file_image","psb":"_file_image","ami":"_file_image","apx":"_file_image","bmp":"_file_image","bpg":"_file_image","brk":"_file_image","cur":"_file_image","dds":"_file_image","dng":"_file_image","exr":"_file_image","fpx":"_file_image","gbr":"_file_image","img":"_file_image","jbig2":"_file_image","jb2":"_file_image","jng":"_file_image","jxr":"_file_image","pbm":"_file_image","pgf":"_file_image","pic":"_file_image","raw":"_file_image","webp":"_file_image","php":"_file_php","js":"_file_js","ejs":"_file_js","jsx":"_file_react","ini":"_file_settings","dlc":"_file_settings","dll":"_file_settings","config":"_file_settings","conf":"_file_settings","esx":"_file_js","ts":"_file_typescript","tsx":"_file_react","d.ts":"_file_typescript_def","pdf":"_file_pdf","xlsx":"_file_table","xls":"_file_table","csv":"_file_table","vscodeignore":"_file_vs","vsixmanifest":"_file_vs","suo":"_file_vs","sln":"_file_vs","pdb":"_file_database","cs":"_file_csharp","csx":"_file_csharp","csproj":"_file_vs","zip":"_file_zip","tar":"_file_zip","gz":"_file_zip","xz":"_file_zip","bzip2":"_file_zip","gzip":"_file_zip","7z":"_file_zip","7zip":"_file_zip","pzip":"_file_zip","wim":"_file_zip","rar":"_file_zip","tgz":"_file_zip","exe":"_file_exe","msi":"_file_exe","java":"_file_java","jar":"_file_java","jsp":"_file_java","c":"_file_c","h":"_file_c","m":"_file_c","cc":"_file_cpp","cpp":"_file_cpp","c++":"_file_cpp","hpp":"_file_cpp","mm":"_file_cpp","cxx":"_file_cpp","go":"_file_go","py":"_file_python","url":"_file_url","sh":"_file_console","bat":"_file_console","ps1":"_file_console","fish":"_file_console","bash":"_file_console","gradle":"_file_gradle","doc":"_file_word","docx":"_file_word","rtf":"_file_word","properties":"_file_settings","prop":"_file_settings","settings":"_file_settings","sql":"_file_database","accdb":"_file_database","mdb":"_file_database","cer":"_file_certificate","cert":"_file_certificate","crt":"_file_certificate","pub":"_file_key","key":"_file_key","pem":"_file_key","asc":"_file_key","woff":"_file_font","woff2":"_file_font","ttf":"_file_font","eot":"_file_font","suit":"_file_font","otf":"_file_font","bmap":"_file_font","fnt":"_file_font","odttf":"_file_font","ttc":"_file_font","font":"_file_font","fonts":"_file_font","sui":"_file_font","ntf":"_file_font","mrf":"_file_font","lib":"_file_lib","rb":"_file_ruby","erb":"_file_ruby","fs":"_file_fsharp","fsx":"_file_fsharp","fsi":"_file_fsharp","fsproj":"_file_fsharp","manifest":"_file_xml","swift":"_file_swift","ino":"_file_arduino","dockerignore":"_file_docker","tex":"_file_tex","bib":"_file_lib","pptx":"_file_powerpoint","ppt":"_file_powerpoint","pptm":"_file_powerpoint","potx":"_file_powerpoint","pot":"_file_powerpoint","potm":"_file_powerpoint","ppsx":"_file_powerpoint","ppsm":"_file_powerpoint","pps":"_file_powerpoint","ppam":"_file_powerpoint","ppa":"_file_powerpoint","webm":"_file_movie","mkv":"_file_movie","flv":"_file_movie","vob":"_file_movie","ogv":"_file_movie","ogg":"_file_movie","gifv":"_file_movie","avi":"_file_movie","mov":"_file_movie","qt":"_file_movie","wmv":"_file_movie","yuv":"_file_movie","rm":"_file_movie","rmvb":"_file_movie","mp4":"_file_movie","m4v":"_file_movie","mpg":"_file_movie","mp2":"_file_movie","mpeg":"_file_movie","mpe":"_file_movie","mpv":"_file_movie","m2v":"_file_movie","vdi":"_file_virtual","vbox":"_file_virtual","vbox-prev":"_file_virtual","ics":"_file_email","mp3":"_file_music","flac":"_file_music","m4a":"_file_music","wma":"_file_music","aiff":"_file_music","coffee":"_file_coffee","txt":"_file_document","sqlite":"_file_database","graphql":"_file_graphql","gql":"_file_graphql","props":"_file_settings","toml":"_file_settings","rs":"_file_rust","raml":"_file_raml","xaml":"_file_xaml","prefs":"_file_settings","hs":"_file_haskell","kt":"_file_kotlin","project":"_file_xml","patch":"_file_git","dockerfile":"_file_docker","vb":"_file_vs","lua":"_file_lua","clj":"_file_clojure","groovy":"_file_groovy","r":"_file_r","rst":"_file_markdown","dart":"_file_dart","as":"_file_actionscript","mxml":"_file_mxml","ahk":"_file_autohotkey","swf":"_file_flash","swc":"_file_swc","cmake":"_file_cmake","asm":"_file_assembly","a51":"_file_assembly","inc":"_file_assembly","nasm":"_file_assembly","s":"_file_assembly","ms":"_file_assembly","agc":"_file_assembly","ags":"_file_assembly","aea":"_file_assembly","argus":"_file_assembly","mitigus":"_file_assembly","binsource":"_file_assembly","vue":"_file_vue","ml":"_file_ocaml","mli":"_file_ocaml","cmx":"_file_ocaml","js.map":"_file_jsmap","css.map":"_file_cssmap","tmTheme":"_file_markup","pp":"_file_pp","applescript":"_file_applescript","haml":"_file_haml"},"fileNames":{"gruntfile.js":"_file_grunt","bower.json":"_file_bower",".bowerrc":"_file_bower","webpack.js":"_file_webpack","webpack.config.js":"_file_webpack","webpack.dev.js":"_file_webpack","webpack.prod.js":"_file_webpack","webpack.common.js":"_file_webpack","webpackfile.js":"_file_webpack","ionic.config.json":"_file_ionic",".io-config.json":"_file_ionic","gulpfile.js":"_file_gulp","gulpfile.babel.js":"_file_gulp","package.json":"_file_npm","gradle.properties":"_file_gradle","gradlew":"_file_gradle",".jscsrc":"_file_json",".jshintrc":"_file_json",".jshintignore":"_file_settings",".npmignore":"_file_npm","tsconfig.json":"_file_json","tslint.json":"_file_json","androidmanifest.xml":"_file_android","gradle-wrapper.properties":"_file_gradle",".editorconfig":"_file_settings","procfile":"_file_procfile",".env":"_file_tune","dockerfile":"_file_docker","license":"_file_license","license.md":"_file_license","license.md.rendered":"_file_license","license.txt":"_file_license",".babelrc":"_file_json",".eslintrc":"_file_yaml",".buildignore":"_file_settings",".htaccess":"_file_xml","composer.lock":"_file_json",".gitignore":"_file_git",".gitconfig":"_file_git",".gitattributes":"_file_git",".gitmodules":"_file_git",".gitkeep":"_file_git","yarn.lock":"_file_yarn",".yarnclean":"_file_yarn",".yarn-integrity":"_file_yarn","yarn-error.log":"_file_yarn","contributing.md":"_file_contributing","contributing.md.rendered":"_file_contributing","readme.md":"_file_readme","readme.md.rendered":"_file_readme",".mailmap":"_file_email","makefile":"_file_settings","changelog":"_file_changelog","changelog.md":"_file_changelog","changelog.md.rendered":"_file_changelog","CREDITS":"_file_credits","credits.txt":"_file_credits","credits.md":"_file_credits","credits.md.rendered":"_file_credits",".flowconfig":"_file_flow",".jsbeautifyrc":"_file_json","git-history":"_file_git","angular-cli.json":"_file_angular","app.module.ts":"_file_angular","favicon.ico":"_file_favicon"},"file":"_file_dark","folder":"_folder_dark","folderExpanded":"_folder_open","languageIds":{"git":"_file_git"},"light":{"folderExpanded":"_folder_open","folder":"_folder_light","folderNames":{"node_modules":"_file_nodejs",".git":"_file_git",".github":"_file_github",".gulp":"_file_gulp","bower_components":"_file_bower","build":"_folder_light_build","dist":"_folder_light_build"},"folderNamesExpanded":{"node_modules":"_file_nodejs",".git":"_file_git",".github":"_file_github",".gulp":"_file_gulp","bower_components":"_file_bower","build":"_folder_light_build","dist":"_folder_light_build"}},"folderNames":{"node_modules":"_file_nodejs",".git":"_file_git",".github":"_file_github",".gulp":"_file_gulp","bower_components":"_file_bower","build":"_folder_dark_build","dist":"_folder_dark_build"},"folderNamesExpanded":{"node_modules":"_file_nodejs",".git":"_file_git",".github":"_file_github",".gulp":"_file_gulp","bower_components":"_file_bower","build":"_folder_open_build","dist":"_folder_open_build"}}