diff --git a/extensions/commands/accents-setter/index.ts b/extensions/commands/accents-setter/index.ts index 5b96465..3c5f49a 100644 --- a/extensions/commands/accents-setter/index.ts +++ b/extensions/commands/accents-setter/index.ts @@ -1,7 +1,8 @@ import * as vscode from 'vscode'; -import { getCurrentThemeID, getCurrentThemeIconsID, reloadWindow } from "../../helpers/vscode"; -import { getDefaultValues, getPackageJSON, getThemeIconsByContributeID, getThemeIconsContribute, writeFile } from "../../helpers/fs"; +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 {IGenericObject} from '../../interfaces/igeneric-object'; @@ -75,12 +76,9 @@ function assignColorCustomizations(colour: string, config: any): void { */ export function assignIconTheme(accentName: string | undefined): void { // let accentValue: string; - let cacheKey: string = 'materialTheme.cache.workbench.accent'; let themeIconsID: string = getCurrentThemeIconsID(); - let themeID: string = getCurrentThemeID(); - let packageJSON = getPackageJSON(); - if (packageJSON.contributes.iconThemes.filter(contribute => contribute.id === themeIconsID).length > 0) { + if (isMaterialThemeIcons(themeIconsID)) { let defaults = getDefaultValues(); let theme = getThemeIconsByContributeID(themeIconsID); let themeContribute = getThemeIconsContribute(themeIconsID); @@ -96,17 +94,16 @@ export function assignIconTheme(accentName: string | undefined): void { writeFile(themeContribute.path, JSON.stringify(theme)); - vscode.workspace.getConfiguration().update(cacheKey, accentName, true); + // updateAccent(accentName); - vscode.workspace.getConfiguration().update('workbench.iconTheme', themeIconsID, true).then(() => { + 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. - if (packageJSON.contributes.themes.filter(theme => theme.label === themeID).length > 0 && packageJSON.contributes.iconThemes.filter(theme => theme.id === themeIconsID).length > 0) { - reloadWindow(); - } - }); - } else { - vscode.workspace.getConfiguration().update(cacheKey, accentName, true); + // }); } + updateAccent(accentName); } /** diff --git a/extensions/commands/theme-icons/index.ts b/extensions/commands/theme-icons/index.ts index 428b98f..dc2985d 100644 --- a/extensions/commands/theme-icons/index.ts +++ b/extensions/commands/theme-icons/index.ts @@ -1,8 +1,9 @@ import * as fs from 'fs'; import * as vscode from 'vscode'; -import { getAbsolutePath, getDefaultValues, getPackageJSON, getThemeIconsByContributeID, getThemeIconsContribute } from "../../helpers/fs"; +import { getAbsolutePath, getDefaultValues, getThemeIconsByContributeID, getThemeIconsContribute } from "../../helpers/fs"; import { getCurrentThemeID, getCurrentThemeIconsID, reloadWindow } from "../../helpers/vscode"; +import { shouldReloadWindow, updateSettingsTheme, updateSettingsThemeIcons } from "../../helpers/settings"; import { CHARSET } from "../../consts/files"; import { IPackageJSONThemeIcons } from "../../interfaces/ipackage.json"; @@ -18,12 +19,12 @@ export const THEME_CHANGE_LISTENER = () => { if (themeIconsID && /material-theme/i.test(themeIconsID)) { let defaults = getDefaultValues(); - let packageJSON = getPackageJSON(); 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); 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`); @@ -33,6 +34,9 @@ export const THEME_CHANGE_LISTENER = () => { assignIconTheme(cacheKey); } + updateSettingsTheme(themeID); + updateSettingsThemeIcons(themeIconsID); + console.log( theme.iconDefinitions._folder_dark.iconPath , theme.iconDefinitions._file_folder.iconPath @@ -41,7 +45,7 @@ export const THEME_CHANGE_LISTENER = () => { fs.writeFileSync(themepath, JSON.stringify(theme), CHARSET); vscode.workspace.getConfiguration().update('workbench.iconTheme', themeIconsID, true).then(() => { - if (packageJSON.contributes.themes.filter(theme => theme.label === themeID).length > 0 && packageJSON.contributes.iconThemes.filter(theme => theme.id ===themeIconsID).length > 0) { + if (shouldReload) { reloadWindow(); } }); diff --git a/extensions/helpers/settings.ts b/extensions/helpers/settings.ts new file mode 100644 index 0000000..6d108e0 --- /dev/null +++ b/extensions/helpers/settings.ts @@ -0,0 +1,111 @@ +import * as vscode from 'vscode'; + +import { IThemeCustomProperties } from "../interfaces/itheme-custom-properties"; +import { getPackageJSON } from "./fs"; + +/** + * Gets saved accent + * @export + * @returns {(string | null)} + */ +export function getAccent(): string | null { + return vscode.workspace.getConfiguration().get('materialTheme.cache.workbench.accent', null); +} + +/** + * Gets custom settings + * @export + * @returns {*} + */ +export function getCustomSettings(): IThemeCustomProperties { + return vscode.workspace.getConfiguration().get('materialTheme.cache.workbench.settings', {}); +} + +/** + * Determines if the accent name has changed + * @export + * @param {string} accentName + * @returns {boolean} + */ +export function hasAccentChanged(accentName: string): boolean { + return accentName !== getAccent(); +} + +/** + * Determines if the passing theme label is a material theme + * @export + * @param {string} themeName + * @returns {boolean} + */ +export function isMaterialTheme(themeName: string): boolean { + let packageJSON = getPackageJSON(); + return packageJSON.contributes.themes.filter(contrib => contrib.label === themeName).length > 0; +} + +/** + * Determines if the passing icons theme is a material theme + * @export + * @param {string} themeIconsName + * @returns {boolean} + */ +export function isMaterialThemeIcons(themeIconsName: string): boolean { + let packageJSON = getPackageJSON(); + return packageJSON.contributes.iconThemes.filter(contribute => contribute.id === themeIconsName).length > 0; +} + +/** + * Sets custom properties in custom settings + * @export + * @param {string} settingname + * @param {*} value + */ +export function setCustomSetting(settingname: string, value: any): void { + let settings: any = getCustomSettings(); + settings[settingname] = value; + vscode.workspace.getConfiguration().update('materialTheme.cache.workbench.settings', settings, true); +} + +/** + * Determines if the window should reload + * @export + * @param {string} themeColour + * @param {string} themeIcons + * @returns {boolean} + */ +export function shouldReloadWindow(themeColour: string, themeIcons: string): boolean { + let isTheme: boolean = isMaterialTheme(themeColour); + let isThemeIcons: boolean = isMaterialThemeIcons(themeIcons); + + if (!isTheme && !isThemeIcons) return false; + + let customSettings = getCustomSettings(); + + return customSettings.themeColours !== themeColour || customSettings.themeIcons !== themeIcons; +} + +/** + * Updates accent name + * @export + * @param {string} accentName + */ +export function updateAccent(accentName: string): void { + vscode.workspace.getConfiguration().update('materialTheme.cache.workbench.accent', accentName, true); +} + +/** + * Updates theme name to custom settings + * @export + * @param {string} themeName + */ +export function updateSettingsTheme(themeName: string): void { + setCustomSetting('themeColours', themeName); +} + +/** + * Updates icons theme name to custom settings + * @export + * @param {string} themeName + */ +export function updateSettingsThemeIcons(themeName: string): void { + setCustomSetting('themeIcons', themeName); +} \ No newline at end of file diff --git a/extensions/interfaces/ipackage.json.ts b/extensions/interfaces/ipackage.json.ts index 2ec43cd..b52a9f7 100644 --- a/extensions/interfaces/ipackage.json.ts +++ b/extensions/interfaces/ipackage.json.ts @@ -8,10 +8,17 @@ export interface IPackageJSONBadge { export interface IPackageJSONContributes { commands: IPackageJSONCommand[]; + configuration: IPackageJSONConfiguration; iconThemes: IPackageJSONThemeIcons[]; themes: IPackageJSONTheme[]; } +export interface IPackageJSONConfiguration { + properties: { + + } +} + export interface IPackageJSONCommand { category: string; command: string; diff --git a/extensions/interfaces/itheme-custom-properties.ts b/extensions/interfaces/itheme-custom-properties.ts new file mode 100644 index 0000000..46de6e2 --- /dev/null +++ b/extensions/interfaces/itheme-custom-properties.ts @@ -0,0 +1,4 @@ +export interface IThemeCustomProperties { + themeColours?: string; + themeIcons?: string; +} \ No newline at end of file diff --git a/package.json b/package.json index 2171db3..9c61217 100644 --- a/package.json +++ b/package.json @@ -65,6 +65,12 @@ "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." } } }, diff --git a/themes/Material-Theme-Icons.json b/themes/Material-Theme-Icons.json index f0dbeba..c6322ea 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.accent.Orange.svg"},"_folder_open_build":{"iconPath":"../icons/folder-outline-build.accent.Orange.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"}} \ No newline at end of file