Commit 9c13188d authored by Akari Labs's avatar Akari Labs

general theming overhauls

parent c7c1f32b
......@@ -106,4 +106,5 @@ package/
dist/package.json
src/constants.ts
*.tar.gz
*.zip
\ No newline at end of file
*.zip
{
"appName": "Navi",
"execName": "navi",
"emblem": "compass"
"emblem": "compass",
"defaultTheme": "internal://settings/themes/base16/summerfruit.theme.css"
}
\ No newline at end of file
......@@ -62,7 +62,7 @@ const targets = {
internets: target('src/pipes/screensaver.js', 'dist/internal/about/internets', '[name].bundle.js'),
settings: target('src/settings/index.tsx', 'dist/internal/settings', '[name].bundle.js', 'web', 'internal://settings/', [
new webpack.DefinePlugin({ 'process.env.ASSET_PATH': JSON.stringify('internal://settings/js/') }),
new MonacoWebpackPlugin({ languages: ['json', 'css'] })
new MonacoWebpackPlugin({ languages: ['json', 'css', 'yaml'] })
]),
downloads: target('src/downloads/index.tsx', 'dist/internal/downloads', '[name].bundle.js', 'electron-renderer')
};
......
/*%use base16*/
/* dont edit the below manually, use the base16 editor! */
@import url("internal://resources/css/helper/base16.min.css");
/*%base16 {"scheme":"Dracula","author":"Mike Barkmin (http://github.com/mikebarkmin) based on Dracula Theme (http://github.com/dracula)","base00":"282936","base01":"3a3c4e","base02":"4d4f68","base03":"626483","base04":"62d6e8","base05":"e9e9f4","base06":"f1f2f8","base07":"f7f7fb","base08":"ea51b2","base09":"b45bcf","base0A":"00f769","base0B":"ebff87","base0C":"a1efe4","base0D":"62d6e8","base0E":"b45bcf","base0F":"00f769"}*/
:root * {
--theme-base00: #282936;
--theme-base01: #3a3c4e;
--theme-base02: #4d4f68;
--theme-base03: #626483;
--theme-base04: #62d6e8;
--theme-base05: #e9e9f4;
--theme-base06: #f1f2f8;
--theme-base07: #f7f7fb;
--theme-base08: #ea51b2;
--theme-base09: #b45bcf;
--theme-base0A: #00f769;
--theme-base0B: #ebff87;
--theme-base0C: #a1efe4;
--theme-base0D: #62d6e8;
--theme-base0E: #b45bcf;
--theme-base0F: #00f769;
}/*base16%*/
/* dont edit the above manually, use the base16 editor! */
\ No newline at end of file
/*%use base16*/
/* dont edit the below manually, use the base16 editor! */
@import url("internal://resources/css/helper/base16.min.css");
/*%base16 {"scheme":"Gruvbox dark, hard","author":"Dawid Kurek (dawikur@gmail.com), morhetz (https://github.com/morhetz/gruvbox)","base00":"1d2021","base01":"3c3836","base02":"504945","base03":"665c54","base04":"bdae93","base05":"d5c4a1","base06":"ebdbb2","base07":"fbf1c7","base08":"fb4934","base09":"fe8019","base0A":"fabd2f","base0B":"b8bb26","base0C":"8ec07c","base0D":"83a598","base0E":"d3869b","base0F":"d65d0e"}*/
:root * {
--theme-base00: #1d2021;
--theme-base01: #3c3836;
--theme-base02: #504945;
--theme-base03: #665c54;
--theme-base04: #bdae93;
--theme-base05: #d5c4a1;
--theme-base06: #ebdbb2;
--theme-base07: #fbf1c7;
--theme-base08: #fb4934;
--theme-base09: #fe8019;
--theme-base0A: #fabd2f;
--theme-base0B: #b8bb26;
--theme-base0C: #8ec07c;
--theme-base0D: #83a598;
--theme-base0E: #d3869b;
--theme-base0F: #d65d0e;
}/*base16%*/
/* dont edit the above manually, use the base16 editor! */
\ No newline at end of file
/*%use base16*/
/* dont edit the below manually, use the base16 editor! */
@import url("internal://resources/css/helper/base16.min.css");
/*%base16 {"scheme":"One Light","author":"Daniel Pfeifer (http://github.com/purpleKarrot)","base00":"fafafa","base01":"f0f0f1","base02":"e5e5e6","base03":"a0a1a7","base04":"696c77","base05":"383a42","base06":"202227","base07":"090a0b","base08":"ca1243","base09":"d75f00","base0A":"c18401","base0B":"50a14f","base0C":"0184bc","base0D":"4078f2","base0E":"a626a4","base0F":"986801"}*/
:root * {
--theme-base00: #fafafa;
--theme-base01: #f0f0f1;
--theme-base02: #e5e5e6;
--theme-base03: #a0a1a7;
--theme-base04: #696c77;
--theme-base05: #383a42;
--theme-base06: #202227;
--theme-base07: #090a0b;
--theme-base08: #ca1243;
--theme-base09: #d75f00;
--theme-base0A: #c18401;
--theme-base0B: #50a14f;
--theme-base0C: #0184bc;
--theme-base0D: #4078f2;
--theme-base0E: #a626a4;
--theme-base0F: #986801;
}/*base16%*/
/* dont edit the above manually, use the base16 editor! */
\ No newline at end of file
/*%use base16*/
/* dont edit the below manually, use the base16 editor! */
@import url("internal://resources/css/helper/base16.min.css");
/*%base16 {"scheme":"Summerfruit Dark","author":"Christopher Corley (http://christop.club/)","base00":"151515","base01":"202020","base02":"303030","base03":"505050","base04":"B0B0B0","base05":"D0D0D0","base06":"E0E0E0","base07":"FFFFFF","base08":"FF0086","base09":"FD8900","base0A":"ABA800","base0B":"00C918","base0C":"1FAAAA","base0D":"3777E6","base0E":"AD00A1","base0F":"CC6633"}*/
:root * {
--theme-base00: #151515;
--theme-base01: #202020;
--theme-base02: #303030;
--theme-base03: #505050;
--theme-base04: #B0B0B0;
--theme-base05: #D0D0D0;
--theme-base06: #E0E0E0;
--theme-base07: #FFFFFF;
--theme-base08: #FF0086;
--theme-base09: #FD8900;
--theme-base0A: #ABA800;
--theme-base0B: #00C918;
--theme-base0C: #1FAAAA;
--theme-base0D: #3777E6;
--theme-base0E: #AD00A1;
--theme-base0F: #CC6633;
}/*base16%*/
/* dont edit the above manually, use the base16 editor! */
\ No newline at end of file
/*%use base16*/
/* dont edit the below manually, use the base16 editor! */
@import url("internal://resources/css/helper/base16.min.css");
/*%base16 {"scheme":"Tomorrow Night","author":"Chris Kempson (http://chriskempson.com)","base00":"2d2d2d","base01":"393939","base02":"515151","base03":"999999","base04":"b4b7b4","base05":"cccccc","base06":"e0e0e0","base07":"ffffff","base08":"f2777a","base09":"f99157","base0A":"ffcc66","base0B":"99cc99","base0C":"66cccc","base0D":"6699cc","base0E":"cc99cc","base0F":"a3685a"}*/
:root * {
--theme-base00: #2d2d2d;
--theme-base01: #393939;
--theme-base02: #515151;
--theme-base03: #999999;
--theme-base04: #b4b7b4;
--theme-base05: #cccccc;
--theme-base06: #e0e0e0;
--theme-base07: #ffffff;
--theme-base08: #f2777a;
--theme-base09: #f99157;
--theme-base0A: #ffcc66;
--theme-base0B: #99cc99;
--theme-base0C: #66cccc;
--theme-base0D: #6699cc;
--theme-base0E: #cc99cc;
--theme-base0F: #a3685a;
}/*base16%*/
/* dont edit the above manually, use the base16 editor! */
\ No newline at end of file
/*%use base16*/
/* dont edit the below manually, use the base16 editor! */
@import url("internal://resources/css/helper/base16.min.css");
/*%base16 {"scheme":"Tomorrow Night","author":"Chris Kempson (http://chriskempson.com)","base00":"1d1f21","base01":"282a2e","base02":"373b41","base03":"969896","base04":"b4b7b4","base05":"c5c8c6","base06":"e0e0e0","base07":"ffffff","base08":"cc6666","base09":"de935f","base0A":"f0c674","base0B":"b5bd68","base0C":"8abeb7","base0D":"81a2be","base0E":"b294bb","base0F":"a3685a"}*/
:root * {
--theme-base00: #1d1f21;
--theme-base01: #282a2e;
--theme-base02: #373b41;
--theme-base03: #969896;
--theme-base04: #b4b7b4;
--theme-base05: #c5c8c6;
--theme-base06: #e0e0e0;
--theme-base07: #ffffff;
--theme-base08: #cc6666;
--theme-base09: #de935f;
--theme-base0A: #f0c674;
--theme-base0B: #b5bd68;
--theme-base0C: #8abeb7;
--theme-base0D: #81a2be;
--theme-base0E: #b294bb;
--theme-base0F: #a3685a;
}/*base16%*/
/* dont edit the above manually, use the base16 editor! */
\ No newline at end of file
......@@ -23,7 +23,7 @@
--theme-stripe-default: var(--theme-highlight-blue);
--theme-stripe-incognito: var(--theme-disabled);
--theme-hover-transition: .2s;
--theme-hover-transition: .1s;
--theme-border-radius: 0px;
......
......@@ -26,4 +26,6 @@
--theme-border-radius: 4px;
--theme-hover-transition: 0s;
}
\ No newline at end of file
@import url("internal://resources/css/fonts/inconsolata.min.css");
:root * {
--theme-font: Segoe WPC, Segoe UI, Ubuntu, Droid Sans, sans-serif;
--theme-font-tab-correction: 0px;
--theme-bar-font: "Inconsolata";
--theme-fg: #d4d4d4;
--theme-drag-bg: #1e1e1e;
--theme-chrome-bg-blur: #1e1e1e;
--theme-chrome-bg-hov: #2a2d2e;
--theme-chrome-bg: #333333;
--theme-button: #cccccc;
--theme-highlight: var(--theme-highlight-blue);
--theme-highlight-red: #f48771;
--theme-highlight-blue: #75beff;
--theme-highlight-green: #73c991;
--theme-highlight-yellow: #cca700;
--theme-disabled: #8c8c8c;
--theme-hover-transition: .1s;
}
\ No newline at end of file
......@@ -534,6 +534,9 @@ export class Chrome implements WrappedElement {
(async () => {
if (await stores.blobs.getItem<string>(BlobName.Theme) == null)
await stores.blobs.setItem(BlobName.Theme, await fetch(constants.defaultTheme).then(x => x.text()));
var part = await stores.blobs.getItem<string>(BlobName.LastPartition);
if (part == null) await stores.blobs.setItem(BlobName.LastPartition, part = 'default');
......
......@@ -5,6 +5,7 @@ import fs from 'fs';
import { Request } from 'electron';
import { StoreName, BlobName } from '../enums';
import { constants } from '../constants';
import { getStoreItem } from './chromeStore';
import { getFirstWindow } from './window';
......@@ -29,7 +30,7 @@ export async function internalGenHandler(request: Request, callback: (data?: str
case '/theme.css':
if (getFirstWindow() != null) {
getStoreItem<string>(StoreName.Blobs, BlobName.Theme).then(theme => {
if (theme == null) callback('@import url("internal://settings/themes/default.theme.css");');
if (theme == null) callback(`@import url("${constants.defaultTheme}");`);
else callback(theme);
});
}
......
......@@ -33,9 +33,11 @@ export function ExceptionViewer(): HTMLElement {
}
});
return <div class="row-viewer">
{always}
{never}
return <div class="padded-panel content-panel">
<div class="row-viewer">
{always}
{never}
</div>
</div>
}
\ No newline at end of file
......@@ -10,12 +10,14 @@ import { OfflineBlobName } from '../enums';
<Menu>
<MenuOption title="General" icon="toggle-on">
<StringsSetting key="homePages">Home pages (separated by comma)</StringsSetting>
<StringSetting key="newTabPage">New tab page</StringSetting>
<BooleanSetting key="showHomeButton">Show home button</BooleanSetting>
<StringSetting key="searchProvider">Search query</StringSetting>
<BooleanSetting key="matchColorTheme">Use theme-color meta tag</BooleanSetting>
<BooleanMainSetting key={OfflineBlobName.Blocker}>Block trackers and ads <i>(requires a restart)</i></BooleanMainSetting>
<div class="padded-panel content-panel">
<StringsSetting key="homePages">Home pages (separated by comma)</StringsSetting>
<StringSetting key="newTabPage">New tab page</StringSetting>
<BooleanSetting key="showHomeButton">Show home button</BooleanSetting>
<StringSetting key="searchProvider">Search query</StringSetting>
<BooleanSetting key="matchColorTheme">Use theme-color meta tag</BooleanSetting>
<BooleanMainSetting key={OfflineBlobName.Blocker}>Block trackers and ads <i>(requires a restart)</i></BooleanMainSetting>
</div>
</MenuOption>
<MenuOption title="Partitions" icon="user">
<PartitionViewer />
......@@ -34,14 +36,18 @@ import { OfflineBlobName } from '../enums';
function appendBadIdeas(): boolean {
if (location.hash === '#badidea') {
menuPanel.appendChild(<MenuOption title="Bad ideas" icon="exclamation-triangle">
<h2 style="margin-bottom:8px">You should not change any of these options unless you are absolutely sure that you know what you are doing.</h2>
<BooleanMainSetting key={OfflineBlobName.NoCSP}>Disable CSP globally</BooleanMainSetting>
<div class="padded-panel content-panel">
<h2 style="margin-bottom:8px">You should not change any of these options unless you are absolutely sure that you know what you are doing.</h2>
<BooleanMainSetting key={OfflineBlobName.NoCSP}>Disable CSP globally</BooleanMainSetting>
</div>
</MenuOption>);
menuPanel.appendChild(<MenuOption title="Internal" icon="bug">
<NumberMainSetting key={OfflineBlobName.Left}>Last state: x</NumberMainSetting>
<NumberMainSetting key={OfflineBlobName.Top}>Last state: y</NumberMainSetting>
<JSONMainSetting key={OfflineBlobName.Size}>Last state: size</JSONMainSetting>
<BooleanMainSetting key={OfflineBlobName.Maximized}>Last state: maximized</BooleanMainSetting>
<div class="padded-panel content-panel">
<NumberMainSetting key={OfflineBlobName.Left}>Last state: x</NumberMainSetting>
<NumberMainSetting key={OfflineBlobName.Top}>Last state: y</NumberMainSetting>
<JSONMainSetting key={OfflineBlobName.Size}>Last state: size</JSONMainSetting>
<BooleanMainSetting key={OfflineBlobName.Maximized}>Last state: maximized</BooleanMainSetting>
</div>
</MenuOption>);
return true;
}
......
......@@ -11,7 +11,7 @@ const emitter = new EventEmitter();
export function MenuOption(attributes: { title: string, icon: string, handleFocus?: Function }, children: InertElement) {
const element: HTMLDivElement = <div class="padded-panel menu-option"><i class={`fa fa-${attributes.icon}`} /> {attributes.title}</div>
const content: HTMLDivElement = <div class="padded-panel content-panel">{children}</div>
const content: HTMLDivElement = <div style="flex:1;overflow:auto;">{children}</div>
function becomeActive() {
contentTitle.replaceWith(contentTitle = <div class="padded-panel"><h3><i class={`fa fa-${attributes.icon}`} /> {attributes.title}</h3></div>);
......
......@@ -34,7 +34,7 @@ export function Partition(attributes: { name: string, color: string }): HTMLElem
export function PartitionViewer(): HTMLElement {
const partitions: HTMLDivElement = <div />
const partitions: HTMLDivElement = <div class="padded-panel content-panel" />
getStoreKeys(StoreName.Partitions).then(async stores => {
for (var k in stores) {
......
import * as monaco from 'monaco-editor';
import yaml from 'js-yaml'; // *shivers in disgust*
import { navi } from '../api/ambient';
import { updateTheme } from '../api/preferences';
......@@ -9,27 +10,161 @@ import { StoreName, BlobName, ClientServices } from '../enums';
export var editorInstance: monaco.editor.IStandaloneCodeEditor;
interface Base16Raw {
base00: string;
base01: string;
base02: string;
base03: string;
base04: string;
base05: string;
base06: string;
base07: string;
base08: string;
base09: string;
base0A: string;
base0B: string;
base0C: string;
base0D: string;
base0E: string;
base0F: string;
}
function isValidScheme(scheme): scheme is Base16Raw {
if (typeof scheme !== 'object') return false;
for (var i = 0; i < 0x10; i++) if (typeof scheme[`base${(i).toString(16).toUpperCase().padStart(2, '0')}`] !== 'string') return false;
return true;
}
function getSchemeColorsOnly(scheme: Base16Raw): Base16Raw {
const ret = {};
for (var i = 0; i < 0x10; i++) {
const k = `base${(i).toString(16).toUpperCase().padStart(2, '0')}`;
ret[k] = scheme[k];
}
return ret as Base16Raw;
}
function base16DataRegex() { return /\/\*%base16 (.*?)\*\/[\w\W]+?\/\*base16%\*\//; }
function extractB16(style: string): Base16Raw | null {
const e = base16DataRegex().exec(style);
if (e != null) {
try {
const scheme: Base16Raw = JSON.parse(e[1]);
if (isValidScheme(scheme)) return scheme;
else return null;
}
catch (e) {
return null;
}
}
else return null;
}
function generateEmbeddedB16(scheme: Base16Raw): string {
return `/*%base16 ${JSON.stringify(scheme)}*/
:root * {
${Object.keys(getSchemeColorsOnly(scheme)).map(k => ` --theme-${k}: #${scheme[k]};\n`).join('')}}/*base16%*/`;
}
export function ThemeEditor(): HTMLElement {
const me = <div style="width:100%;height:100%;" />
const editor = editorInstance = monaco.editor.create(me, {
var showingB16 = false;
var currentScheme: Base16Raw = null;
const divCss: HTMLDivElement = <div class="css-editor" />
const editorCss = editorInstance = monaco.editor.create(divCss, {
language: 'css',
theme: 'vs-dark',
fontSize: 12
fontSize: 12,
scrollBeyondLastLine: false,
minimap: {
enabled: false
},
automaticLayout: true
});
const divB16: HTMLDivElement = <div class="yaml-editor" style="display:none" />
const editorB16 = editorInstance = monaco.editor.create(divB16, {
language: 'yaml',
theme: 'vs-dark',
fontSize: 12,
scrollBeyondLastLine: false,
minimap: {
enabled: false
},
lineNumbers: 'off',
automaticLayout: true
});
window.addEventListener('resize', () => editor.layout());
function showB16() { if (showingB16) return; showingB16 = true; divB16.style.display = ''; }
function hideB16() { if (!showingB16) return; showingB16 = false; divB16.style.display = 'none'; }
function updateYaml() {
if (editorB16.hasTextFocus()) return;
const value = editorCss.getValue();
if (value.match(/\/\*%use base16\*\//)) showB16();
else hideB16();
if (!showingB16) return;
currentScheme = extractB16(value);
if (currentScheme == null) {
editorB16.setValue('# scheme not available');
return;
}
editorB16.setValue(yaml.safeDump(currentScheme));
}
navi.ipc.on(ClientServices.ThemeUpdate, async () => {
if (editor.hasTextFocus()) return;
if (editorCss.hasTextFocus() || editorB16.hasTextFocus()) return;
const css = await getStoreItem<string>(StoreName.Blobs, BlobName.Theme);
if (editor.getValue() != css) editor.setValue(css);
const value = editorCss.getValue();
if (value != css) {
editorCss.setValue(css);
updateYaml();
}
});
getStoreItem<string>(StoreName.Blobs, BlobName.Theme).then(x => editor.setValue(x));
editor.getModel().onDidChangeContent(async () => {
editorCss.getModel().onDidChangeContent(async () => {
const css = await getStoreItem<string>(StoreName.Blobs, BlobName.Theme);
if (editor.getValue() != css) updateTheme(editor.getValue());
const value = editorCss.getValue();
if (value != css) {
updateTheme(value);
updateYaml();
}
});
getStoreItem<string>(StoreName.Blobs, BlobName.Theme).then(x => {
editorCss.setValue(x);
updateYaml();
});
return me;
var lastYaml = '';
editorB16.getModel().onDidChangeContent(async () => {
const value = editorB16.getValue();
if (lastYaml === value) return;
lastYaml = value;
try {
const scheme = yaml.safeLoad(value);
if (!isValidScheme(scheme)) return;
currentScheme = scheme;
const style = editorCss.getValue();
if (style.match(base16DataRegex()) != null) {
const newStyle = style.replace(base16DataRegex(), generateEmbeddedB16(scheme));
editorCss.setValue(newStyle);
}
else editorCss.setValue(`${style}
/* dont edit the below manually, use the base16 editor! */
@import url("internal://resources/css/helper/base16.min.css");
${generateEmbeddedB16(scheme)}
/* dont edit the above manually, use the base16 editor! */`);
}
catch (e) { }
});
return <div class="theme-editor-panel">{divCss}{divB16}</div>
}
\ No newline at end of file
......@@ -6,7 +6,6 @@ import { StoreName, BlobName } from '../enums';
interface ThemeDefinition {
name: string;
author?: string;
url?: string;
code?: string;
}
......@@ -51,7 +50,7 @@ export function SavedTheme(attributes: { key: string, displayName: string, prelo
export function ThemeViewer(): HTMLElement {
const themes: HTMLDivElement = <div />
const themes: HTMLDivElement = <div class="padded-panel content-panel" />
getStoreKeys(StoreName.SavedThemes).then(async sthemes => {
for (var k in preloadedThemes) {
......
{
"summerfruit": {
"name": "Summerfruit (default)",
"url": "internal://settings/themes/base16/summerfruit.theme.css"
},
"onelight": {
"name": "One Light",
"url": "internal://settings/themes/base16/onelight.theme.css"
},
"dracula": {
"name": "Dracula",
"url": "internal://settings/themes/base16/dracula.theme.css"
},
"gruvbox": {
"name": "Gruvbox",
"url": "internal://settings/themes/base16/gruvbox.theme.css"
},
"tomorrow-night": {
"name": "Tomorrow Night",
"url": "internal://settings/themes/base16/tomorrow-night.theme.css"
},
"tomorrow-80s": {
"name": "Tomorrow 80s",
"url": "internal://settings/themes/base16/tomorrow-80s.theme.css"
},
"default": {
"name": "Navi Dark (default)",
"author": "akira akari",
"name": "Navi Classic",
"url": "internal://settings/themes/default.theme.css"
},
"default-light": {
"name": "Navi Light",
"author": "akira akari",
"name": "Navi Classic Light",
"url": "internal://settings/themes/default-light.theme.css"
},
"vscode": {
"name": "VSCode",
"url": "internal://settings/themes/vscode.theme.css"
},
"discord": {
"name": "Discord Dark",
"author": "akira akari",
"name": "Discord",
"url": "internal://settings/themes/discord.theme.css"
},
"discord-light": {
"name": "Discord Light",
"author": "akira akari",
"url": "internal://settings/themes/discord-light.theme.css"
}
}
\ No newline at end of file
......@@ -2,7 +2,7 @@
@import url("internal://resources/css/fonts/forkawesome.min.css");
body {
background-color: #ffffff;
background: #ffffff;
font-family: var(--theme-font);
color: var(--theme-fg);
}
......
......@@ -28,6 +28,9 @@ body, h1, h2, h3, h4 {
padding-bottom: 12px;
padding-left: 12px;
padding-right: 12px;
min-width: auto;
min-height: auto;
overflow: hidden;
}
.menu-panel {
......@@ -61,6 +64,9 @@ body, h1, h2, h3, h4 {
flex: 1;
display: flex;
flex-direction: column;
min-width: auto;
min-height: auto;
overflow: hidden;
}
.content-panel {
......@@ -122,4 +128,25 @@ body, h1, h2, h3, h4 {
.row .fa-check:hover {
color: var(--theme-highlight-green);
}
.theme-editor-panel {
width: 100%;
height: 100%;
display: flex;
flex-direction: row;
}
.theme-editor-panel>.css-editor {
flex: 1;
min-width: 0;
min-height: 0;
overflow: hidden;
}
.theme-editor-panel>.yaml-editor {
width: 400px;
min-width: 0;
min-height: 0;
overflow: hidden;
}
\ No newline at end of file
@import url("internal://settings/themes/default.theme.css");
:root * {
--theme-fg: var(--theme-base05);
--theme-drag-bg: var(--theme-base00);
--theme-chrome-bg-blur: var(--theme-base00);
--theme-chrome-bg-hov: var(--theme-base02);
--theme-chrome-bg: var(--theme-base01);
--theme-button: var(--theme-base05);
--theme-highlight: var(--theme-highlight-blue);
--theme-highlight-red: var(--theme-base08);
--theme-highlight-blue: var(--theme-base0D);
--theme-highlight-green: var(--theme-base0C);
--theme-highlight-yellow: var(--theme-base0B);
--theme-disabled: var(--theme-base03);
}
\ No newline at end of file
......@@ -2,6 +2,7 @@
"base/base.css": "resources/css/base.min.css",
"base/flyout.css": "resources/css/flyout.min.css",
"base/about.css": "about/style.min.css",
"helper/base16.css": "resources/css/helper/base16.min.css",
"bundle/chrome.css": "chrome/style.min.css",
"bundle/settings.css": "settings/style.min.css",
"bundle/downloads.css": "downloads/style.min.css",
......
......@@ -69,6 +69,11 @@
"@types/relateurl" "*"
"@types/uglify-js" "*"
"@types/js-yaml@^3.12.1":
version "3.12.1"
resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-3.12.1.tgz#5c6f4a1eabca84792fbd916f0cb40847f123c656"
integrity sha512-SGGAhXLHDx+PK4YLNcNGa6goPf9XRWQNAUUbffkwVGGXIxmDKWyGGL4inzq2sPmExu431Ekb9aEMn9BkPqEYFA==
"@types/node-fetch@^2.5.2":
version "2.5.2"
resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.2.tgz#76906dea5b3d6901e50e63e15249c9bcd6e9676e"
......@@ -363,6 +368,13 @@ are-we-there-yet@~1.1.2:
delegates "^1.0.0"
readable-stream "^2.0.6"
argparse@^1.0.7:
version "1.0.10"
resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
dependencies:
sprintf-js "~1.0.2"
arr-diff@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
......@@ -1658,6 +1670,11 @@ eslint-scope@^4.0.3:
esrecurse "^4.1.0"