diff --git a/src/js/content.js b/src/js/content.js
index a0dde1e..b06a249 100644
--- a/src/js/content.js
+++ b/src/js/content.js
@@ -17,12 +17,9 @@ port.onMessage.addListener(function(message) {
const themeName = themes[message[1]] ? message[1] : themes.default;
switchToTheme(themes[themeName]);
- if (themeName === 'dawn') {
- document.getElementById('buttonLight').classList.add('selected');
- document.getElementById('buttonDark').classList.remove('selected');
- } else if (themeName === 'monokai') {
- document.getElementById('buttonLight').classList.remove('selected');
- document.getElementById('buttonDark').classList.add('selected');
+ const themeSelectOption = document.getElementById('themeSelect').querySelector(`[value="${themeName}"]`);
+ if (themeSelectOption) {
+ themeSelectOption.selected = true;
}
break;
@@ -119,22 +116,60 @@ function configureThemeOptionBar() {
themeBar.id = 'themeOptionBar';
themeBar.classList.add('optionBar');
- const buttonLight = document.createElement('button');
- const buttonDark = document.createElement('button');
- buttonLight.id = 'buttonLight';
- buttonLight.innerText = 'Light';
- buttonDark.id = 'buttonDark';
- buttonDark.innerText = 'Dark';
-
- buttonLight.addEventListener('click', () => {
- port.postMessage({type: 'UPDATE STORED THEME', theme: 'dawn'});
- });
- buttonDark.addEventListener('click', () => {
- port.postMessage({type: 'UPDATE STORED THEME', theme: 'monokai'});
+ const label = document.createElement('label');
+ const select = document.createElement('select');
+ label.innerText = 'Theme: ';
+ select.id = 'themeSelect';
+ select.innerHTML = `
+
+
+ `;
+
+ select.addEventListener('change', () => {
+ port.postMessage({type: 'UPDATE STORED THEME', theme: select.value});
+ select.blur();
});
- themeBar.appendChild(buttonLight);
- themeBar.appendChild(buttonDark);
+ label.appendChild(select);
+ themeBar.appendChild(label);
document.body.insertBefore(themeBar, pre);
}
@@ -222,7 +257,7 @@ function collapse(elements) {
// Add CSS that targets it
jfStyleEl.insertAdjacentHTML(
'beforeend',
- `\n#keyValueOrValue${lastKeyValueOrValueIdGiven}.collapsed:after{color: #aaa; content:" // ${comment}"}`
+ `\n#keyValueOrValue${lastKeyValueOrValueIdGiven}.collapsed:after{content:" // ${comment}"}`
);
}
}
diff --git a/src/js/lib/dom-builder.js b/src/js/lib/dom-builder.js
index 6ad6848..603af7d 100644
--- a/src/js/lib/dom-builder.js
+++ b/src/js/lib/dom-builder.js
@@ -78,11 +78,8 @@ function getKeyValueOrValueDom(value, keyName) {
keyValueOrValue.classList.add('objectProperty');
// Create a span for the key name
const keySpan = templates.key();
- keySpan.textContent = JSON.stringify(keyName).slice(1, -1); // remove quotes
- // Add it to keyValueOrValue, with quote marks
- keyValueOrValue.appendChild(templates.doubleQuoteText());
+ keySpan.textContent = JSON.stringify(keyName);
keyValueOrValue.appendChild(keySpan);
- keyValueOrValue.appendChild(templates.doubleQuoteText());
// Also add ": " (colon and non-breaking space)
keyValueOrValue.appendChild(templates.colonAndSpace());
}
diff --git a/src/js/lib/theme.js b/src/js/lib/theme.js
index b1c9840..512e24b 100644
--- a/src/js/lib/theme.js
+++ b/src/js/lib/theme.js
@@ -1,6 +1,40 @@
export const themes = {
- dawn: require('../../sass/dawn.scss'),
- monokai: require('../../sass/monokai.scss'),
+ ambiance: require('../../sass/themes/ambiance.scss'),
+ chaos: require('../../sass/themes/chaos.scss'),
+ clouds: require('../../sass/themes/clouds.scss'),
+ cloudsMidnight: require('../../sass/themes/clouds-midnight.scss'),
+ chrome: require('../../sass/themes/chrome.scss'),
+ cobalt: require('../../sass/themes/cobalt.scss'),
+ crimsonEditor: require('../../sass/themes/crimson-editor.scss'),
+ dawn: require('../../sass/themes/dawn.scss'),
+ dreamweaver: require('../../sass/themes/dreamweaver.scss'),
+ eclipse: require('../../sass/themes/eclipse.scss'),
+ github: require('../../sass/themes/github.scss'),
+ gob: require('../../sass/themes/gob.scss'),
+ gruvbox: require('../../sass/themes/gruvbox.scss'),
+ idleFingers: require('../../sass/themes/idle-fingers.scss'),
+ iplastic: require('../../sass/themes/iplastic.scss'),
+ katzenMilch: require('../../sass/themes/katzen-milch.scss'),
+ krTheme: require('../../sass/themes/kr-theme.scss'),
+ kurior: require('../../sass/themes/kurior.scss'),
+ merbivore: require('../../sass/themes/merbivore.scss'),
+ merbivoreSoft: require('../../sass/themes/merbivore-soft.scss'),
+ monoIndustrial: require('../../sass/themes/mono-industrial.scss'),
+ monokai: require('../../sass/themes/monokai.scss'),
+ pastelOnDark: require('../../sass/themes/pastel-on-dark.scss'),
+ solarizedDark: require('../../sass/themes/solarized-dark.scss'),
+ solarizedLight: require('../../sass/themes/solarized-light.scss'),
+ sqlServer: require('../../sass/themes/sql-server.scss'),
+ terminal: require('../../sass/themes/terminal.scss'),
+ textmate: require('../../sass/themes/textmate.scss'),
+ tomorrow: require('../../sass/themes/tomorrow.scss'),
+ tomorrowNight: require('../../sass/themes/tomorrow-night.scss'),
+ tomorrowNightBlue: require('../../sass/themes/tomorrow-night-blue.scss'),
+ tomorrowNightBright: require('../../sass/themes/tomorrow-night-bright.scss'),
+ tomorrowNightEighties: require('../../sass/themes/tomorrow-night-eighties.scss'),
+ twilight: require('../../sass/themes/twilight.scss'),
+ vibrantInk: require('../../sass/themes/vibrant-ink.scss'),
+ xcode: require('../../sass/themes/xcode.scss'),
default: 'dawn'
};
diff --git a/src/manifest.json b/src/manifest.json
index 38bfd90..360b2ba 100644
--- a/src/manifest.json
+++ b/src/manifest.json
@@ -5,7 +5,8 @@
"description": "Makes JSON easy to read. Open source.",
"homepage_url": "https://github.com/nikrolls/json-formatter",
"author": "Nik Rolls, Callum Locke",
- "minimum_edge_version": "38",
+ "minimum_edge_version": "40",
+ "minimum_chrome_version": "21",
"icons": {
"128": "icons/128.png",
"32": "icons/32.png"
diff --git a/src/sass/content.scss b/src/sass/content.scss
index 6ae799b..39585d3 100644
--- a/src/sass/content.scss
+++ b/src/sass/content.scss
@@ -10,7 +10,7 @@ body {
}
#themeOptionBar {
- right: 11.5rem;
+ right: 11.3rem;
}
.optionBar {
@@ -18,8 +18,9 @@ body {
display: block;
position: absolute;
top: 0.7rem;
+ font: 13px "Lucida Grande", "Segoe UI", "Tahoma";
- button {
+ button, select {
border-radius: 0.1rem;
box-shadow: 0 0.05rem 0.2rem rgba(0, 0, 0, 0.1);
user-select: none;
@@ -33,20 +34,22 @@ body {
position: relative;
z-index: 10;
display: inline-block;
- width: 5rem;
+ height: 1.5rem;
text-shadow: 0.05rem 0.05rem rgba(255, 255, 255, 0.3);
- &:last-child {
- margin-left: 0;
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
- }
-
- &:first-child {
- margin-right: 0;
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
- border-right: none;
+ &:not(:only-child) {
+ &:last-child {
+ margin-left: 0;
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+ }
+
+ &:first-child {
+ margin-right: 0;
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+ border-right: none;
+ }
}
&:hover {
@@ -72,6 +75,18 @@ body {
outline: 0;
}
}
+
+ button {
+ width: 5rem;
+ }
+
+ select {
+ width: 9.1rem;
+
+ &::-ms-expand {
+ background: none;
+ }
+ }
}
#jsonpOpener,
@@ -150,7 +165,7 @@ pre {
opacity: 0.5;
}
- /* .e that are *inside* the children of a collapsed one */
+ /* .expanders that are *inside* the children of a collapsed one */
.collapsed .keyValueOrValue & {
display: none;
}
diff --git a/src/sass/dawn.scss b/src/sass/dawn.scss
deleted file mode 100644
index 0a44e07..0000000
--- a/src/sass/dawn.scss
+++ /dev/null
@@ -1,35 +0,0 @@
-$background: #f9f9f9;
-$foreground: #080808;
-
-body {
- background-color: $background;
- color: $foreground;
-}
-
-#formattedJson, #jsonpOpener, #jsonpCloser {
- color: $foreground;
-}
-
-.key {
- color: #234a97;
-}
-
-.number {
- color: #811f24;
-}
-
-.string {
- color: #0b6125;
-}
-
-.bool {
- color: #811f24;
-}
-
-.null {
- color: #811f24;
-}
-
-.brace {
- color: $foreground;
-}
diff --git a/src/sass/monokai.scss b/src/sass/monokai.scss
deleted file mode 100644
index 32e2e18..0000000
--- a/src/sass/monokai.scss
+++ /dev/null
@@ -1,35 +0,0 @@
-$background: #272822;
-$foreground: #f8f8f2;
-
-body {
- background-color: $background;
- color: $foreground;
-}
-
-#formattedJson, #jsonpOpener, #jsonpCloser {
- color: $foreground;
-}
-
-.key {
- color: #a6e22e;
-}
-
-.number {
- color: #ae81ff;
-}
-
-.string {
- color: #e6db74;
-}
-
-.bool {
- color: #ae81ff;
-}
-
-.null {
- color: #ae81ff;
-}
-
-.brace {
- color: $foreground;
-}
diff --git a/src/sass/themes/_base.scss b/src/sass/themes/_base.scss
new file mode 100644
index 0000000..3bd5463
--- /dev/null
+++ b/src/sass/themes/_base.scss
@@ -0,0 +1,17 @@
+body {}
+
+::selection {}
+
+.key {}
+
+.number {}
+
+.string {}
+
+.bool {}
+
+.null {}
+
+.brace {}
+
+.collapsed:after {}
diff --git a/src/sass/themes/ambiance.scss b/src/sass/themes/ambiance.scss
new file mode 100644
index 0000000..9312742
--- /dev/null
+++ b/src/sass/themes/ambiance.scss
@@ -0,0 +1,33 @@
+body {
+ background-color: #202020;
+ color: #e6e1dc;
+}
+
+::selection {
+ background-color: transparentize(#ddf0ff, 0.80);
+}
+
+.key {
+ color: #9999cc;
+}
+
+.number {
+ color: #78Cf8a;
+}
+
+.string {
+ color: #8f9d6a;
+}
+
+.bool, .null {
+ color: #cf7Ea9;
+}
+
+.brace {
+ color: #24c2c7;
+}
+
+.collapsed:after {
+ font-style: italic;
+ color: #555;
+}
diff --git a/src/sass/themes/chaos.scss b/src/sass/themes/chaos.scss
new file mode 100644
index 0000000..1884ae9
--- /dev/null
+++ b/src/sass/themes/chaos.scss
@@ -0,0 +1,29 @@
+body {
+ background-color: #161616;
+ color: #e6e1dc;
+}
+
+::selection {
+ background-color: #494836;
+}
+
+.key {
+ color: #997744;
+}
+
+.number {
+ color: #58c554;
+}
+
+.string {
+ color: #58c554;
+}
+
+.bool, .null {
+ color: #fdc251;
+}
+
+.collapsed:after {
+ font-style: italic;
+ color: #555;
+}
diff --git a/src/sass/themes/chrome.scss b/src/sass/themes/chrome.scss
new file mode 100644
index 0000000..0761874
--- /dev/null
+++ b/src/sass/themes/chrome.scss
@@ -0,0 +1,28 @@
+body {
+ background-color: white;
+ color: black;
+}
+
+::selection {
+ background-color: #b5d5ff;
+}
+
+.key {
+ color: #318495;
+}
+
+.number {
+ color: #0000cd;
+}
+
+.string {
+ color: #1a1aa6;
+}
+
+.bool, .null {
+ color: #6d79de;
+}
+
+.collapsed:after {
+ color: #236e24;
+}
diff --git a/src/sass/themes/clouds-midnight.scss b/src/sass/themes/clouds-midnight.scss
new file mode 100644
index 0000000..6612f21
--- /dev/null
+++ b/src/sass/themes/clouds-midnight.scss
@@ -0,0 +1,24 @@
+body {
+ background-color: #191919;
+ color: #929292;
+}
+
+::selection {
+ background-color: black;
+}
+
+.number {
+ color: #46a609;
+}
+
+.string {
+ color: #5d90cd;
+}
+
+.bool, .null {
+ color: #39946a;
+}
+
+.collapsed:after {
+ color: #3c403b;
+}
diff --git a/src/sass/themes/clouds.scss b/src/sass/themes/clouds.scss
new file mode 100644
index 0000000..a18d32a
--- /dev/null
+++ b/src/sass/themes/clouds.scss
@@ -0,0 +1,24 @@
+body {
+ background-color: white;
+ color: black;
+}
+
+::selection {
+ background-color: #bdd5fc;
+}
+
+.number {
+ color: #46a609;
+}
+
+.string {
+ color: #5d90cd;
+}
+
+.bool, .null {
+ color: #39946a;
+}
+
+.collapsed:after {
+ color: #bcc8ba;
+}
diff --git a/src/sass/themes/cobalt.scss b/src/sass/themes/cobalt.scss
new file mode 100644
index 0000000..8db7ffb
--- /dev/null
+++ b/src/sass/themes/cobalt.scss
@@ -0,0 +1,25 @@
+body {
+ background-color: #002240;
+ color: white;
+}
+
+::selection {
+ background-color: transparentize(#b36539, 0.25);
+}
+
+.key {
+ color: #ccc;
+}
+
+.number, .bool, .null {
+ color: #ff628c;
+}
+
+.string {
+ color: #3ad900;
+}
+
+.collapsed:after {
+ font-style: italic;
+ color: #0088ff;
+}
diff --git a/src/sass/themes/crimson-editor.scss b/src/sass/themes/crimson-editor.scss
new file mode 100644
index 0000000..e3ebcc6
--- /dev/null
+++ b/src/sass/themes/crimson-editor.scss
@@ -0,0 +1,28 @@
+body {
+ background-color: white;
+ color: #404040;
+}
+
+::selection {
+ background-color: #b5d5ff;
+}
+
+.key {
+ color: #004080;
+}
+
+.number {
+ color: #000040;
+}
+
+.string {
+ color: #800080;
+}
+
+.bool, .null {
+ color: #ff9c00;
+}
+
+.collapsed:after {
+ color: #4c886b;
+}
diff --git a/src/sass/themes/dawn.scss b/src/sass/themes/dawn.scss
new file mode 100644
index 0000000..9de1d85
--- /dev/null
+++ b/src/sass/themes/dawn.scss
@@ -0,0 +1,25 @@
+body {
+ background-color: #f9f9f9;
+ color: #080808;
+}
+
+::selection {
+ background-color: transparentize(#275fff, 0.70);
+}
+
+.key {
+ color: #234a97;
+}
+
+.number, .bool, .null {
+ color: #811f24;
+}
+
+.string {
+ color: #0b6125;
+}
+
+.collapsed:after {
+ font-style: italic;
+ color: #5a525f
+}
diff --git a/src/sass/themes/dreamweaver.scss b/src/sass/themes/dreamweaver.scss
new file mode 100644
index 0000000..a0ce9db
--- /dev/null
+++ b/src/sass/themes/dreamweaver.scss
@@ -0,0 +1,28 @@
+body {
+ background-color: #fff;
+ color: black;
+}
+
+::selection {
+ background-color: #b5d5ff;
+}
+
+.key {
+ color: #06f;
+}
+
+.number {
+ color: #0000cd;
+}
+
+.string {
+ color: #00f;
+}
+
+.bool, .null {
+ color: #585cf6;
+}
+
+.collapsed:after {
+ color: #4c886b;
+}
diff --git a/src/sass/themes/eclipse.scss b/src/sass/themes/eclipse.scss
new file mode 100644
index 0000000..cca1803
--- /dev/null
+++ b/src/sass/themes/eclipse.scss
@@ -0,0 +1,28 @@
+body {
+ background-color: #fff;
+ color: black;
+}
+
+::selection {
+ background-color: #b5d5ff;
+}
+
+.key {
+ color: #7f0055;
+}
+
+.number {
+ color: darkblue;
+}
+
+.string {
+ color: #2a00ff;
+}
+
+.bool, .null {
+ color: #5848f6;
+}
+
+.collapsed:after {
+ color: #719682;
+}
diff --git a/src/sass/themes/github.scss b/src/sass/themes/github.scss
new file mode 100644
index 0000000..946dba4
--- /dev/null
+++ b/src/sass/themes/github.scss
@@ -0,0 +1,29 @@
+body {
+ background-color: white;
+ color: black;
+}
+
+::selection {
+ background-color: #b5d5ff;
+}
+
+.number {
+ color: #099;
+}
+
+.string {
+ color: #d14;
+}
+
+.bool, .null {
+ font-weight: bold;
+}
+
+.brace {
+ font-weight: bold;
+}
+
+.collapsed:after {
+ color: #998;
+ font-style: italic;
+}
diff --git a/src/sass/themes/gob.scss b/src/sass/themes/gob.scss
new file mode 100644
index 0000000..badb4ce
--- /dev/null
+++ b/src/sass/themes/gob.scss
@@ -0,0 +1,25 @@
+body {
+ background-color: #0b0b0b;
+ color: #0f0
+}
+
+::selection {
+ background-color: transparentize(#ddf0ff, 0.80);
+}
+
+.key {
+ color: #00f868;
+}
+
+.string {
+ color: #10f060
+}
+
+.bool, .null {
+ color: #10f0a0
+}
+
+.collapsed:after {
+ font-style: italic;
+ color: #00e060;
+}
diff --git a/src/sass/themes/gruvbox.scss b/src/sass/themes/gruvbox.scss
new file mode 100644
index 0000000..d36a868
--- /dev/null
+++ b/src/sass/themes/gruvbox.scss
@@ -0,0 +1,25 @@
+body {
+ background-color: #1d2021;
+ color: #ebdab4;
+}
+
+::selection {
+ background-color: transparentize(#b36539, 0.25);
+}
+
+.key {
+ color: #84a598;
+}
+
+.number, .bool, .null {
+ color: #c2859a;
+}
+
+.string {
+ color: #b8ba37;
+}
+
+.collapsed:after {
+ font-style: italic;
+ color: #928375;
+}
diff --git a/src/sass/themes/idle-fingers.scss b/src/sass/themes/idle-fingers.scss
new file mode 100644
index 0000000..fca6f16
--- /dev/null
+++ b/src/sass/themes/idle-fingers.scss
@@ -0,0 +1,21 @@
+body {
+ background-color: #323232;
+ color: #fff
+}
+
+::selection {
+ background-color: transparentize(#5a647e, 0.12);
+}
+
+.number, .bool, .null {
+ color: #6c99bb;
+}
+
+.string {
+ color: #a5c261;
+}
+
+.collapsed:after {
+ font-style: italic;
+ color: #bc9458;
+}
diff --git a/src/sass/themes/iplastic.scss b/src/sass/themes/iplastic.scss
new file mode 100644
index 0000000..9648eba
--- /dev/null
+++ b/src/sass/themes/iplastic.scss
@@ -0,0 +1,27 @@
+body {
+ background-color: #eee;
+ color: #333;
+}
+
+::selection {
+ background-color: #bad6fd;
+}
+
+.key {
+ color: #36c;
+ font-style: italic;
+}
+
+.number, .bool, .null {
+ color: #06f;
+ font-weight: 700;
+}
+
+.string {
+ color: #a55f03;
+}
+
+.collapsed:after {
+ color: #777;
+ font-style: italic;
+}
diff --git a/src/sass/themes/katzen-milch.scss b/src/sass/themes/katzen-milch.scss
new file mode 100644
index 0000000..8c84f30
--- /dev/null
+++ b/src/sass/themes/katzen-milch.scss
@@ -0,0 +1,34 @@
+body {
+ background-color: #f3f2f3;
+ color: #0f0009
+}
+
+::selection {
+ background-color: transparentize(#6405d0, 0.73);
+}
+
+.key {
+ color: transparentize(#025f49, 0.3);
+ background-color: transparentize(#22ff49, 0.88);
+}
+
+.number {
+ color: transparentize(#4f827b, 0.7);
+ background-color: transparentize(#77c2bb, 0.9411);
+}
+
+.string {
+ color: #5a5f9b;
+ background-color: transparentize(#aaafdb, 0.965);
+}
+
+.bool, .null {
+ color: #7d7e52;
+ background-color: transparentize(#bdbe82, 0.941);
+}
+
+.collapsed:after {
+ font-style: italic;
+ color: rgba(64, 79, 80, 0.67);
+ background-color: transparentize(#5f0fff, 0.9922)
+}
diff --git a/src/sass/themes/kr-theme.scss b/src/sass/themes/kr-theme.scss
new file mode 100644
index 0000000..b891b4f
--- /dev/null
+++ b/src/sass/themes/kr-theme.scss
@@ -0,0 +1,25 @@
+body {
+ background-color: #0b0a09;
+ color: #fcffe0;
+}
+
+::selection {
+ background-color: transparentize(#a0f, 0.55);
+}
+
+.key {
+ color: #d1a796;
+}
+
+.number, .bool, .null {
+ color: transparentize(#d27518, 0.24);
+}
+
+.string {
+ color: transparentize(#a4a1b5, 0.2);
+}
+
+.collapsed:after {
+ font-style: italic;
+ color: #706d5b;
+}
diff --git a/src/sass/themes/kurior.scss b/src/sass/themes/kurior.scss
new file mode 100644
index 0000000..d7c04d8
--- /dev/null
+++ b/src/sass/themes/kurior.scss
@@ -0,0 +1,29 @@
+body {
+ background-color: #e8e9e8;
+ color: #363636;
+}
+
+::selection {
+ background-color: transparentize(#f5aa00, 0.43);
+}
+
+.key {
+ color: #009acd;
+}
+
+.number {
+ color: #9a5925;
+}
+
+.string {
+ color: #639300;
+}
+
+.bool, .null {
+ color: #cd6839;
+}
+
+.collapsed:after {
+ color: transparentize(#949494, 0.09);
+ background-color: transparentize(#dcdcdc, 0.44);
+}
diff --git a/src/sass/themes/merbivore-soft.scss b/src/sass/themes/merbivore-soft.scss
new file mode 100644
index 0000000..bdbc69b
--- /dev/null
+++ b/src/sass/themes/merbivore-soft.scss
@@ -0,0 +1,25 @@
+body {
+ background-color: #1c1c1c;
+ color: #e6e1dc;
+}
+
+::selection {
+ background-color: #494949;
+}
+
+.number {
+ color: #7fc578;
+}
+
+.string {
+ color: #8ec65f;
+}
+
+.bool, .null {
+ color: #e1c582;
+}
+
+.collapsed:after {
+ font-style: italic;
+ color: #ac4bb8;
+}
diff --git a/src/sass/themes/merbivore.scss b/src/sass/themes/merbivore.scss
new file mode 100644
index 0000000..9ea6063
--- /dev/null
+++ b/src/sass/themes/merbivore.scss
@@ -0,0 +1,25 @@
+body {
+ background-color: #161616;
+ color: #e6e1dc;
+}
+
+::selection {
+ background-color: #454545;
+}
+
+.number {
+ color: #58c554;
+}
+
+.string {
+ color: #8dff0a;
+}
+
+.bool, .null {
+ color: #fdc251;
+}
+
+.collapsed:after {
+ font-style: italic;
+ color: #ad2ea4;
+}
diff --git a/src/sass/themes/mono-industrial.scss b/src/sass/themes/mono-industrial.scss
new file mode 100644
index 0000000..55ce90f
--- /dev/null
+++ b/src/sass/themes/mono-industrial.scss
@@ -0,0 +1,30 @@
+body {
+ background-color: #222c28;
+ color: #fff;
+}
+
+::selection {
+ background-color: transparentize(#919994, 0.6);
+}
+
+.key {
+ color: #a8b3ab;
+}
+
+.number {
+ color: #e98800;
+}
+
+.string {
+ background-color: #151c19;
+ color: #fff;
+}
+
+.bool, .null {
+ color: #648bd2;
+}
+
+.collapsed:after {
+ color: #666c68;
+ background-color: #151c19;
+}
diff --git a/src/sass/themes/monokai.scss b/src/sass/themes/monokai.scss
new file mode 100644
index 0000000..e375705
--- /dev/null
+++ b/src/sass/themes/monokai.scss
@@ -0,0 +1,24 @@
+body {
+ background-color: #272822;
+ color: #f8f8f2;
+}
+
+::selection {
+ background-color: #49483e;
+}
+
+.key {
+ color: #a6e22e;
+}
+
+.number, .bool, .null {
+ color: #ae81ff;
+}
+
+.string {
+ color: #e6db74;
+}
+
+.collapsed:after {
+ color: #75715e;
+}
diff --git a/src/sass/themes/pastel-on-dark.scss b/src/sass/themes/pastel-on-dark.scss
new file mode 100644
index 0000000..55d4009
--- /dev/null
+++ b/src/sass/themes/pastel-on-dark.scss
@@ -0,0 +1,28 @@
+body {
+ background-color: #2c2828;
+ color: #8f938f;
+}
+
+::selection {
+ background-color: transparentize(#ddf0ff, 0.80);
+}
+
+.key {
+ color: #bebf55;
+}
+
+.number {
+ color: #ccc;
+}
+
+.string {
+ color: #66a968;
+}
+
+.bool, .null {
+ color: #de8e30;
+}
+
+.collapsed:after {
+ color: #a6c6ff;
+}
diff --git a/src/sass/themes/solarized-dark.scss b/src/sass/themes/solarized-dark.scss
new file mode 100644
index 0000000..9a0a0dc
--- /dev/null
+++ b/src/sass/themes/solarized-dark.scss
@@ -0,0 +1,29 @@
+body {
+ background-color: #002b36;
+ color: #93a1a1;
+}
+
+::selection {
+ background-color: transparentize(white, 0.9);
+}
+
+.key {
+ color: #268bd2;
+}
+
+.number {
+ color: #d33682;
+}
+
+.string {
+ color: #2aa198;
+}
+
+.bool, .null {
+ color: #b58900;
+}
+
+.collapsed:after {
+ font-style: italic;
+ color: #657b83;
+}
diff --git a/src/sass/themes/solarized-light.scss b/src/sass/themes/solarized-light.scss
new file mode 100644
index 0000000..07b225d
--- /dev/null
+++ b/src/sass/themes/solarized-light.scss
@@ -0,0 +1,28 @@
+body {
+ background-color: #fdf6e3;
+ color: #586e75;
+}
+
+::selection {
+ background-color: transparentize(#073643, 0.91);
+}
+
+.key {
+ color: #268bd2;
+}
+
+.number {
+ color: #d33682;
+}
+
+.string {
+ color: #2aa198;
+}
+
+.bool, .null {
+ color: #b58900
+}
+
+.collapsed:after {
+ color: #93a1a1;
+}
diff --git a/src/sass/themes/sql-server.scss b/src/sass/themes/sql-server.scss
new file mode 100644
index 0000000..373595e
--- /dev/null
+++ b/src/sass/themes/sql-server.scss
@@ -0,0 +1,28 @@
+body {
+ background-color: #fff;
+ color: black;
+}
+
+::selection {
+ background-color: #b5d5ff;
+}
+
+.key {
+ color: #318495;
+}
+
+.string {
+ color: #f00;
+}
+
+.bool, .null {
+ color: #979797;
+}
+
+.brace {
+ color: #808080;
+}
+
+.collapsed:after {
+ color: #008000;
+}
diff --git a/src/sass/themes/terminal.scss b/src/sass/themes/terminal.scss
new file mode 100644
index 0000000..e9e2e39
--- /dev/null
+++ b/src/sass/themes/terminal.scss
@@ -0,0 +1,24 @@
+body {
+ background-color: black;
+ color: #dedede;
+}
+
+::selection {
+ background-color: #424242;
+}
+
+.key {
+ color: #d54e53;
+}
+
+.number, .bool, .null {
+ color: #e78c45;
+}
+
+.string {
+ color: #b9ca4a;
+}
+
+.collapsed:after {
+ color: orangered;
+}
diff --git a/src/sass/themes/textmate.scss b/src/sass/themes/textmate.scss
new file mode 100644
index 0000000..57c504a
--- /dev/null
+++ b/src/sass/themes/textmate.scss
@@ -0,0 +1,28 @@
+body {
+ background-color: #fff;
+ color: black;
+}
+
+::selection {
+ background-color: #b5d5ff;
+}
+
+.key {
+ color: #318495;
+}
+
+.number {
+ color: #0000cd;
+}
+
+.string {
+ color: #036a07;
+}
+
+.bool, .null {
+ color: #585cf6;
+}
+
+.collapsed:after {
+ color: #4c886b;
+}
diff --git a/src/sass/themes/tomorrow-night-blue.scss b/src/sass/themes/tomorrow-night-blue.scss
new file mode 100644
index 0000000..12f03ba
--- /dev/null
+++ b/src/sass/themes/tomorrow-night-blue.scss
@@ -0,0 +1,24 @@
+body {
+ background-color: #002451;
+ color: #fff;
+}
+
+::selection {
+ background-color: #003f8e;
+}
+
+.key {
+ color: #ff9da4;
+}
+
+.number, .bool, .null {
+ color: #ffc58f;
+}
+
+.string {
+ color: #d1f1a9;
+}
+
+.collapsed:after {
+ color: #7285b7;
+}
diff --git a/src/sass/themes/tomorrow-night-bright.scss b/src/sass/themes/tomorrow-night-bright.scss
new file mode 100644
index 0000000..dc9fbcb
--- /dev/null
+++ b/src/sass/themes/tomorrow-night-bright.scss
@@ -0,0 +1,24 @@
+body {
+ background-color: #000;
+ color: #dedede;
+}
+
+::selection {
+ background-color: #424242;
+}
+
+.key {
+ color: #d54e53;
+}
+
+.number, .bool, .null {
+ color: #e78c45;
+}
+
+.string {
+ color: #b9ca4a;
+}
+
+.collapsed:after {
+ color: #969896;
+}
diff --git a/src/sass/themes/tomorrow-night-eighties.scss b/src/sass/themes/tomorrow-night-eighties.scss
new file mode 100644
index 0000000..8a91eb3
--- /dev/null
+++ b/src/sass/themes/tomorrow-night-eighties.scss
@@ -0,0 +1,24 @@
+body {
+ background-color: #2d2d2d;
+ color: #ccc;
+}
+
+::selection {
+ background-color: #515151;
+}
+
+.key {
+ color: #f2777a;
+}
+
+.number, .bool, .null {
+ color: #f99157;
+}
+
+.string {
+ color: #9c9;
+}
+
+.collapsed:after {
+ color: #999;
+}
diff --git a/src/sass/themes/tomorrow-night.scss b/src/sass/themes/tomorrow-night.scss
new file mode 100644
index 0000000..97eafcb
--- /dev/null
+++ b/src/sass/themes/tomorrow-night.scss
@@ -0,0 +1,24 @@
+body {
+ background-color: #1d1f21;
+ color: #c5c8c6;
+}
+
+::selection {
+ background-color: #373b41;
+}
+
+.key {
+ color: #c66;
+}
+
+.number, .bool, .null {
+ color: #de935f;
+}
+
+.string {
+ color: #b5bd68;
+}
+
+.collapsed:after {
+ color: #969896;
+}
diff --git a/src/sass/themes/tomorrow.scss b/src/sass/themes/tomorrow.scss
new file mode 100644
index 0000000..6006e60
--- /dev/null
+++ b/src/sass/themes/tomorrow.scss
@@ -0,0 +1,24 @@
+body {
+ background-color: #fff;
+ color: #4d4d4c;
+}
+
+::selection {
+ background-color: #d6d6d6;
+}
+
+.key {
+ color: #c82829;
+}
+
+.number, .bool, .null {
+ color: #f5871f;
+}
+
+.string {
+ color: #718c00;
+}
+
+.collapsed:after {
+ color: #8e908c;
+}
diff --git a/src/sass/themes/twilight.scss b/src/sass/themes/twilight.scss
new file mode 100644
index 0000000..ea8fcc6
--- /dev/null
+++ b/src/sass/themes/twilight.scss
@@ -0,0 +1,25 @@
+body {
+ background-color: #141414;
+ color: #f8f8f8;
+}
+
+::selection {
+ background-color: transparentize(#ddf0ff, 0.8);
+}
+
+.key {
+ color: #7587a6;
+}
+
+.number, .bool, .null {
+ color: #cf6a4c;
+}
+
+.string {
+ color: #8f9d6a;
+}
+
+.collapsed:after {
+ font-style: italic;
+ color: #5f5a60;
+}
diff --git a/src/sass/themes/vibrant-ink.scss b/src/sass/themes/vibrant-ink.scss
new file mode 100644
index 0000000..2e9ab6e
--- /dev/null
+++ b/src/sass/themes/vibrant-ink.scss
@@ -0,0 +1,28 @@
+body {
+ background-color: #0f0f0f;
+ color: #fff;
+}
+
+::selection {
+ background-color: #69c;
+}
+
+.key {
+ color: #fc0;
+}
+
+.number {
+ color: #9c9;
+}
+
+.string {
+ color: #6f0;
+}
+
+.bool, .null {
+ color: #399;
+}
+
+.collapsed:after {
+ color: #93c;
+}
diff --git a/src/sass/themes/xcode.scss b/src/sass/themes/xcode.scss
new file mode 100644
index 0000000..2ecd584
--- /dev/null
+++ b/src/sass/themes/xcode.scss
@@ -0,0 +1,24 @@
+body {
+ background-color: #fff;
+ color: #000;
+}
+
+::selection {
+ background: #b5d5ff;
+}
+
+.number {
+ color: #3a00dc;
+}
+
+.string {
+ color: #df0002;
+}
+
+.bool, .null {
+ color: #c800a4;
+}
+
+.collapsed:after {
+ color: #008e00;
+}