remove core mods

This commit is contained in:
dragonwocky 2020-12-15 23:49:49 +11:00
parent 311e435e2e
commit 95bf160ba9
31 changed files with 0 additions and 6151 deletions

View File

@ -1,9 +0,0 @@
/*
* notion-enhancer
* (c) 2020 dragonwocky <thedragonring.bod@gmail.com> (https://dragonwocky.me/)
* under the MIT license
*/
@import './css/theme.css';
@import './css/scrollbars.css';
@import './css/titlebar.css';

View File

@ -1,106 +0,0 @@
/*
* notion-enhancer
* (c) 2020 dragonwocky <thedragonring.bod@gmail.com> (https://dragonwocky.me/)
* under the MIT license
*/
'use strict';
module.exports = (store) => {
const helpers = require('../../pkg/helpers.js'),
path = require('path'),
fs = require('fs-extra'),
browser = require('electron').remote.getCurrentWindow(),
is_mac = process.platform === 'darwin',
buttons = {
element: helpers.createElement('<div class="window-buttons-area"></div>'),
insert: [
...((store('mods')['72886371-dada-49a7-9afc-9f275ecf29d3'] || {})
.enabled
? ['alwaysontop']
: []),
...(store().frameless && !store().tiling_mode && !is_mac
? ['minimize', 'maximize', 'close']
: []),
],
icons: {
raw: {
alwaysontop: {
on: fs.readFile(
path.resolve(`${__dirname}/icons/alwaysontop_on.svg`)
),
off: fs.readFile(
path.resolve(`${__dirname}/icons/alwaysontop_off.svg`)
),
},
minimize: fs.readFile(
path.resolve(`${__dirname}/icons/minimize.svg`)
),
maximize: {
on: fs.readFile(path.resolve(`${__dirname}/icons/maximize_on.svg`)),
off: fs.readFile(
path.resolve(`${__dirname}/icons/maximize_off.svg`)
),
},
close: fs.readFile(path.resolve(`${__dirname}/icons/close.svg`)),
},
alwaysontop() {
return browser.isAlwaysOnTop()
? buttons.icons.raw.alwaysontop.on
: buttons.icons.raw.alwaysontop.off; // '🠙' : '🠛'
},
minimize() {
return buttons.icons.raw.minimize; // '⚊'
},
maximize() {
return browser.isMaximized()
? buttons.icons.raw.maximize.on
: buttons.icons.raw.maximize.off; // '🗗' : '🗖'
},
close() {
return buttons.icons.raw.close; // '⨉'
},
},
actions: {
async alwaysontop() {
browser.setAlwaysOnTop(!browser.isAlwaysOnTop());
this.innerHTML = await buttons.icons.alwaysontop();
},
minimize() {
browser.minimize();
},
async maximize() {
browser.isMaximized() ? browser.unmaximize() : browser.maximize();
this.innerHTML = await buttons.icons.maximize();
},
close() {
browser.close();
},
},
};
if (!buttons.insert.includes('alwaysontop')) browser.setAlwaysOnTop(false);
(async () => {
for (let btn of buttons.insert) {
buttons.element.innerHTML += `<button class="window-button btn-${btn}">${await buttons.icons[
btn
]()}</button>`;
}
for (let btn of buttons.insert) {
buttons.element.querySelector(`.window-button.btn-${btn}`).onclick =
buttons.actions[btn];
}
if (store().frameless && !store().tiling_mode && !is_mac) {
window.addEventListener('resize', (event) => {
Promise.resolve(buttons.icons.maximize()).then((icon) => {
icon = icon.toString();
const el = buttons.element.querySelector('.btn-maximize');
if (el.innerHTML != icon) el.innerHTML = icon;
});
});
}
})();
return buttons;
};

View File

@ -1,269 +0,0 @@
/*
* notion-enhancer
* (c) 2020 dragonwocky <thedragonring.bod@gmail.com> (https://dragonwocky.me/)
* (c) 2020 TarasokUA
* under the MIT license
*/
'use strict';
module.exports = (store, __exports) => {
const electron = require('electron'),
helpers = require('../../pkg/helpers.js'),
notionIpc = require(`${helpers
.getNotionResources()
.replace(/\\/g, '/')}/app/helpers/notionIpc.js`),
{ toKeyEvent } = require('keyboardevent-from-electron-accelerator'),
tabsEnabled = (store('mods')['e1692c29-475e-437b-b7ff-3eee872e1a42'] || {})
.enabled;
document.defaultView.addEventListener('keyup', (event) => {
// additional hotkeys
if (event.key === 'F5') location.reload();
// open menu on hotkey toggle
if (store().menu_toggle) {
const hotkey = {
ctrlKey: false,
metaKey: false,
altKey: false,
shiftKey: false,
...toKeyEvent(store().menu_toggle),
};
let triggered = true;
for (let prop in hotkey)
if (
hotkey[prop] !== event[prop] &&
!(prop === 'key' && event[prop] === 'Dead')
)
triggered = false;
if (triggered) electron.ipcRenderer.send('enhancer:open-menu');
}
if (tabsEnabled) {
const tabStore = () => store('e1692c29-475e-437b-b7ff-3eee872e1a42');
if (tabStore().select_modifier) {
// switch between tabs via key modifier
const select_tab_modifier = {
ctrlKey: false,
metaKey: false,
altKey: false,
shiftKey: false,
...toKeyEvent(tabStore().select_modifier),
};
let triggered = true;
for (let prop in select_tab_modifier)
if (select_tab_modifier[prop] !== event[prop]) triggered = false;
if (
triggered &&
[
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'ArrowRight',
'ArrowLeft',
].includes(event.key)
)
electron.ipcRenderer.sendToHost('enhancer:select-tab', event.key);
}
if (tabStore().new_tab) {
// create/close tab keybindings
const new_tab_keybinding = {
ctrlKey: false,
metaKey: false,
altKey: false,
shiftKey: false,
...toKeyEvent(tabStore().new_tab),
};
let triggered = true;
for (let prop in new_tab_keybinding)
if (new_tab_keybinding[prop] !== event[prop]) triggered = false;
if (triggered) electron.ipcRenderer.sendToHost('enhancer:new-tab');
}
if (tabStore().close_tab) {
const close_tab_keybinding = {
ctrlKey: false,
metaKey: false,
altKey: false,
shiftKey: false,
...toKeyEvent(tabStore().close_tab),
};
let triggered = true;
for (let prop in close_tab_keybinding)
if (close_tab_keybinding[prop] !== event[prop]) triggered = false;
if (triggered) electron.ipcRenderer.sendToHost('enhancer:close-tab');
}
}
});
const attempt_interval = setInterval(enhance, 500);
async function enhance() {
if (
!document.querySelector('.notion-frame') ||
!document.querySelector('.notion-sidebar') ||
!document.querySelector('.notion-topbar')
)
return;
clearInterval(attempt_interval);
// frameless
if (store().frameless && !store().tiling_mode && !tabsEnabled) {
document.body.classList.add('frameless');
// draggable area
document
.querySelector('.notion-topbar')
.prepend(helpers.createElement('<div class="window-dragarea"></div>'));
}
// window buttons
if (!tabsEnabled) {
const buttons = require('./buttons.js')(store);
document
.querySelector('.notion-topbar > div[style*="display: flex"]')
.appendChild(buttons.element);
}
document
.querySelector('.notion-history-back-button')
.parentElement.nextElementSibling.classList.add(
'notion-topbar-breadcrumb'
);
document
.querySelector('.notion-topbar-share-menu')
.parentElement.classList.add('notion-topbar-actions');
const getStyle = (prop) =>
getComputedStyle(
document.querySelector('.notion-app-inner')
).getPropertyValue(prop);
// external theming
document.defaultView.addEventListener('keydown', (event) => {
if ((event.ctrlKey || event.metaKey) && event.key === 'f') {
notionIpc.sendNotionToIndex('search:set-theme', {
'mode': document.querySelector('.notion-dark-theme')
? 'dark'
: 'light',
'colors': {
'white': getStyle('--theme--option_active-color'),
'blue': getStyle('--theme--option_active-background'),
},
'borderRadius': 3,
'textColor': getStyle('--theme--text'),
'popoverBackgroundColor': getStyle('--theme--card'),
'popoverBoxShadow': getStyle('--theme--box-shadow_strong'),
'inputBoxShadow': `box-shadow: ${getStyle(
`--theme--primary`
)} 0px 0px 0px 1px inset, ${getStyle(
`--theme--primary_hover`
)} 0px 0px 0px 2px !important`,
'inputBackgroundColor': getStyle('--theme--main'),
'dividerColor': getStyle('--theme--table-border'),
'shadowOpacity': 0.2,
});
}
});
function setAppTheme() {
const theme = document.querySelector('.notion-dark-theme')
? 'dark'
: 'light';
electron.ipcRenderer.send('enhancer:set-app-theme', theme);
}
setAppTheme();
new MutationObserver(setAppTheme).observe(
document.querySelector('.notion-app-inner'),
{ attributes: true }
);
electron.ipcRenderer.on('enhancer:get-app-theme', setAppTheme);
if (tabsEnabled) {
let tab_title = { img: '', emoji: '', text: '' };
if (process.platform === 'darwin')
document
.querySelector('.notion-sidebar [style*="37px"]:empty')
.remove();
const TITLE_OBSERVER = new MutationObserver(() =>
__electronApi.setWindowTitle('notion.so')
);
__electronApi.setWindowTitle = (title) => {
const $container =
document.querySelector(
'.notion-peek-renderer [style="padding-left: calc(126px + env(safe-area-inset-left)); padding-right: calc(126px + env(safe-area-inset-right)); max-width: 100%; width: 100%;"]'
) ||
document.querySelector(
'.notion-frame [style="padding-left: calc(96px + env(safe-area-inset-left)); padding-right: calc(96px + env(safe-area-inset-right)); max-width: 100%; margin-bottom: 8px; width: 100%;"]'
) ||
document.querySelector('.notion-peek-renderer') ||
document.querySelector('.notion-frame'),
icon = $container.querySelector(
'.notion-record-icon img:not([src^="data:"])'
),
img =
icon && icon.getAttribute('src')
? `<img src="${
icon.getAttribute('src').startsWith('/')
? 'notion://www.notion.so'
: ''
}${icon.getAttribute('src')}">`
: '',
emoji = icon ? icon.getAttribute('aria-label') : '';
let text = $container.querySelector('[placeholder="Untitled"]');
text = text
? text.innerText || 'Untitled'
: [
setTimeout(() => __electronApi.setWindowTitle(title), 250),
title,
][1];
TITLE_OBSERVER.disconnect();
TITLE_OBSERVER.observe($container, {
childList: true,
subtree: true,
characterData: true,
attributes: true,
});
if (
tab_title.img !== img ||
tab_title.emoji !== emoji ||
tab_title.text !== text
) {
tab_title = {
img,
emoji,
text,
};
electron.ipcRenderer.sendToHost('enhancer:set-tab-title', tab_title);
}
};
__electronApi.openInNewWindow = (urlPath) => {
electron.ipcRenderer.sendToHost(
'enhancer:new-tab',
`notion://www.notion.so${urlPath}`
);
};
} else if (store().frameless && !store().tiling_mode) {
let sidebar_width;
function setSidebarWidth(list) {
const new_sidebar_width =
list[0].target.style.height === 'auto'
? '0px'
: list[0].target.style.width;
if (new_sidebar_width !== sidebar_width) {
sidebar_width = new_sidebar_width;
electron.ipcRenderer.sendToHost(
'enhancer:sidebar-width',
sidebar_width
);
}
}
new MutationObserver(setSidebarWidth).observe(
document.querySelector('.notion-sidebar'),
{ attributes: true }
);
setSidebarWidth([{ target: document.querySelector('.notion-sidebar') }]);
}
}
};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,89 +0,0 @@
/*
* notion-enhancer
* (c) 2020 dragonwocky <thedragonring.bod@gmail.com> (https://dragonwocky.me/)
* (c) 2020 TarasokUA
* under the MIT license
*/
'use strict';
module.exports = (store, __exports) => {
const electron = require('electron'),
allWindows = () =>
electron.BrowserWindow.getAllWindows().filter(
(win) => win.getTitle() !== 'notion-enhancer menu'
),
// createWindow = __exports.createWindow,
path = require('path'),
helpers = require('../../pkg/helpers.js');
__exports.createWindow = function (relativeUrl, focused_window) {
if (!relativeUrl) relativeUrl = '';
const window_state = require(`${helpers
.getNotionResources()
.replace(/\\/g, '/')}/app/node_modules/electron-window-state/index.js`)(
{
defaultWidth: 1320,
defaultHeight: 860,
}
),
rect = {
x: window_state.x,
y: window_state.y,
width: window_state.width,
height: window_state.height,
};
focused_window =
focused_window || electron.BrowserWindow.getFocusedWindow();
if (focused_window && !focused_window.isMaximized()) {
rect.x = focused_window.getPosition()[0] + 20;
rect.y = focused_window.getPosition()[1] + 20;
rect.width = focused_window.getSize()[0];
rect.height = focused_window.getSize()[1];
}
let window = new electron.BrowserWindow({
show: false,
backgroundColor: '#ffffff',
titleBarStyle: 'hiddenInset',
frame: !store().frameless,
webPreferences: {
preload: path.resolve(
`${helpers.getNotionResources()}/app/renderer/index.js`
),
webviewTag: true,
session: electron.session.fromPartition('persist:notion'),
enableRemoteModule: true,
},
...rect,
});
window.once('ready-to-show', function () {
if (
!store().openhidden ||
allWindows().some((win) => win.isVisible() && win.id != window.id)
) {
window.show();
window.focus();
if (store().maximized) window.maximize();
if (
(focused_window && focused_window.isFullScreen()) ||
window_state.isFullScreen
)
window.setFullScreen(true);
}
});
let intended_quit = false;
window.on('close', (e) => {
if (intended_quit || !store().close_to_tray || allWindows().length > 1) {
window_state.saveState(window);
window = null;
} else {
e.preventDefault();
window.hide();
}
});
electron.app.on('before-quit', () => (intended_quit = true));
window.loadURL(__exports.getIndexUrl(relativeUrl));
return window;
};
return __exports.createWindow;
};

View File

@ -1,43 +0,0 @@
/*
* notion-enhancer
* (c) 2020 dragonwocky <thedragonring.bod@gmail.com> (https://dragonwocky.me/)
* (c) 2020 TarasokUA
* under the MIT license
*/
.window-buttons-area {
display: flex;
align-items: center;
font-size: 14px;
}
.window-button {
background: transparent;
border: 0;
margin: 0px 0px 0px 9px;
width: 32px;
line-height: 26px;
border-radius: 4px;
font-size: 16px;
transition: background 0.2s;
cursor: default;
}
.window-button svg {
margin-top: 8px;
width: 14px;
height: 14px;
}
.window-button svg path {
fill: currentColor;
}
.window-button svg line {
stroke: currentColor;
}
.window-button:hover {
background: var(--theme--interactive_hover);
box-shadow: 0 0 0 0.5px var(--theme--interactive_hover-border);
}
.window-button.btn-close:hover {
background: var(--theme--button_close);
color: var(--theme--button_close-fill);
}

View File

@ -1,29 +0,0 @@
/*
* notion-enhancer
* (c) 2020 dragonwocky <thedragonring.bod@gmail.com> (https://dragonwocky.me/)
* (c) 2020 TarasokUA
* under the MIT license
*/
[data-tweaks*='[smooth_scrollbars]'] .notion-scroller {
cursor: auto;
}
[data-tweaks*='[smooth_scrollbars]'] ::-webkit-scrollbar {
width: 8px; /* vertical */
height: 8px; /* horizontal */
-webkit-app-region: no-drag;
}
[data-tweaks*='[smooth_scrollbars]'] ::-webkit-scrollbar-corner {
background-color: transparent; /* overlap */
}
[data-tweaks*='[smooth_scrollbars]'] ::-webkit-scrollbar-thumb {
border-radius: 5px;
}
[data-tweaks*='[smooth_scrollbars]'] ::-webkit-scrollbar-thumb {
background-color: var(--theme--scrollbar);
border: 1px solid var(--theme--scrollbar-border);
}
[data-tweaks*='[smooth_scrollbars]'] ::-webkit-scrollbar-thumb:hover {
background: var(--theme--scrollbar_hover);
}

File diff suppressed because it is too large Load Diff

View File

@ -1,48 +0,0 @@
/*
* notion-enhancer
* (c) 2020 dragonwocky <thedragonring.bod@gmail.com> (https://dragonwocky.me/)
* (c) 2020 TarasokUA
* under the MIT license
*/
@import './buttons.css';
.frameless .notion-topbar {
height: calc(var(--configured--dragarea_height, 15px) + 45px) !important;
}
.frameless .window-dragarea {
height: var(--configured--dragarea_height, 15px);
width: 100%;
}
.frameless .window-dragarea {
background: var(--theme--dragarea);
}
.frameless [style*='top: 10.4972px'] {
top: calc(10.4972px + var(--configured--dragarea_height, 15px)) !important;
}
@media (max-width: 760px) {
.frameless .notion-topbar {
height: calc(var(--configured--dragarea_height, 15px) + 80px) !important;
}
.frameless .notion-topbar > :nth-child(2) {
height: 80px !important;
display: grid !important;
grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr;
}
.window-buttons-area {
grid-row: 1;
grid-column: 9 / span end;
justify-content: flex-end;
}
.notion-topbar-breadcrumb {
grid-row: 2;
grid-column: 1 / span 8;
}
.notion-topbar-actions {
grid-row: 2;
grid-column: 9 / span end;
justify-content: flex-end;
}
}

View File

@ -1,762 +0,0 @@
/*
* notion-enhancer
* (c) 2020 dragonwocky <thedragonring.bod@gmail.com> (https://dragonwocky.me/)
* under the MIT license
*/
'use strict';
const store = require('../../pkg/store.js'),
{ createElement, getEnhancements } = require('../../pkg/helpers.js'),
fs = require('fs-extra'),
path = require('path'),
electron = require('electron'),
{ toKeyEvent } = require('keyboardevent-from-electron-accelerator');
window['__start'] = async () => {
document.body.setAttribute('data-platform', process.platform);
// mod loader
const modules = getEnhancements();
if (modules.loaded.length) {
console.info(
`<notion-enhancer> enhancements loaded: ${modules.loaded
.map((mod) => mod.name)
.join(', ')}.`
);
}
if (modules.invalid.length) {
createAlert(
'error',
`invalid mods found: ${modules.invalid
.map((mod) => `<b>${mod}</b>`)
.join(', ')}.`
).append();
}
const coreStore = (...args) => {
const mod = modules.loaded.find(
(m) => m.id === '0f0bf8b6-eae6-4273-b307-8fc43f2ee082'
);
return !args.length
? store(mod.id, mod.defaults)
: args.length === 1 && typeof args[0] === 'object'
? store(mod.id, { ...mod.defaults, ...args[0] })
: store(args[0], { ...mod.defaults, ...args[1] });
};
electron.ipcRenderer.send('enhancer:get-app-theme');
electron.ipcRenderer.on('enhancer:set-app-theme', (event, theme) => {
document.body.className = `notion-${theme}-theme`;
});
const buttons = require('./buttons.js')(() => ({
'72886371-dada-49a7-9afc-9f275ecf29d3': {
enabled: (store('mods')['72886371-dada-49a7-9afc-9f275ecf29d3'] || {})
.enabled,
},
tiling_mode: coreStore().tiling_mode,
frameless: coreStore().frameless,
}));
document.querySelector('#titlebar').appendChild(buttons.element);
function createAlert(type, message) {
if (!type)
throw Error('<notion-enhancer> @ createAlert: no alert type specified');
const el = createElement(`
<section class="${type}" role="alert">
<p>${message}</p>
</section>
`);
return {
el,
resolve() {
el.remove();
},
prepend() {
document.querySelector('#alerts').prepend(el);
return this;
},
append() {
document.querySelector('#alerts').appendChild(el);
return this;
},
};
}
// update checker
fetch(
`https://api.github.com/repos/notion-enhancer/notion-enhancer/releases/latest`
)
.then((res) => res.json())
.then((res) => {
const raw_v = require('./mod.js').version,
version = {
local: raw_v.split(/[~-]/g)[0],
repo: res.tag_name.slice(1),
};
if (version.local == version.repo) return;
// compare func from https://github.com/substack/semver-compare
version.sorted = [version.local, version.repo].sort((a, b) => {
const pa = a.split('.'),
pb = b.split('.');
for (let i = 0; i < 3; i++) {
let na = Number(pa[i]),
nb = Number(pb[i]);
if (na > nb) return 1;
if (nb > na) return -1;
if (!isNaN(na) && isNaN(nb)) return 1;
if (isNaN(na) && !isNaN(nb)) return -1;
}
return 0;
});
createAlert(
'warning',
version.sorted[0] == version.local
? `update <b>v${version.repo}</b> available!<br>
run <code>npm i -g notion-enhancer</code>`
: `local build <b>v${raw_v}</b> is unstable.`
).prepend();
});
const $popup = document.querySelector('#popup');
document.addEventListener('keyup', (event) => {
if (event.key === 'F5') location.reload();
// further-configuration popup
if (
$popup.classList.contains('visible') &&
['Enter', 'Escape'].includes(event.key)
)
$popup.classList.remove('visible');
// close window on hotkey toggle
if (coreStore().menu_toggle) {
const hotkey = {
ctrlKey: false,
metaKey: false,
altKey: false,
shiftKey: false,
...toKeyEvent(coreStore().menu_toggle),
};
let triggered = true;
for (let prop in hotkey)
if (
hotkey[prop] !== event[prop] &&
!(prop === 'key' && event[prop] === 'Dead')
)
triggered = false;
if (triggered || ((event.ctrlKey || event.metaKey) && event.key === 'w'))
electron.remote.getCurrentWindow().close();
}
// focus search
const meta =
!(event.ctrlKey || event.metaKey) && !event.altKey && !event.shiftKey;
if (
meta &&
document.activeElement.getAttribute('tabindex') === '0' &&
event.key === 'Enter'
)
document.activeElement.click();
if (document.activeElement.tagName.toLowerCase() === 'input') {
if (document.activeElement.type === 'checkbox' && event.key === 'Enter')
document.activeElement.checked = !document.activeElement.checked;
if (
['Escape', 'Enter'].includes(event.key) &&
document.activeElement.type !== 'checkbox' &&
(document.activeElement.parentElement.id !== 'search' ||
event.key === 'Escape')
)
document.activeElement.blur();
} else if (meta && event.key === '/')
document.querySelector('#search > input').focus();
if (
(event.ctrlKey || event.metaKey) &&
event.key === 'f' &&
!event.altKey &&
!event.shiftKey
)
document.querySelector('#search > input').focus();
});
let colorpicker_target = null;
const $colorpicker = colorjoe
.rgb('colorpicker')
.on('change', function (color) {
if (!colorpicker_target) return;
colorpicker_target.elem.style.setProperty(
'--configured--color-value',
color.css()
);
store(colorpicker_target.id)[colorpicker_target.key] = color.css();
})
.update();
document
.querySelector('#colorpicker')
.appendChild(createElement('<button class="close-modal"></button>'));
document.querySelectorAll('#popup .close-modal').forEach((el) =>
el.addEventListener('click', (event) => {
$popup.classList.remove('visible');
})
);
const conflicts = {
relaunch: null,
detected: () =>
store('mods', {
conflicts: { dark: false, light: false },
}).conflicts,
alerts: [],
check() {
document.body.classList.remove('conflict');
conflicts.alerts.forEach((alert) => alert.resolve());
conflicts.alerts = [];
const enabled = modules.loaded.filter(
(mod) =>
store('mods', { [mod.id]: { enabled: false } })[mod.id].enabled &&
mod.tags.includes('theme')
),
dark = enabled.filter((mod) => mod.tags.includes('dark')),
light = enabled.filter((mod) => mod.tags.includes('light'));
for (let mode of [
[dark, 'dark'],
[light, 'light'],
]) {
const conflictID = mode[0]
.map((mod) => mod.id)
.sort()
.join('||');
if (
conflicts.detected()[mode[1]] &&
conflicts.detected()[mode[1]][0] === conflictID &&
conflicts.detected()[mode[1]][1]
)
continue;
if (mode[0].length > 1) {
document.body.classList.add('conflict');
conflicts.detected()[mode[1]] = [conflictID, false];
const alert = createAlert(
'error',
`conflicting ${mode[1]} themes: ${mode[0]
.map((mod) => `<b>${mod.name}</b>`)
.join(
', '
)}. <br> resolve or <span data-action="dismiss" tabindex="0">dismiss</span> to continue.`
);
alert.el
.querySelector('[data-action="dismiss"]')
.addEventListener('click', (event) => {
conflicts.detected()[mode[1]] = [conflictID, true];
conflicts.check();
});
alert.append();
conflicts.alerts.push(alert);
} else conflicts.detected()[mode[1]] = false;
}
search();
},
};
function modified() {
conflicts.check();
if (conflicts.relaunch) return;
conflicts.relaunch = createAlert(
'info',
'changes may not fully apply until <span data-action="relaunch" tabindex="0">app relaunch</span>.'
);
conflicts.relaunch.el
.querySelector('[data-action="relaunch"]')
.addEventListener('click', (event) => {
electron.remote.app.relaunch();
electron.remote.app.quit();
});
conflicts.relaunch.append();
}
const search_filters = {
enabled: true,
disabled: true,
tags: new Set(
modules.loaded
.map((mod) => mod.tags)
.flat()
.sort()
),
};
function innerText(elem) {
let text = '';
for (let $node of elem.childNodes) {
if ($node.nodeType === 3) text += $node.textContent;
if ($node.nodeType === 1) {
if ($node.getAttribute('data-tooltip'))
text += $node.getAttribute('data-tooltip');
text += ['text', 'number'].includes($node.type)
? $node.value
: innerText($node);
}
}
return text;
}
function search() {
modules.loaded.forEach((mod) => {
const $search_input = document.querySelector('#search > input'),
conflictingIDs = [conflicts.detected().dark, conflicts.detected().light]
.filter((conflict) => conflict && !conflict[1])
.map(([mods, dismissed]) => mods.split('||'))
.flat();
if (
conflictingIDs.length ||
document.body.classList.contains('reorder')
) {
$search_input.disabled = true;
} else $search_input.disabled = false;
if (
!document.body.classList.contains('reorder') &&
(conflictingIDs.length
? !conflictingIDs.some((id) => id.includes(mod.id))
: (mod.elem.classList.contains('enabled') &&
!search_filters.enabled) ||
(mod.elem.classList.contains('disabled') &&
!search_filters.disabled) ||
!mod.tags.some((tag) => search_filters.tags.has(tag)) ||
($search_input.value &&
!innerText(mod.elem)
.toLowerCase()
.includes($search_input.value.toLowerCase().trim())))
)
return (mod.elem.style.display = 'none');
mod.elem.style.display = 'block';
});
}
document.querySelector('#search > input').addEventListener('input', search);
function createTag(tagname, onclick, color) {
if (!tagname)
throw Error('<notion-enhancer> @ createTag: no tagname specified');
if (!onclick)
throw Error('<notion-enhancer> @ createTag: no action specified');
const el = createElement(
`<span class="selected" ${
color ? `style="--tag_color: ${color}" ` : ''
}tabindex="0">${tagname}</span>`
);
document.querySelector('#tags').append(el);
el.addEventListener('click', (event) => {
if (
!document.body.classList.contains('reorder') &&
!document.body.classList.contains('conflict')
) {
el.className = el.className === 'selected' ? '' : 'selected';
onclick(el.className === 'selected');
}
});
return el;
}
createTag('enabled', (state) => [
((search_filters.enabled = state), search()),
]);
createTag('disabled', (state) => [
(search_filters.disabled = state),
search(),
]);
for (let tag of search_filters.tags)
createTag(`#${tag}`, (state) => [
state ? search_filters.tags.add(tag) : search_filters.tags.delete(tag),
search(),
]);
// mod info + options
function markdown(string) {
const parsed = string
.split('\n')
.map((line) =>
line
.trim()
.replace(/\s+/g, ' ')
// > quote
.replace(/^>\s+(.+)$/g, '<blockquote>$1</blockquote>')
// ~~strikethrough~~
.replace(/([^\\])?~~((?:(?!~~).)*[^\\])~~/g, '$1<s>$2</s>')
// __underline__
.replace(/([^\\])?__((?:(?!__).)*[^\\])__/g, '$1<u>$2</u>')
// **bold**
.replace(/([^\\])?\*\*((?:(?!\*\*).)*[^\\])\*\*/g, '$1<b>$2</b>')
// *italic*
.replace(/([^\\])?\*([^*]*[^\\*])\*/g, '$1<i>$2</i>')
// _italic_
.replace(/([^\\])?_([^_]*[^\\_])_/g, '$1<i>$2</i>')
// `code`
.replace(/([^\\])?`([^`]*[^\\`])`/g, '$1<code>$2</code>')
// ![image_title](source)
.replace(
/([^\\])?\!\[([^\]]*[^\\\]]?)\]\(([^)]*[^\\)])\)/g,
`$1<img alt="$2" src="$3" onerror="this.remove()">`
)
// [link](destination)
.replace(
/([^\\])?\[([^\]]*[^\\\]]?)\]\(([^)]*[^\\)])\)/g,
'$1<a href="$3">$2</a>'
)
)
.map((line) =>
line.startsWith('<blockquote>') ? line : `<p>${line}</p>`
)
.join('');
return parsed;
}
const file_icon = await fs.readFile(
path.resolve(`${__dirname}/icons/file.svg`)
),
question_icon = (
await fs.readFile(path.resolve(`${__dirname}/icons/question.svg`))
).toString();
function createOption(opt, id) {
let $opt;
const desc = opt.desc
? question_icon.replace(
'<svg',
`<svg data-tooltip="${opt.desc.replace(/"/g, '&quot;')}"`
)
: '';
switch (opt.type) {
case 'toggle':
$opt = `
<input type="checkbox" id="${opt.type}_${id}--${opt.key}"
${store(id, { [opt.key]: opt.value })[opt.key] ? 'checked' : ''}/>
<label for="${opt.type}_${id}--${opt.key}">
<span class="name">${opt.label}${desc}</span>
<span class="switch"></span>
</label>
`;
break;
case 'select':
$opt = `
<label for="${opt.type}_${id}--${opt.key}">${opt.label}${desc}</label>
<select id="${opt.type}_${id}--${opt.key}">
${opt.value
.map((val) => `<option value="${val}">${val}</option>`)
.join('')}
</select>
`;
break;
case 'input':
$opt = `
<label for="${opt.type}_${id}--${opt.key}">${opt.label}${desc}</label>
<input type="${typeof value === 'number' ? 'number' : 'text'}" id="${
opt.type
}_${id}--${opt.key}">
`;
break;
case 'color':
$opt = `
<label for="${opt.type}_${id}--${opt.key}">${opt.label}${desc}</label>
<input type="button" id="${opt.type}_${id}--${opt.key}">
`;
break;
case 'file':
$opt = `
<input type="file" id="${opt.type}_${id}--${opt.key}"
${
opt.extensions
? ` accept="${opt.extensions
.map((ext) => (ext.startsWith('.') ? ext : `.${ext}`))
.join(',')}"`
: ''
}>
<label for="${opt.type}_${id}--${opt.key}">
<span class="label">
<span class="name">${opt.label}${desc}</span>
<button class="clear"></button>
</span>
<span class="choose">
${file_icon}
<span class="path">${
store(id)[opt.key]
? store(id)[opt.key].split(path.sep).reverse()[0]
: 'choose a file...'
}</span>
</span>
</label>
`;
}
$opt = createElement(`<p class="${opt.type}">${$opt}</p>`);
if (opt.type === 'color') {
$opt
.querySelector(`#${opt.type}_${id}--${opt.key}`)
.style.setProperty(
'--configured--color-value',
store(id, { [opt.key]: opt.value })[opt.key]
);
} else if (opt.type === 'file') {
$opt.querySelector('.clear').addEventListener('click', (event) => {
store(id)[opt.key] = '';
$opt.querySelector('.path').innerText = 'choose a file...';
});
} else {
$opt.querySelector(`#${opt.type}_${id}--${opt.key}`).value = store(id, {
[opt.key]: opt.type === 'select' ? opt.value[0] : opt.value,
})[opt.key];
}
return $opt;
}
const $modules = document.querySelector('#modules'),
fileExists = (file) => fs.pathExistsSync(path.resolve(file));
for (let mod of modules.loaded) {
const enabled =
mod.alwaysActive ||
store('mods', {
[mod.id]: { enabled: false },
})[mod.id].enabled,
author =
typeof mod.author === 'object'
? mod.author
: {
name: mod.author,
link: `https://github.com/${mod.author}`,
avatar: `https://github.com/${mod.author}.png`,
};
if (enabled) {
for (let sheet of ['menu', 'variables']) {
if (fileExists(`${__dirname}/../${mod.dir}/${sheet}.css`)) {
document.head.appendChild(
createElement(
`<link rel="stylesheet" href="enhancement://${mod.dir}/${sheet}.css">`
)
);
}
}
}
mod.elem = createElement(`
<section class="${enabled ? 'enabled' : 'disabled'}${
mod.tags.includes('core') ? ' core' : ''
}" id="${mod.id}">
<div class="meta">
<h3 ${
mod.alwaysActive
? `>${mod.name}`
: `class="toggle">
<input type="checkbox" id="enable_${mod.id}"
${enabled ? 'checked' : ''} />
<label for="enable_${mod.id}">
<span class="name">${mod.name}</span>
<span class="switch"></span>
</label>`
}</h3>
<p class="tags">${mod.tags
.map((tag) => (tag.startsWith('#') ? tag : `#${tag}`))
.join(' ')}</p>
<div class="desc">${markdown(mod.desc)}</div>
<p>
<a href="${author.link}" class="author">
<img src="${author.avatar}" onerror="this.src='./icons/user.png'">
${author.name}
</a>
<span class="version">v${mod.version}</span>
</p>
</div>
${
mod.options && mod.options.length
? '<div class="options"></div>'
: ''
}
</section>
`);
const $enable = mod.elem.querySelector(`#enable_${mod.id}`);
if ($enable)
$enable.addEventListener('click', (event) => {
store('mods', { [mod.id]: { enabled: false } })[mod.id].enabled =
$enable.checked;
mod.elem.className = store('mods', { [mod.id]: { enabled: false } })[
mod.id
].enabled
? 'enabled'
: 'disabled';
if (
$enable.checked &&
coreStore().autoresolve &&
mod.tags.includes('theme')
) {
modules.loaded.forEach((other) => {
const $other_enable = other.elem.querySelector(
`#enable_${other.id}`
);
if (
other !== mod &&
$other_enable &&
$other_enable.checked &&
other.tags.includes('theme')
) {
for (let mode of ['dark', 'light'])
if (other.tags.includes(mode) && mod.tags.includes(mode))
$other_enable.click();
}
});
}
search();
modified();
});
const $options = mod.elem.querySelector('.options');
if ($options)
for (const opt of mod.options) {
if (
Object.keys(opt.platformOverwrite || {}).some(
(platform) => process.platform === platform
)
) {
continue;
}
const $opt = createOption(opt, mod.id);
if (opt.type === 'color') {
const $preview = $opt.querySelector('input');
$opt.addEventListener('click', (event) => {
colorpicker_target = {
id: mod.id,
key: opt.key,
elem: $preview,
};
$colorpicker.set(store(mod.id)[opt.key]);
$popup.classList.add('visible');
});
} else {
$opt
.querySelector(`#${opt.type}_${mod.id}--${opt.key}`)
.addEventListener('change', (event) => {
modified();
if (opt.type === 'toggle') {
store(mod.id)[opt.key] = event.target.checked;
} else if (opt.type === 'file') {
if (event.target.files.length)
store(mod.id)[opt.key] = event.target.files[0].path;
$opt.querySelector('.path').innerText = store(mod.id)[opt.key]
? store(mod.id)[opt.key].split(path.sep).reverse()[0]
: 'choose a file...';
} else
store(mod.id)[opt.key] =
typeof opt.value === 'number'
? +event.target.value
: event.target.value;
});
}
$options.appendChild($opt);
}
if (mod.tags.includes('core')) $modules.append(mod.elem);
}
document
.querySelectorAll('input[type="checkbox"]')
.forEach((checkbox) =>
checkbox.addEventListener('click', (event) => event.target.blur())
);
conflicts.check();
// draggable re-ordering
const draggable = {
state: 0,
tags: ['b', 'span'],
$toggle: document.querySelector('#draggable-toggle'),
list: modules.loaded
.filter((m) => !m.tags.includes('core'))
.map((m) => m.elem),
target: null,
render() {
draggable.target = null;
for (let $node of draggable.list) {
$node.draggable = false;
$modules.append($node);
}
},
mouseover(event) {
if (!draggable.target && event.target.innerText) {
for (let $node of draggable.list) $node.draggable = false;
const $node = draggable.list.find(
(node) => node.innerText === event.target.innerText
);
if ($node) $node.draggable = draggable.state;
}
},
};
document.addEventListener('dragstart', (event) => {
draggable.target = event.target;
event.target.style.opacity = 0.5;
});
document.addEventListener('dragend', (event) => {
event.target.style.opacity = '';
});
document.addEventListener('dragover', (event) => {
event.preventDefault();
document
.querySelectorAll('.dragged-over')
.forEach((el) => el.classList.remove('dragged-over'));
const $node = [
draggable.list[0].previousElementSibling,
...draggable.list,
].find((node) => node.innerText === event.target.innerText);
if ($node) $node.classList.add('dragged-over');
});
document.addEventListener('drop', (event) => {
event.preventDefault();
document
.querySelectorAll('.dragged-over')
.forEach((el) => el.classList.remove('dragged-over'));
if (
draggable.target &&
draggable.target.innerText !== event.target.innerText
) {
const from = draggable.list.findIndex(
(node) => node.innerText === draggable.target.innerText
),
to =
event.target.innerText ===
draggable.list[0].previousElementSibling.innerText
? 0
: draggable.list.findIndex(
(node) => node.innerText === event.target.innerText
) + 1;
if (to >= 0) {
draggable.list.splice(
to > from ? to - 1 : to,
0,
draggable.list.splice(from, 1)[0]
);
store('mods').priority = draggable.list.map((m) => m.id);
}
}
draggable.render();
modified();
});
document.addEventListener('mouseover', draggable.mouseover);
draggable.render();
draggable.$toggle.addEventListener('click', (event) => {
draggable.state = !draggable.state;
draggable.tags = draggable.tags.reverse();
draggable.$toggle.innerHTML = `
<${draggable.tags[0]} data-bolded="configure">configure</${draggable.tags[0]}> |
<${draggable.tags[1]} data-bolded="reorder">reorder</${draggable.tags[1]}>
`;
document.body.classList[draggable.state ? 'add' : 'remove']('reorder');
$modules
.querySelectorAll('input')
.forEach((input) => (input.disabled = draggable.state));
search();
});
const $tooltip = document.querySelector('#tooltip');
document.querySelectorAll('[data-tooltip]').forEach((el) => {
el.addEventListener('mouseenter', (e) => {
$tooltip.innerText = el.getAttribute('data-tooltip');
$tooltip.classList.add('active');
});
el.addEventListener('mouseover', (e) => {
$tooltip.style.top = e.clientY - $tooltip.clientHeight + 'px';
$tooltip.style.left =
e.clientX < window.innerWidth / 2 ? e.clientX + 'px' : '';
$tooltip.style.right =
e.clientX > window.innerWidth / 2
? window.innerWidth - e.clientX + 'px'
: '';
});
el.addEventListener('mouseleave', (e) =>
$tooltip.classList.remove('active')
);
});
};

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="250" height="250" fill="currentColor" viewBox="0 0 250 250"><path d="M124.859 234.52L67.5474 135.736H102.683V12.184H147.323V135.736H182.459L124.859 234.52Z" fill="currentColor"/></svg>

Before

(image error) Size: 231 B

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="250" height="250" fill="currentColor" viewBox="0 0 250 250"><path d="M102.683 234.52V110.968H67.5474L124.859 12.184L182.459 110.968H147.323V234.52H102.683Z" fill="currentColor"/></svg>

Before

(image error) Size: 231 B

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="250" height="250" fill="none" viewBox="0 0 250 250"><line x1="21.393" x2="233.525" y1="229.525" y2="17.393" stroke="#000" stroke-miterlimit="4.139" stroke-width="30"/><line x1="17.607" x2="229.739" y1="17.393" y2="229.525" stroke="#000" stroke-linejoin="round" stroke-width="30"/></svg>

Before

(image error) Size: 333 B

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><path fill="currentColor" d="M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm160-14.1v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z"/></svg>

Before

(image error) Size: 287 B

Binary file not shown.

Before

(image error) Size: 8.1 KiB

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="250" height="250" fill="currentColor" viewBox="0 0 250 250"><path d="M14.7346 227.26V7.03998H235.215V227.26H14.7346ZM46.4546 195.8H203.495V70.48H46.4546V195.8Z" fill="currentColor"/></svg>

Before

(image error) Size: 235 B

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="250" height="250" fill="currentColor" viewBox="0 0 250 250"><path d="M16.1311 225.96V76.72H84.5111V8.07999H233.751V157.32H165.371V225.96H16.1311ZM110.771 53.58V76.72H165.371V131.32H207.491V53.58H110.771ZM42.3911 199.96H139.111V122.22H42.3911V199.96Z" fill="currentColor"/></svg>

Before

(image error) Size: 325 B

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="250" height="250" fill="currentColor" viewBox="0 0 250 250"><path d="M17.8021 138.04V106.072H232.074V138.04H17.8021Z" fill="currentColor"/></svg>

Before

(image error) Size: 192 B

View File

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 448c-110.532 0-200-89.431-200-200 0-110.495 89.472-200 200-200 110.491 0 200 89.471 200 200 0 110.53-89.431 200-200 200zm107.244-255.2c0 67.052-72.421 68.084-72.421 92.863V300c0 6.627-5.373 12-12 12h-45.647c-6.627 0-12-5.373-12-12v-8.659c0-35.745 27.1-50.034 47.579-61.516 17.561-9.845 28.324-16.541 28.324-29.579 0-17.246-21.999-28.693-39.784-28.693-23.189 0-33.894 10.977-48.942 29.969-4.057 5.12-11.46 6.071-16.666 2.124l-27.824-21.098c-5.107-3.872-6.251-11.066-2.644-16.363C184.846 131.491 214.94 112 261.794 112c49.071 0 101.45 38.304 101.45 88.8zM298 368c0 23.159-18.841 42-42 42s-42-18.841-42-42 18.841-42 42-42 42 18.841 42 42z"/></svg>

Before

(image error) Size: 849 B

Binary file not shown.

Before

(image error) Size: 324 B

Binary file not shown.

Before

(image error) Size: 279 KiB

View File

@ -1,655 +0,0 @@
/*
* notion-enhancer
* (c) 2020 dragonwocky <thedragonring.bod@gmail.com> (https://dragonwocky.me/)
* (c) 2020 admiraldus (https://github.com/admiraldus)
* under the MIT license
*/
@import './css/buttons.css';
@import './css/scrollbars.css';
@keyframes spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
@keyframes fade {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
* {
box-sizing: border-box;
word-break: break-word;
text-decoration: none;
text-size-adjust: 100%;
font-family: var(--theme--font_sans);
outline-color: var(--theme--table-border);
}
html,
body {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
display: block;
overflow: hidden;
background: var(--theme--main);
color: var(--theme--text);
}
main {
padding: 1em 1em 2.9em 1em;
height: 100%;
overflow: auto;
}
main section {
border-radius: 2px;
margin-bottom: 0.75em;
}
/* inline formatting */
code {
border-radius: 0.1em;
padding: 0.2em 0.4em;
font: 0.85em var(--theme--font_code);
background: var(--theme--code_inline-background);
}
button {
color: var(--theme--text);
}
u {
text-decoration: underline;
}
s {
text-decoration: line-through;
}
/* titlebar */
#titlebar::before {
content: '';
position: absolute;
width: 100%;
-webkit-app-region: no-drag;
top: 0;
left: 0;
height: 2px;
}
#titlebar {
display: flex;
-webkit-app-region: drag;
background: var(--theme--dragarea);
}
#titlebar button {
-webkit-app-region: no-drag;
}
#titlebar .window-buttons-area {
margin: 0.4em 0.4em 0.4em auto;
}
#titlebar .window-buttons-area:empty {
display: none;
}
[data-platform='darwin'] #titlebar {
height: 2.65em;
}
/* alerts */
#alerts [role='alert'] {
display: flex;
padding: 0.75em;
background: var(--theme--interactive_hover);
border: 1px solid var(--theme--interactive_hover-border);
}
#alerts [role='alert']::before {
content: '!';
display: block;
/* margin: auto 0; */
font-weight: bold;
font-size: 1.2em;
padding-right: 0.5rem;
color: var(--theme--interactive_hover-border);
}
#alerts [role='alert'] p {
font-size: 1rem;
margin: auto 0;
padding-left: 0.5em;
color: var(--theme--line_text);
}
#alerts .error::before {
color: var(--theme--select_red);
}
#alerts .error {
color: var(--theme--line_red-text);
background: var(--theme--line_red);
border-color: var(--theme--select_red);
}
#alerts .warning::before {
color: var(--theme--select_yellow);
}
#alerts .warning {
color: var(--theme--line_yellow-text);
background: var(--theme--line_yellow);
border-color: var(--theme--select_yellow);
}
#alerts .info::before {
color: var(--theme--select_blue);
}
#alerts .info {
color: var(--theme--line_blue-text);
background: var(--theme--line_blue);
border-color: var(--theme--select_blue);
}
#alerts .success::before {
content: '✓';
color: var(--theme--select_green);
}
#alerts .success {
color: var(--theme--line_green-text);
background: var(--theme--line_green);
border-color: var(--theme--select_green);
}
#alerts code {
background: transparent;
text-decoration: underline;
}
[data-action] {
text-decoration: underline dotted;
cursor: pointer;
}
/* search */
#search {
position: relative;
margin-bottom: 0.75em;
}
#search > svg {
position: absolute;
width: 1em;
height: 1em;
top: 1.3em;
left: 1em;
}
#search > svg path {
fill: var(--theme--text_ui_info);
}
#search > input {
width: 100%;
padding: 1em 1.4em 1em 2.8em;
font: 1em var(--theme--font_sans);
background: var(--theme--card);
border: 1px solid var(--theme--table-border);
color: var(--theme--text);
border-radius: 2px;
}
#search > input::placeholder {
font-weight: bold;
color: var(--theme--text_ui_info);
}
#search > input:focus {
box-shadow: var(--theme--table-border) 0.04em 0.04em,
var(--theme--table-border) -0.04em -0.04em,
var(--theme--table-border) -0.04em 0.04em,
var(--theme--table-border) 0.04em -0.04em;
outline: none;
}
#search #tags > span {
cursor: pointer;
display: inline-block;
font-size: 0.8em;
padding: 0.2em 0.5em;
margin-top: 0.5em;
background: var(--theme--option-background);
color: var(--theme--option-color);
border-radius: 2px;
transition: color 200ms, background 200ms, opacity 200ms;
user-select: none;
}
#search #tags > span:not(:last-child) {
margin-right: 0.5em;
}
#search #tags > span:hover {
background: var(--theme--option_hover-background);
color: var(--theme--option_hover-color);
}
#search #tags > span::before {
content: '× ';
}
#search #tags > .selected {
background: var(--tag_color, var(--theme--option_active-background));
color: var(--theme--option_active-color);
}
#search #tags > .selected::before {
content: '✓ ';
}
/* module meta */
#modules {
position: relative;
}
#modules section {
background: var(--theme--sidebar);
border: 1px solid var(--theme--table-border);
}
#modules section > div {
padding: 0.75em;
}
.notion-light-theme #modules section {
background: var(--theme--main);
}
#modules section h3,
#modules section p {
margin: 0;
font-size: 1rem;
}
#modules section .desc {
margin: 0.3em 0 0.4em 0;
font-size: 0.9em;
}
#modules section .desc p {
font-size: inherit;
margin: 0;
}
#modules section .desc blockquote {
margin: 0.3em 0;
border-left: 0.3em solid var(--theme--table-border);
padding-left: 0.7em;
}
#modules section .desc a {
color: currentColor;
text-decoration: underline dotted;
}
#modules section .desc img {
width: 100%;
max-width: 20em;
margin: 0.5em 0;
}
#modules section .desc :first-child img:first-child {
margin-top: 0;
}
#modules section .desc :last-child img:last-child {
margin-bottom: 0;
}
#modules section .author {
color: currentColor;
}
#modules section .author img {
height: 1em;
width: 1em;
margin-bottom: 0.15625em;
display: inline-block;
vertical-align: middle;
border-radius: 50%;
object-fit: cover;
}
#modules section .tags,
#modules section .version {
font-size: 0.85em;
color: var(--theme--text_ui);
}
/* module options */
#modules .disabled .options {
display: none;
}
#modules section .options {
border-top: 1px solid var(--theme--table-border);
background: var(--theme--card);
}
#modules section .options p {
font-size: 0.9em;
}
#modules section .options p:not(:last-child) {
padding-bottom: 0.5em;
border-bottom: 0.5px solid var(--theme--table-border);
margin-bottom: 0.5em;
}
svg[data-tooltip] {
height: 1em;
width: 1em;
margin: 0 0 -2px 1px;
color: var(--theme--text_ui_info);
}
#tooltip {
pointer-events: none;
position: absolute;
padding: 0.25em 0.5em 0.5em 0.5em;
margin: 0 1em;
border-radius: 3px;
box-shadow: var(--theme--box-shadow_strong);
border-right-width: 1px;
font-size: calc(var(--theme--font_label-size) * 0.8);
background: var(--theme--interactive_hover);
opacity: 0;
transition: opacity 120ms ease-in;
}
#tooltip.active {
opacity: 1;
}
.toggle *,
.input *,
.select *,
.color *,
.file * {
cursor: pointer;
}
.select select,
.input input[type='text'],
.input input[type='number'],
.file input[type='file'] + label .choose {
width: 100%;
margin: 0.25em 0;
font-size: 0.9rem;
padding: 0.4rem 0.2rem;
border: none;
color: var(--theme--text);
background: var(--theme--main);
}
.select select:focus,
.input input[type='text']:focus,
.input input[type='number']:focus,
.file input[type='file']:focus + label .choose,
.file input[type='file'] + label .choose:hover {
outline: var(--theme--table-border) solid 2px;
}
.file input[type='file'],
.toggle input[type='checkbox'] {
opacity: 0;
width: 0.1px;
height: 0.1px;
position: fixed;
}
.input input[type='text'],
.input input[type='number'] {
padding: 0.4rem;
cursor: text;
}
.file input[type='file'] + label .label {
position: relative;
display: flex;
}
.file input[type='file'] + label .label .name {
flex-basis: calc(100% - 1.5rem);
}
.file input[type='file'] + label .label .clear {
font-size: 1rem;
position: absolute;
top: 0.4em;
right: 0;
width: 1em;
height: 0.1em;
border: 0.35em solid var(--theme--card);
background: currentColor;
}
.file input[type='file'] + label .choose {
display: block;
white-space: nowrap;
overflow: hidden;
}
.file input[type='file'] + label .choose svg {
padding-top: 0.5em;
height: 1.25em;
width: 1.25em;
}
.toggle input[type='checkbox'] + label {
display: flex;
--menu--toggle_bg: rgba(135, 131, 120, 0.3);
}
.toggle input[type='checkbox'] + label .name {
flex-basis: calc(100% - 2.25em);
margin-right: 0.75em;
}
.toggle input[type='checkbox'] + label .switch {
position: relative;
top: 0.2em;
float: right;
height: 1em;
width: 1.85em;
padding: 0.1em;
background: var(--menu--toggle_bg);
border-radius: 3.14em;
transition: background 300ms;
}
.toggle input[type='checkbox'] + label .switch::before {
content: '';
display: block;
width: 0.8em;
height: 0.8em;
border-radius: 50%;
transform: translateX(var(--menu--toggle_offset, 0));
transition: transform 350ms, box-shadow 350ms;
background: var(--theme--option_active-color);
/* box-shadow: 2px 1px 4px var(--theme--table-border); */
}
.toggle input[type='checkbox']:checked + label {
--menu--toggle_offset: 0.8em;
--menu--toggle_bg: var(--theme--primary);
}
.color {
display: flex;
}
.color label {
flex-basis: 70%;
}
.color input[type='button'] {
flex-basis: 30%;
box-shadow: 2px 1px 4px var(--theme--table-border);
border: 1px solid var(--theme--option_active-color);
border-radius: 3px;
background: var(--configured--color-value);
margin: 0;
}
.color input[type='button']:focus {
box-shadow: 3px 2px 5px var(--theme--table-border);
}
/* further-configuration popup */
#popup,
#popup-overlay {
position: absolute;
top: 0;
height: 100vh;
width: 100vw;
}
#popup {
display: none;
}
#popup.visible {
display: flex;
animation: fade 200ms ease;
}
#popup-overlay {
background: var(--theme--overlay);
}
.colorPicker {
margin: auto;
position: relative;
border: 1px solid var(--theme--table-border);
background: var(--theme--card);
}
.colorPicker .twod {
border-radius: 4px;
}
.colorPicker .twod .bg {
border-radius: 2px;
}
.colorPicker .oned,
.colorPicker .oned .bg {
margin-left: 0;
height: 212.5px;
}
.colorPicker .oned .bg {
border-radius: 4px;
border: 1px solid var(--theme--table-border);
}
.colorPicker > button {
display: block;
position: absolute;
bottom: 8px;
right: 8px;
margin: 0;
padding: 0;
border: none;
width: 21px;
height: 20px;
cursor: pointer;
background: transparent;
transition: background 0.2s;
}
.colorPicker > button::after {
content: '×';
font-size: 1.5em;
position: relative;
bottom: 5px;
}
.colorPicker > button:hover {
background: var(--theme--interactive_hover);
border-radius: 4px;
box-shadow: 0 0 0 0.5px var(--theme--interactive_hover-border);
}
.colorPicker > button:focus {
outline: none;
box-shadow: 0 0 0 1px var(--theme--table-border);
}
.colorPicker .twod .pointer .shape.shape1 {
width: 11px;
height: 11px;
}
.colorPicker .twod .pointer .shape.shape2 {
width: 9px;
height: 9px;
}
.colorPicker .oned .pointer .shape {
height: 6.5px;
margin-left: 0;
border: 2px solid #fff;
box-shadow: 0 0 0 1px #000;
}
.shape {
cursor: pointer;
}
@media (max-width: 300px) {
.colorPicker .twod,
.colorPicker .twod .bg {
width: 200px;
height: 200px;
}
.colorPicker .oned,
.colorPicker .oned .bg {
height: 172.5px;
}
}
@media (max-width: 250px) {
.colorPicker .twod,
.colorPicker .twod .bg {
width: 150px;
height: 150px;
}
.colorPicker .oned,
.colorPicker .oned .bg {
height: 132.5px;
}
}
/* draggable re-ordering of mods */
#draggable-toggle {
background: none;
border: none;
margin-top: 0.8em;
padding-left: 0;
cursor: pointer;
color: var(--theme--text_ui);
}
[data-bolded] {
display: inline-flex;
flex-direction: column;
}
[data-bolded]::after {
content: attr(data-bolded);
height: 0;
visibility: hidden;
overflow: hidden;
user-select: none;
pointer-events: none;
font-weight: bold;
}
.reorder #search #tags > span,
.reorder #search #tags > span:hover,
.conflict #search #tags > span,
.conflict #search #tags > span:hover {
opacity: 0.7;
background: var(--theme--option-background);
}
.reorder #search #tags > .selected,
.reorder #search #tags > .selected:hover,
.conflict #search #tags > .selected,
.conflict #search #tags > .selected:hover {
background: var(--tag_color, var(--theme--option_active-background));
}
.reorder #modules .dragged-over::after {
content: '';
height: 0.25em;
width: 99%;
position: absolute;
margin: 0.3em 0;
opacity: 0.7;
background: var(--theme--selected);
}
.reorder #modules .switch,
.reorder #modules .tags,
.reorder #modules .desc,
.reorder #modules .options,
.reorder #modules .author,
.reorder #modules .version {
display: none;
}
.reorder #modules .core .toggle * {
cursor: text;
}
.reorder #modules section:not(.core) label::before {
content: '::';
margin-right: 0.4em;
color: var(--theme--text_ui);
}

View File

@ -1,43 +0,0 @@
<!DOCTYPE html>
<html data-tweaks="[smooth_scrollbars]" lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>notion-enhancer menu</title>
<script src="./colorjoe/min.js"></script>
<link rel="stylesheet" href="./colorjoe/picker.css" />
<style>
body {
display: none;
}
</style>
</head>
<body class="notion-dark-theme">
<header id="titlebar"></header>
<main>
<div id="alerts"></div>
<div id="search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<path
d="M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z"
></path>
</svg>
<input type="text" placeholder="search ('/' to focus)" />
<div id="tags"></div>
<button id="draggable-toggle">
<b data-bolded="configure">configure</b> |
<span data-bolded="reorder">reorder</span>
</button>
</div>
<div id="modules"></div>
</main>
<section id="popup">
<div id="popup-overlay" class="close-modal"></div>
<div id="colorpicker"></div>
</section>
<span id="tooltip"></span>
<script>
window['__start']();
</script>
</body>
</html>

View File

@ -1,103 +0,0 @@
/*
* notion-enhancer
* (c) 2020 dragonwocky <thedragonring.bod@gmail.com> (https://dragonwocky.me/)
* under the MIT license
*/
'use strict';
module.exports = {
id: '0f0bf8b6-eae6-4273-b307-8fc43f2ee082',
alwaysActive: true,
tags: ['core'],
name: 'notion-enhancer core',
desc: 'the cli, modloader, menu, & tray.',
version: require('../../package.json').version,
author: 'dragonwocky',
options: [
{
key: 'autoresolve',
label: 'auto-resolve theme conflicts',
desc:
'when a theme is enabled any other themes of the same mode (light/dark) will be disabled.',
type: 'toggle',
value: false,
},
{
key: 'openhidden',
label: 'hide app on open',
desc:
'app can be made visible by clicking the tray icon or using the hotkey.',
type: 'toggle',
value: false,
},
{
key: 'maximized',
label: 'auto-maximise windows',
desc:
'whenever a window is un-hidden or is created it will be maximised.',
type: 'toggle',
value: false,
},
{
key: 'close_to_tray',
label: 'close window to the tray',
desc: `pressing the × close button will hide the app instead of quitting it.\
it can be re-shown by clicking the tray icon or using the hotkey.`,
type: 'toggle',
value: true,
platformOverwrite: {
darwin: true,
},
},
{
key: 'frameless',
label: 'integrated titlebar',
desc: `replace the native titlebar with buttons inset into the app.`,
type: 'toggle',
value: true,
platformOverwrite: {
darwin: false,
},
},
{
key: 'tiling_mode',
label: 'tiling window manager mode',
desc: `completely remove the close/minimise/maximise buttons -
this is for a special type of window manager. if you don't understand it, don't use it.`,
type: 'toggle',
value: false,
},
{
key: 'hotkey',
label: 'window display hotkey:',
desc: 'used to toggle hiding/showing all app windows.',
type: 'input',
value: 'CommandOrControl+Shift+A',
},
{
key: 'menu_toggle',
label: 'open enhancements menu hotkey:',
desc: 'used to toggle opening/closing this menu while notion is focused.',
type: 'input',
value: 'Alt+E',
},
{
key: 'default_page',
label: 'default page id/url:',
desc: `every new tab/window that isn't opening a url via the notion://\
protocol will load this page. to get a page link from within the app,\
go to the triple-dot menu and click "copy link".\
leave blank to just load the last page you opened.`,
type: 'input',
value: '',
},
],
hacks: {
'main/main.js': require('./tray.js'),
'main/systemMenu.js': require('./systemMenu.js'),
'main/createWindow.js': require('./createWindow.js'),
'renderer/index.js': require('./render.js'),
'renderer/preload.js': require('./client.js'),
},
};

File diff suppressed because it is too large Load Diff

View File

@ -1,477 +0,0 @@
/*
* notion-enhancer
* (c) 2020 dragonwocky <thedragonring.bod@gmail.com> (https://dragonwocky.me/)
* under the MIT license
*/
'use strict';
module.exports = (store, __exports) => {
const electron = require('electron'),
fs = require('fs-extra'),
{ getNotionResources } = require('../../pkg/helpers.js'),
__notion = getNotionResources(),
createWindow = require(`${__notion}/app/main/createWindow.js`),
config = require(`${__notion}/app/config.js`),
notion_intl = require(`${__notion}/app/shared/notion-intl/index.js`),
localizationHelper = require(`${__notion}/app/helpers/localizationHelper.js`),
isMac = process.platform === 'darwin',
// why is it inversed? i have no idea, but for some reason this is what works
tabsEnabled = !(store('mods')['e1692c29-475e-437b-b7ff-3eee872e1a42'] || {})
.enabled,
menuMessages = notion_intl.defineMessages({
fileMenuTitle: {
id: 'desktopTopbar.fileMenu.title',
defaultMessage: 'File',
},
editMenuTitle: {
id: 'desktopTopbar.editMenu.title',
defaultMessage: 'Edit',
},
viewMenuTitle: {
id: 'desktopTopbar.viewMenu.title',
defaultMessage: 'View',
},
windowMenuTitle: {
id: 'desktopTopbar.windowMenu.title',
defaultMessage: 'Window',
},
helpTitle: {
id: 'desktopTopbar.helpMenu.title',
defaultMessage: 'Help',
},
newWindow: {
id: 'desktopTopbar.fileMenu.newWindow',
defaultMessage: 'New Window',
},
closeWindow: {
id: 'desktopTopbar.fileMenu.close',
defaultMessage: 'Close Window',
},
quit: {
id: 'desktopTopbar.fileMenu.quit',
defaultMessage: 'Exit',
},
undo: {
id: 'desktopTopbar.editMenu.undo',
defaultMessage: 'Undo',
},
redo: {
id: 'desktopTopbar.editMenu.redo',
defaultMessage: 'Redo',
},
cut: {
id: 'desktopTopbar.editMenu.cut',
defaultMessage: 'Cut',
},
copy: {
id: 'desktopTopbar.editMenu.copy',
defaultMessage: 'Copy',
},
paste: {
id: 'desktopTopbar.editMenu.paste',
defaultMessage: 'Paste',
},
selectAll: {
id: 'desktopTopbar.editMenu.selectAll',
defaultMessage: 'Select All',
},
startSpeaking: {
id: 'desktopTopbar.editMenu.speech.startSpeaking',
defaultMessage: 'Start Speaking',
},
stopSpeaking: {
id: 'desktopTopbar.editMenu.speech.stopSpeaking',
defaultMessage: 'Stop Speaking',
},
speech: {
id: 'desktopTopbar.editMenu.speech',
defaultMessage: 'Speech',
},
reload: {
id: 'desktopTopbar.viewMenu.reload',
defaultMessage: 'Reload',
},
togglefullscreen: {
id: 'desktopTopbar.viewMenu.togglefullscreen',
defaultMessage: 'Toggle Full Screen',
},
toggleDevTools: {
id: 'desktopTopbar.toggleDevTools',
defaultMessage: 'Toggle Developer Tools',
},
toggleWindowDevTools: {
id: 'desktopTopbar.toggleWindowDevTools',
defaultMessage: 'Toggle Window Developer Tools',
},
maximize: {
id: 'desktopTopbar.windowMenu.maximize',
defaultMessage: 'Maximize',
},
minimize: {
id: 'desktopTopbar.windowMenu.minimize',
defaultMessage: 'Minimize',
},
zoom: {
id: 'desktopTopbar.windowMenu.zoom',
defaultMessage: 'Zoom',
},
front: {
id: 'desktopTopbar.windowMenu.front',
defaultMessage: 'Front',
},
close: {
id: 'desktopTopbar.windowMenu.close',
defaultMessage: 'Close',
},
help: {
id: 'desktopTopbar.helpMenu.openHelpAndSupport',
defaultMessage: 'Open Help & Support',
},
reset: {
id: 'desktopTopbar.appMenu.resetAppAndClearData',
defaultMessage: 'Reset App & Clear Local Data',
},
about: {
id: 'desktopTopbar.appMenu.about',
defaultMessage: 'About Notion',
},
services: {
id: 'desktopTopbar.appMenu.services',
defaultMessage: 'Services',
},
hide: { id: 'desktopTopbar.appMenu.hide', defaultMessage: 'Hide Notion' },
hideOthers: {
id: 'desktopTopbar.appMenu.hideOthers',
defaultMessage: 'Hide Others',
},
unhide: {
id: 'desktopTopbar.appMenu.unhide',
defaultMessage: 'Show All',
},
quitMac: { id: 'desktopTopbar.appMenu.quit', defaultMessage: 'Quit' },
}),
escapeAmpersand = (message) => message.replace(/&/g, '&&');
__exports.setupSystemMenu = (locale) => {
const intl = localizationHelper.createIntlShape(locale),
fileMenu = {
role: 'fileMenu',
label: escapeAmpersand(intl.formatMessage(menuMessages.fileMenuTitle)),
submenu: isMac
? [
{
label: escapeAmpersand(
intl.formatMessage(menuMessages.newWindow)
),
accelerator: 'CmdOrCtrl+Shift+N',
click: () => createWindow.createWindow(),
},
...(tabsEnabled
? [
{
role: 'close',
label: escapeAmpersand(
intl.formatMessage(menuMessages.closeWindow)
),
},
]
: []),
]
: [
{
label: escapeAmpersand(
intl.formatMessage(menuMessages.newWindow)
),
accelerator: 'CmdOrCtrl+Shift+N',
click: () => createWindow.createWindow(),
},
...(tabsEnabled
? [
{
role: 'quit',
label: escapeAmpersand(
intl.formatMessage(menuMessages.quit)
),
},
]
: []),
],
},
editMenu = {
role: 'editMenu',
label: escapeAmpersand(intl.formatMessage(menuMessages.editMenuTitle)),
submenu: isMac
? [
{
role: 'undo',
label: escapeAmpersand(intl.formatMessage(menuMessages.undo)),
},
{
role: 'redo',
label: escapeAmpersand(intl.formatMessage(menuMessages.redo)),
},
{ type: 'separator' },
{
role: 'cut',
label: escapeAmpersand(intl.formatMessage(menuMessages.cut)),
},
{
role: 'copy',
label: escapeAmpersand(intl.formatMessage(menuMessages.copy)),
},
{
role: 'paste',
label: escapeAmpersand(intl.formatMessage(menuMessages.paste)),
},
{
role: 'selectAll',
label: escapeAmpersand(
intl.formatMessage(menuMessages.selectAll)
),
},
{ type: 'separator' },
{
label: escapeAmpersand(intl.formatMessage(menuMessages.speech)),
submenu: [
{
role: 'startSpeaking',
label: escapeAmpersand(
intl.formatMessage(menuMessages.startSpeaking)
),
},
{
role: 'stopSpeaking',
label: escapeAmpersand(
intl.formatMessage(menuMessages.stopSpeaking)
),
},
],
},
]
: [
{
role: 'undo',
label: escapeAmpersand(intl.formatMessage(menuMessages.undo)),
},
{
role: 'redo',
label: escapeAmpersand(intl.formatMessage(menuMessages.redo)),
},
{ type: 'separator' },
{
role: 'cut',
label: escapeAmpersand(intl.formatMessage(menuMessages.cut)),
},
{
role: 'copy',
label: escapeAmpersand(intl.formatMessage(menuMessages.copy)),
},
{
role: 'paste',
label: escapeAmpersand(intl.formatMessage(menuMessages.paste)),
},
{ type: 'separator' },
{
role: 'selectAll',
label: escapeAmpersand(
intl.formatMessage(menuMessages.selectAll)
),
},
],
},
viewMenu = {
role: 'viewMenu',
label: escapeAmpersand(intl.formatMessage(menuMessages.viewMenuTitle)),
submenu: [
{
label: escapeAmpersand(intl.formatMessage(menuMessages.reload)),
accelerator: 'CmdOrCtrl+R',
click() {
const focusedWebContents = electron.webContents.getFocusedWebContents();
if (focusedWebContents) {
if (focusedWebContents.hostWebContents) {
for (const webContentsInstance of electron.webContents.getAllWebContents()) {
if (
webContentsInstance.hostWebContents ===
focusedWebContents.hostWebContents
) {
webContentsInstance.reload();
}
}
} else {
focusedWebContents.reload();
}
}
},
},
{
label: escapeAmpersand(
intl.formatMessage(menuMessages.toggleDevTools)
),
accelerator: isMac ? 'Alt+Command+I' : 'Ctrl+Shift+I',
click() {
let focusedWebContents = electron.webContents.getFocusedWebContents();
if (focusedWebContents) {
const focusedWebContentsUrl = focusedWebContents.getURL();
if (
focusedWebContentsUrl.startsWith('file://') &&
focusedWebContentsUrl.endsWith('/search.html')
) {
const notionWebviewWebContents = electron.webContents
.getAllWebContents()
.find(
(webContentsInstance) =>
webContentsInstance.hostWebContents ===
focusedWebContents.hostWebContents &&
webContentsInstance !== focusedWebContents
);
if (notionWebviewWebContents) {
focusedWebContents = notionWebviewWebContents;
}
}
focusedWebContents.toggleDevTools();
}
},
},
{
label: escapeAmpersand(
intl.formatMessage(menuMessages.toggleWindowDevTools)
),
accelerator: isMac ? 'Shift+Alt+Command+I' : 'Alt+Ctrl+Shift+I',
visible: false,
click(menuItem, focusedWindow) {
if (focusedWindow) {
focusedWindow.webContents.toggleDevTools();
}
},
},
{ type: 'separator' },
{
role: 'togglefullscreen',
label: escapeAmpersand(
intl.formatMessage(menuMessages.togglefullscreen)
),
},
],
},
windowMenu = {
role: 'windowMenu',
label: escapeAmpersand(
intl.formatMessage(menuMessages.windowMenuTitle)
),
submenu: isMac
? [
{
role: 'minimize',
label: escapeAmpersand(
intl.formatMessage(menuMessages.minimize)
),
},
{
role: 'zoom',
label: escapeAmpersand(intl.formatMessage(menuMessages.zoom)),
},
{ type: 'separator' },
{
role: 'front',
label: escapeAmpersand(intl.formatMessage(menuMessages.front)),
},
]
: [
{
role: 'minimize',
label: escapeAmpersand(
intl.formatMessage(menuMessages.minimize)
),
},
{
label: escapeAmpersand(
intl.formatMessage(menuMessages.maximize)
),
click(item, focusedWindow) {
if (focusedWindow) {
if (focusedWindow.isMaximized()) {
focusedWindow.unmaximize();
} else {
focusedWindow.maximize();
}
}
},
},
...(tabsEnabled
? [
{
role: 'close',
label: escapeAmpersand(
intl.formatMessage(menuMessages.close)
),
},
]
: []),
],
},
helpMenu = {
role: 'help',
label: escapeAmpersand(intl.formatMessage(menuMessages.helpTitle)),
submenu: [
{
label: escapeAmpersand(intl.formatMessage(menuMessages.help)),
click() {
electron.shell.openExternal(config.default.baseURL + '/help');
},
},
],
},
appMenu = {
role: 'appMenu',
submenu: [
{
role: 'about',
label: escapeAmpersand(intl.formatMessage(menuMessages.about)),
},
{ type: 'separator' },
{
label: escapeAmpersand(intl.formatMessage(menuMessages.reset)),
async click(item, focusedWindow) {
await fs.remove(electron.app.getPath('userData'));
electron.app.relaunch();
electron.app.exit();
},
},
{ type: 'separator' },
{
role: 'services',
label: escapeAmpersand(intl.formatMessage(menuMessages.services)),
},
{ type: 'separator' },
{
role: 'hide',
label: escapeAmpersand(intl.formatMessage(menuMessages.hide)),
},
{
role: 'hideOthers',
label: escapeAmpersand(intl.formatMessage(menuMessages.hideOthers)),
},
{
role: 'unhide',
label: escapeAmpersand(intl.formatMessage(menuMessages.unhide)),
},
...(tabsEnabled
? [
{ type: 'separator' },
{
role: 'quit',
label: escapeAmpersand(
intl.formatMessage(menuMessages.quitMac)
),
},
]
: []),
],
},
template = [fileMenu, editMenu, viewMenu, windowMenu, helpMenu];
if (isMac) template.unshift(appMenu);
const menu = electron.Menu.buildFromTemplate(template);
electron.Menu.setApplicationMenu(menu);
};
};

View File

@ -1,196 +0,0 @@
/*
* notion-enhancer
* (c) 2020 dragonwocky <thedragonring.bod@gmail.com> (https://dragonwocky.me/)
* under the MIT license
*/
@import './css/buttons.css';
* {
box-sizing: border-box;
word-break: break-word;
text-decoration: none;
text-size-adjust: 100%;
font-family: var(--theme--font_sans) !important;
outline-color: var(--theme--table-border);
}
@keyframes spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
@keyframes tabSlide {
from {
width: 0;
}
to {
width: 8.5em;
}
}
body:not(.error)::after {
z-index: 1;
content: '';
position: absolute;
left: calc(50% - 15px);
top: calc(50% + 10px);
width: 18px;
height: 18px;
opacity: 0.5;
border: 4px solid var(--theme--text);
border-top-color: transparent;
border-radius: 50%;
animation: spin 0.8s linear infinite;
}
html,
body,
#root {
background: var(--theme--main) !important;
position: relative;
height: 100%;
margin: 0;
}
#root {
display: flex;
flex-direction: column;
}
[data-platform='darwin'] #titlebar {
padding-left: 4em;
}
#titlebar::before {
content: '';
position: absolute;
width: 100%;
-webkit-app-region: no-drag;
top: 0;
left: 0;
height: 2px;
}
#titlebar {
display: flex;
flex-shrink: 1;
user-select: none;
-webkit-app-region: drag;
background: var(--theme--dragarea);
}
#titlebar button {
color: var(--theme--text);
-webkit-app-region: no-drag;
border: none;
background: transparent;
}
#titlebar .window-buttons-area {
margin: 0.5em 0.55em 0.5em auto;
}
#titlebar .window-buttons-area:empty {
display: none;
}
#open-enhancer-menu::before {
content: '';
height: 1.25em;
width: 1.25em;
display: inline-block;
margin: auto 1em -0.25em 1em;
background-size: contain;
background-image: url('enhancement://core/icons/mac+linux.png');
background-repeat: no-repeat;
}
#tabs {
margin-top: auto;
flex-wrap: wrap;
display: flex;
align-items: center;
}
#tabs .tab:not(.new):not(.current) {
flex: 1 1 30px;
min-width: 30px;
}
#tabs button:nth-child(16) {
display: none;
opacity: 0;
}
#tabs .tab {
display: inline-flex;
background: var(--theme--main);
border: none;
font-size: 1.15em;
padding: 0.2em 0.4em;
text-align: left;
border-bottom: 0.22em solid var(--theme--table-border);
opacity: 0.8;
}
#tabs .tab img {
object-fit: cover;
height: 1em;
width: 1em;
border-radius: 3px;
margin: 0 0.5em -0.16em 0.1em;
}
#tabs .tab:not(.new) {
margin-top: 0.5em;
}
#tabs .tab:not(.new) span:not(.close) {
width: 8.5em;
margin-right: 0.22em;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
#tabs .tab.slideIn span:not(.close) {
animation: tabSlide 100ms ease-in-out;
}
#tabs .tab.slideOut {
width: 0;
animation: tabSlide 100ms ease-in-out reverse;
}
#tabs .tab .close {
padding: 0 0.35em 0.1em 0.3em;
margin-left: auto;
font-weight: bold;
}
#tabs .tab.current {
opacity: 1;
background: var(--theme--selected);
border-bottom: 0.22em solid var(--theme--option_active-background);
}
#tabs .tab.new {
background: none;
border: none;
margin-left: -0.1em;
margin-top: 0.3em;
}
#tabs .tab.new span {
padding: 0 0.35em 0.1em 0.3em;
font-weight: bold;
}
#tabs .tab:hover {
opacity: 1;
}
#tabs .tab .close:hover,
#tabs .tab.new span:hover,
#titlebar .window-button:hover {
border-radius: 0.22em;
background: var(--theme--table-border);
box-shadow: 0 0 0 0.5px var(--theme--interactive_hover-border);
}
#titlebar .window-button.btn-close:hover {
background: var(--theme--button_close);
color: var(--theme--button_close-fill);
}
#tabs .tab.dragged-over {
box-shadow: inset 0.22em 0 0 0 var(--theme--selected);
}
.notion {
z-index: 2;
width: 100%;
height: 100%;
display: none;
}

View File

@ -1,261 +0,0 @@
/*
* notion-enhancer
* (c) 2020 dragonwocky <thedragonring.bod@gmail.com> (https://dragonwocky.me/)
* (c) 2020 TarasokUA
* under the MIT license
*/
'use strict';
let tray, enhancer_menu;
module.exports = (store, __exports) => {
const electron = require('electron'),
path = require('path'),
is_mac = process.platform === 'darwin',
is_win = process.platform === 'win32',
helpers = require('../../pkg/helpers.js'),
getAllWindows = electron.BrowserWindow.getAllWindows;
function newWindow() {
require('./createWindow.js')(
store,
require(path.resolve(
`${helpers.getNotionResources()}/app/main/createWindow.js`
))
)(
'',
getAllWindows().find((win) => win !== enhancer_menu)
);
}
electron.app.on('second-instance', (event, args, workingDirectory) => {
const windows = getAllWindows();
if (windows.some((win) => win.isVisible())) {
newWindow();
} else {
windows.forEach((window) => {
window.show();
window.focus();
if (store().maximized) window.maximize();
});
}
});
electron.app.once('ready', () => {
// tray
tray = new electron.Tray(
is_win
? path.resolve(`${__dirname}/icons/windows.ico`)
: new electron.nativeImage.createFromPath(
path.resolve(`${__dirname}/icons/mac+linux.png`)
).resize({
width: 16,
height: 16,
})
);
// menu
electron.ipcMain.on('enhancer:open-menu', openEnhancerMenu);
electron.ipcMain.on('enhancer:set-app-theme', (event, arg) => {
electron.webContents
.getAllWebContents()
.forEach((webContents) =>
webContents.send('enhancer:set-app-theme', arg)
);
});
electron.ipcMain.on('enhancer:get-app-theme', (event, arg) => {
electron.webContents
.getAllWebContents()
.forEach((webContents) =>
webContents.send('enhancer:get-app-theme', arg)
);
});
electron.ipcMain.on('enhancer:close-tab', (event, target, tab) => {
electron.webContents
.fromId(target)
.webContents.send('enhancer:close-tab', tab);
});
function calculateWindowPos(width, height) {
const screen = electron.screen.getDisplayNearestPoint({
x: tray.getBounds().x,
y: tray.getBounds().y,
});
// left
if (screen.workArea.x > 0)
return {
x: screen.workArea.x,
y: screen.workArea.height - height,
};
// top
if (screen.workArea.y > 0)
return {
x: Math.round(
tray.getBounds().x + tray.getBounds().width / 2 - width / 2
),
y: screen.workArea.y,
};
// right
if (screen.workArea.width < screen.bounds.width)
return {
x: screen.workArea.width - width,
y: screen.bounds.height - height,
};
// bottom
return {
x: Math.round(
tray.getBounds().x + tray.getBounds().width / 2 - width / 2
),
y: screen.workArea.height - height,
};
}
function openEnhancerMenu() {
if (enhancer_menu) return enhancer_menu.show();
const window_state = require(`${helpers
.getNotionResources()
.replace(/\\/g, '/')}/app/node_modules/electron-window-state/index.js`)(
{
file: 'menu.windowstate.json',
path: helpers.__data,
defaultWidth: 275,
defaultHeight: 600,
}
);
enhancer_menu = new electron.BrowserWindow({
show: true,
frame: !store().frameless,
titleBarStyle: 'hiddenInset',
x:
window_state.x ||
calculateWindowPos(window_state.width, window_state.height).x,
y:
window_state.y ||
calculateWindowPos(window_state.width, window_state.height).y,
width: window_state.width,
height: window_state.height,
webPreferences: {
preload: path.resolve(`${__dirname}/enhancerMenu.js`),
nodeIntegration: true,
session: electron.session.fromPartition('persist:notion'),
enableRemoteModule: true,
},
});
enhancer_menu.loadURL('enhancement://core/menu.html');
enhancer_menu.on('close', (e) => {
window_state.saveState(enhancer_menu);
enhancer_menu = null;
});
// enhancer_menu.webContents.openDevTools();
}
// tray
const contextMenu = electron.Menu.buildFromTemplate([
{
type: 'normal',
label: 'GitHub',
click: () => {
electron.shell.openExternal(
'https://github.com/notion-enhancer/notion-enhancer/blob/master/DOCUMENTATION.md'
);
},
},
{
type: 'normal',
label: 'Discord',
click: () => {
electron.shell.openExternal('https://discord.gg/sFWPXtA');
},
},
{
type: 'separator',
},
{
type: 'normal',
label: 'Bug Report',
click: () => {
electron.shell.openExternal(
'https://github.com/notion-enhancer/notion-enhancer/issues/new?labels=bug&template=bug-report.md'
);
},
},
{
type: 'normal',
label: 'Feature Proposal',
click: () => {
electron.shell.openExternal(
'https://github.com/notion-enhancer/notion-enhancer/issues/new?labels=enhancement&template=feature-proposal.md'
);
},
},
{
type: 'separator',
},
{
type: 'normal',
label: 'Enhancements',
accelerator: store().menu_toggle,
click: openEnhancerMenu,
},
{
type: 'normal',
label: 'New Window',
click: newWindow(),
accelerator: 'CommandOrControl+Shift+N',
},
{
type: 'normal',
label: 'Toggle Visibility',
accelerator: store().hotkey,
click: toggleWindows,
},
{
type: 'separator',
},
{
label: 'Relaunch',
click: () => {
electron.app.relaunch();
electron.app.quit();
},
},
{
label: 'Quit',
role: 'quit',
},
]);
tray.setContextMenu(contextMenu);
tray.setToolTip('Notion');
// hotkey
function showWindows(windows) {
if (is_mac) electron.app.show();
if (store().maximized) windows.forEach((win) => [win.maximize()]);
else windows.forEach((win) => win.show());
electron.app.focus({ steal: true });
}
function hideWindows(windows) {
windows.forEach((win) => [win.isFocused() && win.blur(), win.hide()]);
if (is_mac) electron.app.hide();
}
function toggleWindows() {
const windows = getAllWindows();
if (windows.some((win) => win.isVisible())) hideWindows(windows);
else showWindows(windows);
}
tray.on('click', toggleWindows);
if (store().hotkey) {
electron.globalShortcut.register(store().hotkey, () => {
const windows = getAllWindows();
if (windows.some((win) => win.isFocused() && win.isVisible()))
hideWindows(windows);
else showWindows(windows);
});
}
});
};

View File

@ -1,810 +0,0 @@
/*
* notion-enhancer
* (c) 2020 dragonwocky <thedragonring.bod@gmail.com> (https://dragonwocky.me/)
* (c) 2020 TarasokUA
* (c) 2020 Arecsu
* (c) 2020 u/zenith_illinois
* (c) 2020 admiraldus (https://github.com/admiraldus)
* under the MIT license
*/
:root {
/** dark **/
--theme_dark--main: rgb(47, 52, 55);
--theme_dark--sidebar: rgb(55, 60, 63);
--theme_dark--overlay: rgba(15, 15, 15, 0.6);
--theme_dark--dragarea: #272d2f;
--theme_dark--box-shadow: rgba(15, 15, 15, 0.2) 0px 0px 0px 1px,
rgba(15, 15, 15, 0.2) 0px 2px 4px;
--theme_dark--box-shadow_strong: rgba(15, 15, 15, 0.1) 0px 0px 0px 1px,
rgba(15, 15, 15, 0.2) 0px 3px 6px, rgba(15, 15, 15, 0.4) 0px 9px 24px;
--theme_dark--page_normal-width: 900px;
--theme_dark--page_full-width: 100%;
--theme_dark--page-padding: calc(96px + env(safe-area-inset-left));
--theme_dark--page_banner-height: 30vh;
--theme_dark--preview-width: 977px;
--theme_dark--preview-padding: 8rem;
--theme_dark--preview_banner-height: 20vh;
--theme_dark--font_sans: -apple-system, BlinkMacSystemFont, 'Segoe UI',
Helvetica, 'Apple Color Emoji', Arial, sans-serif, 'Segoe UI Emoji',
'Segoe UI Symbol';
--theme_dark--font_serif: Lyon-Text, Georgia, YuMincho, 'Yu Mincho',
'Hiragino Mincho ProN', 'Hiragino Mincho Pro', 'Songti TC', 'Songti SC',
SimSun, 'Nanum Myeongjo', NanumMyeongjo, Batang, serif;
--theme_dark--font_mono: iawriter-mono, Nitti, Menlo, Courier, monospace;
--theme_dark--font_code: SFMono-Regular, Consolas, 'Liberation Mono', Menlo,
Courier, monospace;
--theme_dark--font_quote: var(--theme_dark--font_sans);
--theme_dark--font_headings: var(--theme_dark--font_sans);
--theme_dark--font_title-size: 40px;
--theme_dark--font_heading1-size: 1.875em;
--theme_dark--font_heading2-size: 1.5em;
--theme_dark--font_heading3-size: 1.25em;
--theme_dark--font_label-size: 14px;
--theme_dark--font_body-size: 16px;
--theme_dark--font_body-size_small: 14px;
--theme_dark--font_code-size: 0.796875em;
--theme_dark--font_sidebar-size: 14px;
--theme_dark--text-block_line-height: 1.5;
--theme_dark--text-block_margin-top: 1px;
--theme_dark--scrollbar: #505457;
--theme_dark--scrollbar-border: transparent;
--theme_dark--scrollbar_hover: #696d6f;
--theme_dark--card: rgb(63, 68, 71);
--theme_dark--gallery: rgba(255, 255, 255, 0.05);
--theme_dark--select_input: rgb(55, 60, 63);
--theme_dark--table-border: rgba(255, 255, 255, 0.1);
--theme_dark--table-border_row: rgb(77, 81, 83);
--theme_dark--table-border_column: rgb(63, 66, 69);
--theme_dark--table-border_selected: rgba(46, 170, 220, 0.6);
--theme_dark--ui-border: rgba(255, 255, 255, 0.07);
--theme_dark--interactive_hover: rgb(71, 76, 80);
--theme_dark--interactive_hover-border: transparent;
--theme_dark--button_close: #e81123;
--theme_dark--button_close-fill: white;
--theme_dark--selected: rgba(46, 170, 220, 0.2);
--theme_dark--primary: rgb(46, 170, 220);
--theme_dark--primary_text: white;
--theme_dark--primary_hover: rgb(6, 156, 205);
--theme_dark--primary_click: rgb(0, 141, 190);
--theme_dark--primary_indicator: rgb(235, 87, 87);
--theme_dark--primary_indicator_text: var(--theme_dark--primary_text);
--theme_dark--primary_indicator_hover: rgba(45, 156, 219, 0.2);
--theme_dark--option-color: white;
--theme_dark--option-background: transparent;
--theme_dark--option_active-color: white;
--theme_dark--option_active-background: var(--theme_dark--primary);
--theme_dark--option_hover-color: white;
--theme_dark--option_hover-background: rgb(71, 76, 80);
--theme_dark--danger_text: rgb(235, 87, 87);
--theme_dark--danger_border: rgba(235, 87, 87, 0.5);
--theme_dark--divider: var(--theme_dark--table-border);
--theme_dark--text: rgba(255, 255, 255, 0.9);
--theme_dark--text_ui: rgba(255, 255, 255, 0.6);
--theme_dark--text_ui_info: rgba(255, 255, 255, 0.4);
--theme_dark--text_gray: rgba(151, 154, 155, 0.95);
--theme_dark--text_brown: rgb(147, 114, 100);
--theme_dark--text_orange: rgb(255, 163, 68);
--theme_dark--text_yellow: rgb(255, 220, 73);
--theme_dark--text_green: rgb(77, 171, 154);
--theme_dark--text_blue: rgb(82, 156, 202);
--theme_dark--text_purple: rgb(154, 109, 215);
--theme_dark--text_pink: rgb(226, 85, 161);
--theme_dark--text_red: rgb(255, 115, 105);
--theme_dark--bg-text: var(--theme_dark--text);
--theme_dark--bg_gray: rgb(69, 75, 78);
--theme_dark--bg_gray-text: var(--theme_dark--bg-text);
--theme_dark--bg_brown: rgb(67, 64, 64);
--theme_dark--bg_brown-text: var(--theme_dark--bg-text);
--theme_dark--bg_orange: rgb(89, 74, 58);
--theme_dark--bg_orange-text: var(--theme_dark--bg-text);
--theme_dark--bg_yellow: rgb(89, 86, 59);
--theme_dark--bg_yellow-text: var(--theme_dark--bg-text);
--theme_dark--bg_green: rgb(53, 76, 75);
--theme_dark--bg_green-text: var(--theme_dark--bg-text);
--theme_dark--bg_blue: rgb(54, 73, 84);
--theme_dark--bg_blue-text: var(--theme_dark--bg-text);
--theme_dark--bg_purple: rgb(68, 63, 87);
--theme_dark--bg_purple-text: var(--theme_dark--bg-text);
--theme_dark--bg_pink: rgb(83, 59, 76);
--theme_dark--bg_pink-text: var(--theme_dark--bg-text);
--theme_dark--bg_red: rgb(89, 65, 65);
--theme_dark--bg_red-text: var(--theme_dark--bg-text);
--theme_dark--line-text: var(--theme_dark--text);
--theme_dark--line_gray: rgb(69, 75, 78);
--theme_dark--line_gray-text: var(--theme_dark--line-text);
--theme_dark--line_brown: rgb(67, 64, 64);
--theme_dark--line_brown-text: var(--theme_dark--line-text);
--theme_dark--line_orange: rgb(89, 74, 58);
--theme_dark--line_orange-text: var(--theme_dark--line-text);
--theme_dark--line_yellow: rgb(89, 86, 59);
--theme_dark--line_yellow-text: var(--theme_dark--line-text);
--theme_dark--line_green: rgb(53, 76, 75);
--theme_dark--line_green-text: var(--theme_dark--line-text);
--theme_dark--line_blue: rgb(54, 73, 84);
--theme_dark--line_blue-text: var(--theme_dark--line-text);
--theme_dark--line_purple: rgb(68, 63, 87);
--theme_dark--line_purple-text: var(--theme_dark--line-text);
--theme_dark--line_pink: rgb(83, 59, 76);
--theme_dark--line_pink-text: var(--theme_dark--line-text);
--theme_dark--line_red: rgb(89, 65, 65);
--theme_dark--line_red-text: var(--theme_dark--line-text);
--theme_dark--select-text: var(--theme_dark--text);
--theme_dark--select_gray: rgba(151, 154, 155, 0.5);
--theme_dark--select_gray-text: var(--theme_dark--select-text);
--theme_dark--select_brown: rgba(147, 114, 100, 0.5);
--theme_dark--select_brown-text: var(--theme_dark--select-text);
--theme_dark--select_orange: rgba(255, 163, 68, 0.5);
--theme_dark--select_orange-text: var(--theme_dark--select-text);
--theme_dark--select_yellow: rgba(255, 220, 73, 0.5);
--theme_dark--select_yellow-text: var(--theme_dark--select-text);
--theme_dark--select_green: rgba(77, 171, 154, 0.5);
--theme_dark--select_green-text: var(--theme_dark--select-text);
--theme_dark--select_blue: rgba(82, 156, 202, 0.5);
--theme_dark--select_blue-text: var(--theme_dark--select-text);
--theme_dark--select_purple: rgba(154, 109, 215, 0.5);
--theme_dark--select_purple-text: var(--theme_dark--select-text);
--theme_dark--select_pink: rgba(226, 85, 161, 0.5);
--theme_dark--select_pink-text: var(--theme_dark--select-text);
--theme_dark--select_red: rgba(255, 115, 105, 0.5);
--theme_dark--select_red-text: var(--theme_dark--select-text);
--theme_dark--callout-text: var(--theme_dark--text);
--theme_dark--callout_gray: rgba(69, 75, 78, 0.3);
--theme_dark--callout_gray-text: var(--theme_dark--callout-text);
--theme_dark--callout_brown: rgba(67, 64, 64, 0.3);
--theme_dark--callout_brown-text: var(--theme_dark--callout-text);
--theme_dark--callout_orange: rgba(89, 74, 58, 0.3);
--theme_dark--callout_orange-text: var(--theme_dark--callout-text);
--theme_dark--callout_yellow: rgba(89, 86, 59, 0.3);
--theme_dark--callout_yellow-text: var(--theme_dark--callout-text);
--theme_dark--callout_green: rgba(53, 76, 75, 0.3);
--theme_dark--callout_green-text: var(--theme_dark--callout-text);
--theme_dark--callout_blue: rgba(54, 73, 84, 0.3);
--theme_dark--callout_blue-text: var(--theme_dark--callout-text);
--theme_dark--callout_purple: rgba(68, 63, 87, 0.3);
--theme_dark--callout_purple-text: var(--theme_dark--callout-text);
--theme_dark--callout_pink: rgba(83, 59, 76, 0.3);
--theme_dark--callout_pink-text: var(--theme_dark--callout-text);
--theme_dark--callout_red: rgba(89, 65, 65, 0.3);
--theme_dark--callout_red-text: var(--theme_dark--callout-text);
--theme_dark--code_inline-text: #eb5757;
--theme_dark--code_inline-background: rgba(135, 131, 120, 0.15);
--theme_dark--code-text: var(--theme_dark--text);
--theme_dark--code-background: var(--theme_dark--card);
--theme_dark--code_function: var(--theme_dark--code-text);
--theme_dark--code_parameter: var(--theme_dark--code-text);
--theme_dark--code_keyword: hsl(350, 40%, 70%);
--theme_dark--code_constant: hsl(350, 40%, 70%);
--theme_dark--code_tag: hsl(350, 40%, 70%);
--theme_dark--code_operator: hsl(40, 90%, 60%);
--theme_dark--code_important: #e90;
--theme_dark--code_regex: #e90;
--theme_dark--code_property: hsl(350, 40%, 70%);
--theme_dark--code_builtin: hsl(75, 70%, 60%);
--theme_dark--code_class-name: var(--theme_dark--code-text);
--theme_dark--code_attr-name: hsl(75, 70%, 60%);
--theme_dark--code_attr-value: hsl(350, 40%, 70%);
--theme_dark--code_selector: hsl(75, 70%, 60%);
--theme_dark--code_id: var(--theme_dark--code-text);
--theme_dark--code_class: var(--theme_dark--code-text);
--theme_dark--code_pseudo-element: var(--theme_dark--code-text);
--theme_dark--code_pseudo-class: var(--theme_dark--code-text);
--theme_dark--code_attribute: var(--theme_dark--code-text);
--theme_dark--code_value: var(--theme_dark--code-text);
--theme_dark--code_unit: var(--theme_dark--code-text);
--theme_dark--code_comment: hsl(30, 20%, 50%);
--theme_dark--code_punctuation: var(--theme_dark--code-text);
--theme_dark--code_annotation: var(--theme_dark--code_punctuation);
--theme_dark--code_decorator: var(--theme_dark--code_punctuation);
--theme_dark--code_doctype: hsl(30, 20%, 50%);
--theme_dark--code_number: hsl(350, 40%, 70%);
--theme_dark--code_string: hsl(75, 70%, 60%);
--theme_dark--code_boolean: hsl(350, 40%, 70%);
/** light **/
--theme_light--main: white;
--theme_light--sidebar: rgb(247, 246, 243);
--theme_light--overlay: rgba(15, 15, 15, 0.6);
--theme_light--dragarea: rgba(55, 53, 47, 0.04);
--theme_light--box-shadow: rgba(15, 15, 15, 0.1) 0px 0px 0px 1px,
rgba(15, 15, 15, 0.1) 0px 2px 4px;
--theme_light--box-shadow_strong: rgba(15, 15, 15, 0.05) 0px 0px 0px 1px,
rgba(15, 15, 15, 0.1) 0px 3px 6px, rgba(15, 15, 15, 0.2) 0px 9px 24px;
--theme_light--page_normal-width: 900px;
--theme_light--page_full-width: 100%;
--theme_light--page-padding: calc(96px + env(safe-area-inset-left));
--theme_light--page_banner-height: 30vh;
--theme_light--preview-width: 977px;
--theme_light--preview-padding: 8rem;
--theme_light--preview_banner-height: 20vh;
--theme_light--font_sans: -apple-system, BlinkMacSystemFont, 'Segoe UI',
Helvetica, 'Apple Color Emoji', Arial, sans-serif, 'Segoe UI Emoji',
'Segoe UI Symbol';
--theme_light--font_serif: Lyon-Text, Georgia, YuMincho, 'Yu Mincho',
'Hiragino Mincho ProN', 'Hiragino Mincho Pro', 'Songti TC', 'Songti SC',
SimSun, 'Nanum Myeongjo', NanumMyeongjo, Batang, serif;
--theme_light--font_mono: iawriter-mono, Nitti, Menlo, Courier, monospace;
--theme_light--font_code: SFMono-Regular, Consolas, 'Liberation Mono', Menlo,
Courier, monospace;
--theme_light--font_quote: var(--theme_light--font_sans);
--theme_light--font_headings: var(--theme_light--font_sans);
--theme_light--font_title-size: 40px;
--theme_light--font_heading1-size: 1.875em;
--theme_light--font_heading2-size: 1.5em;
--theme_light--font_heading3-size: 1.25em;
--theme_light--font_label-size: 14px;
--theme_light--font_body-size: 16px;
--theme_light--font_body-size_small: 14px;
--theme_light--font_code-size: 0.796875em;
--theme_light--font_sidebar-size: 14px;
--theme_light--text-block_line-height: 1.5;
--theme_light--text-block_margin-top: 1px;
--theme_light--scrollbar: #d9d8d6;
--theme_light--scrollbar-border: #cacac8;
--theme_light--scrollbar_hover: #cacac8;
--theme_light--card: rgb(247, 247, 247);
--theme_light--gallery: rgba(55, 53, 47, 0.024);
--theme_light--select_input: rgba(242, 241, 238, 0.6);
--theme_light--table-border: rgba(55, 53, 47, 0.16);
--theme_light--table-border_row: rgb(223, 223, 222);
--theme_light--table-border_column: rgb(237, 237, 236);
--theme_light--table-border_selected: rgba(46, 170, 220, 0.6);
--theme_light--ui-border: rgba(55, 53, 47, 0.09);
--theme_light--interactive_hover: rgb(239, 239, 239);
--theme_light--interactive_hover-border: transparent;
--theme_light--button_close: #e81123;
--theme_light--button_close-fill: white;
--theme_light--selected: rgba(46, 170, 220, 0.2);
--theme_light--primary: rgb(46, 170, 220);
--theme_light--primary_text: white;
--theme_light--primary_hover: rgb(6, 156, 205);
--theme_light--primary_click: rgb(0, 141, 190);
--theme_light--primary_indicator: rgb(235, 87, 87);
--theme_light--primary_indicator_text: var(--theme_light--primary_text);
--theme_light--primary_indicator_hover: rgba(45, 156, 219, 0.2);
--theme_light--option-color: black;
--theme_light--option-background: transparent;
--theme_light--option_hover-color: black;
--theme_light--option_hover-background: rgba(55, 53, 47, 0.08);
--theme_light--option_active-color: white;
--theme_light--option_active-background: var(--theme_light--primary);
--theme_light--danger_text: rgb(235, 87, 87);
--theme_light--danger_border: rgba(235, 87, 87, 0.5);
--theme_light--divider: var(--theme_light--table-border);
--theme_light--text: rgb(55, 53, 47);
--theme_light--text_ui: rgba(55, 53, 47, 0.6);
--theme_light--text_ui: rgba(55, 53, 47, 0.6);
--theme_light--text_ui_info: rgba(55, 53, 47, 0.4);
--theme_light--text_gray: rgb(155, 154, 151);
--theme_light--text_brown: rgb(100, 71, 58);
--theme_light--text_orange: rgb(217, 115, 13);
--theme_light--text_yellow: rgb(223, 171, 1);
--theme_light--text_green: rgb(15, 123, 108);
--theme_light--text_blue: rgb(11, 110, 153);
--theme_light--text_purple: rgb(105, 64, 165);
--theme_light--text_pink: rgb(173, 26, 114);
--theme_light--text_red: rgb(224, 62, 62);
--theme_light--bg-text: var(--theme_light--text);
--theme_light--bg_gray: rgb(235, 236, 237);
--theme_light--bg_gray-text: var(--theme_light--bg-text);
--theme_light--bg_brown: rgb(233, 229, 227);
--theme_light--bg_brown-text: var(--theme_light--bg-text);
--theme_light--bg_orange: rgb(250, 235, 221);
--theme_light--bg_orange-text: var(--theme_light--bg-text);
--theme_light--bg_yellow: rgb(251, 243, 219);
--theme_light--bg_yellow-text: var(--theme_light--bg-text);
--theme_light--bg_green: rgb(221, 237, 234);
--theme_light--bg_green-text: var(--theme_light--bg-text);
--theme_light--bg_blue: rgb(221, 235, 241);
--theme_light--bg_blue-text: var(--theme_light--bg-text);
--theme_light--bg_purple: rgb(234, 228, 242);
--theme_light--bg_purple-text: var(--theme_light--bg-text);
--theme_light--bg_pink: rgb(244, 223, 235);
--theme_light--bg_pink-text: var(--theme_light--bg-text);
--theme_light--bg_red: rgb(251, 228, 228);
--theme_light--bg_red-text: var(--theme_light--bg-text);
--theme_light--line-text: var(--theme_light--text);
--theme_light--line_gray: rgb(235, 236, 237);
--theme_light--line_gray-text: var(--theme_light--line-text);
--theme_light--line_brown: rgb(233, 229, 227);
--theme_light--line_brown-text: var(--theme_light--line-text);
--theme_light--line_orange: rgb(250, 235, 221);
--theme_light--line_orange-text: var(--theme_light--line-text);
--theme_light--line_yellow: rgb(251, 243, 219);
--theme_light--line_yellow-text: var(--theme_light--line-text);
--theme_light--line_green: rgb(221, 237, 234);
--theme_light--line_green-text: var(--theme_light--line-text);
--theme_light--line_blue: rgb(221, 235, 241);
--theme_light--line_blue-text: var(--theme_light--line-text);
--theme_light--line_purple: rgb(234, 228, 242);
--theme_light--line_purple-text: var(--theme_light--line-text);
--theme_light--line_pink: rgb(244, 223, 235);
--theme_light--line_pink-text: var(--theme_light--line-text);
--theme_light--line_red: rgb(251, 228, 228);
--theme_light--line_red-text: var(--theme_light--line-text);
--theme_light--select-text: var(--theme_light--text);
--theme_light--select_gray: rgba(140, 46, 0, 0.2);
--theme_light--select_gray-text: var(--theme_light--select-text);
--theme_light--select_brown: rgba(140, 46, 0, 0.2);
--theme_light--select_brown-text: var(--theme_light--select-text);
--theme_light--select_orange: rgba(245, 93, 0, 0.2);
--theme_light--select_orange-text: var(--theme_light--select-text);
--theme_light--select_yellow: rgba(233, 168, 0, 0.2);
--theme_light--select_yellow-text: var(--theme_light--select-text);
--theme_light--select_green: rgba(0, 135, 107, 0.2);
--theme_light--select_green-text: var(--theme_light--select-text);
--theme_light--select_blue: rgba(0, 120, 223, 0.2);
--theme_light--select_blue-text: var(--theme_light--select-text);
--theme_light--select_purple: rgba(103, 36, 222, 0.2);
--theme_light--select_purple-text: var(--theme_light--select-text);
--theme_light--select_pink: rgba(221, 0, 129, 0.2);
--theme_light--select_pink-text: var(--theme_light--select-text);
--theme_light--select_red: rgba(255, 0, 26, 0.2);
--theme_light--select_red-text: var(--theme_light--select-text);
--theme_light--callout-text: var(--theme_light--text);
--theme_light--callout_gray: rgba(235, 236, 237, 0.3);
--theme_light--callout_gray-text: var(--theme_light--callout-text);
--theme_light--callout_brown: rgba(233, 229, 227, 0.3);
--theme_light--callout_brown-text: var(--theme_light--callout-text);
--theme_light--callout_orange: rgba(250, 235, 221, 0.3);
--theme_light--callout_orange-text: var(--theme_light--callout-text);
--theme_light--callout_yellow: rgba(251, 243, 219, 0.3);
--theme_light--callout_yellow-text: var(--theme_light--callout-text);
--theme_light--callout_green: rgba(221, 237, 234, 0.3);
--theme_light--callout_green-text: var(--theme_light--callout-text);
--theme_light--callout_blue: rgba(221, 235, 241, 0.3);
--theme_light--callout_blue-text: var(--theme_light--callout-text);
--theme_light--callout_purple: rgba(234, 228, 242, 0.3);
--theme_light--callout_purple-text: var(--theme_light--callout-text);
--theme_light--callout_pink: rgba(244, 223, 235, 0.3);
--theme_light--callout_pink-text: var(--theme_light--callout-text);
--theme_light--callout_red: rgba(251, 228, 228, 0.3);
--theme_light--callout_red-text: var(--theme_light--callout-text);
--theme_light--code_inline-text: #eb5757;
--theme_light--code_inline-background: rgba(135, 131, 120, 0.15);
--theme_light--code-text: var(--theme_light--text);
--theme_light--code-background: var(--theme_light--card);
--theme_light--code_function: #dd4a68;
--theme_light--code_parameter: var(--theme_light--code-text);
--theme_light--code_keyword: #07a;
--theme_light--code_constant: #905;
--theme_light--code_tag: #905;
--theme_light--code_operator: #9a6e3a;
--theme_light--code_important: #e90;
--theme_light--code_regex: #e90;
--theme_light--code_property: #905;
--theme_light--code_builtin: #690;
--theme_light--code_class-name: #dd4a68;
--theme_light--code_attr-name: #690;
--theme_light--code_attr-value: #07a;
--theme_light--code_selector: #690;
--theme_light--code_id: var(--theme_light--code-text);
--theme_light--code_class: var(--theme_light--code-text);
--theme_light--code_pseudo-element: var(--theme_light--code-text);
--theme_light--code_pseudo-class: var(--theme_light--code-text);
--theme_light--code_attribute: var(--theme_light--code-text);
--theme_light--code_value: var(--theme_light--code-text);
--theme_light--code_unit: var(--theme_light--code-text);
--theme_light--code_comment: slategray;
--theme_light--code_punctuation: #999;
--theme_light--code_annotation: var(--theme_light--code_punctuation);
--theme_light--code_decorator: var(--theme_light--code_punctuation);
--theme_light--code_doctype: slategray;
--theme_light--code_number: #905;
--theme_light--code_string: #690;
--theme_light--code_boolean: #905;
}
.notion-dark-theme {
--theme--main: var(--theme_dark--main);
--theme--sidebar: var(--theme_dark--sidebar);
--theme--overlay: var(--theme_dark--overlay);
--theme--dragarea: var(--theme_dark--dragarea);
--theme--box-shadow: var(--theme_dark--box-shadow);
--theme--box-shadow_strong: var(--theme_dark--box-shadow_strong);
--theme--page_normal-width: var(--theme_dark--page_normal-width);
--theme--page_full-width: var(--theme_dark--page_full-width);
--theme--page-padding: var(--theme_dark--page-padding);
--theme--page_banner-height: var(--theme_dark--page_banner-height);
--theme--preview-width: var(--theme_dark--preview-width);
--theme--preview-padding: var(--theme_dark--preview-padding);
--theme--preview_banner-height: var(--theme_dark--preview_banner-height);
--theme--font_sans: var(--theme_dark--font_sans);
--theme--font_serif: var(--theme_dark--font_serif);
--theme--font_mono: var(--theme_dark--font_mono);
--theme--font_code: var(--theme_dark--font_code);
--theme--font_quote: var(--theme_dark--font_quote);
--theme--font_headings: var(--theme_dark--font_headings);
--theme--font_title-size: var(--theme_dark--font_title-size);
--theme--font_heading1-size: var(--theme_dark--font_heading1-size);
--theme--font_heading2-size: var(--theme_dark--font_heading2-size);
--theme--font_heading3-size: var(--theme_dark--font_heading3-size);
--theme--font_label-size: var(--theme_dark--font_label-size);
--theme--font_body-size: var(--theme_dark--font_body-size);
--theme--font_body-size_small: var(--theme_dark--font_body-size_small);
--theme--font_code-size: var(--theme_dark--font_code-size);
--theme--font_sidebar-size: var(--theme_dark--font_sidebar-size);
--theme--text-block_line-height: var(--theme_dark--text-block_line-height);
--theme--text-block_margin-top: var(--theme_dark--text-block_margin-top);
--theme--scrollbar: var(--theme_dark--scrollbar);
--theme--scrollbar-border: var(--theme_dark--scrollbar-border);
--theme--scrollbar_hover: var(--theme_dark--scrollbar_hover);
--theme--card: var(--theme_dark--card);
--theme--gallery: var(--theme_dark--gallery);
--theme--select_input: var(--theme_dark--select_input);
--theme--table-border: var(--theme_dark--table-border);
--theme--table-border_row: var(--theme_dark--table-border_row);
--theme--table-border_column: var(--theme_dark--table-border_column);
--theme--table-border_selected: var(--theme_dark--table-border_selected);
--theme--ui-border: var(--theme_dark--ui-border);
--theme--interactive_hover: var(--theme_dark--interactive_hover);
--theme--interactive_hover-border: var(
--theme_dark--interactive_hover-border
);
--theme--button_close: var(--theme_dark--button_close);
--theme--button_close-fill: var(--theme_dark--button_close-fill);
--theme--selected: var(--theme_dark--selected);
--theme--primary: var(--theme_dark--primary);
--theme--primary_text: var(--theme_dark--primary_text);
--theme--primary_hover: var(--theme_dark--primary_hover);
--theme--primary_click: var(--theme_dark--primary_click);
--theme--primary_indicator: var(--theme_dark--primary_indicator);
--theme--primary_indicator_text: var(--theme_dark--primary_indicator_text);
--theme--primary_indicator_hover: var(--theme_dark--primary_indicator_hover);
--theme--option-color: var(--theme_dark--option-color);
--theme--option-background: var(--theme_dark--option-background);
--theme--option_active-color: var(--theme_dark--option_active-color);
--theme--option_active-background: var(
--theme_dark--option_active-background
);
--theme--option_hover-color: var(--theme_dark--option_hover-color);
--theme--option_hover-background: var(--theme_dark--option_hover-background);
--theme--danger_text: var(--theme_dark--danger_text);
--theme--danger_border: var(--theme_dark--danger_border);
--theme--divider: var(--theme_dark--divider);
--theme--text: var(--theme_dark--text);
--theme--text_ui: var(--theme_dark--text_ui);
--theme--text_ui_info: var(--theme_dark--text_ui_info);
--theme--text_gray: var(--theme_dark--text_gray);
--theme--text_brown: var(--theme_dark--text_brown);
--theme--text_orange: var(--theme_dark--text_orange);
--theme--text_yellow: var(--theme_dark--text_yellow);
--theme--text_green: var(--theme_dark--text_green);
--theme--text_blue: var(--theme_dark--text_blue);
--theme--text_purple: var(--theme_dark--text_purple);
--theme--text_pink: var(--theme_dark--text_pink);
--theme--text_red: var(--theme_dark--text_red);
--theme--select-text: var(--theme_dark--select-text);
--theme--bg-text: var(--theme_dark--bg-text);
--theme--bg_gray: var(--theme_dark--bg_gray);
--theme--bg_gray-text: var(--theme_dark--bg_gray-text);
--theme--bg_brown: var(--theme_dark--bg_brown);
--theme--bg_brown-text: var(--theme_dark--bg_brown-text);
--theme--bg_orange: var(--theme_dark--bg_orange);
--theme--bg_orange-text: var(--theme_dark--bg_orange-text);
--theme--bg_yellow: var(--theme_dark--bg_yellow);
--theme--bg_yellow-text: var(--theme_dark--bg_yellow-text);
--theme--bg_green: var(--theme_dark--bg_green);
--theme--bg_green-text: var(--theme_dark--bg_green-text);
--theme--bg_blue: var(--theme_dark--bg_blue);
--theme--bg_blue-text: var(--theme_dark--bg_blue-text);
--theme--bg_purple: var(--theme_dark--bg_purple);
--theme--bg_purple-text: var(--theme_dark--bg_purple-text);
--theme--bg_pink: var(--theme_dark--bg_pink);
--theme--bg_pink-text: var(--theme_dark--bg_pink-text);
--theme--bg_red: var(--theme_dark--bg_red);
--theme--bg_red-text: var(--theme_dark--bg_red-text);
--theme--line-text: var(--theme_dark--line-text);
--theme--line_gray: var(--theme_dark--line_gray);
--theme--line_gray-text: var(--theme_dark--line_gray-text);
--theme--line_brown: var(--theme_dark--line_brown);
--theme--line_brown-text: var(--theme_dark--line_brown-text);
--theme--line_orange: var(--theme_dark--line_orange);
--theme--line_orange-text: var(--theme_dark--line_orange-text);
--theme--line_yellow: var(--theme_dark--line_yellow);
--theme--line_yellow-text: var(--theme_dark--line_yellow-text);
--theme--line_green: var(--theme_dark--line_green);
--theme--line_green-text: var(--theme_dark--line_green-text);
--theme--line_blue: var(--theme_dark--line_blue);
--theme--line_blue-text: var(--theme_dark--line_blue-text);
--theme--line_purple: var(--theme_dark--line_purple);
--theme--line_purple-text: var(--theme_dark--line_purple-text);
--theme--line_pink: var(--theme_dark--line_pink);
--theme--line_pink-text: var(--theme_dark--line_pink-text);
--theme--line_red: var(--theme_dark--line_red);
--theme--line_red-text: var(--theme_dark--line_red-text);
--theme--select_gray: var(--theme_dark--select_gray);
--theme--select_gray-text: var(--theme_dark--select_gray-text);
--theme--select_brown: var(--theme_dark--select_brown);
--theme--select_brown-text: var(--theme_dark--select_brown-text);
--theme--select_orange: var(--theme_dark--select_orange);
--theme--select_orange-text: var(--theme_dark--select_orange-text);
--theme--select_yellow: var(--theme_dark--select_yellow);
--theme--select_yellow-text: var(--theme_dark--select_yellow-text);
--theme--select_green: var(--theme_dark--select_green);
--theme--select_green-text: var(--theme_dark--select_green-text);
--theme--select_blue: var(--theme_dark--select_blue);
--theme--select_blue-text: var(--theme_dark--select_blue-text);
--theme--select_purple: var(--theme_dark--select_purple);
--theme--select_purple-text: var(--theme_dark--select_purple-text);
--theme--select_pink: var(--theme_dark--select_pink);
--theme--select_pink-text: var(--theme_dark--select_pink-text);
--theme--select_red: var(--theme_dark--select_red);
--theme--select_red-text: var(--theme_dark--select_red-text);
--theme--callout-text: var(--theme_dark--callout-text);
--theme--callout_gray: var(--theme_dark--callout_gray);
--theme--callout_gray-text: var(--theme_dark--callout_gray-text);
--theme--callout_brown: var(--theme_dark--callout_brown);
--theme--callout_brown-text: var(--theme_dark--callout_brown-text);
--theme--callout_orange: var(--theme_dark--callout_orange);
--theme--callout_orange-text: var(--theme_dark--callout_orange-text);
--theme--callout_yellow: var(--theme_dark--callout_yellow);
--theme--callout_yellow-text: var(--theme_dark--callout_yellow-text);
--theme--callout_green: var(--theme_dark--callout_green);
--theme--callout_green-text: var(--theme_dark--callout_green-text);
--theme--callout_blue: var(--theme_dark--callout_blue);
--theme--callout_blue-text: var(--theme_dark--callout_blue-text);
--theme--callout_purple: var(--theme_dark--callout_purple);
--theme--callout_purple-text: var(--theme_dark--callout_purple-text);
--theme--callout_pink: var(--theme_dark--callout_pink);
--theme--callout_pink-text: var(--theme_dark--callout_pink-text);
--theme--callout_red: var(--theme_dark--callout_red);
--theme--callout_red-text: var(--theme_dark--callout_red-text);
--theme--code_inline-text: var(--theme_dark--code_inline-text);
--theme--code_inline-background: var(--theme_dark--code_inline-background);
--theme--code-text: var(--theme_dark--code-text);
--theme--code-background: var(--theme_dark--code-background);
--theme--code_function: var(--theme_dark--code_function);
--theme--code_parameter: var(--theme_dark--code_parameter);
--theme--code_keyword: var(--theme_dark--code_keyword);
--theme--code_constant: var(--theme_dark--code_constant);
--theme--code_tag: var(--theme_dark--code_tag);
--theme--code_operator: var(--theme_dark--code_operator);
--theme--code_important: var(--theme_dark--code_important);
--theme--code_regex: var(--theme_dark--code_regex);
--theme--code_property: var(--theme_dark--code_property);
--theme--code_builtin: var(--theme_dark--code_builtin);
--theme--code_class-name: var(--theme_dark--code_class-name);
--theme--code_attr-name: var(--theme_dark--code_attr-name);
--theme--code_attr-value: var(--theme_dark--code_attr-value);
--theme--code_selector: var(--theme_dark--code_selector);
--theme--code_id: var(--theme_dark--code_id);
--theme--code_class: var(--theme_dark--code_class);
--theme--code_pseudo-element: var(--theme_dark--code_pseudo-element);
--theme--code_pseudo-class: var(--theme_dark--code_pseudo-class);
--theme--code_attribute: var(--theme_dark--code_attribute);
--theme--code_value: var(--theme_dark--code_value);
--theme--code_unit: var(--theme_dark--code_unit);
--theme--code_comment: var(--theme_dark--code_comment);
--theme--code_punctuation: var(--theme_dark--code_punctuation);
--theme--code_annotation: var(--theme_dark--code_annotation);
--theme--code_decorator: var(--theme_dark--code_decorator);
--theme--code_doctype: var(--theme_dark--code_doctype);
--theme--code_number: var(--theme_dark--code_number);
--theme--code_string: var(--theme_dark--code_string);
--theme--code_boolean: var(--theme_dark--code_boolean);
}
.notion-light-theme {
--theme--main: var(--theme_light--main);
--theme--sidebar: var(--theme_light--sidebar);
--theme--overlay: var(--theme_light--overlay);
--theme--dragarea: var(--theme_light--dragarea);
--theme--box-shadow: var(--theme_light--box-shadow);
--theme--box-shadow_strong: var(--theme_light--box-shadow_strong);
--theme--page_normal-width: var(--theme_light--page_normal-width);
--theme--page_full-width: var(--theme_light--page_full-width);
--theme--page-padding: var(--theme_light--page-padding);
--theme--page_banner-height: var(--theme_light--page_banner-height);
--theme--preview-width: var(--theme_light--preview-width);
--theme--preview-padding: var(--theme_light--preview-padding);
--theme--preview_banner-height: var(--theme_light--preview_banner-height);
--theme--font_sans: var(--theme_light--font_sans);
--theme--font_serif: var(--theme_light--font_serif);
--theme--font_mono: var(--theme_light--font_mono);
--theme--font_code: var(--theme_light--font_code);
--theme--font_quote: var(--theme_light--font_quote);
--theme--font_headings: var(--theme_light--font_headings);
--theme--font_title-size: var(--theme_light--font_title-size);
--theme--font_heading1-size: var(--theme_light--font_heading1-size);
--theme--font_heading2-size: var(--theme_light--font_heading2-size);
--theme--font_heading3-size: var(--theme_light--font_heading3-size);
--theme--font_label-size: var(--theme_light--font_label-size);
--theme--font_body-size: var(--theme_light--font_body-size);
--theme--font_body-size_small: var(--theme_light--font_body-size_small);
--theme--font_code-size: var(--theme_light--font_code-size);
--theme--font_sidebar-size: var(--theme_light--font_sidebar-size);
--theme--text-block_line-height: var(--theme_light--text-block_line-height);
--theme--text-block_margin-top: var(--theme_light--text-block_margin-top);
--theme--scrollbar: var(--theme_light--scrollbar);
--theme--scrollbar-border: var(--theme_light--scrollbar-border);
--theme--scrollbar_hover: var(--theme_light--scrollbar_hover);
--theme--card: var(--theme_light--card);
--theme--gallery: var(--theme_light--gallery);
--theme--select_input: var(--theme_light--select_input);
--theme--table-border: var(--theme_light--table-border);
--theme--table-border_row: var(--theme_light--table-border_row);
--theme--table-border_column: var(--theme_light--table-border_column);
--theme--table-border_selected: var(--theme_light--table-border_selected);
--theme--ui-border: var(--theme_light--ui-border);
--theme--interactive_hover: var(--theme_light--interactive_hover);
--theme--interactive_hover-border: var(
--theme_light--interactive_hover-border
);
--theme--button_close: var(--theme_light--button_close);
--theme--button_close-fill: var(--theme_light--button_close-fill);
--theme--selected: var(--theme_light--selected);
--theme--primary: var(--theme_light--primary);
--theme--primary_text: var(--theme_light--primary_text);
--theme--primary_hover: var(--theme_light--primary_hover);
--theme--primary_click: var(--theme_light--primary_click);
--theme--primary_indicator: var(--theme_light--primary_indicator);
--theme--primary_indicator_text: var(--theme_light--primary_indicator_text);
--theme--primary_indicator_hover: var(--theme_light--primary_indicator_hover);
--theme--option-color: var(--theme_light--option-color);
--theme--option-background: var(--theme_light--option-background);
--theme--option_hover-color: var(--theme_light--option_hover-color);
--theme--option_hover-background: var(--theme_light--option_hover-background);
--theme--option_active-color: var(--theme_light--option_active-color);
--theme--option_active-background: var(
--theme_light--option_active-background
);
--theme--danger_text: var(--theme_light--danger_text);
--theme--danger_border: var(--theme_light--danger_border);
--theme--divider: var(--theme_light--divider);
--theme--text: var(--theme_light--text);
--theme--text_ui: var(--theme_light--text_ui);
--theme--text_ui_info: var(--theme_light--text_ui_info);
--theme--text_gray: var(--theme_light--text_gray);
--theme--text_brown: var(--theme_light--text_brown);
--theme--text_orange: var(--theme_light--text_orange);
--theme--text_yellow: var(--theme_light--text_yellow);
--theme--text_green: var(--theme_light--text_green);
--theme--text_blue: var(--theme_light--text_blue);
--theme--text_purple: var(--theme_light--text_purple);
--theme--text_pink: var(--theme_light--text_pink);
--theme--text_red: var(--theme_light--text_red);
--theme--select-text: var(--theme_light--select-text);
--theme--bg-text: var(--theme_light--bg-text);
--theme--bg_gray: var(--theme_light--bg_gray);
--theme--bg_gray-text: var(--theme_light--bg_gray-text);
--theme--bg_brown: var(--theme_light--bg_brown);
--theme--bg_brown-text: var(--theme_light--bg_brown-text);
--theme--bg_orange: var(--theme_light--bg_orange);
--theme--bg_orange-text: var(--theme_light--bg_orange-text);
--theme--bg_yellow: var(--theme_light--bg_yellow);
--theme--bg_yellow-text: var(--theme_light--bg_yellow-text);
--theme--bg_green: var(--theme_light--bg_green);
--theme--bg_green-text: var(--theme_light--bg_green-text);
--theme--bg_blue: var(--theme_light--bg_blue);
--theme--bg_blue-text: var(--theme_light--bg_blue-text);
--theme--bg_purple: var(--theme_light--bg_purple);
--theme--bg_purple-text: var(--theme_light--bg_purple-text);
--theme--bg_pink: var(--theme_light--bg_pink);
--theme--bg_pink-text: var(--theme_light--bg_pink-text);
--theme--bg_red: var(--theme_light--bg_red);
--theme--bg_red-text: var(--theme_light--bg_red-text);
--theme--line-text: var(--theme_light--line-text);
--theme--line_gray: var(--theme_light--line_gray);
--theme--line_gray-text: var(--theme_light--line_gray-text);
--theme--line_brown: var(--theme_light--line_brown);
--theme--line_brown-text: var(--theme_light--line_brown-text);
--theme--line_orange: var(--theme_light--line_orange);
--theme--line_orange-text: var(--theme_light--line_orange-text);
--theme--line_yellow: var(--theme_light--line_yellow);
--theme--line_yellow-text: var(--theme_light--line_yellow-text);
--theme--line_green: var(--theme_light--line_green);
--theme--line_green-text: var(--theme_light--line_green-text);
--theme--line_blue: var(--theme_light--line_blue);
--theme--line_blue-text: var(--theme_light--line_blue-text);
--theme--line_purple: var(--theme_light--line_purple);
--theme--line_purple-text: var(--theme_light--line_purple-text);
--theme--line_pink: var(--theme_light--line_pink);
--theme--line_pink-text: var(--theme_light--line_pink-text);
--theme--line_red: var(--theme_light--line_red);
--theme--line_red-text: var(--theme_light--line_red-text);
--theme--select_gray: var(--theme_light--select_gray);
--theme--select_gray-text: var(--theme_light--select_gray-text);
--theme--select_brown: var(--theme_light--select_brown);
--theme--select_brown-text: var(--theme_light--select_brown-text);
--theme--select_orange: var(--theme_light--select_orange);
--theme--select_orange-text: var(--theme_light--select_orange-text);
--theme--select_yellow: var(--theme_light--select_yellow);
--theme--select_yellow-text: var(--theme_light--select_yellow-text);
--theme--select_green: var(--theme_light--select_green);
--theme--select_green-text: var(--theme_light--select_green-text);
--theme--select_blue: var(--theme_light--select_blue);
--theme--select_blue-text: var(--theme_light--select_blue-text);
--theme--select_purple: var(--theme_light--select_purple);
--theme--select_purple-text: var(--theme_light--select_purple-text);
--theme--select_pink: var(--theme_light--select_pink);
--theme--select_pink-text: var(--theme_light--select_pink-text);
--theme--select_red: var(--theme_light--select_red);
--theme--select_red-text: var(--theme_light--select_red-text);
--theme--callout-text: var(--theme_light--callout-text);
--theme--callout_gray: var(--theme_light--callout_gray);
--theme--callout_gray-text: var(--theme_light--callout_gray-text);
--theme--callout_brown: var(--theme_light--callout_brown);
--theme--callout_brown-text: var(--theme_light--callout_brown-text);
--theme--callout_orange: var(--theme_light--callout_orange);
--theme--callout_orange-text: var(--theme_light--callout_orange-text);
--theme--callout_yellow: var(--theme_light--callout_yellow);
--theme--callout_yellow-text: var(--theme_light--callout_yellow-text);
--theme--callout_green: var(--theme_light--callout_green);
--theme--callout_green-text: var(--theme_light--callout_green-text);
--theme--callout_blue: var(--theme_light--callout_blue);
--theme--callout_blue-text: var(--theme_light--callout_blue-text);
--theme--callout_purple: var(--theme_light--callout_purple);
--theme--callout_purple-text: var(--theme_light--callout_purple-text);
--theme--callout_pink: var(--theme_light--callout_pink);
--theme--callout_pink-text: var(--theme_light--callout_pink-text);
--theme--callout_red: var(--theme_light--callout_red);
--theme--callout_red-text: var(--theme_light--callout_red-text);
--theme--code_inline-text: var(--theme_light--code_inline-text);
--theme--code_inline-background: var(--theme_light--code_inline-background);
--theme--code-text: var(--theme_light--code-text);
--theme--code-background: var(--theme_light--code-background);
--theme--code_function: var(--theme_light--code_function);
--theme--code_parameter: var(--theme_light--code_parameter);
--theme--code_keyword: var(--theme_light--code_keyword);
--theme--code_constant: var(--theme_light--code_constant);
--theme--code_tag: var(--theme_light--code_tag);
--theme--code_operator: var(--theme_light--code_operator);
--theme--code_important: var(--theme_light--code_important);
--theme--code_regex: var(--theme_light--code_regex);
--theme--code_property: var(--theme_light--code_property);
--theme--code_builtin: var(--theme_light--code_builtin);
--theme--code_class-name: var(--theme_light--code_class-name);
--theme--code_attr-name: var(--theme_light--code_attr-name);
--theme--code_attr-value: var(--theme_light--code_attr-value);
--theme--code_selector: var(--theme_light--code_selector);
--theme--code_id: var(--theme_light--code_id);
--theme--code_class: var(--theme_light--code_class);
--theme--code_pseudo-element: var(--theme_light--code_pseudo-element);
--theme--code_pseudo-class: var(--theme_light--code_pseudo-class);
--theme--code_attribute: var(--theme_light--code_attribute);
--theme--code_value: var(--theme_light--code_value);
--theme--code_unit: var(--theme_light--code_unit);
--theme--code_comment: var(--theme_light--code_comment);
--theme--code_punctuation: var(--theme_light--code_punctuation);
--theme--code_annotation: var(--theme_light--code_annotation);
--theme--code_decorator: var(--theme_light--code_decorator);
--theme--code_doctype: var(--theme_light--code_doctype);
--theme--code_number: var(--theme_light--code_number);
--theme--code_string: var(--theme_light--code_string);
--theme--code_boolean: var(--theme_light--code_boolean);
}

View File

@ -1,49 +0,0 @@
/*
* tabs
* (c) 2020 dragonwocky <thedragonring.bod@gmail.com> (https://dragonwocky.me/)
* under the MIT license
*/
'use strict';
// this is just a pseudo mod to "separate" the options
// from the core module - the core still handles actually
// making it work.
module.exports = {
id: 'e1692c29-475e-437b-b7ff-3eee872e1a42',
tags: ['core', 'extension'],
name: 'tabs',
desc: 'have multiple notion pages open in a single window.',
version: '0.1.0',
author: 'dragonwocky',
options: [
{
key: 'select_modifier',
label:
'tab select modifier (key+1, +2, +3, ... +9 and key+left/right arrows):',
type: 'select',
value: [
'Alt',
'Command',
'Control',
'Super',
'Alt+Shift',
'Command+Shift',
'Control+Shift',
'Super+Shift',
],
},
{
key: 'new_tab',
label: 'new tab keybinding:',
type: 'input',
value: 'CommandOrControl+T',
},
{
key: 'close_tab',
label: 'close tab keybinding:',
type: 'input',
value: 'CommandOrControl+W',
},
],
};