From affa314f08bd673f3dfb35dd1f0a5d1882e51266 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Sat, 6 Nov 2021 14:26:35 +1100 Subject: [PATCH] new cli --- .gitignore | 105 +- .prettierrc | 3 - CHANGELOG.md | 344 ---- CONTRIBUTING.md | 111 -- DOCUMENTATION.md | 217 --- LICENSE | 22 - README.md | 456 +---- UPDATING.md | 55 - bin.js | 126 -- bin.mjs | 142 ++ insert/core/mod.js | 105 -- insert/helpers.js | 158 -- insert/init.js | 11 + insert/loader.js | 23 - insert/store.js | 4 + insert/theming/app.css | 2017 ---------------------- insert/theming/global.css | 1096 ------------ insert/theming/mod.js | 36 - notion-enhancer v0.10.0 banner.jpg | Bin 234573 -> 0 bytes package.json | 44 +- pkg/apply.js | 133 -- pkg/apply.mjs | 93 + pkg/check.js | 75 - pkg/check.mjs | 54 + pkg/cli.mjs | 138 ++ pkg/helpers.js | 250 --- pkg/helpers.mjs | 110 ++ pkg/remove.js | 107 -- pkg/remove.mjs | 46 + pkg/replacers/main/{main.js => main.mjs} | 6 +- pkg/replacers/main/schemeHandler.js | 36 - temp/core/app.css | 9 - temp/core/buttons.js | 106 -- temp/core/client.js | 269 --- temp/core/colorjoe/min.js | 4 - temp/core/colorjoe/picker.css | 1 - temp/core/createWindow.js | 89 - temp/core/css/buttons.css | 43 - temp/core/css/scrollbars.css | 29 - temp/core/css/theme.css | 1123 ------------ temp/core/css/titlebar.css | 48 - temp/core/enhancerMenu.js | 762 -------- temp/core/icons/alwaysontop_off.svg | 1 - temp/core/icons/alwaysontop_on.svg | 1 - temp/core/icons/close.svg | 1 - temp/core/icons/file.svg | 1 - temp/core/icons/mac+linux.png | Bin 8295 -> 0 bytes temp/core/icons/maximize_off.svg | 1 - temp/core/icons/maximize_on.svg | 1 - temp/core/icons/minimize.svg | 1 - temp/core/icons/question.svg | 1 - temp/core/icons/user.png | Bin 324 -> 0 bytes temp/core/icons/windows.ico | Bin 285478 -> 0 bytes temp/core/menu.css | 655 ------- temp/core/menu.html | 43 - temp/core/mod.js | 103 -- temp/core/render.js | 1066 ------------ temp/core/systemMenu.js | 477 ----- temp/core/tabs.css | 196 --- temp/core/tray.js | 261 --- temp/core/variables.css | 810 --------- temp/custom-inserts/mod.js | 65 - temp/panel-sites/app.css | 12 - temp/panel-sites/mod.js | 28 - temp/panel-sites/panel.js | 45 - temp/side-panel/app.css | 219 --- temp/side-panel/icons/double-chevron.svg | 3 - temp/side-panel/icons/reload.svg | 3 - temp/side-panel/icons/switcher.svg | 3 - temp/side-panel/mod.js | 506 ------ temp/tabs/mod.js | 49 - temp/tweaks/app.css | 62 - temp/tweaks/mod.js | 120 -- yarn.lock | 46 +- 74 files changed, 651 insertions(+), 12735 deletions(-) delete mode 100644 .prettierrc delete mode 100644 CHANGELOG.md delete mode 100644 CONTRIBUTING.md delete mode 100644 DOCUMENTATION.md delete mode 100644 LICENSE delete mode 100644 UPDATING.md delete mode 100755 bin.js create mode 100644 bin.mjs delete mode 100644 insert/core/mod.js delete mode 100644 insert/helpers.js create mode 100644 insert/init.js delete mode 100644 insert/loader.js delete mode 100644 insert/theming/app.css delete mode 100644 insert/theming/global.css delete mode 100644 insert/theming/mod.js delete mode 100644 notion-enhancer v0.10.0 banner.jpg delete mode 100644 pkg/apply.js create mode 100644 pkg/apply.mjs delete mode 100644 pkg/check.js create mode 100644 pkg/check.mjs create mode 100644 pkg/cli.mjs delete mode 100644 pkg/helpers.js create mode 100644 pkg/helpers.mjs delete mode 100644 pkg/remove.js create mode 100644 pkg/remove.mjs rename pkg/replacers/main/{main.js => main.mjs} (82%) delete mode 100644 pkg/replacers/main/schemeHandler.js delete mode 100644 temp/core/app.css delete mode 100644 temp/core/buttons.js delete mode 100644 temp/core/client.js delete mode 100644 temp/core/colorjoe/min.js delete mode 100644 temp/core/colorjoe/picker.css delete mode 100644 temp/core/createWindow.js delete mode 100644 temp/core/css/buttons.css delete mode 100644 temp/core/css/scrollbars.css delete mode 100644 temp/core/css/theme.css delete mode 100644 temp/core/css/titlebar.css delete mode 100644 temp/core/enhancerMenu.js delete mode 100644 temp/core/icons/alwaysontop_off.svg delete mode 100644 temp/core/icons/alwaysontop_on.svg delete mode 100644 temp/core/icons/close.svg delete mode 100644 temp/core/icons/file.svg delete mode 100644 temp/core/icons/mac+linux.png delete mode 100644 temp/core/icons/maximize_off.svg delete mode 100644 temp/core/icons/maximize_on.svg delete mode 100644 temp/core/icons/minimize.svg delete mode 100644 temp/core/icons/question.svg delete mode 100644 temp/core/icons/user.png delete mode 100644 temp/core/icons/windows.ico delete mode 100644 temp/core/menu.css delete mode 100644 temp/core/menu.html delete mode 100644 temp/core/mod.js delete mode 100644 temp/core/render.js delete mode 100644 temp/core/systemMenu.js delete mode 100644 temp/core/tabs.css delete mode 100644 temp/core/tray.js delete mode 100644 temp/core/variables.css delete mode 100644 temp/custom-inserts/mod.js delete mode 100644 temp/panel-sites/app.css delete mode 100644 temp/panel-sites/mod.js delete mode 100644 temp/panel-sites/panel.js delete mode 100644 temp/side-panel/app.css delete mode 100644 temp/side-panel/icons/double-chevron.svg delete mode 100644 temp/side-panel/icons/reload.svg delete mode 100644 temp/side-panel/icons/switcher.svg delete mode 100644 temp/side-panel/mod.js delete mode 100644 temp/tabs/mod.js delete mode 100644 temp/tweaks/app.css delete mode 100644 temp/tweaks/mod.js diff --git a/.gitignore b/.gitignore index 6704566..dbf0821 100644 --- a/.gitignore +++ b/.gitignore @@ -1,104 +1 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* - -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# TypeScript v1 declaration files -typings/ - -# TypeScript cache -*.tsbuildinfo - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Microbundle cache -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variables file -.env -.env.test - -# parcel-bundler cache (https://parceljs.org/) -.cache - -# Next.js build output -.next - -# Nuxt.js build / generate output -.nuxt -dist - -# Gatsby files -.cache/ -# Comment in the public line in if your project uses Gatsby and *not* Next.js -# https://nextjs.org/blog/next-9-1#public-directory-support -# public - -# vuepress build output -.vuepress/dist - -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -# TernJS port file -.tern-port +node_modules/* \ No newline at end of file diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index 544138b..0000000 --- a/.prettierrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "singleQuote": true -} diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 8f858fd..0000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,344 +0,0 @@ -# changelog - -**potential future features (not confirmed)** - -- [highlight/mark viewer](https://chrome.google.com/webstore/detail/notion%2B-mark-manager/hipgmnlpnimedfepbfbfiaobohhffcfc) -- [advanced math editor](https://github.com/Manueloccorso/NotionMathEditor_BrowserExtension) - -### v0.10.2 (2020-12-05) - -again, an emergency release for bugfixes. -not properly documented and new features have not yet been fully reviewed/edited. - -- new: side panel - adds an extra sidebar on the right for use by other mods, - toggleable with `ctrl+shift+backslash`. -- improved: notion icons uses spritesheets for faster loading of icons. -- improved: icon sets can be hidden/toggled. -- improved: toggles in the enhancer menu follow the same style as notion's toggles. -- improved: separate quote font variable & option in the font chooser mod (`--theme_[dark|light]--font_quote`). -- improved: option to hide the "page details" text for the word counter extension. -- bugfix: notion icons tab is now visible in fullpage databases. -- bugfix: code line numbers handles wrapped code blocks. -- bugfix: file explorer no longer opens when enhancer menu is opened. -- bugfix: enable the remote module in webviews (windows/tabs) for compatibility with the - updated version of electron used by new notion builds (>= 2.0.10). -- bugfix: add support for enhancing an `app` folder if there is no `app.asar` file present. -- extension: "outliner" = table of contents in right sidebar. -- extension: "panel sites" = embed sites on the site panel. -- extension: "indentation lines" = adds vertical relationship lines to make list trees easier to follow. -- extension: "truncated table titles" = see the full text of the truncated table titles on hover over. - -> 📥 `npm i -g notion-enhancer@0.10.2` - -### v0.10.1 (2020-11-18) - -essentially a prerelease for v0.11.0: pushed out for urgent bugfixes during -exam/study weeks when there's no time to code a full release. - -note that this means new features have not yet been fully documented and -may not be fully ready for ideal use yet. however, things overall will -work more reliably than v0.10.0. - -- new: different css entrypoints for different components (tabs, menu, app). -- improved: use an svg for the scroll-to-top button. -- improved: use a better-matching icon and add transitions to the property layout toggle. -- improved: themes are directly applied to tabs and menu rather than sync-ed between (infinite loading). -- improved: error message "is notion running?" --> clearer "make sure notion isn't running!" -- improved: auto-shrink system for tabs (max of 15 open in a window). -- bugfix: disable fadein of selected block halo with snappy transitions. -- bugfix: increase contrast of `--theme_dark--interactive_hover` in dark+ and dracula. -- bugfix: tabs are focused properly for input. -- bugfix: keyboard shortcut listeners are stricter so they don't conflict. -- bugfix: dots indicating draggability are no longer next to the tabs mod in the menu. -- bugfix: prevent empty hotkeys from triggering every keypress. -- bugfix: don't try loading an empty default page url (infinite loading). -- bugfix: remove `* { z-index: 1}` rule so format dropdowns in table view can be opened. -- extension: "topbar icons" = replaces the topbar buttons with icons. -- extension: "code line numbers" = adds line numbers to code blocks. -- extension: "notion icons" = use custom icon sets directly in notion. -- tweak: vertical indentation/relationship lines for lists. -- tweak: scroll database toolbars horizontally if partially hidden. -- tweak: condense bullet points (decrease line spacing). - -> 📥 `npm i -g notion-enhancer@0.10.1` - -### v0.10.0 (2020-11-02) - -a flexibility update. - -- new: mods can be reordered in the menu to control what order styling/scripts are added/executed in. - higher up on the list = higher priority of application = loaded last in order to override others. - (excluding the core, which though pinned to the top of the list is always loaded first so theming - variables can be modified.) -- new: relaunch button in tray menu. -- new: a core mod option for a default page id/url (all new windows will load it instead of the - normal "most recent" page). -- new: css variables for increasing line spacing/paragraph margins. -- new: patch the notion:// url scheme/protocol to work on linux. -- new: menu shows theme conflicts + a core mod option to auto-resolve theme conflicts. -- new: a `-n` cli option. -- improved: menu will now respect integrated titlebar setting. -- improved: use keyup listeners instead of a globalShortcut for the enhancements menu toggle. -- improved: overwrite `app.asar.bak` if already exists (e.g. for app updates). -- improved: additional menu option descriptions on hover. -- improved: listen to prefers-color-scheme to better change theme in night shift. -- improved: platform-specific option overrides for features not required on macOS. -- improved: made extra padding at the bottom with the "focus mode" extension toggleable. -- bugfix: removed messenger emoji set as the provider no longer supports it. -- bugfix: remove shadow around light mode board headers. -- bugfix: properly detect/respond to `EACCES`/`EBUSY` errors. -- bugfix: night shift checks every interaction, - will respond to system changes without any manual changes. -- bugfix: toc blocks can have text colours. -- bugfix: bypass preview extension works with the back/forward keyboard shortcuts. -- bugfix: (maybe) fix csp issues under proxy. -- bugfix: remove focus mode footer from neutral theme + better contrast in calendar views. -- bugfix: improvements to the colour theming, particularly to make real- and fake-light/dark - modes (as applied by the night shift extension) look consistent. - relevant variables (assuming all are prefixed by `--theme_[dark|light]--`): - `box-shadow`, `box-shadow_strong`, `select_input`, and `ui-border` -- bugfix: font sizing applied to overlays/previews. -- bugfix: removed typo in variable name for brown text. -- bugfix: primary-colour text (mainly in "add a \_" popups) is now properly themed. -- bugfix: right-to-left extension applies to text in columns. -- bugfix: block text colour applies to text with backgrounds. -- bugfix: font applied to wrong mode with littlepig dark. -- bugfix: keep "empty" top bar visible in the menu. -- bugfix: set NSRequiresAquaSystemAppearance to false in /Applications/Notion.app/Contents/Info.plist - so system dark/light mode can be properly detected. -- bugfix: make ctrl+f popover shadow less extreme. -- bugfix: "weekly" calendar view name made case insensitive. -- bugfix: re-show hidden windows when clicking on the dock. -- tweak: sticky table/list rows. -- theme: "material ocean" = an oceanic colour palette. -- theme: "cherry cola" = a delightfully plummy, cherry cola flavored theme. -- theme: "dracula" = a theme based on the popular dracula color palette - originally by zeno rocha and friends. -- extension: "tabs" = have multiple notion pages open in a single window. tabs can be controlled - with keyboard shortcuts and dragged/reordered within/between windows. -- extension: "scroll to top" = add an arrow above the help button to scroll back to the top of a page. -- extension: "tweaks" = common style/layout changes. includes: - - new: make transitions snappy/0s. - - new: in-page columns are disabled/wrapped and pages are wider when - the window is narrower than 600px for improved responsiveness. - - new: thicker bold text for better visibility. - - new: more readable line spacing. - - moved: smooth scrollbars. - - moved: change dragarea height. - - moved: hide help. - -a fork of notion-deb-builder that does generate an app.asar has been created and is once again supported. - -> 📥 `npm i -g notion-enhancer@0.10.0` - -### v0.9.1 (2020-09-26) - -- bugfix: font chooser will continue iterating through fonts after encountering a blank option. -- bugfix: block indents are no longer overriden. -- bugfix: neutral does not force full width pages. -- bugfix: bypass preview extension works with the back/forward arrows. -- bugfix: check all views on a page for a weekly calendar. -- bugfix: emoji sets no longer modifies the user agent = doesn't break hotkeys. - -> 📥 `npm i -g notion-enhancer@0.9.1` - -### v0.9.0 (2020-09-20) - -a feature and cleanup update. - -- improved: halved the number of css rules used -> much better performance. -- improved: font imports must be define in the `mod.js` so that they can also be used in - the enhancements menu. -- improved: tiling window-manager support (can hide titlebars entirely without dragarea/buttons). -- improved: extensions menu search is now case insensitive and includes options, inputs and versions. - the search box can also for focused with `CMD/CTRL+F`. -- improved: extensions menu filters shown either a ✓ or × to help understand the current state. -- improved: added individual text-colour rules for different background colours. -- improved: added variables for callout colouring. -- improved: replaced with `helpers.getNotion()` with the constant `helpers.__notion` to reduce - repeated function calls. -- improved: added variables for page width. -- improved/bugfix: emoji sets extension should now work on macOS and will change user agent to use - real emojis instead of downloading images when system default is selected. -- bugfix: enhancer settings should no longer reset on update (though this will not have - effect until the release after this one). -- bugfix: blue select tags are no longer purple. -- bugfix: page titles now respond to small-text mode. -- bugfix: weekly calendar view height is now sized correctly according to its contents. -- bugfix: made the open enhancements menu hotkey configurable and changed the default to `ALT+E`. - to remove conflict with the inline code highlight shortcut. -- bugfix: update property-layout to match notion changes again. -- bugfix: updated some of the tweak styling to match notion changes. -- bugfix: block-level text colours are now changed properly. -- bugfix: do not require data folder during installation, to prevent `sudo` attempting to - create it in `/var/root/`. -- bugfix: bullet points/checkboxes will now align properly in the right-to-left extension. -- themes: "littlepig" (light + dark) = monospaced themes using emojis and colourful text. -- extension: "font chooser" = customize fonts. for each option, type in the name of the font you would like to use, - or leave it blank to not change anything. -- extension: "always on top" = add an arrow/button to show the notion window on top of other windows - even if it's not focused. -- extension: "calendar scroll" = add a button to scroll down to the current week in fullpage/infinite-scroll calendars. -- extension: "hide help button" = hide the help button if you don't need it. -- extension: "bypass preview" = go straight to the normal full view when opening a page. -- extension: "word counter" = add page details: word/character/sentence/block count & speaking/reading times. - -notion-deb-builder has been discovered to not generate an app.asar and so is no longer supported. - -> 📥 `npm i -g notion-enhancer@0.9.0` - -### v0.8.5 (2020-08-29) - -- bugfix: separate text highlight and select tag variables. -- bugfix: bypass CSP for the `enhancement://` protocol - was failing on some platforms? - -> 📥 `npm i -g notion-enhancer@0.8.5` - -### v0.8.4 (2020-08-29) - -- bugfix: property-layout now works consistently with or without a banner. - -> 📥 `npm i -g notion-enhancer@0.8.4` - -### v0.8.3 (2020-08-29) - -previous release was a mistake: it did as intended on linux, but broke windows. -this should achieve the same thing in a more compatible way. - -> 📥 `npm i -g notion-enhancer@0.8.3` - -### v0.8.2 (2020-08-28) - -some things you just can't test until production... fixed the auto-installer -to use `./bin.js` instead of `notion-enhancer` - -> 📥 `npm i -g notion-enhancer@0.8.2` - -### v0.8.1 (2020-08-28) - -a clarity and stability update. - -- improved: more informative cli error messages (original ones can be accessed with the `-d/--dev` flag). -- bugfix: gallery variable didn't apply on fullpage. -- bugfix: date picker hid current date number. -- bugfix: small-text pages should now work as expected. -- bugfix: padding issues in page previews. -- bugfix: property-layout extension had been broken by internal notion changes. -- bugfix: linux installer path typo. -- bugfix: caret-color was being mistaken for color and block-level text colouring was broken. -- improved: auto-application on install. - -> 📥 `npm i -g notion-enhancer@0.8.1` - -### v0.8.0 (2020-08-27) - -complete rewrite with node.js. - -- new: simpler cli installation system (inc. commands: `apply`, `remove`, and `check`). -- new: mod loading system (easier to create new mods, adds to notion rather than overwriting). -- new: mod configuration menu. -- improved: more theming variable coverage - inc. light theme and sizing/spacing. -- bugfix: non-reproducable errors with python. -- bugfix: better launcher patching on linux. -- bugfix: fix frameless window issue introduced by notion desktop 2.0.9. -- extension: "custom inserts" = link files for small client-side tweaks. -- extension: "bracketed links" = render links surrounded with \[\[brackets]] instead of underlined. -- extension: "focus mode" = hide the titlebar/menubar if the sidebar is closed (will be shown on hover). -- theme: "dark+" = a vivid-colour near-black theme. -- theme: "neutral" = smoother colours and fonts, designed to be more pleasing to the eye. -- theme: "gameish" = a purple, "gamer-styled" theme with a blocky-font. -- theme: "pastel dark" = a smooth-transition true dark theme with a hint of pastel. -- extension: "emoji sets" = pick from a variety of emoji styles to use. -- extension: "night shift" = sync dark/light theme with the system (overrides normal theme setting). -- extension: "right-to-left" = enables auto rtl/ltr text direction detection. (ported from [github.com/obahareth/notion-rtl](https://github.com/obahareth/notion-rtl).) -- extension: "weekly view" = calendar views named "weekly" will show only the 7 days of this week. (ported from [github.com/adihd/notionweeklyview](https://github.com/adihd/notionweeklyview).)] -- extension: "property layout" = auto-collapse page properties that usually push down page content. (ported from [github.com/alexander-kazakov/notion-layout-extension](https://github.com/alexander-kazakov/notion-layout-extension).) - -> 📥 `npm i -g notion-enhancer@0.8.0` - -### v0.7.0 (2020-07-09) - -- new: tray option to use system default emojis (instead of twitter's emojiset). -- new: mac support (identical functionality to other platforms with the - exception of the native minimise/maximise/close buttons being kept, as they integrate - better with the OS while not being out-of-place in notion). -- new: notion-deb-builder support for linux. -- new: an alert will be shown if there is an update available for the enhancer. -- improved: replaced button symbols with svgs for multi-platform support. -- improved: window close button is now red on hover (thanks to [@torchatlas](https://github.com/torchatlas)). -- bugfix: `cleaner.py` patched for linux. -- bugfix: tray now operates as expected on linux. -- bugfix: odd mix of `\\` and `/` being used for windows filepaths. -- bugfix: app no longer crashes when sidebar is toggled. - -> 📥 [notion-enhancer.v0.7.0.zip](https://github.com/notion-enhancer/notion-enhancer/archive/v0.7.0.zip) - -### v0.6.0 (2020-06-30) - -- style: custom fonts. -- style: font resizing. -- style: hide discussions (thanks to [u/Roosmaryn](https://www.reddit.com/user/Roosmaryn/)). -- new: custom colour theming, demonstrated via the dark+ theme. -- new: linux support (thanks to [@Blacksuan19](https://github.com/Blacksuan19)). -- improved: if hotkey is pressed while notion is unfocused, it will bring it to the front rather than hiding it. -- improved: stop window buttons breaking at smaller widths. -- improved: more obviously visible drag area. -- bugfix: specify UTF-8 encoding to prevent multibyte/gbk codec errors (thanks to [@etnperlong](https://github.com/etnperlong)). - -> 📥 [notion-enhancer.v0.6.0.zip](https://github.com/notion-enhancer/notion-enhancer/archive/v0.6.0.zip) - -### v0.5.0 (2020-05-23) - -- new: running from the wsl. -- new: reload window with f5. -- improved: code has been refactored and cleaned up, - inc. file renaming and a `customiser.py` that doesn't require - a run of `cleaner.py` to build modifications. - improved: scrollbar colours that fit better with notion's theming. -- bugfix: un-break having multiple notion windows open. - -> 📥 [notion-enhancer.v0.5.0.zip](https://github.com/notion-enhancer/notion-enhancer/archive/v0.5.0.zip) - -**development here taken over by [@dragonwocky](https://github.com/dragonwocky).** - -**the ~~crossed out~~ features below are no longer features included by default,** -**but can still easily be added as [custom tweaks](TWEAKS.md).** - -### v0.4.1 (2020-02-13) - -- bugfix: wider table & the "+" button not working in database pages. - -> 📥 [notion-enhancer.v4.1.zip](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d239a3cf-d553-4ef3-ab04-8b47892d9f9a/Notion_Customization_v4.1.zip) - -### v0.4.0 - -- new: tray icon. -- new: app startup options (+ saving). -- new: `Reset.py` -- improved: better output from `Customization Patcher.py`. -- bugfix: wider tables in "short page" mode. -- bugfix: unclickable buttons/draggable area (of titlebar). - -### v0.3.0 - -- new: show/hide window hotkey. -- new: app startup options. -- ~~style: smaller table icons.~~ - -> 📥 [notion-enhancer.v3.zip](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/b01aa446-5727-476a-a25e-395472bfb1be/NotionScriptsV3.zip) - -### v0.2.0 - -- new: light/dark theme support for window control buttons + scrollbars. -- new: custom styles directly linked to the enhancer resources + compatible with web version. -- ~~improved: making table column width go below 100px.~~ - -### v0.1.0 - -- new: custom window control buttons. -- removed: default titlebar/menubar. -- ~~removed: huge padding of board view.~~ -- ~~removed: huge padding of table view.~~ -- ~~optional: making table column width go below 100px.~~ -- ~~style: thinner cover image + higher content block.~~ -- style: scrollbars. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 53f79ca..0000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,111 +0,0 @@ -# contributing - -the enhancer is a tool for the community, so who best to build it but the community? - -these guidelines are designed for smooth communication, management and development on this project. -following them shows respect to the developer/s spending their free time on it, and makes it easiest for them to improve the tool. - -**found a bug / something isn't working as expected?** create a -[bug report](https://github.com/notion-enhancer/notion-enhancer/issues/new?labels=bug&template=bug-report.md). - -> SECURITY ISSUE? (e.g. PERSONAL/NOTION DATA BEING INTERFERED WITH) -> EMAIL ME INSTEAD: [thedragonring.bod@gmail.com](mailto:thedragonring.bod@gmail.com) - -**have a cool new feature idea / there's something you just wish you could do?** submit a -[feature proposal](https://github.com/notion-enhancer/notion-enhancer/issues/new?labels=enhancement&template=feature-proposal.md). - -> enhancements are applied only locally - -> features should be designed only to improve the user experience. - -**know your way around notion/electron/js/css and have some code to contribute?** great! read below for guidelines -on how to create a helpful pull request and what happens with your code afterwards. it's probably also helpful to -join the [discord server](https://discord.gg/sFWPXtA). - -**for information on how to actually create a theme or module with the notion-enhancer api, check the [docs](DOCUMENTATION.md).** - -## testing - -first, remove any other installations of the enhancer: `npm remove -g notion-enhancer` - -to download and install the latest code, run: - -```sh -git clone https://github.com/notion-enhancer/notion-enhancer -cd notion-enhancer -git checkout dev -npm link -notion-enhancer apply -y -``` - -to update the dev build, go into the downloaded folder and run `git pull`. (make sure any work-in-progress themes etc. are copied somewhere else safely first.) - -to remove the dev build, go into the downloaded folder and run: - -```sh -notion-enhancer remove -n -npm unlink -``` - -## conventions - -the enhancer is a **core** extended by included **modules**. -the core can be further split into the **installer** and the **modloader**. -modules are either **extensions** or **themes**. - -each module is separately versioned, following the [semver](https://semver.org/) scheme. -depending on the content and scale of a contribution, it may constitute an update on its own or may be merged into a larger update. - -to keep a consistent & informative code style it is preferred to name variables with -`snake_case`, functions/methods with `camelCase`, and classes with `PascalCase`. -if a variable is a reference to a DOM element, it may be helpful to prefix it with a `$`. - -some variables beginning with a double underscore are `__folder` paths and `ALL_CAPS` variables -are constant. this is not required, but these styles should not be used for any other purpose. - -the master branch is kept consistent with the current release, -so all changes should be made to the dev branch. - -## review - -active core devs will manually look through each pull request and communicate with contributors before merging to -make sure it is: - -**a) safe.** system details (e.g. IP, clipboard) + notion user data are considered private unless directly shared by the user. -none of this should be accessed or transmitted to an external server. - -**b) functional.** is there a better way to do this? can extra dependencies be removed or replaced by newer web technologies? -how can this be made as user-friendly as possible? - -**c) bug-free.** where possible, code should be tested on a variety of platforms in a variety of situations so it can be -confirmed that it won't break anything for the user and is robust enough to handle use by both -power users and non-tech-savvy users. - -## translating - -future versions of the enhancer will have multi-language support. - -if you are willing to help with translation, let me know and i'll contact you when i'm ready. - -## licensing - -this project is distributed under the [MIT](https://choosealicense.com/licenses/mit/) license. -the project as a whole is copyrighted by core devs in the [LICENSE](LICENSE) file. - -when modifying a file, add your copyright to it in the format: - -``` -/* - * module or project name - * (c) year name (website) - * under the MIT license - */ -``` - -all code contributed to this repository remains attributed to the contributor, -but full rights are granted for it to be used under the terms of the MIT license. -on the occasion that the contributed code should be removed or overwritten, -the contributor's copyright may be removed from the file. - -by opening a pull request in this repository, you agree to the above conditions. - -dependencies remain separately licensed to their various authors. diff --git a/DOCUMENTATION.md b/DOCUMENTATION.md deleted file mode 100644 index ad71710..0000000 --- a/DOCUMENTATION.md +++ /dev/null @@ -1,217 +0,0 @@ -# documentation - -the enhancer is essentially a modloader for notion. this document contains the specifications of -how those modules can be made and what they should contain. - -this file assumes basic working knowledge of modern javascript and css. since these are the languages -executable within the notion app, these are the languages enhancements must be written in. - -want to contribute? check the [contribution guidelines](CONTRIBUTING.md). - -for support, join the [discord server](https://discord.gg/sFWPXtA). - -## creating a mod - -_to understand best how notion's app works, check out [the electron docs](https://www.electronjs.org/docs/),_ -_explore the contents of your local extracted `app.asar`, and navigate the html structure with the devtools web inspector._ - -_look through [the existing modules](mods)_ -_for examples of the stuff described below in action._ - -_at the moment, for ease of development and use (and security assurance), there's no way for users_ -_to install their own modules. this means that testing modules requires_ -_[running a dev build of the enhancer](CONTRIBUTING.md#testing). a better system is in the works._ - -_once your mod is working, open a pull request to add it to the enhancer!_ - -each directory in the `mods` folder is considered a module, with the file entry points `mod.js`, -`variables.css`, `app.css`, `tabs.css` and `menu.css`. - -| file | description | -| ------------ | --------------------------------------------------------------------- | -| `mod.js` | **required:** describes the module and contains functional javascript | -| `styles.css` | **optional:** a css file automatically inserted into each app window | - -## mod.js - -```js -// not valid js! -// a visual representation of the contents/type -// of this file's exported object. -module.exports = { - id: String of uuidv4, - name: String of short_name, - tags?: Array of categories, - desc: String of markdown, - version: String of semver, - author: String of github_username OR { - name: String of author_name, - link: String of url, - avatar: String of image_source, - }, - options?: Array<{ - key: String, - label: String, - desc?: String, - type: String in ['toggle', 'select', 'input', 'file'], - value: Boolean or Array or String or Number or null, - platformOverwrite?: { - darwin?: Boolean or Array or String or Number or null, - win32?: Boolean or Array or String or Number or null, - linux?: Boolean or Array or String or Number or null, - } - }>, - hacks?: { - [k: 'insert-point' (e.g. 'main/createWindow.js')]: function ( - store, // used for configuration and persisting of data (explanation below). - __exports // module.exports of the target file. if you don't understand that, don't use it. - ) {} - } -}; -``` - -| key | value | type | -| ------- | ----------------------------------------------------------------------------------------------- | ---------------------- | -| id | **required:** uuidv4 - generate a new one [here](https://www.uuidgenerator.net) | _string_ | -| name | **required:** short name (e.g. `'ocean theme'`) | _string_ | -| tags | **required:** categories/type (e.g. `'extension'`, `'theme'`, `'light'`, `'dark'`) | _array\_ | -| desc | **optional:** 1-3 sentence description of what the module is/does, with basic markdown support. | _string_ | -| version | **required:** semver (e.g. `'0.3.7'`) | _string_ | -| author | **required:** see below: original extension creator | _string_ or \ | -| options | **optional:** see below: options made available in the enhancer menu (accessible from the tray) | _array\_ | -| hacks | **optional:** see below: code inserted at various points | _object_ | - -> a module that with the primary function of being a hack should be tagged as an extension, -> while a module that has the primary function of adding styles should be tagged as a theme. - -#### author - -by default this is assumed to be a github username: just pass it as a string and -the link/avatar will be automatically found. - -if you'd rather customise this, pass this object: - -| key | value | type | -| ------ | ------------------------------------------ | -------- | -| name | **required:** author's (your?) name | _string_ | -| link | **required:** link to the author's profile | _string_ | -| avatar | **required:** url for the author's avatar | _string_ | - -#### options - -| key | value | type | -| ----------------- | ---------------------------------------------------------------------------------------- | --------------------------- | -| key | **required:** key to save value to the mod `store` | _string_ | -| label | **required:** short description/name of option to be shown in menu | _string_ | -| desc | **optional:** extended information to be shown on hover | _string_ | -| type | **required:** input type (see below) | _string_ | -| extensions | **optional:** allowed file extensions (only use with a file option), e.g. `['js', 'ts']` | _array\_ | -| value | **optional:** default or possible value/s for option | see below | -| platformOverwrite | **optional:** remove the option from the menu and force a value on a specific platform | _\_ as shown above | - -| type | value | -| ------ | -------------------- | -| toggle | _boolean_ | -| select | _array\_ | -| input | _string_ or _number_ | -| color | _string_ | -| file | none | - -> the file option stores only a filepath, not the file itself. - -## hacks - -each "hack" is a function taking 2 arguments. - -1. the **`store`** argument, which allows access to the module settings/options defined in `mod.js` - (those set in the menu, or used internally by the module). each module store is automatically saved to + - loaded from `~/.notion-enhancer/id.json`. - it should always be called as `store({ defaults })` (not stored in a variable), - but otherwise treated as a normal object to access and set things. -2. the **`__exports`** argument, which is the `module.exports` of the file being modded. - this can be used to call or replace functions from notion. - -this hack is applied to whichever file (`.js`-only) is set as the function key. these can be found within the `app` folder. - -files under the `main` folder are executed on app launch in a process shared -between all app windows (consider it a backend). files under the `renderer` folder are -executed on window launch in a pre-window process: the client-side javascript -normally expected to run on a webpage. - -unless scripts need to change app logic (e.g. to add the tray menu), -they should usually be applied to `renderer/preload.js` to interact -with the app window itself. - -e.g. - -```js -// sayhi.js -module.exports = function (store, __exports) { - document.addEventListener('readystatechange', (event) => { - if (document.readyState !== 'complete') return false; - console.log(store({ name: 'dragonwocky' }).name); - }); -}; -// mod.js -module.exports.hacks = { - 'renderer/preload.js': require('./sayhi.js'), -}; -``` - -### the `enhancement://` protocol - -any files within the `mods` folder can be loaded with the `enhancement://` protocol. - -for example, inserting an image from the core mod: ``. - -## `variables.css` - -**inserted into all windows.** - -(put font import statements here too.) - -the enhancer has been designed with theming in mind, so as much of notion's colours -and typography as possible and some basic spacing (both for the light and dark themes) have been mapped out -using css variables. - -this set of variables is 100% mandatory to use if you wish to use or change anything they handle -(particularly colours). this is necessary to keep all themes consistently working -(e.g. responding properly to light/dark theme changes), and it makes theming a lot easier - -notion's html structure needs some complex selectors to properly modify it, -and it means theme authors don't have to worry about separately updating their theme every time something changes. - -the full/up-to-date list of variables and their default values can be found in the -[core `variables.css` file](mods/core/variables.css). each variable is named something along the lines of -`--theme_mode--target_name-property`. still not sure what a variable does? try changing it and seeing what happens. - -these are all made possible by the core module. if you believe this set of variables is buggy or lacking in any way, -consider opening a pull request to fix those issues - please do not try and reinvent the wheel unnecessarily. - -> ### using variables -> -> variables should be defined per-mode, but used without specifying. for example: -> -> ```css -> :root { -> --theme_dark--main: rgb(5, 5, 5); -> } -> .demo-element { -> background: var(--theme--main); -> } -> ``` -> -> this to simplify styling and make it possible for things like the "night shift" module to work, -> by leaving the choice of light/dark theme up to the user and then directing the right values to -> the relevant variables. - -## `app.css` - -**inserted into the notion app window.** - -## `tabs.css` - -**inserted into the notion app container for styling tabs.** - -## `menu.css` - -**inserted into the enhancements menu.** diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 26171ec..0000000 --- a/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -MIT License - -Copyright (c) 2020 TarasokUA -Copyright (c) 2020 dragonwocky - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md index 0415444..431d008 100644 --- a/README.md +++ b/README.md @@ -1,455 +1,3 @@ -# notion-enhancer +# notion-enhancer (desktop) -notion.so is a pretty awesome tool already, but there's always room for improvements. -it might just be a preference, it might be something crucial to your setup, -it might be something users have been asking for for a long time, -or it might even be something you haven't realised you need yet -\- there's something that would make your user experience a lot better. - -this package is a mod-loader for the desktop app, with custom colour theming and extra feature enhancements. - -want to contribute? check out the [contribution guidelines](CONTRIBUTING.md) and the [documentation](DOCUMENTATION.md). - -for support, join the [discord server](https://discord.gg/sFWPXtA). - -### supported desktop clients - -- the [official windows/mac releases](https://notion.so/desktop). -- the arch linux AUR [notion-app](https://aur.archlinux.org/packages/notion-app/) package. -- the linux [notion-app](https://github.com/jaredallard/notion-app) installer. -- the linux [notion-deb-builder](https://github.com/davidbailey00/notion-deb-builder). - -outdated notion versions (< 2.0.10) probably won't work. - -mobile clients are not supported and due to system limitations/restrictions cannot be. - -a chrome extension may be coming soon for web client support. - -## installation - -> **if you are updating from v0.7.0 or earlier,** things have changed, more information is available -> in this [update guide](UPDATING.md). please read that before following these instructions. - -- ensure that no notion windows/processes are running by ending all Notion processes in your task manager. - - `CMD + ALT + ESC` on mac and `CTRL + SHIFT + ESC` on windows/linux to open task manager. -- [install node.js](https://nodejs.org/en/download/) - - you may need to restart your computer. - - notion-enhancer will use node.js, you do not need to interact with it aside from downloading to install notion-enhancer. -- open your computer's terminal, **not the node.js command prompt.** - - **windows 10:** search in your start menu (click windows key or icon in bottom left of screen) for _'cmd'_ or _'command prompt'_. - - **mac:** search in spotlight (magnifying glass in top right of screen) for _'terminal'_. -- type and enter the following line(s) based on your operating system, if there are multiple lines, make sure to enter them _one by one_ . - - **windows 10:** - ``` - npm i -g notion-enhancer - ``` - - **mac:** this may ask you to enter your password, instead of hiding your password with \*\*\* symbols, mac terminal hides it by making it invisible. simply type your password and click enter. - ``` - sudo chmod -R a+wr /usr/local/lib/node_modules - sudo chmod -R a+wr /usr/local/bin - sudo chmod -R a+wr /Applications/Notion.app/Contents/Resources - npm i -g notion-enhancer - ``` - - **debian/ubuntu, chromeOS, wsl (to modify the win10 app):** - ``` - bash curl -sL https://deb.nodesource.com setup_current.x | sudo -E bash - - sudo apt-get install -y nodejs - npm i -g notion-enhancer - ``` - - **arch linux, manjaro:** - - install the [aur package](https://aur.archlinux.org/packages/notion-enhancer) with your aur helper (e.g. `yay -S notion-enhancer`). - -### command-line interface - -the enhancements should be automatically applied on installation -and automatically removed on uninstallation. - -on some platforms this may throw errors if done without -elevated/admin permissions, though, so if it hasn't automatically -installed you will still need to use these commands. - -``` -Usage: - $ notion-enhancer [options] - -Commands: - apply : add enhancements to the notion app - remove : return notion to its pre-enhanced/pre-modded state - check : check the current state of the notion app - -For more info, run any command with the `--help` flag: - $ notion-enhancer apply --help - $ notion-enhancer remove --help - $ notion-enhancer check --help - -Options: - -y, --yes : skip prompts (may overwrite data) - -n, --no : skip prompts (may cause failures) - -d, --dev : show detailed error messages (for debug purposes) - -h, --help : display usage information - -v, --version : display version number -``` - -### faq - -**when will the update be out?** -i code this in my free time, in-between my other commitments. there are no ETAs. - -**the themes aren't working?** -if you pick a dark theme it will only be applied if notion is in dark mode, -and if you pick a light theme it will only work if notion is in light mode. -do `CMD/CTRL+SHIFT+L` to toggle between them. - -**is this against notion's terms of service? can i get in trouble for using it?** -definitely not! i contacted their support team to check, and the response was awesome: - -> "Thanks for taking the time to share this with us. Userscripts and userstyles are definitely -> cool ideas and would be helpful for many users! ... I'll also share this with the rest of the -> team to take to heart for future improvements." - -**how do i uninstall the enhancer?** -run `npm remove -g notion-enhancer`. - -## features - -most of the enhancer's functionality is split into configurable enhancement modules, -but some basic improvements necessary for things to work are built in by values: - -- the notion:// url scheme/protocol is patched to work on linux. -- a tray/menubar icon: links relevant to the enhancer + buttons to manage notion windows. - -once applied, modules can be configured via the graphical menu, -which is opened from the tray/menubar icon or with `OPTION/ALT+E`. - -![](https://user-images.githubusercontent.com/16874139/97819046-34e8b600-1cfa-11eb-8fa6-a3ad5374cd0b.png) - -currently all modules come pre-installed for technical reasons, security assurance, and ease-of-use. -these include: - -### notion-enhancer core - -**tags:** #core - -**description:** the cli, modloader, menu, & tray. - -**author:** [dragonwocky](https://github.com/dragonwocky/) - -| option | extended description | type | values/defaults | platform-specific details | -| ----------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | -------------------------- | ------------------------- | -| auto-resolve theme conflicts | when a theme is enabled any other themes of the same mode (light/dark) will be disabled. | toggle | no | | -| hide app on open | app can be made visible by clicking the tray icon or using the hotkey. | toggle | no | | -| auto-maximise windows | whenever a window is un-hidden or is created it will be maximised. | toggle | no | | -| close window to the tray | 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. | toggle | yes | | -| integrated titlebar | replace the native titlebar with buttons inset into the app. | toggle | yes | macOS: forced on | -| tiling window manager mode | 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. | toggle | no | macOS: forced off | -| window display hotkey | used to toggle hiding/showing all app windows. | [accelerator](https://github.com/electron/electron/blob/master/docs/api/accelerator.md) input | `CommandOrControl+Shift+A` | | -| open enhancements menu hotkey | used to toggle opening/closing this menu while notion is focused. | [accelerator](https://github.com/electron/electron/blob/master/docs/api/accelerator.md) input | `Alt+E` | | -| values/defaults page id/url | 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. | text input | `Alt+E` | | - -![](https://user-images.githubusercontent.com/16874139/97819249-7a59b300-1cfb-11eb-99fa-de945fe8e3d9.png) - -### tabs - -**tags:** #core #extension - -**description:** have multiple notion pages open in a single window. - -**author:** [dragonwocky](https://github.com/dragonwocky/) - -| option | type | values/defaults | -| --------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -| tab select modifier (key+1, +2, +3, ... +9 and key+left/right arrows) | select | `Alt`, `Command`, `Control`, `Super`, `Alt+Shift`, `Command+Shift`, `Control+Shift`, `Super+Shift` | -| new tab keybinding | [accelerator](https://github.com/electron/electron/blob/master/docs/api/accelerator.md) input | `CommandOrControl+T` | -| close tab keybinding | [accelerator](https://github.com/electron/electron/blob/master/docs/api/accelerator.md) input | `CommandOrControl+W` | - -![](https://user-images.githubusercontent.com/16874139/97821456-9dd62b00-1d06-11eb-8c3a-e9f77bbd740e.png) - -### tweaks - -**tags:** #core #extension - -**description:** common style/layout changes. - -**author:** [dragonwocky](https://github.com/dragonwocky/) - -| option | extended description | type | values/defaults | platform-specific details | -| ---------------------------- | ---------------------------------------------------------------------------------------------------------- | ------------ | --------------- | ------------------------- | -| height of frameless dragarea | the rectangle added at the top of a window in "integrated titlebar" mode, used to drag/move the window. | number input | 15 | macOS: forced to 0 | -| width to wrap columns at | the size in pixels below which in-page columns are resized to appear full width so content isn't squished. | number input | 600 | | -| integrated scrollbars | use scrollbars that fit better into notion's ui instead of the default chrome ones. | toggle | yes | | -| snappy transitions | | toggle | no | | -| thicker bold text | | toggle | yes | | -| more readable line spacing | | toggle | no | | -| hide help button | | toggle | no | | - -![](https://user-images.githubusercontent.com/16874139/97819829-1638ee00-1cff-11eb-80c6-f270c2ba0f37.png) - -### always on top - -**tags:** #extension - -**description:** add an arrow/button to show the notion window -on top of other windows even if it's not focused. - -**author:** [dragonwocky](https://github.com/dragonwocky/) - -![](https://user-images.githubusercontent.com/16874139/97820478-79784f80-1d02-11eb-9e32-caac4563d8f0.png) - -### bracketed links - -**tags:** #extension - -**description:** render links surrounded with \[\[brackets]] instead of underlined. - -**author:** [arecsu](https://github.com/arecsu/) - -![](https://user-images.githubusercontent.com/16874139/97820501-9f9def80-1d02-11eb-8ad8-b1ddf1ed9599.png) - -### bypass preview - -**tags:** #extension - -**description:** go straight to the normal full view when opening a page. - -**author:** [dragonwocky](https://github.com/dragonwocky/) - -### calendar scroll - -**tags:** #extension - -**description:** add a button to scroll down to the current week in fullpage/infinite-scroll calendars. - -**author:** [dragonwocky](https://github.com/dragonwocky/) - -![](https://user-images.githubusercontent.com/16874139/97820611-fe636900-1d02-11eb-8f78-0536103e25aa.png) - -### cherry cola - -**tags:** #theme #dark - -**description:** a delightfully plummy, cherry cola flavored theme. - -**author:** [runargs](https://github.com/runargs) - -![](https://user-images.githubusercontent.com/16874139/97819898-9fe8bb80-1cff-11eb-846f-1a66e0302ebd.png) - -### custom inserts - -**tags:** #extension - -**description:** link files for small client-side tweaks. (not sure how to do something? check out the -[tweaks](https://github.com/notion-enhancer/tweaks) collection.) - -**author:** [dragonwocky](https://github.com/dragonwocky/) - -| option | type | -| --------------------- | ---- | -| css insert | file | -| client-side js insert | file | - -### dark+ - -**tags:** #theme #dark - -**description:** a vivid-colour near-black theme. - -**author:** [dragonwocky](https://github.com/dragonwocky/) - -| option | type | values/defaults | -| -------------- | ----- | ------------------ | -| primary colour | color | `rgb(177, 24, 24)` | - -![](https://user-images.githubusercontent.com/16874139/97820632-19ce7400-1d03-11eb-85a9-87f6d957dc96.png) - -### dracula - -**tags:** #theme #dark - -**description:** a theme based on the popular dracula color palette originally by zeno rocha and friends. - -**author:** [dracula](https://github.com/dracula/) - -![](https://user-images.githubusercontent.com/16874139/97820175-04f0e100-1d01-11eb-9ede-b6e033a28cbc.png) - -### emoji sets - -**tags:** #extension - -**description:** pick from a variety of emoji styles to use. - -**author:** [dragonwocky](https://github.com/dragonwocky/) - -| option | type | values/defaults | -| ------ | ------ | --------------------------------------------------------------------------------------------------------------- | -| style | select | twitter, apple, google, microsoft, samsung, whatsapp, facebook, joypixels, openmoji, emojidex, lg, htc, mozilla | - -![](https://user-images.githubusercontent.com/16874139/97820652-3f5b7d80-1d03-11eb-80a6-34089b946711.png) - -### focus mode - -**tags:** #extension - -**description:** hide the titlebar/menubar if the sidebar is closed (will be shown on hover). - -**author:** [arecsu](https://github.com/arecsu/) - -| option | extended description | type | values/defaults | -| --------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | --------------- | -| add padding to bottom of the page | will only take effect when the sidebar is hidden. aims to make the canvas as symmetrical/consistent as possible: if there is empty space on 3 sides, the 4th should follow. | toggle | on | - -![](https://user-images.githubusercontent.com/16874139/97820337-da535800-1d01-11eb-9df5-55567cba2cc4.png) - -### font chooser - -**tags:** #extension - -**description:** customize fonts. for each option, type in the name of -the font you would like to use, or leave it blank to not change anything. - -**author:** [torchatlas](https://github.com/torchatlas) - -| option | type | -| -------------------- | ---------- | -| sans-serif (inc. ui) | text input | -| serif | text input | -| monospace | text input | -| code | text input | - -![](https://user-images.githubusercontent.com/16874139/97820678-61ed9680-1d03-11eb-8f9f-54c1c5faf25e.png) - -### gameish - -**tags:** #theme #dark - -**description:** a purple, "gamer-styled" theme with a blocky-font. - -**author:** [LVL100ShrekCultist](https://reddit.com/user/LVL100ShrekCultist/) - -![](https://user-images.githubusercontent.com/16874139/97820696-75006680-1d03-11eb-8046-c3cb871ad34c.png) - -### littlepig dark - -**tags:** #theme #dark - -**description:** a purple monospaced theme using emojis and colourful text. - -**author:** [Lizishan](https://www.reddit.com/user/Lizishan/) - -![](https://user-images.githubusercontent.com/16874139/97820718-919c9e80-1d03-11eb-9749-e04faef82e2d.png) - -### littlepig light - -**tags:** #theme #light - -**description:** a bright monospaced theme using emojis and colourful text. - -**author:** [Lizishan](https://www.reddit.com/user/Lizishan/) - -![](https://user-images.githubusercontent.com/16874139/97820868-446cfc80-1d04-11eb-80ba-48cbedd62ed1.png) - -### material ocean - -**tags:** #theme #dark - -**description:** an oceanic colour palette. - -**author:** [blacksuan19](https://github.com/blacksuan19) - -![](https://user-images.githubusercontent.com/16874139/97820253-6d3fc280-1d01-11eb-86d1-9932b364bad8.png) - -### neutral - -**tags:** #theme #dark - -**description:** smoother colours and fonts, designed to be more pleasing to the eye. - -**author:** [arecsu](https://github.com/arecsu/) - -![](https://user-images.githubusercontent.com/16874139/97821029-fad0e180-1d04-11eb-9bad-2c76e9fa7613.png) - -### night shift - -**tags:** #extension #theme - -**description:** sync dark/light theme with the system (overrides normal theme setting). - -**author:** [dragonwocky](https://github.com/dragonwocky/) - -### pastel dark - -**tags:** #theme #dark - -**description:** a true dark theme with a hint of pastel. - -**author:** [zenith_illinois](https://reddit.com/user/zenith_illinois/) - -![](https://user-images.githubusercontent.com/16874139/97820893-60709e00-1d04-11eb-8d52-55ab44000786.png) - -### property layout - -**tags:** #extension - -**description:** auto-collapse page properties that usually push down page content. - -**author:** [alexander-kazakov](https://github.com/alexander-kazakov/) - -![](https://user-images.githubusercontent.com/16874139/97820916-81d18a00-1d04-11eb-8e07-b7519590157a.png) - -### right-to-left - -**tags:** #extension - -**description:** enables auto rtl/ltr text direction detection. - -**author:** [obahareth](https://github.com/obahareth/) - -![](https://user-images.githubusercontent.com/16874139/97820953-a7f72a00-1d04-11eb-98c0-6ad83d097682.png) - -### scroll to top - -**tags:** #extension - -**description:** add an arrow above the help button to scroll back to the top of a page. - -**author:** [CloudHill](https://github.com/CloudHill/) - -| option | type | values/defaults | -| --------------------------------------- | ------------ | --------------- | -| smooth scrolling | toggle | on | -| distance scrolled until button is shown | number input | 50 | -| unit to measure distance with | select | percent, pixels | - -![](https://user-images.githubusercontent.com/16874139/97820445-4c2ba180-1d02-11eb-9d1a-911bca266f7f.png) - -### weekly view - -**tags:** #extension - -**description:** calendar views named "weekly" will show only the 7 days of this week. - -**author:** [adihd](https://github.com/adihd/) - -![](https://user-images.githubusercontent.com/16874139/97820985-bf361780-1d04-11eb-9e2a-786a7c37477d.png) - -### word counter - -**tags:** #extension - -**description:** add page details: word/character/sentence/block count & speaking/reading times. - -**author:** [dragonwocky](https://github.com/dragonwocky/) - -![](https://user-images.githubusercontent.com/16874139/97821003-d37a1480-1d04-11eb-8aaa-9e5dfea495eb.png) - -## contributors - -[@TarasokUA](https://github.com/TarasokUA/) wrote the first versions of this in python, in early 2020. -a couple months after I ([@dragonwocky](https://github.com/dragonwocky/)) picked the project up, at first extending -upon the original base and later moving to the javascript module system. - -the enhancer wouldn't be anything near to what it is now though without -interested community members testing, coding and ideating features - some are listed as -[contributors](https://github.com/notion-enhancer/notion-enhancer/graphs/contributors) here on github, -but many more have been helping out on discord and in emails. - -individual modules have their original authors attributed. +an enhancer/customiser for the all-in-one productivity workspace notion.so diff --git a/UPDATING.md b/UPDATING.md deleted file mode 100644 index 27c2d83..0000000 --- a/UPDATING.md +++ /dev/null @@ -1,55 +0,0 @@ -# updating - -the enhancer is still a young project, so it's growing quickly. this means a lot of stuff is changing internally -\- and, sometimes, externally. - -previously (<= v0.7.0), the enhancer was a python script with a couple of resource files, and if you -wanted to customise things you had to go in and edit those files. in v0.8.0 there has been a complete -rewrite and overhaul: now this is a program that makes use of a number of modules and a graphical menu. - -## installation dependencies - -previously, python and the node.js `asar` package both had to be manually installed. -node.js is the only current requirement of the enhancer. - -- python is no longer a dependency: keep it, get rid of it - up to you. -- the package installs asar itself in a more scoped environment: if you're confident with - the command line, you can remove the package with `npm remove -g asar`. otherwise, it - won't do any damage to just leave it. - -## keeping the files - -enhancement is done fully from the command prompt. -by default, there are no files for you to worry about. - -you can delete the folder the old version of the enhancer is kept in. -(though you may want to keep the `user.css` file: see below.) - -## user.css styling - -when you first load the enhancer, there's no single file you can edit to see instant changes. -instead, the "custom inserts" module is used: you can use it to pick any javascript or css file anywhere -on your computer and include it every time you load up notion. - -to make your own css file, make sure that your file manager has "show file extensions" ticked, then -create a text document and make sure the name ends in `.css` (e.g. `notion-tweaks.css`). or, just use -the old `user.css` from before the update. - -most of the same css snippets will work, but some (e.g. preview page width) have been moved to the new variable -system, plus new ones have been found. it's a good idea to check what you have against the [tweaks](https://github.com/notion-enhancer/tweaks) -page and the [css theming documentation](DOCUMENTATION.md#variable-theming). - -## configuration - -"what happened to the tray options?" - -"how can I set a custom window visibility toggle hotkey?" - -these options and more have been moved to the graphical menu, which can be opened from the -tray or with `ALT+E` (while the notion app is focused). - -## installing - -just follow the normal [installation steps](README.md#installation) (starting from step 2, you should -already have node.js installed). don't worry about running `cleaner.py`, the new version will detect and overwrite -the old for you. diff --git a/bin.js b/bin.js deleted file mode 100755 index 8a228c1..0000000 --- a/bin.js +++ /dev/null @@ -1,126 +0,0 @@ -#!/usr/bin/env node - -'use strict'; - -import os from 'os'; -import { line, cli, files, locations } from './pkg/helpers.js'; -import check from './pkg/check.js'; -import apply from './pkg/apply.js'; -import remove from './pkg/remove.js'; - -const options = cli.options({ - y: 'yes', - n: 'no', - d: 'dev', - h: 'help', - v: 'version', - }), - promptResponse = options.get('yes') - ? 'y' - : options.get('no') - ? 'n' - : undefined; - -function displayHelp() { - const pkg = files.pkgJSON(); - console.info( - cli.help({ - name: pkg.name, - version: pkg.version, - link: pkg.homepage, - commands: [ - ['apply', 'add enhancements to the notion app'], - ['remove', 'return notion to its pre-enhanced/pre-modded state'], - ['check, status', 'check the current state of the notion app'], - ], - options: [ - ['-y, --yes', 'skip prompts'], - ['-n, --no', 'skip prompts'], - ['-d, --dev', 'show detailed error messages (for debug purposes)'], - [ - '--path=', - 'provide a file location to enhance (otherwise auto-picked)', - ], - ['-h, --help', 'display usage information'], - ['-v, --version', 'display version number'], - ], - }) - ); - process.exit(0); -} -if (options.get('help')) displayHelp(); - -function displayVersion() { - const pkg = files.pkgJSON(); - console.info( - `${pkg.name}/${pkg.version} ${ - process.platform - }-${os.arch()}/${os.release()} node/${process.version}` - ); - process.exit(0); -} -if (options.get('version')) displayVersion(); - -function handleError(err) { - if (options.get('dev')) { - console.error( - err.stack - .split('\n') - .map((text, i) => { - text = text.replace(/^ /, ' '); - if (i > 1) return line.chalk.grey(text); - if (i > 0) return text; - const [type, msg] = text.split(/:((.+)|$)/); - return line.chalk.bold.red(`${type}:`) + msg; - }) - .join('\n') - ); - } else - console.error( - line.chalk`{bold.red ERROR:} ${err.message} {grey (run with -d for more information)}` - ); -} - -try { - switch (cli.args()[0]) { - case 'apply': - console.info(line.style.title('[NOTION-ENHANCER] APPLY')); - console.info( - (await apply({ - overwriteOld: promptResponse, - __notion: options.get('path') || locations.notion(), - })) - ? `${line.style.title('SUCCESS')} ${line.chalk.green('✔')}` - : `${line.style.title('CANCELLED')} ${line.chalk.red('✘')}` - ); - break; - case 'remove': - console.info(line.style.title('[NOTION-ENHANCER] REMOVE')); - await remove({ - deleteConfig: promptResponse, - deleteCache: promptResponse, - __notion: options.get('path') || locations.notion(), - }); - console.info(`${line.style.title('SUCCESS')} ${line.chalk.green('✔')}`); - break; - case 'check': - case 'status': - console.info(line.style.title('[NOTION-ENHANCER] CHECK')); - const status = check({ - __notion: options.get('path') || locations.notion(), - }); - line.prev(); - if (options.get('dev')) { - line.forward(24); - console.info(status); - } else { - line.forward(23); - line.write(': ' + status.msg + '\r\n'); - } - break; - default: - displayHelp(); - } -} catch (err) { - handleError(err); -} diff --git a/bin.mjs b/bin.mjs new file mode 100644 index 0000000..fab6e91 --- /dev/null +++ b/bin.mjs @@ -0,0 +1,142 @@ +#!/usr/bin/env node + +/* + * notion-enhancer + * (c) 2021 dragonwocky (https://dragonwocky.me/) + * (https://notion-enhancer.github.io/) under the MIT license + */ + +'use strict'; + +import os from 'os'; + +import { pkg, findNotion } from './pkg/helpers.mjs'; +import { line, options, log, help, args, lastSpinner } from './pkg/cli.mjs'; + +import apply from './pkg/apply.mjs'; +import remove from './pkg/remove.mjs'; +import check from './pkg/check.mjs'; + +const manifest = pkg(), + opts = options({ + y: 'yes', + n: 'no', + d: 'dev', + h: 'help', + v: 'version', + }), + promptRes = opts.get('yes') ? 'y' : opts.get('no') ? 'n' : undefined; + +const displayHelp = () => { + help({ + name: manifest.name, + version: manifest.version, + link: manifest.homepage, + commands: [ + ['apply', 'add enhancements to the notion app'], + ['remove', 'return notion to its pre-enhanced/pre-modded state'], + ['check, status', 'check the current state of the notion app'], + ], + options: [ + ['-y, --yes', 'skip prompts'], + ['-n, --no', 'skip prompts'], + ['-d, --dev', 'show detailed error messages (for debug purposes)'], + [ + '--path=', + 'provide a file location to enhance (otherwise auto-picked)', + ], + ['--no-backup', 'skip backup (faster enhancement, but disables removal)'], + ['-h, --help', 'display usage information'], + ['-v, --version', 'display version number'], + ], + }); +}; +if (opts.get('help')) { + displayHelp(); + process.exit(0); +} + +if (opts.get('version')) { + log( + `${manifest.name}/${manifest.version} ${ + process.platform + }-${os.arch()}/${os.release()} node/${process.version}` + ); + process.exit(0); +} + +function handleError(err) { + if (opts.get('dev')) { + const strs = [], + tags = [], + stack = err.stack.split('\n'); + for (let i = 0; i < stack.length; i++) { + const text = stack[i].replace(/^ /, ' '); + if (i > 1) { + strs.push('{grey '); + tags.push(text); + strs.push('}'); + tags.push(''); + } else if (i > 0) { + strs.push(''); + tags.push(text); + } else { + const [type, msg] = text.split(/:((.+)|$)/); + strs.push('{bold.red '); + tags.push(type); + strs.push(':} '); + tags.push(msg); + } + strs.push(i !== stack.length - 1 ? '\n' : ''); + } + log(strs, ...tags); + } else { + log`{bold.red Error:} ${err.message} {grey (run with -d for more information)}`; + } +} + +try { + const notionPath = opts.get('path') || findNotion(); + + switch (args()[0]) { + case 'apply': { + log`{bold.rgb(245,245,245) [NOTION-ENHANCER] APPLY}`; + const res = await apply(notionPath, { + overwritePrevious: promptRes, + takeBackup: opts.get('no-backup') ? false : true, + }); + if (res) { + log`{bold.rgb(245,245,245) SUCCESS} {green ✔}`; + } else log`{bold.rgb(245,245,245) CANCELLED} {red ✘}`; + break; + } + case 'remove': { + log`{bold.rgb(245,245,245) [NOTION-ENHANCER] REMOVE}`; + const res = await remove(notionPath, { delCache: promptRes }); + if (res) { + log`{bold.rgb(245,245,245) SUCCESS} {green ✔}`; + } else log`{bold.rgb(245,245,245) CANCELLED} {red ✘}`; + break; + } + case 'check': + case 'status': { + log`{bold.rgb(245,245,245) [NOTION-ENHANCER] CHECK}`; + const status = check(notionPath); + line.prev(); + if (opts.get('dev')) { + line.forward(24); + console.log(status); + } else { + line.forward(23); + line.write(': ' + status.message + '\r\n'); + } + break; + } + default: + displayHelp(); + } +} catch (err) { + if (lastSpinner) lastSpinner.stop(); + handleError(err); + process.exit(1); +} diff --git a/insert/core/mod.js b/insert/core/mod.js deleted file mode 100644 index 85e242d..0000000 --- a/insert/core/mod.js +++ /dev/null @@ -1,105 +0,0 @@ -/* - * notion-enhancer - * (c) 2020 dragonwocky (https://dragonwocky.me/) - * (https://dragonwocky.me/notion-enhancer) under the MIT license - */ - -'use strict'; - -module.exports = { - forced: true, - hidden: true, - id: '30a382b0-42e1-4a00-8c9d-7b2d9886a09a', - name: 'notion-enhancer core', - version: require('../package.json').version, - authors: [ - { - name: 'dragonwocky', - link: 'https://dragonwocky.me/', - avatar: 'https://dragonwocky.me/avatar.jpg', - }, - ], - options: [ - { - key: 'menu.autoresolve', - label: '**menu:** auto-resolve theme conflicts', - desc: - 'enabling a theme will disable any other themes of the same mode (light/dark).', - 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: 'hotkey', - label: '**hotkey:** toggle all windows', - desc: 'used to hide/show all app windows.', - type: 'input', - value: 'CommandOrControl+Shift+A', - }, - { - key: 'menu_toggle', - label: '**hotkey:** toggle enhancements menu', - desc: 'used to open/close the menu while notion is focused.', - type: 'input', - value: 'Alt+E', - }, - ], - hacks: { - 'renderer/preload.js': ( - __exports, - store, - { web: { whenReady, loadStyleset } } - ) => { - whenReady(() => { - // document.defaultView.addEventListener('keyup', (event) => { - // // additional hotkeys - // if (event.key === 'F5') location.reload(); - // // open menu on hotkey toggle - // if (store().get().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'); - // } - // }); - }); - }, - }, -}; diff --git a/insert/helpers.js b/insert/helpers.js deleted file mode 100644 index dd71f87..0000000 --- a/insert/helpers.js +++ /dev/null @@ -1,158 +0,0 @@ -/* - * notion-enhancer - * (c) 2020 dragonwocky (https://dragonwocky.me/) - * (https://dragonwocky.me/notion-enhancer) under the MIT license - */ - -const os = require('os'), - path = require('path'), - fs = require('fs-extra'), - store = require('./store.js'), - helperCache = {}; - -const enhancements = {}; -enhancements.validate = (mod, others = []) => { - if (!mod.tags) mod.tags = []; - if (!mod.options) mod.options = []; - if ( - [ - typeof mod.id === 'string', - !others.find((m) => m.id === mod.id), - typeof mod.name === 'string', - mod.desc ? typeof mod.desc === 'string' : true, - typeof mod.version === 'string', - Array.isArray(mod.authors), - mod.authors.every( - (author) => - typeof author === 'string' || - (typeof author.name === 'string' && - typeof author.link === 'string' && - typeof author.avatar === 'string') - ), - Array.isArray(mod.tags), - mod.tags.every((tag) => typeof tag === 'string'), - Array.isArray(mod.options), - mod.options.every((opt) => - ['toggle', 'select', 'input', 'file', 'color'].includes(opt.type) - ), - ].every((rule) => rule) - ) - return true; - return false; -}; -enhancements.defaults = (options) => { - const defaults = {}; - for (let opt of options) - defaults[opt.key] = Object.keys(opt.platformOverwrite || {}).some( - (platform) => process.platform === platform - ) - ? opt.platformOverwrite[process.platform] - : Array.isArray(opt.value) - ? opt.value[0] - : opt.value; - return defaults; -}; -enhancements.list = () => { - if (helperCache.enhancements) return helperCache.enhancements; - const get = (repository) => { - if (!fs.existsSync(repository)) return []; - const modules = []; - for (let dir of fs - .readdirSync(repository) - .filter( - (dir) => - !dir.startsWith('.') && - fs.lstatSync(path.join(repository, dir)).isDirectory() - )) { - try { - const mod = require(path.resolve(`${repository}/${dir}/mod.js`)); - if (!enhancements.validate(mod, modules)) throw Error; - mod.defaults = enhancements.defaults(mod.options); - modules.push({ - ...mod, - error: false, - source: path.resolve(`${repository}/${dir}`), - }); - } catch (err) { - modules.push({ error: true, name: dir }); - } - } - return modules.sort((a, b) => a.name.localeCompare(b.name)); - }; - const order = store('mods', '', { order: [] }).get('order'), - modCache = get(`${os.homedir()}/.notion-enhancer/cache`).map((m) => { - m.forced = false; - m.hidden = false; - return m; - }); - helperCache.enhancements = { - core: get(__dirname), - cache: [ - ...modCache.filter((m) => !order.includes(m.id)), - ...order.map((id) => modCache.find((m) => m.id === id)).filter((m) => m), - ], - }; - return helperCache.enhancements; -}; -enhancements.get = (id) => { - const all = [...enhancements.list().core, ...enhancements.list().cache]; - return all.find((m) => m.id === id); -}; -enhancements.styles = (id) => { - if (!helperCache.styles) helperCache.styles = {}; - if (helperCache.styles[id]) return helperCache.styles[id]; - const mod = enhancements.get(id); - helperCache.styles[id] = {}; - if (mod && !mod.error) - for (let sheet of ['global', 'app', 'tabs', 'menu']) - if (fs.pathExistsSync(path.resolve(`${mod.source}/${sheet}.css`))) - helperCache.styles[id][sheet] = `${mod.source}/${sheet}.css`; - return helperCache.styles[id]; -}; -enhancements.enabled = (id) => { - const mod = enhancements.get(id); - if (!mod || mod.error) return false; - return mod.forced || store('mods', 'enabled', { [id]: false }).get(id); -}; - -const web = {}; -web.whenReady = (func = () => {}) => { - return new Promise((res, rej) => { - if (document.readyState !== 'complete') { - document.addEventListener('readystatechange', (event) => { - if (document.readyState === 'complete') { - func(); - res(true); - } - }); - } else { - func(); - res(true); - } - }); -}; -web.createElement = (html) => { - const template = document.createElement('template'); - template.innerHTML = html.trim(); - return template.content.firstElementChild; -}; -web.loadStyleset = (sheet) => { - for (let mod of [ - ...enhancements.list().core, - ...enhancements.list().cache.reverse(), - ]) - if (enhancements.enabled(mod.id)) - if (enhancements.styles(mod.id)[sheet]) - document.head.appendChild( - web.createElement( - `` - ) - ); - return true; -}; - -function notionRequire(path) { - return require(`../../${path}`); -} - -module.exports = { enhancements, web, notionRequire }; diff --git a/insert/init.js b/insert/init.js new file mode 100644 index 0000000..1cd0040 --- /dev/null +++ b/insert/init.js @@ -0,0 +1,11 @@ +/* + * notion-enhancer + * (c) 2020 dragonwocky (https://dragonwocky.me/) + * (https://dragonwocky.me/notion-enhancer) under the MIT license + */ + +'use strict'; + +module.exports = function (target, __exports) { + console.log(target); +}; diff --git a/insert/loader.js b/insert/loader.js deleted file mode 100644 index 49d08a4..0000000 --- a/insert/loader.js +++ /dev/null @@ -1,23 +0,0 @@ -/* - * notion-enhancer - * (c) 2020 dragonwocky (https://dragonwocky.me/) - * (https://dragonwocky.me/notion-enhancer) under the MIT license - */ - -'use strict'; - -const helpers = require('./helpers.js'), - store = require('./store.js'); - -module.exports = function (target, __exports) { - for (let mod of [ - ...helpers.enhancements.list().core, - ...helpers.enhancements.list().cache.reverse(), - ]) - if (helpers.enhancements.enabled(mod.id) && mod.hacks && mod.hacks[target]) - mod.hacks[target]( - __exports, - (defaults = {}) => store('config', mod.id, defaults), - { ...helpers, directStore: store } - ); -}; diff --git a/insert/store.js b/insert/store.js index 33c757b..62ee100 100644 --- a/insert/store.js +++ b/insert/store.js @@ -41,3 +41,7 @@ module.exports = (file, namespace = '', defaults = {}) => { }, }; }; + +function notionRequire(path) { + return require(`../../${path}`); +} diff --git a/insert/theming/app.css b/insert/theming/app.css deleted file mode 100644 index 25b3617..0000000 --- a/insert/theming/app.css +++ /dev/null @@ -1,2017 +0,0 @@ -/* - * notion-enhancer - * (c) 2020 dragonwocky (https://dragonwocky.me/) - * (c) 2020 TarasokUA - * (c) 2020 Arecsu - * (c) 2020 u/zenith_illinois - * (c) 2020 admiraldus (https://github.com/admiraldus) - * (c) 2020 CloudHill - * (https://dragonwocky.me/notion-enhancer) under the MIT license - */ - -/** layout ui **/ - -.notion-frame - .notion-scroller - [style*='env(safe-area-inset-'][style*=' width: 900px'], -.notion-frame - .notion-scroller - [style*='env(safe-area-inset-'][style*=';width: 900px'], -.notion-frame - .notion-scroller - [style*='height: 30vh'] - [style*='pointer-events:'][style*='max-width: 100%; width: 900px'] { - width: var(--theme--page-width) !important; -} -.notion-frame - .notion-scroller - [style*='env(safe-area-inset-'][style*=' width: 100%'], -.notion-frame - .notion-scroller - [style*='height: 30vh'] - [style*='pointer-events:'][style*='max-width: 100%; width: 100%'] { - width: var(--theme--page_full-width) !important; -} -.notion-frame - [style*='padding-left: calc(96px + env(safe-area-inset-left)); padding-right: calc(96px + env(safe-area-inset-right));'] { - padding-left: var(--theme--page-padding) !important; - padding-right: var(--theme--page-padding) !important; -} -[style^='position: relative; width: 100%; display: flex; flex-direction: column; align-items: center; height: 30vh;'], -[style^='position: relative; width: 100%; display: flex; flex-direction: column; align-items: center; height: 30vh;'] - img { - height: var(--theme--page_banner-height) !important; -} - -.notion-peek-renderer > :nth-child(2) { - max-width: var(--theme--preview-width) !important; -} - -.notion-peek-renderer - .notion-scroller.vertical - [style*='padding-left: calc(126px + env(safe-area-inset-left));'] { - padding-left: var(--theme--preview-padding) !important; -} -.notion-peek-renderer - .notion-scroller.vertical - [style*='padding-right: calc(126px + env(safe-area-inset-right));'] { - padding-right: var(--theme--preview-padding) !important; -} -.notion-peek-renderer - .notion-scroller.vertical - [style*='margin-left: calc(126px + env(safe-area-inset-left));'] { - margin-left: var(--theme--preview-padding) !important; -} -.notion-peek-renderer - .notion-scroller.vertical - [style*='margin-right: calc(126px + env(safe-area-inset-right));'] { - margin-right: var(--theme--preview-padding) !important; -} -.notion-peek-renderer .notion-page-content { - padding-left: var(--theme--preview-padding) !important; - padding-right: var(--theme--preview-padding) !important; - width: 100%; -} -.notion-peek-renderer - .notion-scroller.vertical - [style*='position: relative; width: 100%; display: flex; flex-direction: column; align-items: center; height: 20vh;'], -.notion-peek-renderer - .notion-scroller.vertical - [style*='position: relative; width: 100%; display: flex; flex-direction: column; align-items: center; height: 20vh;'] - img { - height: var(--theme--preview_banner-height) !important; -} - -.notion-app-inner, -.notion-cursor-listener, -.notion-frame, -.notion-cursor-listener - > .notion-frame - > .notion-scroller.vertical.horizontal - > .notion-scroller - > div - > div - > :nth-child(1)[style*='background'], -.notion-cursor-listener - > .notion-frame - > .notion-scroller.vertical.horizontal - > .notion-scroller - > div - > div - > .notion-table-view-add-row, -.notion-cursor-listener - > .notion-frame - > .notion-scroller.vertical.horizontal - > .notion-scroller - > div - > div - > :nth-child(5)[style*='background'], -.notion-overlay-container.notion-default-overlay-container - > :nth-child(2) - > div - > :nth-child(2) - > :nth-child(1) - > .notion-scroller.vertical.horizontal, -iframe[style*='background-color'], -.notion-table-view > .notion-collection_view-block > div[style*='background'], -.notion-board-view > .notion-collection_view-block > div[style*='background'], -.notion-timeline-view - > .notion-collection_view-block - > div[style*='background'], -.notion-calendar-view - > .notion-collection_view-block - > div[style*='background']:first-child, -.notion-list-view > .notion-collection_view-block > div[style*='background'], -.notion-gallery-view > .notion-collection_view-block > div[style*='background'], -.notion-timeline-view, -.notion-body.dark .notion-timeline-view [style*='background: rgb(47, 52, 55)'], -.notion-body:not(.dark) .notion-timeline-view [style*='background: white'], -.notion-body.dark - .notion-calendar-view - .notion-collection_view_page-block[style*='background: rgb(47, 52, 55)'], -.notion-body:not(.dark) - .notion-calendar-view - .notion-collection_view_page-block[style*='background: white'], -.notion-body.dark - .notion-calendar-view - .notion-collection_view-block[style*='background: rgb(47, 52, 55)'], -.notion-body:not(.dark) - .notion-calendar-view - .notion-collection_view-block[style*='background: white'], -.notion-body.dark - .notion-overlay-container.notion-default-overlay-container - > :nth-child(3) - > div - > :nth-child(2)[style*='background: rgb(47, 52, 55)'], -.notion-body:not(.dark) - .notion-overlay-container.notion-default-overlay-container - > :nth-child(3) - > div - > :nth-child(2)[style*='background: white'], -.notion-overlay-container.notion-default-overlay-container - > :nth-child(2) - > div - > :nth-child(2) - > div - > :nth-child(2) - > div[style*='background-color'] { - background: var(--theme--page) !important; -} -.notion-timeline-view - [style*='background-image: linear-gradient'][style*='to right'] { - background: linear-gradient( - to right, - var(--theme--page) 20%, - transparent 100% - ) !important; -} -.notion-timeline-view - [style*='background-image: linear-gradient'][style*='to left'] { - background: linear-gradient( - to left, - var(--theme--page) 20%, - transparent 100% - ) !important; -} - -.notion-sidebar-container, -.notion-workspace-plan-choose, -.notion-workspace-create, -.notion-workspace-invite, -.notion-body.dark - .notion-overlay-container.notion-default-overlay-container - > :nth-child(2) - > div - > :nth-child(2) - > div - > :nth-child(2) - > div - > div - > :nth-child(2) - > table - td[style*='background: rgb(55, 60, 63)'], -.notion-body:not(.dark) - .notion-overlay-container.notion-default-overlay-container - > :nth-child(2) - > div - > :nth-child(2) - > div - > :nth-child(2) - > div - > div - > :nth-child(2) - > table - td[style*='background: rgb(247, 246, 243)'], -.notion-body.dark - .notion-overlay-container.notion-default-overlay-container - > :nth-child(2) - > div - > :nth-child(2) - > div - > :nth-child(1)[style*='background: rgb(55, 60, 63)'], -.notion-body:not(.dark) - .notion-overlay-container.notion-default-overlay-container - > :nth-child(2) - > div - > :nth-child(2) - > div - > :nth-child(1)[style*='background: rgb(247, 246, 243)'], -.notion-page-template-modal > :nth-child(2), -.notion-page-template-modal - > :nth-child(2) - > :nth-child(2) - > :last-child[role='button'] { - background: var(--theme--sidebar) !important; -} -.notion-cursor-listener - > .notion-sidebar-container - > div - > div - > div - > :nth-child(1)[style*='background'] { - background: var(--theme--sidebar_popout) !important; -} - -.notion-overlay-container.notion-default-overlay-container - > :nth-child(2) - > div - > :nth-child(2)[style*='background'], -.notion-overlay-container.notion-default-overlay-container - > :nth-child(2) - > div - > :nth-child(2) - > :nth-child(1) - > :nth-child(1) - > :nth-child(3)[style*='background'], -.notion-overlay-container.notion-default-overlay-container - > :nth-child(2) - > div - > :nth-child(2) - > :nth-child(1) - > :nth-child(1) - > :nth-child(4), -.notion-peek-renderer - .notion-table-view - > .notion-collection_view-block - > div[style*='background'], -.notion-peek-renderer - .notion-board-view - > .notion-collection_view-block - > div[style*='background'], -.notion-peek-renderer - .notion-timeline-view - > .notion-collection_view-block - > div[style*='background'], -.notion-peek-renderer - .notion-calendar-view - > .notion-collection_view-block - > div[style*='background']:first-child, -.notion-peek-renderer - .notion-list-view - > .notion-collection_view-block - > div[style*='background'], -.notion-peek-renderer - .notion-gallery-view - > .notion-collection_view-block - > div[style*='background'], -.notion-peek-renderer .notion-timeline-view, -.notion-body.dark - .notion-peek-renderer - .notion-timeline-view - [style*='background: rgb(47, 52, 55)'], -.notion-body:not(.dark) - .notion-peek-renderer - .notion-timeline-view - [style*='background: white'], -.notion-body.dark - .notion-peek-renderer - .notion-calendar-view - .notion-collection_view_page-block[style*='background: rgb(47, 52, 55)'], -.notion-body:not(.dark) - .notion-peek-renderer - .notion-calendar-view - .notion-collection_view_page-block[style*='background: white'], -.notion-body.dark - .notion-peek-renderer - .notion-calendar-view - .notion-collection_view-block[style*='background: rgb(47, 52, 55)'], -.notion-body:not(.dark) - .notion-peek-renderer - .notion-calendar-view - .notion-collection_view-block[style*='background: white'] { - background: var(--theme--preview) !important; -} -.notion-peek-renderer { - background: var(--theme--preview_shadow) !important; -} -.notion-peek-renderer - .notion-timeline-view - [style*='background-image: linear-gradient'][style*='to right'] { - background: linear-gradient( - to right, - var(--theme--preview) 20%, - transparent 100% - ) !important; -} -.notion-peek-renderer - .notion-timeline-view - [style*='background-image: linear-gradient'][style*='to left'] { - background: linear-gradient( - to left, - var(--theme--preview) 20%, - transparent 100% - ) !important; -} - -.notion-overlay-container.notion-default-overlay-container - > :nth-child(2) - > div - > :nth-child(1)[style*='background'] { - background: var(--theme--quickfind_shadow) !important; -} - -.notion-overlay-container.notion-default-overlay-container - > div - > div - > :nth-child(2) - > div[style*='background'], -.notion-overlay-container.notion-default-overlay-container - > div - > div - > :nth-child(2) - > :nth-child(2) - > div - > div - > div[style*='background']:not([style*='font-size: 12px;']), -.notion-overlay-container.notion-default-overlay-container - > div - > div - > :nth-child(2) - > :nth-child(2) - > div - > div - > div - > div - > footer - > div[style*='background'], -.notion-overlay-container.notion-default-overlay-container - > div - > div - > div - > :nth-child(2) - > div - > div - > div[style*='background']:not([style*='font-size: 12px;']):not([style*='background: transparent']), -.notion-overlay-container.notion-default-overlay-container - > :nth-child(2) - > div - > div - > :nth-child(2) - > div - > div - > div - > div - > footer - > div, -#notion-app - > div - > :nth-child(3) - > :nth-child(2) - > div - > :nth-child(2) - > :nth-child(2) - > div - > div - > div, -#notion-app - > div - > .notion-overlay-container.notion-default-overlay-container - > :nth-child(4) - > div - > :nth-child(2)[style*='background'], -.notion-onboarding-popup { - background: var(--theme--popout) !important; -} - -.notion-body.dark - [style*='box-shadow: rgba(15, 15, 15, 0.2) 0px 0px 0px 1px inset, rgba(15, 15, 15, 0.1) 0px 1px 2px;'], -.notion-body:not(.dark) - [style*='box-shadow: rgba(15, 15, 15, 0.1) 0px 0px 0px 1px inset, rgba(15, 15, 15, 0.1) 0px 1px 2px;'] { - box-shadow: var(--theme--shadow) 0px 0px 0px 1px inset, - var(--theme--shadow) 0px 1px 2px !important; -} - -.notion-dark-theme .notion-workspace-plan-choose img[src='/tutorial/ada-1.png'], -.notion-dark-theme .notion-workspace-create img[src='/tutorial/ada-1.png'], -.notion-dark-theme .notion-workspace-invite img[src='/tutorial/ada-1.png'] { - filter: drop-shadow(1px 1px #fff) drop-shadow(-1px -1px #fff) - drop-shadow(-1px 1px #fff) drop-shadow(1px -1px #fff); -} -.notion-body.dark - [style^='position: absolute;'][style*='z-index: 999; background-color: rgba(55, 60, 63, 0.8);']:empty, -.notion-body.dark - [style^='position: absolute;'][style*='z-index: 999; background-color: rgba(47, 52, 55, 0.8);']:empty, -.notion-body:not(.dark) - [style^='position: absolute;'][style*='z-index: 999; background-color: rgba(247, 246, 243, 0.8);']:empty, -.notion-body:not(.dark) - [style^='position: absolute;'][style*='z-index: 999; background-color: rgba(255, 255, 255, 0.8);']:empty { - background: var(--theme--introduction_overlay) !important; -} - -/* accent */ - -.notion-onboarding-plan-type-personal[style*='box-shadow: rgb(46, 170, 220) 0px 0px 0px 2px, rgba(182, 182, 182, 0.25) 0px 8px 12px'], -.notion-onboarding-plan-type-team[style*='box-shadow: rgb(46, 170, 220) 0px 0px 0px 2px, rgba(182, 182, 182, 0.25) 0px 8px 12px'] { - box-shadow: var(--theme--accent) 0px 0px 0px 2px, - rgba(182, 182, 182, 0.25) 0px 8px 12px !important; -} - -::selection, -.notion-selectable-halo, -.notion-overlay-container.notion-default-overlay-container - > :nth-child(4) - > div[style*='background-color: rgba(46, 170, 220, 0.2)'] { - background: var(--theme--selected) !important; -} - -[style*=' color: rgb(46, 170, 220)'], -[style^='color: rgb(46, 170, 220)'] { - color: var(--theme--accent) !important; -} -[style*='fill: rgb(46, 170, 220)'] { - fill: var(--theme--accent) !important; -} -[style*='background: rgb(46, 170, 220)'], -[style*='background-color: rgb(46, 170, 220)'] { - background: var(--theme--accent) !important; -} -[style*='box-shadow: rgb(46, 170, 220) 0px 0px 0px 2px inset'] { - box-shadow: var(--theme--accent) 0px 0px 0px 2px inset !important; -} -.notion-focusable:focus-within { - box-shadow: var(--theme--accent) 0px 0px 0px 1px inset, - var(--theme--accent) 0px 0px 0px 2px !important; -} -[style*='background: rgb(46, 170, 220)'][style*='color: white'], -[style*='background-color: rgb(46, 170, 220)'][style*='color: white'], -[style*='background: rgb(6, 156, 205)'][style*='color: white'], -[style*='background: rgb(0, 141, 190)'][style*='color: white'] { - color: var(--theme--accent-text) !important; -} -[style*='background: rgb(46, 170, 220)'] [style*='fill: white'], -[style*='background-color: rgb(46, 170, 220)'] [style*='fill: white'], -[style*='background: rgb(6, 156, 205)'] [style*='fill: white'], -[style*='background: rgb(0, 141, 190)'] [style*='fill: white'] { - fill: var(--theme--accent-text) !important; -} -[style*='background: rgba(46, 170, 220, 0.15)'] { - background: var(--theme--accent_semitransparent) !important; -} -[style*='background: rgb(6, 156, 205)'] { - background: var(--theme--accent_button-hover) !important; -} -[style*='background: rgb(0, 141, 190)'] { - background: var(--theme--accent_button-active) !important; -} -.DayPicker:not(.DayPicker--interactionDisabled) .DayPicker-Day--outside:hover, -#notion-app - .DayPicker:not(.DayPicker--interactionDisabled) - .DayPicker-Day:not(.DayPicker-Day--disabled):not(.DayPicker-Day--selected):not(.DayPicker-Day--value):not(.DayPicker-Day--start):not(.DayPicker-Day--end):hover { - background: var(--theme--accent_date-hover) !important; -} - -.notion-body .notion-link:hover { - color: var(--theme--notion_ui_link-hover) !important; -} -.notion-workspace-plan-choose img[src='/images/onboarding/checked.svg'] { - filter: hue-rotate(var(--theme--notion_plan_choose_checkmark_hue-rotate)); -} - -/* databases */ - -.notion-timeline-view .notion-timeline-item, -.notion-board-view .notion-page-block.notion-collection-item > a, -.notion-gallery-view .notion-page-block.notion-collection-item > a, -.notion-calendar-view .notion-page-block.notion-collection-item > a { - background: var(--theme--db_card) !important; -} -.notion-page-block.notion-collection-item > a > [role='button']:hover { - background: var(--theme--db_card-hover) !important; -} -.notion-body.dark - .notion-page-block.notion-collection-item - [style*='background: rgba(255, 255, 255, 0.05)'], -.notion-body:not(.dark) - .notion-page-block.notion-collection-item - [style*='background: rgba(55, 53, 47, 0.024)'] { - background: var(--theme--db_card_preview) !important; -} -.notion-timeline-view > :nth-child(1) > div[style*='background'], -.notion-timeline-view - > :nth-child(3) - > :nth-child(2) - div[style*='background']:not([style*='background: rgb(211, 79, 67)']), -.notion-body.dark - .notion-calendar-view - .notion-collection_view_page-block[style*='background: rgb(55, 60, 63)'], -.notion-body:not(.dark) - .notion-calendar-view - .notion-collection_view_page-block[style*='background: rgb(247, 246, 243)'], -.notion-body.dark - .notion-calendar-view - .notion-collection_view-block[style*='background: rgb(55, 60, 63)'], -.notion-body:not(.dark) - .notion-calendar-view - .notion-collection_view-block[style*='background: rgb(247, 246, 243)'] { - background: var(--theme--db_weekend) !important; -} -.notion-calendar-view-day[style*='background: rgb(235, 87, 87)'], -.DayPicker-Day--today:not(.DayPicker-Day--selected):not(.DayPicker-Day--value):not(.DayPicker-Day--start):not(.DayPicker-Day--end)::after, -.notion-timeline-view [style*='background: rgb(211, 79, 67)'] { - background: var(--theme--db_today) !important; - color: var(--theme--db_today-text) !important; -} -.DayPicker-Day--today:not(.DayPicker-Day--selected):not(.DayPicker-Day--value):not(.DayPicker-Day--start):not(.DayPicker-Day--end) { - color: var(--theme--db_today-text) !important; -} -.notion-timeline-view > :nth-child(1) > div[style*='border-right'] { - border-right: 1px solid var(--theme--timeline_divider_thin) !important; -} -.notion-timeline-view .collectionTimelineArrowLeft, -.notion-timeline-view .collectionTimelineArrowRight { - fill: var(--theme--timeline_arrow) !important; -} -.notion-timeline-view - > :nth-child(2) - > :not(.notion-timeline-item-row) - > div - > div { - background: var(--theme--timeline_arrow_box) !important; - border: 1px solid var(--theme--timeline_arrow) !important; -} -.notion-body.dark - .notion-timeline-view - > :nth-child(2) - > :not(.notion-timeline-item-row) - > div - > div[style*='background: rgb(202, 204, 206)'], -.notion-body:not(.dark) - .notion-timeline-view - > :nth-child(2) - > :not(.notion-timeline-item-row) - > div - > div[style*='background: rgba(55, 53, 47, 0.8)'] { - background: var(--theme--timeline_arrow_box-hover) !important; -} - -/* interactive + block ui */ - -.notion-to_do-block .checkboxSquare { - background: var(--theme--checkbox) !important; -} -.notion-to_do-block .checkboxSquare path { - fill: var(--theme--checkbox-text) !important; -} -.notion-to_do-block [role='button']:hover, -.notion-to_do-block [role='button']:hover .checkboxSquare, -.notion-to_do-block [role='button']:hover .check { - background: var(--theme--checkbox-hover) !important; -} -.notion-to_do-block [role='button']:hover .checkboxSquare path, -.notion-to_do-block [role='button']:hover .check polygon { - fill: var(--theme--checkbox-hover-text) !important; -} -.notion-to_do-block [role='button']:not(:hover) .check { - background: var(--theme--checkbox-active) !important; -} -.notion-to_do-block [role='button']:not(:hover) .check polygon { - fill: var(--theme--checkbox-active-text) !important; -} - -[role='button'] - > [style*='height: 14px; width: 26px;'][style*='background: rgb(46, 170, 220)'] { - background: var(--theme--toggle_on) !important; -} -[role='button'] - > [style*='height: 14px; width: 26px;']:not([style*='background: rgb(46, 170, 220)']) { - background: var(--theme--toggle_off) !important; -} -[role='button'] - > [style*='height: 14px; width: 26px;'] - > [style*='background: white'] { - background: var(--theme--toggle_dot) !important; -} - -.notion-focusable, -.notion-overlay-container.notion-default-overlay-container - > :nth-child(2) - > div - > :nth-child(2) - > :nth-child(2) - > div - > div - > div - > div - > div - > div - > :nth-child(2)[style*='background:'], -.notion-overlay-container.notion-default-overlay-container - > div - > div - > :nth-child(2) - > :nth-child(2) - > div - > div - > div - > div - > div - > :nth-child(1) - > :nth-child(1) - > [style*='border-radius: 3px; height: 28px;']:not([style*='background: rgba(46, 170, 220, 0.15)']), -.notion-workspace-invite - [style*='display: flex; flex-wrap: wrap; align-items: flex-start; width: 100%; min-height: 34px;'][style*='height: 100px;'], -.notion-body.dark - [style*='box-shadow: rgba(15, 15, 15, 0.2) 0px 0px 0px 1px inset'][style*='cursor: text;'], -.notion-body:not(.dark) - [style*='box-shadow: rgba(15, 15, 15, 0.1) 0px 0px 0px 1px inset'][style*='cursor: text;'] { - background: var(--theme--input) !important; -} -.notion-body.dark - [style*='box-shadow: rgba(15, 15, 15, 0.2) 0px 0px 0px 1px inset'], -.notion-body:not(.dark) - [style*='box-shadow: rgba(15, 15, 15, 0.1) 0px 0px 0px 1px inset'] { - box-shadow: var(--theme--input-border) 0px 0px 0px 1px inset !important; -} -.notion-overlay-container.notion-default-overlay-container - > :nth-child(2) - > div - > :nth-child(2) - > :nth-child(2) - > div - > div - > div - > div - > div - > div - > :nth-child(2):hover:not([style*='background: rgba(46, 170, 220, 0.15)']):not([placeholder='Untitled']) { - background: var(--theme--input-hover) !important; -} -[style*='[boolean-start] 60px [boolean-end property-start] 120px [property-end opererator-start] 110px [operator-end value-start] auto [value-end menu-start] 32px [menu-end]'] - [role='button'][style*='background:'], -.notion-overlay-container.notion-default-overlay-container - > :nth-child(2) - > div - > :nth-child(2) - > :nth-child(2) - > div - > div - > div - > div - > .notion-scroller.vertical - [style*='display: inline-flex;'][style*='margin-right: 8px; max-width: 180px;'][role='button'] { - background: var(--theme--filter) !important; -} -[style*='[boolean-start] 60px [boolean-end property-start] 120px [property-end opererator-start] 110px [operator-end value-start] auto [value-end menu-start] 32px [menu-end]'] - [style*='grid-column: property-start / value-end;'] { - background: var(--theme--sub_filter) !important; - box-shadow: var(--theme--divider) 0px 0px 0px 1px !important; -} -.notion-overlay-container.notion-default-overlay-container - > :nth-child(2) - > div - > :nth-child(2) - > :nth-child(2) - > div - > div - > div - > div - > :nth-child(1) - > div[style*='min-height: 34px;'], -.notion-overlay-container.notion-default-overlay-container - > :nth-child(4) - > div - > :nth-child(2) - > :nth-child(2) - > div - > div - > div - > div - > :nth-child(1) - > div[style*='min-height: 34px;'] { - background: var(--theme--tag_select) !important; -} - -.notion-image-block [style*='background: rgba(0, 0, 0, 0.6);'], -.notion-bookmark-block [style*='background: rgba(0, 0, 0, 0.6);'] { - background: var(--theme--button_semitransparent) !important; -} - -.notion-body.dark - [role='button'][style*='background: rgb(71, 76, 80)']:not([style*='min-height: 40px']), -.notion-body:not(.dark) - [role='button'][style*='background: rgba(55, 53, 47, 0.08)'], -.notion-body.dark - .notion-overlay-container.notion-default-overlay-container - > :nth-child(2) - > div - > :nth-child(2) - > div - > :nth-child(2) - > div - > div - > :nth-child(2) - > table - > tbody - > tr:nth-child(19) - > td:nth-child(1) - > span - > div[style*='background: rgb(71, 76, 80)'], -.notion-body:not(.dark) - .notion-overlay-container.notion-default-overlay-container - > :nth-child(2) - > div - > :nth-child(2) - > div - > :nth-child(2) - > div - > div - > :nth-child(2) - > table - > tbody - > tr:nth-child(19) - > td:nth-child(1) - > span - > div[style*='background: rgba(55, 53, 47, 0.08)'], -.notion-body.dark - .notion-sidebar-container - [role='button'] - > [style*='background: rgb(71, 76, 80)'], -.notion-body:not(.dark) - .notion-sidebar-container - [role='button'] - > [style*='background: rgba(55, 53, 47, 0.08)'] { - background: var(--theme--button-hover) !important; -} -.notion-body.dark [role='button'][style*='background: rgb(63, 68, 71)'], -.notion-body:not(.dark) - [role='button'][style*='background: rgba(55, 53, 47, 0.16)'], -.notion-body.dark - .notion-sidebar-container - [role='button'] - > [style*='background: rgb(63, 68, 71)'], -.notion-body:not(.dark) - .notion-sidebar-container - [role='button'] - > [style*='background: rgba(55, 53, 47, 0.16)'] { - background: var(--theme--button-active) !important; -} - -.notion-text-mention-token[style*='color:#EB5757'] { - color: var(--theme--reminder) !important; -} -.notion-text-mention-token[style*='color:#EB5757'] svg { - fill: var(--theme--reminder) !important; -} - -.notion-body.dark [role='button'][style*='background: rgb(47, 52, 55)'], -.notion-body:not(.dark) - :not([style*='[boolean-start] 60px [boolean-end property-start] 120px [property-end opererator-start] 110px [operator-end value-start] auto [value-end menu-start] 32px [menu-end]']) - > :not([style*='[boolean-start] 60px [boolean-end property-start] 120px [property-end opererator-start] 110px [operator-end value-start] auto [value-end menu-start] 32px [menu-end]']):not(.notion-login) - > [role='button'][style*='background: white']:not(.notion-help-button):not([style*='margin-right: 8px; max-width: 180px;']):not(.notion-onboarding-plan-type-personal):not(.notion-onboarding-plan-type-team), -.notion-cursor-listener - > .notion-frame - > .notion-scroller.vertical.horizontal - > :nth-child(1) - > :nth-child(1) - > :nth-child(3) - > div[style*='background'], -.notion-overlay-container.notion-default-overlay-container - > :nth-child(2) - > div - > :nth-child(2) - > .notion-scroller.vertical - > :nth-child(1) - > :nth-child(1) - > :nth-child(3) - > div, -.notion-selectable.notion-page-block.notion-collection-item - > a - > [role='button'] - > :nth-child(1) - > :nth-child(3) { - background: var(--theme--expand) !important; - color: var(--theme--expand-text) !important; - fill: var(--theme--expand_icon) !important; -} -.notion-body.dark - [role='button'][style*='background: rgb(47, 52, 55)'] - [style*='fill']:not(.plus), -.notion-body:not(.dark) - :not([style*='[boolean-start] 60px [boolean-end property-start] 120px [property-end opererator-start] 110px [operator-end value-start] auto [value-end menu-start] 32px [menu-end]']) - > [role='button'][style*='background: white']:not(.notion-help-button) - [style*='fill']:not(.plus):not(.appleLogo), -.notion-cursor-listener - > .notion-frame - > .notion-scroller.vertical.horizontal - > :nth-child(1) - > :nth-child(1) - > :nth-child(3) - > div[style*='background'] - [style*='fill'], -.notion-overlay-container.notion-default-overlay-container - > :nth-child(2) - > div - > :nth-child(2) - > .notion-scroller.vertical - > :nth-child(1) - > :nth-child(1) - > :nth-child(3) - > div - [style*='fill'], -.notion-selectable.notion-page-block.notion-collection-item - > a - > [role='button'] - > :nth-child(1) - > :nth-child(3) - [style*='fill'] { - color: var(--theme--expand-text) !important; - fill: var(--theme--expand_icon) !important; -} - -.notion-body.dark - [role='button'][style*='background: rgb(98, 102, 104)']:not(.notion-help-button), -.notion-body:not(.dark) - [role='button'][style*='background: rgb(239, 239, 238)']:not(.notion-help-button) { - background: var(--theme--expand-hover) !important; -} -.notion-body.dark - [role='button'][style*='background: rgb(120, 123, 123)']:not(.notion-help-button), -.notion-body:not(.dark) - [role='button'][style*='background: rgb(223, 223, 222)']:not(.notion-help-button) { - background: var(--theme--expand-active) !important; -} - -.notion-collection-item - [role='button'] - > div - > [style*='font-weight: 500; border-bottom: 1px solid'], -.notion-divider-block > div > [style*='border-bottom: 1px solid'] { - border-bottom: 1px solid var(--theme--divider) !important; -} -.notion-collection_view-block - > [style*='height: 44px; z-index: 82; display: flex; width: 100%; border-top: 1px solid'], -.notion-collection_view_page-block - > [style*='height: 44px; z-index: 82; display: flex; width: 100%; border-top: 1px solid'], -.notion-collection_view-block[style*='border-top: 1px solid'], -.notion-collection_view_page-block[style*='border-top: 1px solid'] { - border-top: 1px solid var(--theme--divider) !important; -} -.notion-body.dark - [style*='height: 1px;'][style*='background: rgba(255, 255, 255, 0.07);'], -.notion-body.dark - [style*='width: 4px; height: 100%; background: rgba(255, 255, 255, 0.14);'], -.notion-body:not(.dark) - [style*='height: 1px;'][style*='background: rgba(55, 53, 47, 0.09);'], -.notion-body:not(.dark) - [style*='width: 4px; height: 100%; background: rgba(55, 53, 47, 0.16);'] { - background: var(--theme--divider) !important; -} -.notion-workspace-create - > :nth-child(2) - > :nth-child(2) - > div - > [style*='margin-top: 16px;'] - > [role='button'] { - box-shadow: var(--theme--divider) 0px 0px 0px 1px !important; -} -.notion-table-view > .notion-collection_view-block > :first-child, -.notion-table-view > .notion-collection_view_page-block > :first-child { - box-shadow: var(--theme--divider) -3px 0px 0px, - var(--theme--divider) 0px 1px 0px !important; -} -.notion-calendar-view > .notion-collection_view-block > :first-child, -.notion-calendar-view > .notion-collection_view_page-block > :first-child { - box-shadow: var(--theme--divider) 0px 1px 0px inset !important; -} -.notion-calendar-view > .notion-collection_view-block > :nth-child(3), -.notion-calendar-view > .notion-collection_view_page-block > :nth-child(3) { - box-shadow: var(--theme--divider) -1px 0px 0px !important; -} -.notion-calendar-header-days { - box-shadow: var(--theme--divider) 0px 1px 0px !important; -} -.notion-calendar-view [style*='border-right: 1px solid'], -.notion-table-view [style*='border-right: 1px solid'] { - border-right: 1px solid var(--theme--divider) !important; -} -.notion-calendar-view [style*='border-left: 1px solid'], -.notion-table-view [style*='border-left: 1px solid'] { - border-left: 1px solid var(--theme--divider) !important; -} -.notion-calendar-view [style*='border-top: 1px solid'], -.notion-table-view [style*='border-top: 1px solid'] { - border-top: 1px solid var(--theme--divider) !important; -} -.notion-calendar-view [style*='border-bottom: 1px solid'], -.notion-table-view [style*='border-bottom: 1px solid'] { - border-bottom: 1px solid var(--theme--divider) !important; -} -.notion-table-view .notion-collection-item:last-child { - border-bottom: none !important; -} -.notion-gallery-view > div > :last-child { - box-shadow: var(--theme--divider) 0px 0px 0px 1px inset !important; -} -.notion-body.dark [style*='border-top: 1px solid rgba(255, 255, 255, 0.14);'], -.notion-body.dark [style*='border-top: 1px solid rgba(255, 255, 255, 0.07);'], -.notion-body:not(.dark) [style*='border-top: 1px solid rgba(55, 53, 47, 0.06)'], -.notion-body:not(.dark) - [style*='border-top: 1px solid rgba(55, 53, 47, 0.09);'], -.notion-body:not(.dark) - [style*='border-top: 1px solid rgba(55, 53, 47, 0.16);'] { - border-top: 1px solid var(--theme--divider) !important; -} -.notion-body.dark - [style*='border-bottom: 1px solid rgba(255, 255, 255, 0.14);'], -.notion-body.dark - [style*='border-bottom: 1px solid rgba(255, 255, 255, 0.07);'], -.notion-body.dark [style*='border-bottom: 0.05em solid rgba(255,255,255,0.3);'], -.notion-body:not(.dark) - [style*='border-bottom: 1px solid rgba(55, 53, 47, 0.16);'], -.notion-body:not(.dark) - [style*='border-bottom: 1px solid rgba(55, 53, 47, 0.09);'], -.notion-body:not(.dark) - [style*='border-bottom:0.05em solid rgba(55,53,47,0.25);'] { - border-bottom: 1px solid var(--theme--divider) !important; -} -.notion-body.dark [style*='border-left: 1px solid rgba(255, 255, 255, 0.14);'], -.notion-body.dark [style*='border-left: 1px solid rgba(255, 255, 255, 0.07);'], -.notion-body:not(.dark) - [style*='border-left: 1px solid rgba(55, 53, 47, 0.06)'], -.notion-body:not(.dark) - [style*='border-left: 1px solid rgba(55, 53, 47, 0.09);'], -.notion-body:not(.dark) - [style*='border-left: 1px solid rgba(55, 53, 47, 0.16);'] { - border-left: 1px solid var(--theme--divider) !important; -} -.notion-body.dark [style*='border-right: 1px solid rgba(255, 255, 255, 0.14);'], -.notion-body.dark [style*='border-right: 1px solid rgba(255, 255, 255, 0.07);'], -.notion-body:not(.dark) - [style*='border-right: 1px solid rgba(55, 53, 47, 0.06)'], -.notion-body:not(.dark) - [style*='border-right: 1px solid rgba(55, 53, 47, 0.09);'], -.notion-body:not(.dark) - [style*='border-right: 1px solid rgba(55, 53, 47, 0.16);'] { - border-right: 1px solid var(--theme--divider) !important; -} -.notion-body.dark [style*='border: 1px solid rgba(255, 255, 255, 0.14);'], -.notion-body.dark [style*='border: 1px solid rgba(255, 255, 255, 0.07);'], -.notion-body:not(.dark) [style*='border: 1px solid rgba(55, 53, 47, 0.09)'], -.notion-body:not(.dark) [style*='border: 1px solid rgba(55, 53, 47, 0.16);'] { - border: 1px solid var(--theme--divider) !important; -} -.notion-body.dark [style*='border-color: rgba(255, 255, 255, 0.07);'], -.notion-body.dark [style*='border-color:rgba(255,255,255,0.4);'], -.notion-body:not(.dark) [style*='border-color:rgba(55,53,47,0.4);'], -.notion-body:not(.dark) [style*='border-color: rgba(55, 53, 47, 0.09);'], -.notion-body:not(.dark) [style*='border-color: rgba(55, 53, 47, 0.06);'] { - border-color: var(--theme--divider) !important; -} -.notion-body.dark - [style*='box-shadow: rgba(255, 255, 255, 0.07) 0px -1px 0px;'], -.notion-body:not(.dark) - [style*='box-shadow: rgba(55, 53, 47, 0.09) 0px -1px 0px;'] { - box-shadow: var(--theme--divider) 0px -1px 0px !important; -} -.notion-body.dark [style*='box-shadow: rgba(255, 255, 255, 0.07) 0px 1px 0px;'], -.notion-body:not(.dark) - [style*='box-shadow: rgba(55, 53, 47, 0.09) 0px 1px 0px;'] { - box-shadow: var(--theme--divider) 0px 1px 0px !important; -} -.notion-overlay-container.notion-default-overlay-container - > :nth-child(2) - > div - > :nth-child(2) - > :nth-child(2) - > div - > div - > div - > div - > div - > div - > .notion-record-icon.notranslate { - box-shadow: var(--theme--divider) 0px 0px 0px 1px inset !important; -} - -.notion-embed-block > div > div[style*='background:'], -.notion-image-block > div > div[style*='background:'], -.notion-video-block > div > div[style*='background:'], -.notion-codepen-block > div > div[style*='background:'], -.notion-typeform-block > div > div[style*='background:'], -.notion-whimsical-block > div > div[style*='background:'], -.notion-loom-block > div > div[style*='background:'], -.notion-pdf-block > div > div[style*='background:'], -.notion-figma-block > div > div[style*='background:'], -.notion-miro-block > div > div[style*='background:'], -.notion-invision-block > div > div[style*='background:'], -.notion-framer-block > div > div[style*='background:'], -.notion-gist-block > div > div[style*='background:'], -.notion-maps-block > div > div[style*='background:'], -.notion-abstract-block > div > div[style*='background:'], -.notion-tweet-block > div > div[style*='background:'], -.notion-drive-block > div > div[style*='background:'] { - background: var(--theme--embed_block) !important; -} -.notion-equation-block > div > div[style*='background'] { - background: var(--theme--equation_block) !important; -} -.notion-body.dark - .notion-overlay-container.notion-default-overlay-container - > :nth-child(2) - > div - > :nth-child(2) - > :nth-child(2) - > div - > div - > div - > div[style*='background: rgba(15, 15, 15, 0.3)'], -.notion-body:not(.dark) - .notion-overlay-container.notion-default-overlay-container - > :nth-child(2) - > div - > :nth-child(2) - > :nth-child(2) - > div - > div - > div - > div[style*='background: rgba(242, 241, 238, 0.6)'] { - background: var(--theme--equation_editor) !important; -} -.notion-text-equation-token { - background: var(--theme--equation_inline) !important; - color: var(--theme--equation_inline-text) !important; -} -[role='alert'][style*='background:'] { - background: var(--theme_dark--equation_error_block) !important; -} -[role='alert'][style*='color:'] { - color: var(--theme_dark--equation_error-text) !important; -} -[role='alert'][style*='color:'][style*='background:'] { - color: var(--theme_dark--equation_error_inline-text) !important; -} - -.notion-frame [style*='background: rgba(0, 0, 0, 0.4)'][style*='color: white'], -.notion-peek-renderer - [style*='background: rgba(0, 0, 0, 0.4)'][style*='color: white'] { - background: var(--theme--reposition_cover) !important; - color: var(--theme--reposition_cover-text) !important; -} -.notion-block-resizer > div > div { - background: var(--theme--resizer) !important; - border: 1px solid var(--theme--resizer-border) !important; -} -.notion-block-resizer > div > svg { - fill: var(--theme--resizer) !important; - stroke: var(--theme--resizer-border) !important; -} - -.notion-overlay-container.notion-default-overlay-container - > div - > div - > div - > :nth-child(2) - > div - > div - > div[style*='background'][style*='font-size: 12px;'] { - background: var(--theme--tooltip) !important; - color: var(--theme--tooltip-text) !important; -} -.notion-overlay-container.notion-default-overlay-container - > div - > div - > div - > :nth-child(2) - > div - > div - > div[style*='background'][style*='font-size: 12px;'] - [style^='color:'] { - color: var(--theme--tooltip-text_grey) !important; -} - -.notion-help-button { - background: var(--theme--help) !important; -} -.notion-help-button:hover { - background: var(--theme--help-hover) !important; -} - -.notion-space-settings - [role='button'][style*='color: rgb(235, 87, 87);']:not([style*='background: rgb(253, 245, 242)']):not([style*='background: rgb(251, 235, 232)']), -.notion-overlay-container.notion-default-overlay-container - > :nth-child(3) - > div - > :nth-child(2) - > div - > :nth-child(3) - > div - > :nth-child(1)[role='button'][style*='color: rgb(235, 87, 87);'] { - color: var(--theme--settings_danger_button-text) !important; - border: 1px solid var(--theme--settings_danger_button-border) !important; -} -.notion-space-settings - [role='button'][style*='color: rgb(235, 87, 87);']:not([style*='background: rgb(251, 235, 232)']):hover, -.notion-overlay-container.notion-default-overlay-container - > :nth-child(3) - > div - > :nth-child(2) - > div - > :nth-child(3) - > div - > :nth-child(1)[role='button'][style*='color: rgb(235, 87, 87);']:hover { - background: var(--theme--settings_danger_button-hover) !important; -} - -/** scrollbars **/ - -::-webkit-scrollbar-track { - background: var(--theme--scrollbar_track) !important; -} -::-webkit-scrollbar-corner { - background: var(--theme--scrollbar_track) !important; -} -::-webkit-scrollbar-thumb { - background: var(--theme--scrollbar_thumb) !important; -} -::-webkit-scrollbar-thumb:hover { - background: var(--theme--scrollbar_thumb-hover) !important; -} - -/** typography **/ - -[style*='Segoe UI'] { - font-family: var(--theme--font_sans) !important; -} -[style*='Georgia'] { - font-family: var(--theme--font_serif) !important; -} -[style*='iawriter-mono'] { - font-family: var(--theme--font_mono) !important; -} -[style*='SFMono-Regular'] { - font-family: var(--theme--font_code) !important; -} -.notion-selectable.notion-quote-block div[spellcheck='true'] { - font-family: var(--theme--font_quote) !important; -} -[placeholder='Heading 1'], -[placeholder='Heading 2'], -[placeholder='Heading 3'] { - font-family: var(--theme--font_headings) !important; -} - -[style*='font-size: 40px'] { - font-size: var(--theme_dark--font_title-size) !important; -} -[placeholder='Heading 1'] { - font-size: var(--theme_dark--font_heading1-size) !important; -} -[placeholder='Heading 2'] { - font-size: var(--theme_dark--font_heading2-size) !important; -} -[placeholder='Heading 3'] { - font-size: var(--theme_dark--font_heading3-size) !important; -} -[style*='font-size: 16px'] { - font-size: var(--theme_dark--font_body-size) !important; -} -[style*='font-size: 1.2em'] { - font-size: var(--theme_dark--font_quote-size) !important; -} -[style*='font-size: 85%'], -[style*='font-size:85%'] { - font-size: var(--theme_dark--font_code-size) !important; -} -[style*='font-size: 14px'] { - font-size: var(--theme_dark--font_ui-size) !important; -} -[style*='font-size: 11.5px'] { - /* sidebar titles, block copy & caption buttons */ - font-size: var(--theme_dark--font_ui_small-size) !important; -} -[style*='font-size: 11px'] { - font-size: var(--theme_dark--font_popout_title-size) !important; -} -[style*='font-size: 12px'] { - font-size: var(--theme_dark--font_description-size) !important; -} -[style*='font-size: 16.8px'] { - font-size: var(--theme_dark--font_callout_icon-size) !important; -} -[style*='font-size: 20px'] { - font-size: var(--theme_dark--font_help_icon-size) !important; -} - -.notion-page-content .notion-selectable.notion-text-block { - line-height: var(--theme--text_block-line_height) !important; - margin-top: var(--theme--text_block-margin_top) !important; -} - -.notion-body.dark [style*='fill: rgba(202, 204, 206, 0.6);'], -.notion-body:not(.dark) [style*='fill: rgba(55, 53, 47, 0.4);'] { - fill: var(--theme--icon) !important; -} -.notion-body.dark [style*='fill: rgb(202, 204, 206);'], -.notion-body:not(.dark) [style*='fill: rgba(55, 53, 47, 0.8);'] { - fill: var(--theme--icon_topbar) !important; -} - -.notion-body.dark [style*=' color: rgba(255, 255, 255, 0.9);'], -.notion-body.dark [style^='color: rgba(255, 255, 255, 0.9);'], -.notion-body:not(.dark) - :not(.notion-login) - > [style*=' color: rgb(55, 53, 47);'], -.notion-body:not(.dark) [style^='color: rgb(55, 53, 47);'] { - color: var(--theme--text) !important; -} -.notion-body.dark [style*='fill: rgba(255, 255, 255, 0.9);'], -.notion-body:not(.dark) [style*='fill: rgb(55, 53, 47);'] { - fill: var(--theme--text) !important; -} -.notion-body.dark [style*='border-bottom: 2px solid rgba(255, 255, 255, 0.9);'], -.notion-body:not(.dark) [style*='border-bottom: 2px solid rgb(55, 53, 47);'] { - border-bottom: 2px solid var(--theme--text) !important; -} -.notion-body.dark [style*='caret-color: rgba(255, 255, 255, 0.9);'], -.notion-body:not(.dark) [style*='caret-color: rgb(55, 53, 47);'] { - caret-color: var(--theme--text) !important; -} -[role='button'][style*='color: rgb(165, 165, 165);'], -.notion-body.dark [style*='color: rgba(255, 255, 255, 0.6);'], -.notion-body:not(.dark) [style*='color: rgba(55, 53, 47, 0.6);'] { - color: var(--theme--text_property) !important; -} -.notion-body.dark [style*='color: rgba(255, 255, 255, 0.4);'], -.notion-body:not(.dark) [style*='color: rgba(55, 53, 47, 0.4);'] { - color: var(--theme--text_placeholder) !important; - -webkit-text-fill-color: var(--theme--text_placeholder) !important; -} -.notion-body.dark [style*='fill: rgba(202, 204, 206, 0.4);'], -.notion-body:not(.dark) [style*='fill: rgba(55, 53, 47, 0.3);'] { - fill: var(--theme--text_pseudo) !important; -} -.notion-sidebar-container > :first-child { - color: var(--theme--text_sidebar) !important; -} -.notion-sidebar .dots, -.notion-sidebar .plus { - fill: var(--theme--text_sidebar) !important; -} - -/** code **/ - -.notion-page-content [style*='color:#EB5757']:not(.notion-text-mention-token) { - background: var(--theme--code_inline) !important; - color: var(--theme--code_inline-text) !important; -} - -.notion-code-block > div > div { - background: var(--theme--code) !important; -} -.notion-code-block > div { - color: var(--theme--code_plain) !important; -} -.notion-code-block .token.function { - color: var(--theme--code_function) !important; -} -.notion-code-block .token.parameter { - color: var(--theme--code_parameter) !important; -} -.notion-code-block .token.keyword { - color: var(--theme--code_keyword) !important; -} -.notion-code-block .token.constant { - color: var(--theme--code_constant) !important; -} -.notion-code-block .token.tag { - color: var(--theme--code_tag) !important; -} -.notion-code-block .token.operator { - color: var(--theme--code_operator) !important; - background: transparent !important; -} -.notion-code-block .token.important { - color: var(--theme--code_important) !important; -} -.notion-code-block .token.regex { - color: var(--theme--code_regex) !important; -} -.notion-code-block .token.property { - color: var(--theme--code_property) !important; -} -.notion-code-block .token.builtin { - color: var(--theme--code_builtin) !important; -} -.notion-code-block .token.class-name { - color: var(--theme--code_class-name) !important; -} -.notion-code-block .token.attr-name { - color: var(--theme--code_attr-name) !important; -} -.notion-code-block .token.attr-value { - color: var(--theme--code_attr-value) !important; -} -.notion-code-block .token.selector { - color: var(--theme--code_selector) !important; -} -.notion-code-block .token.id { - color: var(--theme--code_id) !important; -} -.notion-code-block .token.class { - color: var(--theme--code_class) !important; -} -.notion-code-block .token.pseudo-element { - color: var(--theme--code_pseudo-element) !important; -} -.notion-code-block .token.pseudo-class { - color: var(--theme--code_pseudo-class) !important; -} -.notion-code-block .token.attribute { - color: var(--theme--code_attribute) !important; -} -.notion-code-block .token.value { - color: var(--theme--code_value) !important; -} -.notion-code-block .token.unit { - color: var(--theme--code_unit) !important; -} -.notion-code-block .token.comment { - color: var(--theme--code_comment) !important; -} -.notion-code-block .token.punctuation { - color: var(--theme--code_punctuation) !important; -} -.notion-code-block .token.annotation { - color: var(--theme--code_annotation) !important; -} -.notion-code-block .token.decorator { - color: var(--theme--code_decorator) !important; -} -.notion-code-block .token.doctype { - color: var(--theme--code_doctype) !important; -} -.notion-code-block .token.number { - color: var(--theme--code_number) !important; -} -.notion-code-block .token.string { - color: var(--theme--code_string) !important; -} -.notion-code-block .token.boolean { - color: var(--theme--code_boolean) !important; -} - -/** colours **/ - -.notion-body.dark [style*='background: rgb(80, 85, 88)']:not([role='button']), -.notion-body:not(.dark) - [style*='background: rgba(206, 205, 202, 0.5)']:not([role='button']) { - background: var(--theme--tag_default) !important; - color: var(--theme--tag_default-text) !important; -} -.notion-body.dark - [style*='color: rgba(255, 255, 255, 0.6); background: rgb(80, 85, 88)']:not([role='button']), -.notion-body:not(.dark) - [style*='color: rgba(55, 53, 47, 0.6); background: rgba(206, 205, 202, 0.5)']:not([role='button']) { - background: var(--theme--tag_plan) !important; - color: var(--theme--tag_plan-text) !important; -} -[style*='background: rgb(235, 87, 87); color: white; border-radius: 3px;']:not([role='button']) { - background: var(--theme--tag_new) !important; - color: var(--theme--tag_new-text) !important; -} - -.notion-body.dark [style*='color:rgba(151,154,155,0.95)'], -.notion-body.dark - [style*='color: rgba(255, 255, 255, 0.6); fill: rgba(255, 255, 255, 0.6);'], -.notion-body:not(.dark) [style*='color:rgb(155,154,151)'], -.notion-body:not(.dark) - [style*='color: rgba(55, 53, 47, 0.6); fill: rgba(55, 53, 47, 0.6);'] { - color: var(--theme--text_grey) !important; - fill: var(--theme--text_grey) !important; -} -.notion-body.dark [style*='background:rgb(69,75,78)'], -.notion-body:not(.dark) [style*='background:rgb(235,236,237)'] { - background: var(--theme--highlight_grey) !important; -} -.notion-body.dark - [style*='color: inherit'] - > div - > div - > [style*='background:rgb(69,75,78)'], -.notion-body:not(.dark) - [style*='color: inherit'] - > div - > div - > [style*='background:rgb(235,236,237)'] { - color: var(--theme--highlight_grey-text) !important; -} -.notion-body.dark - [style*='color:rgba(151,154,155,0.95)'] - [style*='background:rgb(69,75,78)'], -.notion-body.dark - [style*='color: rgba(255, 255, 255, 0.6); fill: rgba(255, 255, 255, 0.6);'] - [style*='background:rgb(69,75,78)'], -.notion-body:not(.dark) - [style*='color:rgb(155,154,151)'] - [style*='background:rgb(235,236,237)'], -.notion-body:not(.dark) - [style*='color: rgba(55, 53, 47, 0.6); fill: rgba(55, 53, 47, 0.6);'] - [style*='background:rgb(235,236,237)'] { - background: var(--theme--highlight_grey) !important; - color: var(--theme--text_grey) !important; - fill: var(--theme--text_grey) !important; -} -.notion-body.dark [style*='background: rgb(69, 75, 78)'], -.notion-body:not(.dark) [style*='background: rgb(235, 236, 237)'] { - background: var(--theme--block_grey) !important; - color: var(--theme--block_grey-text) !important; -} -.notion-body.dark [style*='background: rgba(151, 154, 155, 0.5)'], -.notion-body:not(.dark) [style*='background: rgba(140, 46, 0, 0.2)'] { - background: var(--theme--tag_grey) !important; - color: var(--theme--tag_grey-text) !important; -} -.notion-body.dark [style*='background: rgba(69, 75, 78, 0.3)'], -.notion-body:not(.dark) [style*='background: rgba(235, 236, 237, 0.3)'] { - background: var(--theme--callout_grey) !important; - color: var(--theme--callout_grey-text) !important; -} - -.notion-body.dark [style*='color:rgb(147,114,100)'], -.notion-body.dark - [style*='color: rgb(147, 114, 100); fill: rgb(147, 114, 100);'], -.notion-body:not(.dark) [style*='color:rgb(100,71,58)'], -.notion-body:not(.dark) - [style*='color: rgb(100, 71, 58); fill: rgb(100, 71, 58);'] { - color: var(--theme--text_brown) !important; - fill: var(--theme--text_brown) !important; -} -.notion-body.dark [style*='background:rgb(67,64,64)'], -.notion-body:not(.dark) [style*='background:rgb(233,229,227)'] { - background: var(--theme--highlight_brown) !important; -} -.notion-body.dark - [style*='color: inherit'] - > div - > div - > [style*='background:rgb(67,64,64)'], -.notion-body:not(.dark) - [style*='color: inherit'] - > div - > div - > [style*='background:rgb(233,229,227)'] { - color: var(--theme--highlight_brown-text) !important; -} -.notion-body.dark - [style*='color:rgb(147,114,100)'] - [style*='background:rgb(67,64,64)'], -.notion-body.dark - [style*='color: rgb(147, 114, 100); fill: rgb(147, 114, 100);'] - [style*='background:rgb(67,64,64)'], -.notion-body:not(.dark) - [style*='color:rgb(100,71,58)'] - [style*='background:rgb(233,229,227)'], -.notion-body:not(.dark) - [style*='color: rgb(100, 71, 58); fill: rgb(100, 71, 58);'] - [style*='background:rgb(233,229,227)'] { - background: var(--theme--highlight_brown) !important; - color: var(--theme--text_brown) !important; - fill: var(--theme--text_brown) !important; -} -.notion-body.dark [style*='background: rgb(67, 64, 64)'], -.notion-body:not(.dark) [style*='background: rgb(233, 229, 227)'] { - background: var(--theme--block_brown) !important; - color: var(--theme--block_brown-text) !important; -} -.notion-body.dark [style*='background: rgba(147, 114, 100, 0.5)'], -.notion-body:not(.dark) [style*='background: rgba(140, 46, 0, 0.2)'] { - background: var(--theme--tag_brown) !important; - color: var(--theme--tag_brown-text) !important; -} -.notion-body.dark [style*='background: rgba(67, 64, 64, 0.3)'], -.notion-body:not(.dark) [style*='background: rgba(233, 229, 227, 0.3)'] { - background: var(--theme--callout_brown) !important; - color: var(--theme--callout_brown-text) !important; -} - -.notion-body.dark [style*='color:rgb(255,163,68)'], -.notion-body.dark [style*='color: rgb(255, 163, 68); fill: rgb(255, 163, 68);'], -.notion-body:not(.dark) [style*='color:rgb(217,115,13)'], -.notion-body:not(.dark) - [style*='color: rgb(217, 115, 13); fill: rgb(217, 115, 13);'] { - color: var(--theme--text_orange) !important; - fill: var(--theme--text_orange) !important; -} -.notion-body.dark [style*='background:rgb(89,74,58)'], -.notion-body:not(.dark) [style*='background:rgb(250,235,221)'] { - background: var(--theme--highlight_orange) !important; -} -.notion-body.dark - [style*='color: inherit'] - > div - > div - > [style*='background:rgb(89,74,58)'], -.notion-body:not(.dark) - [style*='color: inherit'] - > div - > div - > [style*='background:rgb(250,235,221)'] { - color: var(--theme--highlight_orange-text) !important; -} -.notion-body.dark - [style*='color:rgb(255,163,68)'] - [style*='background:rgb(89,74,58)'], -.notion-body.dark - [style*='color: rgb(255, 163, 68); fill: rgb(255, 163, 68);'] - [style*='background:rgb(89,74,58)'], -.notion-body:not(.dark) - [style*='color:rgb(217,115,13)'] - [style*='background:rgb(250,235,221)'], -.notion-body:not(.dark) - [style*='color: rgb(217, 115, 13); fill: rgb(217, 115, 13);'] - [style*='background:rgb(250,235,221)'] { - background: var(--theme--highlight_orange) !important; - color: var(--theme--text_orange) !important; - fill: var(--theme--text_orange) !important; -} -.notion-body.dark [style*='background: rgb(89, 74, 58)'], -.notion-body:not(.dark) [style*='background: rgb(250, 235, 221)'] { - background: var(--theme--block_orange) !important; - color: var(--theme--block_orange-text) !important; -} -.notion-body.dark [style*='background: rgba(255, 163, 68, 0.5)'], -.notion-body:not(.dark) [style*='background: rgba(245, 93, 0, 0.2)'] { - background: var(--theme--tag_orange) !important; - color: var(--theme--tag_orange-text) !important; -} -.notion-body.dark [style*='background: rgba(89, 74, 58, 0.3)'], -.notion-body:not(.dark) [style*='background: rgba(250, 235, 221, 0.3)'] { - background: var(--theme--callout_orange) !important; - color: var(--theme--callout_orange-text) !important; -} - -.notion-body.dark [style*='color:rgb(255,220,73)'], -.notion-body.dark [style*='color: rgb(255, 220, 73); fill: rgb(255, 220, 73);'], -.notion-body:not(.dark) [style*='color:rgb(223,171,1)'], -.notion-body:not(.dark) - [style*='color: rgb(223, 171, 1); fill: rgb(223, 171, 1);'] { - color: var(--theme--text_yellow) !important; - fill: var(--theme--text_yellow) !important; -} -.notion-body.dark [style*='background:rgb(89,86,59)'], -.notion-body:not(.dark) [style*='background:rgb(251,243,219)'] { - background: var(--theme--highlight_yellow) !important; -} -.notion-body.dark - [style*='color: inherit'] - > div - > div - > [style*='background:rgb(89,86,59)'], -.notion-body:not(.dark) - [style*='color: inherit'] - > div - > div - > [style*='background:rgb(251,243,219)'] { - color: var(--theme--highlight_yellow-text) !important; -} -.notion-body.dark - [style*='color:rgb(255,220,73)'] - [style*='background:rgb(89,86,59)'], -.notion-body.dark - [style*='color: rgb(255, 220, 73); fill: rgb(255, 220, 73);'] - [style*='background:rgb(89,86,59)'], -.notion-body:not(.dark) - [style*='color:rgb(223,171,1)'] - [style*='background:rgb(251,243,219)'], -.notion-body:not(.dark) - [style*='color: rgb(223, 171, 1); fill: rgb(223, 171, 1);'] - [style*='background:rgb(251,243,219)'] { - background: var(--theme--highlight_yellow) !important; - color: var(--theme--text_yellow) !important; - fill: var(--theme--text_yellow) !important; -} -.notion-body.dark [style*='background: rgb(89, 86, 59)'], -.notion-body:not(.dark) [style*='background: rgb(251, 243, 219)'] { - background: var(--theme--block_yellow) !important; - color: var(--theme--block_yellow-text) !important; -} -.notion-body.dark [style*='background: rgba(255, 220, 73, 0.5)'], -.notion-body:not(.dark) [style*='background: rgba(233, 168, 0, 0.2)'] { - background: var(--theme--tag_yellow) !important; - color: var(--theme--tag_yellow-text) !important; -} -.notion-body.dark [style*='background: rgba(89, 86, 59, 0.3)'], -.notion-body:not(.dark) [style*='background: rgba(251, 243, 219, 0.3)'] { - background: var(--theme--callout_yellow) !important; - color: var(--theme--callout_yellow-text) !important; -} - -.notion-body.dark [style*='color:rgb(77,171,154)'], -.notion-body.dark [style*='color: rgb(77, 171, 154); fill: rgb(77, 171, 154);'], -.notion-body:not(.dark) [style*='color:rgb(15,123,108)'], -.notion-body:not(.dark) - [style*='color: rgb(15, 123, 108); fill: rgb(15, 123, 108);'] { - color: var(--theme--text_green) !important; - fill: var(--theme--text_green) !important; -} -.notion-body.dark [style*='background:rgb(53,76,75)'], -.notion-body:not(.dark) [style*='background:rgb(221,237,234)'] { - background: var(--theme--highlight_green) !important; -} -.notion-body.dark - [style*='color: inherit'] - > div - > div - > [style*='background:rgb(53,76,75)'], -.notion-body:not(.dark) - [style*='color: inherit'] - > div - > div - > [style*='background:rgb(221,237,234)'] { - color: var(--theme--highlight_green-text) !important; -} -.notion-body.dark - [style*='color: inherit'] - > div - > div - > [style*='background:rgb(89,86,59)'], -.notion-body:not(.dark) - [style*='color: inherit'] - > div - > div - > [style*='background:rgb(251,243,219)'] { - color: var(--theme--highlight_green-text) !important; -} -.notion-body.dark - [style*='color:rgb(77,171,154)'] - [style*='background:rgb(53,76,75)'], -.notion-body.dark - [style*='color: rgb(77, 171, 154); fill: rgb(77, 171, 154);'] - [style*='background:rgb(53,76,75)'], -.notion-body:not(.dark) - [style*='color:rgb(15,123,108)'] - [style*='background:rgb(221,237,234)'], -.notion-body:not(.dark) - [style*='color: rgb(15, 123, 108); fill: rgb(15, 123, 108);'] - [style*='background:rgb(221,237,234)'] { - background: var(--theme--highlight_green) !important; - color: var(--theme--text_green) !important; - fill: var(--theme--text_green) !important; -} -.notion-body.dark [style*='background: rgb(53, 76, 75)'], -.notion-body:not(.dark) [style*='background: rgb(221, 237, 234)'] { - background: var(--theme--block_green) !important; - color: var(--theme--block_green-text) !important; -} -.notion-body.dark [style*='background: rgba(77, 171, 154, 0.5)'], -.notion-body:not(.dark) [style*='background: rgba(0, 135, 107, 0.2)'] { - background: var(--theme--tag_green) !important; - color: var(--theme--tag_green-text) !important; -} -.notion-body.dark [style*='background: rgba(53, 76, 75, 0.3)'], -.notion-body:not(.dark) [style*='background: rgba(221, 237, 234, 0.3)'] { - background: var(--theme--callout_green) !important; - color: var(--theme--callout_green-text) !important; -} - -.notion-body.dark [style*='color:rgb(82,156,202)'], -.notion-body.dark [style*='color: rgb(82, 156, 202); fill: rgb(82, 156, 202);'], -.notion-body:not(.dark) [style*='color:rgb(11,110,153)'], -.notion-body:not(.dark) - [style*='color: rgb(11, 110, 153); fill: rgb(11, 110, 153);'] { - color: var(--theme--text_blue) !important; - fill: var(--theme--text_blue) !important; -} -.notion-body.dark [style*='background:rgb(54,73,84)'], -.notion-body:not(.dark) [style*='background:rgb(221,235,241)'] { - background: var(--theme--highlight_blue) !important; -} -.notion-body.dark - [style*='color: inherit'] - > div - > div - > [style*='background:rgb(54,73,84)'], -.notion-body:not(.dark) - [style*='color: inherit'] - > div - > div - > [style*='background:rgb(221,235,241)'] { - color: var(--theme--highlight_blue-text) !important; -} -.notion-body.dark - [style*='color:rgb(82,156,202)'] - [style*='background:rgb(54,73,84)'], -.notion-body.dark - [style*='color: rgb(82, 156, 202); fill: rgb(82, 156, 202);'] - [style*='background:rgb(54,73,84)'], -.notion-body:not(.dark) - [style*='color:rgb(11,110,153)'] - [style*='background:rgb(221,235,241)'], -.notion-body:not(.dark) - [style*='color: rgb(11, 110, 153); fill: rgb(11, 110, 153);'] - [style*='background:rgb(221,235,241)'] { - background: var(--theme--highlight_blue) !important; - color: var(--theme--text_blue) !important; - fill: var(--theme--text_blue) !important; -} -.notion-body.dark [style*='background: rgb(54, 73, 84)'], -.notion-body:not(.dark) [style*='background: rgb(221, 235, 241)'] { - background: var(--theme--block_blue) !important; - color: var(--theme--block_blue-text) !important; -} -.notion-body.dark [style*='background: rgba(82, 156, 202, 0.5)'], -.notion-body:not(.dark) [style*='background: rgba(0, 120, 223, 0.2)'] { - background: var(--theme--tag_blue) !important; - color: var(--theme--tag_blue-text) !important; -} -.notion-body.dark [style*='background: rgba(54, 73, 84, 0.3)'], -.notion-body:not(.dark) [style*='background: rgba(221, 235, 241, 0.3)'] { - background: var(--theme--callout_blue) !important; - color: var(--theme--callout_blue-text) !important; -} - -.notion-body.dark [style*='color:rgb(154,109,215)'], -.notion-body.dark - [style*='color: rgb(154, 109, 215); fill: rgb(154, 109, 215);'], -.notion-body:not(.dark) [style*='color:rgb(105,64,165)'], -.notion-body:not(.dark) - [style*='color: rgb(105, 64, 165); fill: rgb(105, 64, 165);'] { - color: var(--theme--text_purple) !important; - fill: var(--theme--text_purple) !important; -} -.notion-body.dark [style*='background:rgb(68,63,87)'], -.notion-body:not(.dark) [style*='background:rgb(234,228,242)'] { - background: var(--theme--highlight_purple) !important; -} -.notion-body.dark - [style*='color: inherit'] - > div - > div - > [style*='background:rgb(68,63,87)'], -.notion-body:not(.dark) - [style*='color: inherit'] - > div - > div - > [style*='background:rgb(234,228,242)'] { - color: var(--theme--highlight_purple-text) !important; -} -.notion-body.dark - [style*='color:rgb(154,109,215)'] - [style*='background:rgb(68,63,87)'], -.notion-body.dark - [style*='color: rgb(154, 109, 215); fill: rgb(154, 109, 215);'] - [style*='background:rgb(68,63,87)'], -.notion-body:not(.dark) - [style*='color:rgb(105,64,165)'] - [style*='background:rgb(234,228,242)'], -.notion-body:not(.dark) - [style*='color: rgb(105, 64, 165); fill: rgb(105, 64, 165);'] - [style*='background:rgb(234,228,242)'] { - background: var(--theme--highlight_purple) !important; - color: var(--theme--text_purple) !important; - fill: var(--theme--text_purple) !important; -} -.notion-body.dark [style*='background: rgb(68, 63, 87)'], -.notion-body:not(.dark) [style*='background: rgb(234, 228, 242)'] { - background: var(--theme--block_purple) !important; - color: var(--theme--block_purple-text) !important; -} -.notion-body.dark [style*='background: rgba(154, 109, 215, 0.5)'], -.notion-body:not(.dark) [style*='background: rgba(103, 36, 222, 0.2)'] { - background: var(--theme--tag_purple) !important; - color: var(--theme--tag_purple-text) !important; -} -.notion-body.dark [style*='background: rgba(68, 63, 87, 0.3)'], -.notion-body:not(.dark) [style*='background: rgba(234, 228, 242, 0.3)'] { - background: var(--theme--callout_purple) !important; - color: var(--theme--callout_purple-text) !important; -} - -.notion-body.dark [style*='color:rgb(226,85,161)'], -.notion-body.dark [style*='color: rgb(226, 85, 161); fill: rgb(226, 85, 161);'], -.notion-body:not(.dark) [style*='color:rgb(173,26,114)'], -.notion-body:not(.dark) - [style*='color: rgb(173, 26, 114); fill: rgb(173, 26, 114);'] { - color: var(--theme--text_pink) !important; - fill: var(--theme--text_pink) !important; -} -.notion-body.dark [style*='background:rgb(83,59,76)'], -.notion-body:not(.dark) [style*='background:rgb(244,223,235)'] { - background: var(--theme--highlight_pink) !important; -} -.notion-body.dark - [style*='color: inherit'] - > div - > div - > [style*='background:rgb(83,59,76)'], -.notion-body:not(.dark) - [style*='color: inherit'] - > div - > div - > [style*='background:rgb(244,223,235)'] { - color: var(--theme--highlight_pink-text) !important; -} -.notion-body.dark - [style*='color:rgb(226,85,161)'] - [style*='background:rgb(83,59,76)'], -.notion-body.dark - [style*='color: rgb(226, 85, 161); fill: rgb(226, 85, 161);'] - [style*='background:rgb(83,59,76)'], -.notion-body:not(.dark) - [style*='color:rgb(173,26,114)'] - [style*='background:rgb(244,223,235)'], -.notion-body:not(.dark) - [style*='color: rgb(173, 26, 114); fill: rgb(173, 26, 114);'] - [style*='background:rgb(244,223,235)'] { - background: var(--theme--highlight_pink) !important; - color: var(--theme--text_pink) !important; - fill: var(--theme--text_pink) !important; -} -.notion-body.dark [style*='background: rgb(83, 59, 76)'], -.notion-body:not(.dark) [style*='background: rgb(244, 223, 235)'] { - background: var(--theme--block_pink) !important; - color: var(--theme--block_pink-text) !important; -} -.notion-body.dark [style*='background: rgba(226, 85, 161, 0.5)'], -.notion-body:not(.dark) [style*='background: rgba(221, 0, 129, 0.2)'] { - background: var(--theme--tag_pink) !important; - color: var(--theme--tag_pink-text) !important; -} -.notion-body.dark [style*='background: rgba(83, 59, 76, 0.3)'], -.notion-body:not(.dark) [style*='background: rgba(244, 223, 235, 0.3)'] { - background: var(--theme--callout_pink) !important; - color: var(--theme--callout_pink-text) !important; -} - -.notion-body.dark [style*='color:rgb(255,115,105)'], -.notion-body.dark - [style*='color: rgb(255, 115, 105); fill: rgb(255, 115, 105);'], -.notion-body:not(.dark) [style*='color:rgb(224,62,62)'], -.notion-body:not(.dark) - [style*='color: rgb(224, 62, 62); fill: rgb(224, 62, 62);'] { - color: var(--theme--text_red) !important; - fill: var(--theme--text_red) !important; -} -.notion-body.dark [style*='background:rgb(89,65,65)'], -.notion-body:not(.dark) [style*='background:rgb(251,228,228)'] { - background: var(--theme--highlight_red) !important; -} -.notion-body.dark - [style*='color: inherit'] - > div - > div - > [style*='background:rgb(89,65,65)'], -.notion-body:not(.dark) - [style*='color: inherit'] - > div - > div - > [style*='background:rgb(251,228,228)'] { - color: var(--theme--highlight_red-text) !important; -} -.notion-body.dark - [style*='color:rgb(255,115,105)'] - [style*='background:rgb(89,65,65)'], -.notion-body.dark - [style*='color: rgb(255, 115, 105); fill: rgb(255, 115, 105);'] - [style*='background:rgb(89,65,65)'], -.notion-body:not(.dark) - [style*='color:rgb(224,62,62)'] - [style*='background:rgb(251,228,228)'], -.notion-body:not(.dark) - [style*='color: rgb(224, 62, 62); fill: rgb(224, 62, 62);'] - [style*='background:rgb(251,228,228)'] { - background: var(--theme--highlight_red) !important; - color: var(--theme--text_red) !important; - fill: var(--theme--text_red) !important; -} -.notion-body.dark [style*='background: rgb(89, 65, 65)'], -.notion-body:not(.dark) [style*='background: rgb(251, 228, 228)'] { - background: var(--theme--block_red) !important; - color: var(--theme--block_red-text) !important; -} -.notion-body.dark [style*='background: rgba(255, 115, 105, 0.5);'], -.notion-body:not(.dark) [style*='background: rgba(255, 0, 26, 0.2)'] { - background: var(--theme--tag_red) !important; - color: var(--theme--tag_red-text) !important; -} -.notion-body.dark [style*='background: rgba(89, 65, 65, 0.3)'], -.notion-body:not(.dark) [style*='background: rgba(251, 228, 228, 0.3)'] { - background: var(--theme--callout_red) !important; - color: var(--theme--callout_red-text) !important; -} - -/** normalisations **/ - -.notion-frame .notion-scroller [style*='padding-left: 136.5px;'] { - padding-left: 0 !important; -} -.notion-frame .notion-scroller [style*='padding-right: 136.5px;'] { - padding-right: 0 !important; -} -.notion-collection_view-block > :first-child, -.notion-collection_view-block .notion-scroller > :first-child { - padding-left: 0 !important; - padding-right: 0 !important; -} - -.notion-page-content [data-block-id][style*='max-width'] { - max-width: 100% !important; -} -.notion-peek-renderer .notion-page-content [style*='max-width: 943px;'] { - max-width: none !important; -} - -.notion-page-content .notion-collection_view-block[style*=' width'], -.notion-page-content .notion-collection_view-block[style^='width'] { - width: 100% !important; -} -.notion-page-content - .notion-collection_view-block - [style*='padding-left: 50px'], -.notion-page-content - .notion-collection_view-block - [style*='padding-left: 96px'], -.notion-page-content - .notion-collection_view-block - [style*='padding-left: 126px'] { - padding-left: 0 !important; -} -.notion-page-content - .notion-collection_view-block - [style*='padding-right: 50px'], -.notion-page-content - .notion-collection_view-block - [style*='padding-right: 96px'], -.notion-page-content - .notion-collection_view-block - [style*='padding-right: 126px'] { - padding-right: 0 !important; -} -.notion-page-content - .notion-collection_view-block - [style*='min-width: calc(100% - 192px);'], -.notion-page-content - .notion-collection_view-block - [style*='min-width: 708px;'] { - min-width: 100% !important; -} - -.notion-calendar-view-day, -.DayPicker-Day--today:not(.DayPicker-Day--selected):not(.DayPicker-Day--value):not(.DayPicker-Day--start):not(.DayPicker-Day--end), -.DayPicker-Day.DayPicker-Day--start.DayPicker-Day--selected, -.DayPicker:not(.DayPicker--interactionDisabled) .DayPicker-Day--outside:hover, -.DayPicker:not(.DayPicker--interactionDisabled) - .DayPicker-Day:not(.DayPicker-Day--disabled):not(.DayPicker-Day--selected):not(.DayPicker-Day--value):not(.DayPicker-Day--start):not(.DayPicker-Day--end) { - transition: all 200ms ease !important; -} -.notion-token-remove-button { - transition: opacity 200ms ease !important; -} -.notion-to_do-block > div > div > div[style*='background:'] { - transition: background 200ms ease !important; -} - -[style*='background:rgb('] { - padding-bottom: 3px !important; -} - -iframe { - border-radius: 0px !important; -} -.notion-overlay-container.notion-default-overlay-container - > :nth-child(2) - > div - > :nth-child(2) - > :nth-child(2) - > div - > div - > div - > div - > .notion-scroller.vertical - > div - > div - div[style*='transition: background 120ms ease-in 0s;']:not([style*='border-radius:']) { - border-radius: 4px; -} - -.notion-selectable.notion-collection_view-block - > [style*='box-shadow: white -3px 0px 0px;'], -.notion-selectable.notion-collection_view_page-block - > [style*='box-shadow: white -3px 0px 0px;'] { - box-shadow: none !important; -} -.notion-body:not(.dark) - .notion-code-block - [style*='background: rgb(234, 233, 229)'] { - background: transparent !important; -} diff --git a/insert/theming/global.css b/insert/theming/global.css deleted file mode 100644 index 6eec19f..0000000 --- a/insert/theming/global.css +++ /dev/null @@ -1,1096 +0,0 @@ -/* - * notion-enhancer - * (c) 2020 dragonwocky (https://dragonwocky.me/) - * (c) 2020 TarasokUA - * (c) 2020 Arecsu - * (c) 2020 u/zenith_illinois - * (c) 2020 admiraldus (https://github.com/admiraldus) - * (c) 2020 CloudHill - * (https://dragonwocky.me/notion-enhancer) under the MIT license - */ - -:root { - /** dark **/ - - --theme_dark--page-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--dragarea: #272d2f; - --theme_dark--page: rgb(47, 52, 55); - --theme_dark--sidebar: rgb(55, 60, 63); - --theme_dark--sidebar_popout: rgb(55, 60, 63); - --theme_dark--preview: rgb(47, 52, 55); - --theme_dark--preview_shadow: rgba(0, 0, 0, 0.4); - --theme_dark--quickfind_shadow: rgba(15, 15, 15, 0.6); - --theme_dark--popout: rgb(63, 68, 71); - --theme_dark--shadow: rgba(15, 15, 15, 0.1); - --theme_dark--introduction_overlay: rgba(15, 15, 15, 0.2); - - --theme_dark--selected: rgba(46, 170, 220, 0.2); - --theme_dark--accent: rgb(46, 170, 220); - --theme_dark--accent-text: #fff; - --theme_dark--accent_semitransparent: rgba(46, 170, 220, 0.15); - --theme_dark--accent_button-hover: rgb(6, 156, 205); - --theme_dark--accent_button-active: rgb(0, 141, 190); - --theme_dark--accent_date-hover: rgba(45, 156, 219, 0.2); - --theme_dark--notion_ui_link-hover: #eb5757; - --theme_dark--notion_plan_choose_checkmark_hue-rotate: 0deg; - - --theme_dark--db_card: rgb(63, 68, 71); - --theme_dark--db_card-hover: rgb(71, 76, 80); - --theme_dark--db_card_preview: rgba(255, 255, 255, 0.05); - --theme_dark--db_weekend: rgb(55, 60, 63); - --theme_dark--db_today: rgb(235, 87, 87); - --theme_dark--db_today-text: #fff; - --theme_dark--timeline_divider_thin: rgba(255, 255, 255, 0.07); - --theme_dark--timeline_arrow: rgb(47, 52, 55); - --theme_dark--timeline_arrow_box: rgba(202, 204, 206, 0.6); - --theme_dark--timeline_arrow_box-hover: rgb(202, 204, 206); - - --theme_dark--checkbox: transparent; - --theme_dark--checkbox-text: #fff; - --theme_dark--checkbox-hover: rgb(71, 76, 80); - --theme_dark--checkbox-hover-text: #fff; - --theme_dark--checkbox-active: var(--theme_dark--accent); - --theme_dark--checkbox-active-text: #fff; - - --theme_dark--toggle_on: var(--theme_dark--accent); - --theme_dark--toggle_off: rgba(202, 204, 206, 0.3); - --theme_dark--toggle_dot: #fff; - - --theme_dark--input: rgba(15, 15, 15, 0.3); - --theme_dark--input-border: rgba(15, 15, 15, 0.2); - --theme_dark--filter: rgb(80, 85, 88); - --theme_dark--sub_filter: rgba(255, 255, 255, 0.02); - --theme_dark--tag_select: rgb(55, 60, 63); - /* three-dot menus for images & bookmarks */ - --theme_dark--button_semitransparent: rgba(0, 0, 0, 0.6); - --theme_dark--button-hover: rgb(71, 76, 80); - --theme_dark--button-active: rgb(63, 68, 71); - /* change cover | reposition, cell expansions: <-> open, 123, phone/email/url */ - --theme_dark--expand: rgb(47, 52, 55); - --theme_dark--expand_icon: #fff; - --theme_dark--expand-text: #fff; - --theme_dark--expand-hover: rgb(98, 102, 104); - --theme_dark--expand-active: rgb(120, 123, 123); - --theme_dark--reminder_future: #2eaadc; - --theme_dark--reminder_past: #eb5757; - --theme_dark--divider: rgba(255, 255, 255, 0.07); - - --theme_dark--embed_block: rgb(63, 68, 71); - --theme_dark--equation_block: rgb(55, 60, 63); - --theme_dark--equation_editor: rgba(15, 15, 15, 0.3); - --theme_dark--equation_inline: rgba(255, 255, 255, 0.2); - --theme_dark--equation_inline-text: var(--theme_dark--text); - --theme_dark--equation_error-text: rgba(235, 87, 87, 0.8); - --theme_dark--equation_error_block: rgba(235, 87, 87, 0.15); - --theme_dark--equation_error_inline-text: #eb5757; - - --theme_dark--reposition_cover: rgba(0, 0, 0, 0.4); - --theme_dark--reposition_cover-text: #fff; - --theme_dark--resizer: rgba(15, 15, 15, 0.6); - --theme_dark--resizer-border: rgba(255, 255, 255, 0.9); - --theme_dark--tooltip: rgb(202, 204, 206); - --theme_dark--tooltip-text: rgb(15, 15, 15); - --theme_dark--tooltip-text_grey: rgba(47, 52, 55, 0.6); - - --theme_dark--help: rgb(80, 85, 88); - --theme_dark--help-hover: rgb(98, 102, 104); - - --theme_dark--settings_danger_button-text: rgb(235, 87, 87); - --theme_dark--settings_danger_button-border: rgba(235, 87, 87, 0.5); - --theme_dark--settings_danger_button-hover: rgba(235, 87, 87, 0.1); - - --theme_dark--scrollbar_track: rgba(202, 204, 206, 0.04); - --theme_dark--scrollbar_thumb: #474c50; - --theme_dark--scrollbar_thumb-hover: rgba(202, 204, 206, 0.3); - - --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_body-size: 16px; - --theme_dark--font_quote-size: 1.2em; - --theme_dark--font_code-size: 85%; - --theme_dark--font_ui-size: 14px; - /* sidebar titles, block copy & caption buttons */ - --theme_dark--font_ui_small-size: 11.5px; - --theme_dark--font_popout_title-size: 11px; - --theme_dark--font_description-size: 12px; - --theme_dark--font_callout_icon-size: 16.8px; - --theme_dark--font_help_icon-size: 20px; - - --theme_dark--text_block-line_height: 1.5; - --theme_dark--text_block-margin_top: 1px; - - --theme_dark--icon: rgba(202, 204, 206, 0.6); - --theme_dark--icon_topbar: rgb(202, 204, 206); - --theme_dark--text: rgba(255, 255, 255, 0.9); - --theme_dark--text_property: rgba(255, 255, 255, 0.6); - --theme_dark--text_placeholder: rgba(255, 255, 255, 0.4); - --theme_dark--text_pseudo: rgba(202, 204, 206, 0.4); - --theme_dark--text_sidebar: rgba(255, 255, 255, 0.6); - - --theme_dark--code_inline: rgba(135, 131, 120, 0.15); - --theme_dark--code_inline-text: #eb5757; - - --theme_dark--code: rgb(63, 68, 71); - --theme_dark--code_plain: var(--theme_dark--text); - --theme_dark--code_function: var(--theme_dark--code_plain); - --theme_dark--code_parameter: var(--theme_dark--code_plain); - --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_plain); - --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_plain); - --theme_dark--code_class: var(--theme_dark--code_plain); - --theme_dark--code_pseudo-element: var(--theme_dark--code_plain); - --theme_dark--code_pseudo-class: var(--theme_dark--code_plain); - --theme_dark--code_attribute: var(--theme_dark--code_plain); - --theme_dark--code_value: var(--theme_dark--code_plain); - --theme_dark--code_unit: var(--theme_dark--code_plain); - --theme_dark--code_comment: hsl(30, 20%, 50%); - --theme_dark--code_punctuation: var(--theme_dark--code_plain); - --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%); - - --theme_dark--text_grey: 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--highlight-text: var(--theme_dark--text); - --theme_dark--highlight_grey: rgb(69, 75, 78); - --theme_dark--highlight_grey-text: var(--theme_dark--highlight-text); - --theme_dark--highlight_brown: rgb(67, 64, 64); - --theme_dark--highlight_brown-text: var(--theme_dark--highlight-text); - --theme_dark--highlight_orange: rgb(89, 74, 58); - --theme_dark--highlight_orange-text: var(--theme_dark--highlight-text); - --theme_dark--highlight_yellow: rgb(89, 86, 59); - --theme_dark--highlight_yellow-text: var(--theme_dark--highlight-text); - --theme_dark--highlight_green: rgb(53, 76, 75); - --theme_dark--highlight_green-text: var(--theme_dark--highlight-text); - --theme_dark--highlight_blue: rgb(54, 73, 84); - --theme_dark--highlight_blue-text: var(--theme_dark--highlight-text); - --theme_dark--highlight_purple: rgb(68, 63, 87); - --theme_dark--highlight_purple-text: var(--theme_dark--highlight-text); - --theme_dark--highlight_pink: rgb(83, 59, 76); - --theme_dark--highlight_pink-text: var(--theme_dark--highlight-text); - --theme_dark--highlight_red: rgb(89, 65, 65); - --theme_dark--highlight_red-text: var(--theme_dark--highlight-text); - - --theme_dark--block-text: var(--theme_dark--text); - --theme_dark--block_grey: rgb(69, 75, 78); - --theme_dark--block_grey-text: var(--theme_dark--block-text); - --theme_dark--block_brown: rgb(67, 64, 64); - --theme_dark--block_brown-text: var(--theme_dark--block-text); - --theme_dark--block_orange: rgb(89, 74, 58); - --theme_dark--block_orange-text: var(--theme_dark--block-text); - --theme_dark--block_yellow: rgb(89, 86, 59); - --theme_dark--block_yellow-text: var(--theme_dark--block-text); - --theme_dark--block_green: rgb(53, 76, 75); - --theme_dark--block_green-text: var(--theme_dark--block-text); - --theme_dark--block_blue: rgb(54, 73, 84); - --theme_dark--block_blue-text: var(--theme_dark--block-text); - --theme_dark--block_purple: rgb(68, 63, 87); - --theme_dark--block_purple-text: var(--theme_dark--block-text); - --theme_dark--block_pink: rgb(83, 59, 76); - --theme_dark--block_pink-text: var(--theme_dark--block-text); - --theme_dark--block_red: rgb(89, 65, 65); - --theme_dark--block_red-text: var(--theme_dark--block-text); - - --theme_dark--tag-text: var(--theme_dark--text); - --theme_dark--tag_default: rgb(80, 85, 88); - --theme_dark--tag_default-text: var(--theme_dark--tag-text); - --theme_dark--tag_plan: var(--theme_dark--tag_default); - --theme_dark--tag_plan-text: rgba(255, 255, 255, 0.6); - --theme_dark--tag_new: rgb(235, 87, 87); - --theme_dark--tag_new-text: #fff; - --theme_dark--tag_grey: rgba(151, 154, 155, 0.5); - --theme_dark--tag_grey-text: var(--theme_dark--tag-text); - --theme_dark--tag_brown: rgba(147, 114, 100, 0.5); - --theme_dark--tag_brown-text: var(--theme_dark--tag-text); - --theme_dark--tag_orange: rgba(255, 163, 68, 0.5); - --theme_dark--tag_orange-text: var(--theme_dark--tag-text); - --theme_dark--tag_yellow: rgba(255, 220, 73, 0.5); - --theme_dark--tag_yellow-text: var(--theme_dark--tag-text); - --theme_dark--tag_green: rgba(77, 171, 154, 0.5); - --theme_dark--tag_green-text: var(--theme_dark--tag-text); - --theme_dark--tag_blue: rgba(82, 156, 202, 0.5); - --theme_dark--tag_blue-text: var(--theme_dark--tag-text); - --theme_dark--tag_purple: rgba(154, 109, 215, 0.5); - --theme_dark--tag_purple-text: var(--theme_dark--tag-text); - --theme_dark--tag_pink: rgba(226, 85, 161, 0.5); - --theme_dark--tag_pink-text: var(--theme_dark--tag-text); - --theme_dark--tag_red: rgba(255, 115, 105, 0.5); - --theme_dark--tag_red-text: var(--theme_dark--tag-text); - - --theme_dark--callout-text: var(--theme_dark--text); - --theme_dark--callout_grey: rgba(69, 75, 78, 0.3); - --theme_dark--callout_grey-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); - - /** light **/ - - --theme_light--page-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--dragarea: rgba(55, 53, 47, 0.04); - --theme_light--page: #fff; - --theme_light--sidebar: rgb(247, 246, 243); - --theme_light--sidebar_popout: #fff; - --theme_light--preview: #fff; - --theme_light--preview_shadow: rgba(0, 0, 0, 0.4); - --theme_light--quickfind_shadow: rgba(15, 15, 15, 0.6); - --theme_light--popout: #fff; - --theme_light--shadow: rgba(15, 15, 15, 0.1); - --theme_light--introduction_overlay: rgba(247, 246, 243, 0.8); - - --theme_light--selected: rgba(46, 170, 220, 0.2); - --theme_light--accent: rgb(46, 170, 220); - --theme_light--accent-text: #fff; - --theme_light--accent_semitransparent: rgba(46, 170, 220, 0.15); - --theme_light--accent_button-hover: rgb(6, 156, 205); - --theme_light--accent_button-active: rgb(0, 141, 190); - --theme_light--accent_date-hover: rgba(45, 156, 219, 0.2); - --theme_light--notion_ui_link-hover: #eb5757; - --theme_light--notion_plan_choose_checkmark_hue-rotate: 0deg; - - --theme_light--db_card: #fff; - --theme_light--db_card-hover: rgba(55, 53, 47, 0.03); - --theme_light--db_card_preview: rgba(55, 53, 47, 0.024); - --theme_light--db_weekend: rgb(247, 246, 243); - --theme_light--db_today: rgb(235, 87, 87); - --theme_light--db_today-text: #fff; - --theme_light--timeline_divider_thin: rgba(55, 53, 47, 0.09); - --theme_light--timeline_arrow: #fff; - --theme_light--timeline_arrow_box: rgba(55, 53, 47, 0.4); - --theme_light--timeline_arrow_box-hover: rgba(55, 53, 47, 0.8); - - --theme_light--checkbox: transparent; - --theme_light--checkbox-text: #000; - --theme_light--checkbox-hover: rgba(55, 53, 47, 0.08); - --theme_light--checkbox-hover-text: #000; - --theme_light--checkbox-active: var(--theme_light--accent); - --theme_light--checkbox-active-text: #fff; - - --theme_light--toggle_on: var(--theme_light--accent); - --theme_light--toggle_off: rgba(135, 131, 120, 0.3); - --theme_light--toggle_dot: #fff; - - --theme_light--input: rgba(242, 241, 238, 0.6); - --theme_light--input-border: rgba(15, 15, 15, 0.1); - --theme_light--filter: #fff; - --theme_light--sub_filter: rgba(0, 0, 0, 0.02); - --theme_light--tag_select: rgba(242, 241, 238, 0.6); - /* three-dot menus for images & bookmarks */ - --theme_light--button_semitransparent: rgba(0, 0, 0, 0.6); - --theme_light--button-hover: rgba(55, 53, 47, 0.08); - --theme_light--button-active: rgba(55, 53, 47, 0.16); - /* change cover | reposition, cell expansions: <-> open, 123, phone/email/url */ - --theme_light--expand: #fff; - --theme_light--expand_icon: rgba(55, 53, 47, 0.6); - --theme_light--expand-text: rgba(55, 53, 47, 0.6); - --theme_light--expand-hover: rgb(239, 239, 238); - --theme_light--expand-active: rgb(223, 223, 222); - --theme_light--reminder_future: #2eaadc; - --theme_light--reminder_past: #eb5757; - --theme_light--divider: rgba(55, 53, 47, 0.09); - - --theme_light--embed_block: rgb(242, 241, 238); - --theme_light--equation_block: rgb(247, 246, 243); - --theme_light--equation_editor: rgba(242, 241, 238, 0.6); - --theme_light--equation_inline: rgba(46, 170, 220, 0.2); - --theme_light--equation_inline-text: var(--theme_light--text); - --theme_light--equation_error-text: rgba(235, 87, 87, 0.8); - --theme_light--equation_error_block: rgba(235, 87, 87, 0.15); - --theme_light--equation_error_inline-text: #eb5757; - - --theme_light--reposition_cover: rgba(0, 0, 0, 0.4); - --theme_light--reposition_cover-text: #fff; - --theme_light--resizer: rgba(15, 15, 15, 0.6); - --theme_light--resizer-border: rgba(255, 255, 255, 0.9); - --theme_light--tooltip: rgb(15, 15, 15); - --theme_light--tooltip-text: rgba(255, 255, 255, 0.9); - --theme_light--tooltip-text_grey: rgba(206, 205, 202, 0.6); - - --theme_light--help: #fff; - --theme_light--help-hover: rgb(239, 239, 238); - - --theme_light--settings_danger_button-text: rgb(235, 87, 87); - --theme_light--settings_danger_button-border: rgba(235, 87, 87, 0.5); - --theme_light--settings_danger_button-hover: rgba(235, 87, 87, 0.1); - - --theme_light--scrollbar_track: #edece9; - --theme_light--scrollbar_thumb: #d3d1cb; - --theme_light--scrollbar_thumb-hover: #aeaca6; - - --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_body-size: 16px; - --theme_light--font_quote-size: 1.2em; - --theme_light--font_code-size: 85%; - --theme_light--font_ui-size: 14px; - /* sidebar titles, block copy & caption buttons */ - --theme_light--font_ui_small-size: 11.5px; - --theme_light--font_popout_title-size: 11px; - --theme_light--font_description-size: 12px; - --theme_light--font_callout_icon-size: 16.8px; - --theme_light--font_help_icon-size: 20px; - - --theme_light--text_block-line_height: 1.5; - --theme_light--text_block-margin_top: 1px; - - --theme_light--icon: rgba(55, 53, 47, 0.4); - --theme_light--icon_topbar: rgba(55, 53, 47, 0.8); - --theme_light--text: rgb(55, 53, 47); - --theme_light--text_property: rgba(55, 53, 47, 0.6); - --theme_light--text_placeholder: rgba(55, 53, 47, 0.4); - --theme_light--text_pseudo: rgba(55, 53, 47, 0.3); - --theme_light--text_sidebar: rgba(25, 23, 17, 0.6); - - --theme_light--code_inline: rgba(135, 131, 120, 0.15); - --theme_light--code_inline-text: #eb5757; - - --theme_light--code: rgb(247, 246, 243); - --theme_light--code_plain: var(--theme_light--text); - --theme_light--code_function: #dd4a68; - --theme_light--code_parameter: var(--theme_light--code_plain); - --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_plain); - --theme_light--code_class: var(--theme_light--code_plain); - --theme_light--code_pseudo-element: var(--theme_light--code_plain); - --theme_light--code_pseudo-class: var(--theme_light--code_plain); - --theme_light--code_attribute: var(--theme_light--code_plain); - --theme_light--code_value: var(--theme_light--code_plain); - --theme_light--code_unit: var(--theme_light--code_plain); - --theme_light--code_comment: #708090; - --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: #708090; - --theme_light--code_number: #905; - --theme_light--code_string: #690; - --theme_light--code_boolean: #905; - - --theme_light--text_grey: 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--highlight-text: var(--theme_light--text); - --theme_light--highlight_grey: rgb(235, 236, 237); - --theme_light--highlight_grey-text: var(--theme_light--highlight-text); - --theme_light--highlight_brown: rgb(233, 229, 227); - --theme_light--highlight_brown-text: var(--theme_light--highlight-text); - --theme_light--highlight_orange: rgb(250, 235, 221); - --theme_light--highlight_orange-text: var(--theme_light--highlight-text); - --theme_light--highlight_yellow: rgb(251, 243, 219); - --theme_light--highlight_yellow-text: var(--theme_light--highlight-text); - --theme_light--highlight_green: rgb(221, 237, 234); - --theme_light--highlight_green-text: var(--theme_light--highlight-text); - --theme_light--highlight_blue: rgb(221, 235, 241); - --theme_light--highlight_blue-text: var(--theme_light--highlight-text); - --theme_light--highlight_purple: rgb(234, 228, 242); - --theme_light--highlight_purple-text: var(--theme_light--highlight-text); - --theme_light--highlight_pink: rgb(244, 223, 235); - --theme_light--highlight_pink-text: var(--theme_light--highlight-text); - --theme_light--highlight_red: rgb(251, 228, 228); - --theme_light--highlight_red-text: var(--theme_light--highlight-text); - - --theme_light--block-text: var(--theme_light--text); - --theme_light--block_grey: rgb(235, 236, 237); - --theme_light--block_grey-text: var(--theme_light--block-text); - --theme_light--block_brown: rgb(233, 229, 227); - --theme_light--block_brown-text: var(--theme_light--block-text); - --theme_light--block_orange: rgb(250, 235, 221); - --theme_light--block_orange-text: var(--theme_light--block-text); - --theme_light--block_yellow: rgb(251, 243, 219); - --theme_light--block_yellow-text: var(--theme_light--block-text); - --theme_light--block_green: rgb(221, 237, 234); - --theme_light--block_green-text: var(--theme_light--block-text); - --theme_light--block_blue: rgb(221, 235, 241); - --theme_light--block_blue-text: var(--theme_light--block-text); - --theme_light--block_purple: rgb(234, 228, 242); - --theme_light--block_purple-text: var(--theme_light--block-text); - --theme_light--block_pink: rgb(244, 223, 235); - --theme_light--block_pink-text: var(--theme_light--block-text); - --theme_light--block_red: rgb(251, 228, 228); - --theme_light--block_red-text: var(--theme_light--block-text); - - --theme_light--tag-text: var(--theme_light--text); - --theme_light--tag_default: rgba(206, 205, 202, 0.5); - --theme_light--tag_default-text: var(--theme_light--tag-text); - --theme_light--tag_plan: var(--theme_light--tag_default); - --theme_light--tag_plan-text: rgba(55, 53, 47, 0.6); - --theme_light--tag_new: rgb(235, 87, 87); - --theme_light--tag_new-text: #fff; - --theme_light--tag_grey: rgba(140, 46, 0, 0.2); - --theme_light--tag_grey-text: var(--theme_light--tag-text); - --theme_light--tag_brown: rgba(140, 46, 0, 0.2); - --theme_light--tag_brown-text: var(--theme_light--tag-text); - --theme_light--tag_orange: rgba(245, 93, 0, 0.2); - --theme_light--tag_orange-text: var(--theme_light--tag-text); - --theme_light--tag_yellow: rgba(233, 168, 0, 0.2); - --theme_light--tag_yellow-text: var(--theme_light--tag-text); - --theme_light--tag_green: rgba(0, 135, 107, 0.2); - --theme_light--tag_green-text: var(--theme_light--tag-text); - --theme_light--tag_blue: rgba(0, 120, 223, 0.2); - --theme_light--tag_blue-text: var(--theme_light--tag-text); - --theme_light--tag_purple: rgba(103, 36, 222, 0.2); - --theme_light--tag_purple-text: var(--theme_light--tag-text); - --theme_light--tag_pink: rgba(221, 0, 129, 0.2); - --theme_light--tag_pink-text: var(--theme_light--tag-text); - --theme_light--tag_red: rgba(255, 0, 26, 0.2); - --theme_light--tag_red-text: var(--theme_light--tag-text); - - --theme_light--callout-text: var(--theme_light--text); - --theme_light--callout_grey: rgba(235, 236, 237, 0.3); - --theme_light--callout_grey-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); -} - -.notion-dark-theme { - --theme--page-width: var(--theme_dark--page-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--dragarea: var(--theme_dark--dragarea); - --theme--page: var(--theme_dark--page); - --theme--sidebar: var(--theme_dark--sidebar); - --theme--sidebar_popout: var(--theme_dark--sidebar_popout); - --theme--preview: var(--theme_dark--preview); - --theme--preview_shadow: var(--theme_dark--preview_shadow); - --theme--quickfind_shadow: var(--theme_dark--quickfind_shadow); - --theme--popout: var(--theme_dark--popout); - --theme--shadow: var(--theme_dark--shadow); - --theme--introduction_overlay: var(--theme_dark--introduction_overlay); - - --theme--selected: var(--theme_dark--selected); - --theme--accent: var(--theme_dark--accent); - --theme--accent-text: var(--theme_dark--accent-text); - --theme--accent_semitransparent: var(--theme_dark--accent_semitransparent); - --theme--accent_button-hover: var(--theme_dark--accent_button-hover); - --theme--accent_button-active: var(--theme_dark--accent_button-active); - --theme--accent_date-hover: var(--theme_dark--accent_date-hover); - --theme--notion_ui_link-hover: var(--theme_dark--notion_ui_link-hover); - --theme--notion_plan_choose_checkmark_hue-rotate: var( - --theme_dark--notion_plan_choose_checkmark_hue-rotate - ); - - --theme--db_card: var(--theme_dark--db_card); - --theme--db_card-hover: var(--theme_dark--db_card-hover); - --theme--db_card_preview: var(--theme_dark--db_card_preview); - --theme--db_weekend: var(--theme_dark--db_weekend); - --theme--db_today: var(--theme_dark--db_today); - --theme--db_today-text: var(--theme_dark--db_today-text); - --theme--timeline_divider_thin: var(--theme_dark--timeline_divider_thin); - --theme--timeline_arrow: var(--theme_dark--timeline_arrow); - --theme--timeline_arrow_box: var(--theme_dark--timeline_arrow_box); - --theme--timeline_arrow_box-hover: var( - --theme_dark--timeline_arrow_box-hover - ); - - --theme--checkbox: var(--theme_dark--checkbox); - --theme--checkbox-text: var(--theme_dark--checkbox-text); - --theme--checkbox-hover: var(--theme_dark--checkbox-hover); - --theme--checkbox-hover-text: var(--theme_dark--checkbox-hover-text); - --theme--checkbox-active: var(--theme_dark--checkbox-active); - --theme--checkbox-active-text: var(--theme_dark--checkbox-active-text); - - --theme--toggle_on: var(--theme_dark--toggle_on); - --theme--toggle_off: var(--theme_dark--toggle_off); - --theme--toggle_dot: var(--theme_dark--toggle_dot); - - --theme--input: var(--theme_dark--input); - --theme--input-border: var(--theme_dark--input-border); - --theme--filter: var(--theme_dark--filter); - --theme--sub_filter: var(--theme_dark--sub_filter); - --theme--tag_select: var(--theme_dark--tag_select); - --theme--button_semitransparent: var(--theme_dark--button_semitransparent); - --theme--button-hover: var(--theme_dark--button-hover); - --theme--button-active: var(--theme_dark--button-active); - --theme--expand: var(--theme_dark--expand); - --theme--expand_icon: var(--theme_dark--expand_icon); - --theme--expand-text: var(--theme_dark--expand-text); - --theme--expand-hover: var(--theme_dark--expand-hover); - --theme--expand-active: var(--theme_dark--expand-active); - --theme--reminder_future: var(--theme_dark--reminder_future); - --theme--reminder_past: var(--theme_dark--reminder_past); - --theme--divider: var(--theme_dark--divider); - - --theme--embed_block: var(--theme_dark--embed_block); - --theme--equation_block: var(--theme_dark--equation_block); - --theme--equation_editor: var(--theme_dark--equation_editor); - --theme--equation_inline: var(--theme_dark--equation_inline); - --theme--equation_inline-text: var(--theme_dark--equation_inline-text); - --theme--equation_error-text: var(--theme_dark--equation_error-text); - --theme--equation_error_block: var(--theme_dark--equation_error_block); - --theme--equation_error_inline-text: var( - --theme_dark--equation_error_inline-text - ); - - --theme--reposition_cover: var(--theme_dark--reposition_cover); - --theme--reposition_cover-text: var(--theme_dark--reposition_cover-text); - --theme--resizer: var(--theme_dark--resizer); - --theme--resizer-border: var(--theme_dark--resizer-border); - --theme--tooltip: var(--theme_dark--tooltip); - --theme--tooltip-text: var(--theme_dark--tooltip-text); - --theme--tooltip-text_grey: var(--theme_dark--tooltip-text_grey); - - --theme--help: var(--theme_dark--help); - --theme--help-hover: var(--theme_dark--help-hover); - - --theme--settings_danger_button-text: var( - --theme_dark--settings_danger_button-text - ); - --theme--settings_danger_button-border: var( - --theme_dark--settings_danger_button-border - ); - --theme--settings_danger_button-hover: var( - --theme_dark--settings_danger_button-hover - ); - - --theme--scrollbar_track: var(--theme_dark--scrollbar_track); - --theme--scrollbar_thumb: var(--theme_dark--scrollbar_thumb); - --theme--scrollbar_thumb-hover: var(--theme_dark--scrollbar_thumb-hover); - - --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_body-size: var(--theme_dark--font_body-size); - --theme--font_quote-size: var(--theme_dark--font_quote-size); - --theme--font_code-size: var(--theme_dark--font_code-size); - --theme--font_ui-size: var(--theme_dark--font_ui-size); - --theme--font_ui_small-size: var(--theme_dark--font_ui_small-size); - --theme--font_popout_title-size: var(--theme_dark--font_popout_title-size); - --theme--font_description-size: var(--theme_dark--font_description-size); - --theme--font_callout_icon-size: var(--theme_dark--font_callout_icon-size); - --theme--font_help_icon-size: var(--theme_dark--font_help_icon-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--icon: var(--theme_dark--icon); - --theme--icon_topbar: var(--theme_dark--icon_topbar); - --theme--text: var(--theme_dark--text); - --theme--text_property: var(--theme_dark--text_property); - --theme--text_placeholder: var(--theme_dark--text_placeholder); - --theme--text_pseudo: var(--theme_dark--text_pseudo); - --theme--text_sidebar: var(--theme_dark--text_sidebar); - - --theme--code_inline: var(--theme_dark--code_inline); - --theme--code_inline-text: var(--theme_dark--code_inline-text); - - --theme--code: var(--theme_dark--code); - --theme--code_plain: var(--theme_dark--code_plain); - --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); - - --theme--text_grey: var(--theme_dark--text_grey); - --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--highlight-text: var(--theme_dark--highlight-text); - --theme--highlight_grey: var(--theme_dark--highlight_grey); - --theme--highlight_grey-text: var(--theme_dark--highlight_grey-text); - --theme--highlight_brown: var(--theme_dark--highlight_brown); - --theme--highlight_brown-text: var(--theme_dark--highlight_brown-text); - --theme--highlight_orange: var(--theme_dark--highlight_orange); - --theme--highlight_orange-text: var(--theme_dark--highlight_orange-text); - --theme--highlight_yellow: var(--theme_dark--highlight_yellow); - --theme--highlight_yellow-text: var(--theme_dark--highlight_yellow-text); - --theme--highlight_green: var(--theme_dark--highlight_green); - --theme--highlight_green-text: var(--theme_dark--highlight_green-text); - --theme--highlight_blue: var(--theme_dark--highlight_blue); - --theme--highlight_blue-text: var(--theme_dark--highlight_blue-text); - --theme--highlight_purple: var(--theme_dark--highlight_purple); - --theme--highlight_purple-text: var(--theme_dark--highlight_purple-text); - --theme--highlight_pink: var(--theme_dark--highlight_pink); - --theme--highlight_pink-text: var(--theme_dark--highlight_pink-text); - --theme--highlight_red: var(--theme_dark--highlight_red); - --theme--highlight_red-text: var(--theme_dark--highlight_red-text); - - --theme--block-text: var(--theme_dark--block-text); - --theme--block_grey: var(--theme_dark--block_grey); - --theme--block_grey-text: var(--theme_dark--block_grey-text); - --theme--block_brown: var(--theme_dark--block_brown); - --theme--block_brown-text: var(--theme_dark--block_brown-text); - --theme--block_orange: var(--theme_dark--block_orange); - --theme--block_orange-text: var(--theme_dark--block_orange-text); - --theme--block_yellow: var(--theme_dark--block_yellow); - --theme--block_yellow-text: var(--theme_dark--block_yellow-text); - --theme--block_green: var(--theme_dark--block_green); - --theme--block_green-text: var(--theme_dark--block_green-text); - --theme--block_blue: var(--theme_dark--block_blue); - --theme--block_blue-text: var(--theme_dark--block_blue-text); - --theme--block_purple: var(--theme_dark--block_purple); - --theme--block_purple-text: var(--theme_dark--block_purple-text); - --theme--block_pink: var(--theme_dark--block_pink); - --theme--block_pink-text: var(--theme_dark--block_pink-text); - --theme--block_red: var(--theme_dark--block_red); - --theme--block_red-text: var(--theme_dark--block_red-text); - - --theme--tag-text: var(--theme_dark--tag-text); - --theme--tag_default: var(--theme_dark--tag_default); - --theme--tag_default-text: var(--theme_dark--tag_default-text); - --theme--tag_plan: var(--theme_dark--tag_plan); - --theme--tag_plan-text: var(--theme_dark--tag_plan-text); - --theme--tag_new: var(--theme_dark--tag_new); - --theme--tag_new-text: var(--theme_dark--tag_new-text); - --theme--tag_grey: var(--theme_dark--tag_grey); - --theme--tag_grey-text: var(--theme_dark--tag_grey-text); - --theme--tag_brown: var(--theme_dark--tag_brown); - --theme--tag_brown-text: var(--theme_dark--tag_brown-text); - --theme--tag_orange: var(--theme_dark--tag_orange); - --theme--tag_orange-text: var(--theme_dark--tag_orange-text); - --theme--tag_yellow: var(--theme_dark--tag_yellow); - --theme--tag_yellow-text: var(--theme_dark--tag_yellow-text); - --theme--tag_green: var(--theme_dark--tag_green); - --theme--tag_green-text: var(--theme_dark--tag_green-text); - --theme--tag_blue: var(--theme_dark--tag_blue); - --theme--tag_blue-text: var(--theme_dark--tag_blue-text); - --theme--tag_purple: var(--theme_dark--tag_purple); - --theme--tag_purple-text: var(--theme_dark--tag_purple-text); - --theme--tag_pink: var(--theme_dark--tag_pink); - --theme--tag_pink-text: var(--theme_dark--tag_pink-text); - --theme--tag_red: var(--theme_dark--tag_red); - --theme--tag_red-text: var(--theme_dark--tag_red-text); - - --theme--callout-text: var(--theme_dark--callout-text); - --theme--callout_grey: var(--theme_dark--callout_grey); - --theme--callout_grey-text: var(--theme_dark--callout_grey-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); -} - -.notion-light-theme { - --theme--page-width: var(--theme_light--page-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--dragarea: var(--theme_light--dragarea); - --theme--page: var(--theme_light--page); - --theme--sidebar: var(--theme_light--sidebar); - --theme--sidebar_popout: var(--theme_light--sidebar_popout); - --theme--preview: var(--theme_light--preview); - --theme--preview_shadow: var(--theme_light--preview_shadow); - --theme--quickfind_shadow: var(--theme_light--quickfind_shadow); - --theme--popout: var(--theme_light--popout); - --theme--shadow: var(--theme_light--shadow); - --theme--introduction_overlay: var(--theme_light--introduction_overlay); - - --theme--selected: var(--theme_light--selected); - --theme--accent: var(--theme_light--accent); - --theme--accent-text: var(--theme_light--accent-text); - --theme--accent_semitransparent: var(--theme_light--accent_semitransparent); - --theme--accent_button-hover: var(--theme_light--accent_button-hover); - --theme--accent_button-active: var(--theme_light--accent_button-active); - --theme--accent_date-hover: var(--theme_light--accent_date-hover); - --theme--notion_ui_link-hover: var(--theme_light--notion_ui_link-hover); - --theme--notion_plan_choose_checkmark_hue-rotate: var( - --theme_light--notion_plan_choose_checkmark_hue-rotate - ); - - --theme--db_card: var(--theme_light--db_card); - --theme--db_card-hover: var(--theme_light--db_card-hover); - --theme--db_card_preview: var(--theme_light--db_card_preview); - --theme--db_weekend: var(--theme_light--db_weekend); - --theme--db_today: var(--theme_light--db_today); - --theme--db_today-text: var(--theme_light--db_today-text); - --theme--timeline_divider_thin: var(--theme_light--timeline_divider_thin); - --theme--timeline_arrow: var(--theme_light--timeline_arrow); - --theme--timeline_arrow_box: var(--theme_light--timeline_arrow_box); - --theme--timeline_arrow_box-hover: var( - --theme_light--timeline_arrow_box-hover - ); - - --theme--checkbox: var(--theme_light--checkbox); - --theme--checkbox-text: var(--theme_light--checkbox-text); - --theme--checkbox-hover: var(--theme_light--checkbox-hover); - --theme--checkbox-hover-text: var(--theme_light--checkbox-hover-text); - --theme--checkbox-active: var(--theme_light--checkbox-active); - --theme--checkbox-active-text: var(--theme_light--checkbox-active-text); - - --theme--toggle_on: var(--theme_light--toggle_on); - --theme--toggle_off: var(--theme_light--toggle_off); - --theme--toggle_dot: var(--theme_light--toggle_dot); - - --theme--input: var(--theme_light--input); - --theme--input-border: var(--theme_light--input-border); - --theme--filter: var(--theme_light--filter); - --theme--sub_filter: var(--theme_light--sub_filter); - --theme--tag_select: var(--theme_light--tag_select); - --theme--button_semitransparent: var(--theme_light--button_semitransparent); - --theme--button-hover: var(--theme_light--button-hover); - --theme--button-active: var(--theme_light--button-active); - --theme--expand: var(--theme_light--expand); - --theme--expand_icon: var(--theme_light--expand_icon); - --theme--expand-text: var(--theme_light--expand-text); - --theme--expand-hover: var(--theme_light--expand-hover); - --theme--expand-active: var(--theme_light--expand-active); - --theme--reminder_future: var(--theme_light--reminder_future); - --theme--reminder_past: var(--theme_light--reminder_past); - --theme--divider: var(--theme_light--divider); - - --theme--embed_block: var(--theme_light--embed_block); - --theme--equation_block: var(--theme_light--equation_block); - --theme--equation_editor: var(--theme_light--equation_editor); - --theme--equation_inline: var(--theme_light--equation_inline); - --theme--equation_inline-text: var(--theme_light--equation_inline-text); - --theme--equation_error-text: var(--theme_light--equation_error-text); - --theme--equation_error_block: var(--theme_light--equation_error_block); - --theme--equation_error_inline-text: var( - --theme_light--equation_error_inline-text - ); - - --theme--reposition_cover: var(--theme_light--reposition_cover); - --theme--reposition_cover-text: var(--theme_light--reposition_cover-text); - --theme--resizer: var(--theme_light--resizer); - --theme--resizer-border: var(--theme_light--resizer-border); - --theme--tooltip: var(--theme_light--tooltip); - --theme--tooltip-text: var(--theme_light--tooltip-text); - --theme--tooltip-text_grey: var(--theme_light--tooltip-text_grey); - - --theme--help: var(--theme_light--help); - --theme--help-hover: var(--theme_light--help-hover); - - --theme--settings_danger_button-text: var( - --theme_light--settings_danger_button-text - ); - --theme--settings_danger_button-border: var( - --theme_light--settings_danger_button-border - ); - --theme--settings_danger_button-hover: var( - --theme_light--settings_danger_button-hover - ); - - --theme--scrollbar_track: var(--theme_light--scrollbar_track); - --theme--scrollbar_thumb: var(--theme_light--scrollbar_thumb); - --theme--scrollbar_thumb-hover: var(--theme_light--scrollbar_thumb-hover); - - --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_body-size: var(--theme_light--font_body-size); - --theme--font_quote-size: var(--theme_light--font_quote-size); - --theme--font_code-size: var(--theme_light--font_code-size); - --theme--font_ui-size: var(--theme_light--font_ui-size); - --theme--font_ui_small-size: var(--theme_light--font_ui_small-size); - --theme--font_popout_title-size: var(--theme_light--font_popout_title-size); - --theme--font_description-size: var(--theme_light--font_description-size); - --theme--font_callout_icon-size: var(--theme_light--font_callout_icon-size); - --theme--font_help_icon-size: var(--theme_light--font_help_icon-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--icon: var(--theme_light--icon); - --theme--icon_topbar: var(--theme_light--icon_topbar); - --theme--text: var(--theme_light--text); - --theme--text_property: var(--theme_light--text_property); - --theme--text_placeholder: var(--theme_light--text_placeholder); - --theme--text_pseudo: var(--theme_light--text_pseudo); - --theme--text_sidebar: var(--theme_light--text_sidebar); - - --theme--code_inline: var(--theme_light--code_inline); - --theme--code_inline-text: var(--theme_light--code_inline-text); - - --theme--code: var(--theme_light--code); - --theme--code_plain: var(--theme_light--code_plain); - --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); - - --theme--text_grey: var(--theme_light--text_grey); - --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--highlight-text: var(--theme_light--highlight-text); - --theme--highlight_grey: var(--theme_light--highlight_grey); - --theme--highlight_grey-text: var(--theme_light--highlight_grey-text); - --theme--highlight_brown: var(--theme_light--highlight_brown); - --theme--highlight_brown-text: var(--theme_light--highlight_brown-text); - --theme--highlight_orange: var(--theme_light--highlight_orange); - --theme--highlight_orange-text: var(--theme_light--highlight_orange-text); - --theme--highlight_yellow: var(--theme_light--highlight_yellow); - --theme--highlight_yellow-text: var(--theme_light--highlight_yellow-text); - --theme--highlight_green: var(--theme_light--highlight_green); - --theme--highlight_green-text: var(--theme_light--highlight_green-text); - --theme--highlight_blue: var(--theme_light--highlight_blue); - --theme--highlight_blue-text: var(--theme_light--highlight_blue-text); - --theme--highlight_purple: var(--theme_light--highlight_purple); - --theme--highlight_purple-text: var(--theme_light--highlight_purple-text); - --theme--highlight_pink: var(--theme_light--highlight_pink); - --theme--highlight_pink-text: var(--theme_light--highlight_pink-text); - --theme--highlight_red: var(--theme_light--highlight_red); - --theme--highlight_red-text: var(--theme_light--highlight_red-text); - - --theme--block-text: var(--theme_light--block-text); - --theme--block_grey: var(--theme_light--block_grey); - --theme--block_grey-text: var(--theme_light--block_grey-text); - --theme--block_brown: var(--theme_light--block_brown); - --theme--block_brown-text: var(--theme_light--block_brown-text); - --theme--block_orange: var(--theme_light--block_orange); - --theme--block_orange-text: var(--theme_light--block_orange-text); - --theme--block_yellow: var(--theme_light--block_yellow); - --theme--block_yellow-text: var(--theme_light--block_yellow-text); - --theme--block_green: var(--theme_light--block_green); - --theme--block_green-text: var(--theme_light--block_green-text); - --theme--block_blue: var(--theme_light--block_blue); - --theme--block_blue-text: var(--theme_light--block_blue-text); - --theme--block_purple: var(--theme_light--block_purple); - --theme--block_purple-text: var(--theme_light--block_purple-text); - --theme--block_pink: var(--theme_light--block_pink); - --theme--block_pink-text: var(--theme_light--block_pink-text); - --theme--block_red: var(--theme_light--block_red); - --theme--block_red-text: var(--theme_light--block_red-text); - - --theme--tag-text: var(--theme_light--tag-text); - --theme--tag_default: var(--theme_light--tag_default); - --theme--tag_default-text: var(--theme_light--tag_default-text); - --theme--tag_plan: var(--theme_light--tag_plan); - --theme--tag_plan-text: var(--theme_light--tag_plan-text); - --theme--tag_new: var(--theme_light--tag_new); - --theme--tag_new-text: var(--theme_light--tag_new-text); - --theme--tag_grey: var(--theme_light--tag_grey); - --theme--tag_grey-text: var(--theme_light--tag_grey-text); - --theme--tag_brown: var(--theme_light--tag_brown); - --theme--tag_brown-text: var(--theme_light--tag_brown-text); - --theme--tag_orange: var(--theme_light--tag_orange); - --theme--tag_orange-text: var(--theme_light--tag_orange-text); - --theme--tag_yellow: var(--theme_light--tag_yellow); - --theme--tag_yellow-text: var(--theme_light--tag_yellow-text); - --theme--tag_green: var(--theme_light--tag_green); - --theme--tag_green-text: var(--theme_light--tag_green-text); - --theme--tag_blue: var(--theme_light--tag_blue); - --theme--tag_blue-text: var(--theme_light--tag_blue-text); - --theme--tag_purple: var(--theme_light--tag_purple); - --theme--tag_purple-text: var(--theme_light--tag_purple-text); - --theme--tag_pink: var(--theme_light--tag_pink); - --theme--tag_pink-text: var(--theme_light--tag_pink-text); - --theme--tag_red: var(--theme_light--tag_red); - --theme--tag_red-text: var(--theme_light--tag_red-text); - - --theme--callout-text: var(--theme_light--callout-text); - --theme--callout_grey: var(--theme_light--callout_grey); - --theme--callout_grey-text: var(--theme_light--callout_grey-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); -} diff --git a/insert/theming/mod.js b/insert/theming/mod.js deleted file mode 100644 index 6dfe615..0000000 --- a/insert/theming/mod.js +++ /dev/null @@ -1,36 +0,0 @@ -/* - * notion-enhancer - * (c) 2020 dragonwocky (https://dragonwocky.me/) - * (https://dragonwocky.me/notion-enhancer) under the MIT license - */ - -'use strict'; - -module.exports = { - forced: true, - hidden: true, - id: '0f0bf8b6-eae6-4273-b307-8fc43f2ee082', - name: 'theming', - tags: ['core', 'theme'], - desc: 'loads & applies the theming variables and other css inserts.', - version: require('../package.json').version, - authors: [ - { - name: 'dragonwocky', - link: 'https://dragonwocky.me/', - avatar: 'https://dragonwocky.me/avatar.jpg', - }, - ], - hacks: { - 'renderer/preload.js': ( - __exports, - store, - { web: { whenReady, loadStyleset } } - ) => { - whenReady(() => { - loadStyleset('global'); - loadStyleset('app'); - }); - }, - }, -}; diff --git a/notion-enhancer v0.10.0 banner.jpg b/notion-enhancer v0.10.0 banner.jpg deleted file mode 100644 index e89d492ec8270775a52beebb04a8c37b4fdf1cb4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 234573 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

kbPfZYvY}C`Sg{+lKzT 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�t`d}+_nQ@`Ol`}(g?)8 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 MS_&t;|7YpH0J%YlY5)KL diff --git a/package.json b/package.json index ea11d63..2b0a70f 100644 --- a/package.json +++ b/package.json @@ -1,42 +1,46 @@ { "name": "notion-enhancer", - "version": "0.11.0-wip", + "version": "0.11.0-dev", + "author": "dragonwocky (https://dragonwocky.me/)", "description": "an enhancer/customiser for the all-in-one productivity workspace notion.so", + "homepage": "https://github.com/notion-enhancer/notion-enhancer", + "license": "MIT", "bin": { - "notion-enhancer": "bin.js" + "notion-enhancer": "bin.mjs" }, "type": "module", "engines": { - "node": ">=12.20.0" + "node": ">=16.x.x" }, "scripts": { "test": "echo \"no test specified\"", - "postinstall": "node bin.js apply -y", "preuninstall": "node bin.js remove -n" }, "dependencies": { - "asar": "^3.0.3", - "chalk": "^4.1.0" + "asar": "^3.1.0", + "chalk": "^4.1.2" }, "repository": { "type": "git", - "url": "git+https://github.com/notion-enhancer/notion-enhancer.git" + "url": "git+https://github.com/notion-enhancer/desktop.git" }, "keywords": [ - "notion", - "productivity", - "mod", - "loader", - "enhancer", - "hack", - "macOS", "windows", - "linux" + "macos", + "linux", + "productivity", + "hack", + "extensions", + "themes", + "integrations", + "mod", + "mods", + "mod-loader", + "enhancer", + "notion", + "notion-enhancer" ], - "author": "dragonwocky (https://dragonwocky.me/)", - "license": "MIT", "bugs": { - "url": "https://github.com/notion-enhancer/notion-enhancer/issues" - }, - "homepage": "https://github.com/notion-enhancer/notion-enhancer" + "url": "https://github.com/notion-enhancer/desktop/issues" + } } diff --git a/pkg/apply.js b/pkg/apply.js deleted file mode 100644 index 769af1d..0000000 --- a/pkg/apply.js +++ /dev/null @@ -1,133 +0,0 @@ -/* - * notion-enhancer - * (c) 2020 dragonwocky (https://dragonwocky.me/) - * (https://dragonwocky.me/notion-enhancer) under the MIT license - */ - -'use strict'; - -import fs from 'fs'; -import fsp from 'fs/promises'; -import path from 'path'; -import asar from 'asar'; -import check from './check.js'; -import remove from './remove.js'; -import { locations, line, files } from './helpers.js'; - -export default async function ({ - overwriteOld, - __notion = locations.notion(), -} = {}) { - let status = check({ __notion }), - spinner; - switch (status.code) { - case 1: - throw Error(status.msg); - case 2: - console.info( - line.chalk` {grey * notion-enhancer v${status.version} already applied}` - ); - return true; - case 3: - console.warn(` * ${status.msg}`); - const prompt = { - prefix: line.chalk` {inverse > overwrite? [Y/n]:} `, - responses: ['Y', 'y', 'N', 'n', ''], - }, - action = prompt.responses.includes(overwriteOld) - ? overwriteOld - : (await line.read(prompt.prefix, prompt.responses)).toLowerCase(); - if (action.toLowerCase() === 'n') { - console.info(' * keeping previous version: exiting'); - return false; - } - await remove({ deleteConfig: 'n', deleteCache: 'n' }); - status = check(); - } - if (status.executable.endsWith('app.asar')) { - spinner = line.spinner(' * unpacking app files').loop(); - asar.extractAll( - status.executable, - status.executable.replace(/\.asar$/, '') - ); - spinner.stop(); - spinner = line.spinner(' * backing up default app').loop(); - await fsp.rename(status.executable, status.executable + '.bak'); - status.executable = status.executable.replace(/\.asar$/, ''); - spinner.stop(); - } else { - spinner = line.spinner(' * backing up default app').loop(); - await files.copyDir(status.executable, status.executable + '.bak'); - spinner.stop(); - } - - if ( - status.packed && - [ - '/opt/notion-app', // https://aur.archlinux.org/packages/notion-app/ - '/opt/notion', // https://github.com/jaredallard/notion-app - ].includes(__notion) - ) { - spinner = line - .spinner( - line.chalk` * patching app launcher {grey (notion-app linux wrappers only)}` - ) - .loop(); - for (let bin of [ - `/usr/bin/${__notion.split('/')[2]}`, - `${__notion}/${__notion.split('/')[2]}`, - ]) { - const script = await fsp.readFile(bin, 'utf8'); - if (script.includes('app.asar')) { - await fsp.writeFile( - bin, - script.replace(/(electron\d*) app(.asar)+/g, '$1 app') - ); - } - } - spinner.stop(); - } - - // todo: patch app properties so dark/light mode can be detected - // process.platform === 'darwin' && path.resolve(`${status.executable}/../../Info.plist`) - - spinner = line - .spinner(' * inserting enhancements + recording version') - .loop(); - - for (let file of (await files.readDirDeep(status.executable)) - .map((file) => file.path) - .filter((file) => file.endsWith('.js') && !file.includes('node_modules'))) { - const target = file.slice(status.executable.length + 1); - let replacer = path.resolve( - `${files.__dirname(import.meta)}/replacers/${target}` - ); - if (fs.existsSync(replacer)) { - replacer = (await import(replacer)).default; - await replacer(file); - } - await fsp.appendFile( - file, - `\n\n//notion-enhancer\nrequire('notion-enhancer')('${target}', exports);` - ); - } - - const node_modules = path.resolve( - `${status.executable}/node_modules/notion-enhancer` - ); - await files.copyDir( - `${files.__dirname(import.meta)}/../insert`, - node_modules - ); - await fsp.writeFile( - path.resolve(`${node_modules}/package.json`), - `{ - "name": "notion-enhancer", - "version": "${files.pkgJSON().version}", - "main": "loader.js" - }` - ); - - spinner.stop(); - return true; -} diff --git a/pkg/apply.mjs b/pkg/apply.mjs new file mode 100644 index 0000000..3492b78 --- /dev/null +++ b/pkg/apply.mjs @@ -0,0 +1,93 @@ +/* + * notion-enhancer + * (c) 2021 dragonwocky (https://dragonwocky.me/) + * (https://notion-enhancer.github.io/) under the MIT license + */ + +import fs from 'fs'; +import fsp from 'fs/promises'; +import path from 'path'; +import asar from 'asar'; + +import { log, line, spinner } from './cli.mjs'; +import { __dirname, pkg, findNotion, copyDir, readDirDeep } from './helpers.mjs'; + +import check from './check.mjs'; +import remove from './remove.mjs'; + +export default async function ( + notionFolder = findNotion(), + { overwritePrevious = undefined, takeBackup = true } = {} +) { + let status = check(notionFolder); + switch (status.code) { + case 0: // not applied + break; + case 1: // corrupted + throw Error(status.message); + case 2: // same version already applied + log` {grey * notion-enhancer v${status.version} already applied}`; + return true; + case 3: // diff version already applied + log` * ${status.message}`; + const prompt = ['Y', 'y', 'N', 'n', ''], + res = prompt.includes(overwritePrevious) + ? overwritePrevious + : await line.read(' {inverse > overwrite? [Y/n]:} ', prompt); + if (res.toLowerCase() === 'n') { + log` * keeping previous version: exiting`; + return false; + } + await remove(notionFolder, { cache: 'n' }); + status = await check(notionFolder); + } + + let s; + if (status.executable.endsWith('.asar')) { + s = spinner(' * unpacking app files').loop(); + asar.extractAll(status.executable, status.executable.replace(/\.asar$/, '')); + s.stop(); + } + if (takeBackup) { + s = spinner(' * backing up default app').loop(); + if (status.executable.endsWith('.asar')) { + await fsp.rename(status.executable, status.executable + '.bak'); + status.executable = status.executable.replace(/\.asar$/, ''); + } else { + await copyDir(status.executable, status.executable + '.bak'); + } + s.stop(); + } + + s = spinner(' * inserting enhancements').loop(); + const notionFiles = (await readDirDeep(status.executable)) + .map((file) => file.path) + .filter((file) => file.endsWith('.js') && !file.includes('node_modules')); + for (const file of notionFiles) { + const target = file.slice(status.executable.length + 1, -3), + replacer = path.resolve(`${__dirname(import.meta)}/replacers/${target}.mjs`); + if (fs.existsSync(replacer)) { + await (await import(`./replacers/${target}.mjs`)).default(file); + } + await fsp.appendFile( + file, + `\n\n//notion-enhancer\nrequire('notion-enhancer')('${target}', exports);` + ); + } + s.stop(); + + s = spinner(' * recording version').loop(); + const node_modules = path.resolve(`${status.executable}/node_modules/notion-enhancer`); + await copyDir(`${__dirname(import.meta)}/../insert`, node_modules); + await fsp.writeFile( + path.resolve(`${node_modules}/package.json`), + `{ + "name": "notion-enhancer", + "version": "${pkg().version}", + "main": "launcher.js" + }` + ); + s.stop(); + + return true; +} diff --git a/pkg/check.js b/pkg/check.js deleted file mode 100644 index 8b13753..0000000 --- a/pkg/check.js +++ /dev/null @@ -1,75 +0,0 @@ -/* - * notion-enhancer - * (c) 2020 dragonwocky (https://dragonwocky.me/) - * (https://dragonwocky.me/notion-enhancer) under the MIT license - */ - -'use strict'; - -import path from 'path'; -import fs from 'fs'; -import { locations, files } from './helpers.js'; - -export default function ({ __notion = locations.notion() }) { - const resolvePath = (filepath) => path.resolve(`${__notion}/${filepath}`), - pathExists = (filepath) => fs.existsSync(resolvePath(filepath)), - enhancerVersion = files.pkgJSON().version; - let notion = { - packed: pathExists('app.asar.bak'), - }; - notion.backup = notion.packed - ? pathExists('app.asar.bak') - ? 'app.asar.bak' - : undefined - : pathExists('app.bak') - ? 'app.bak' - : undefined; - if (!pathExists('app/node_modules/notion-enhancer')) { - notion.executable = pathExists('app') - ? 'app' - : pathExists('app.asar') - ? 'app.asar' - : undefined; - if (!notion.executable && notion.backup) { - notion.restored = true; - notion.backup = resolvePath(notion.backup); - notion.executable = notion.backup.replace(/\.bak$/, ''); - fs.renameSync(notion.backup, notion.executable); - } else { - notion.executable = notion.executable - ? resolvePath(notion.executable) - : ''; - } - return notion.executable - ? { - code: 0, - msg: `notion-enhancer has not been applied.`, - executable: notion.executable, - restored: notion.restored || false, - } - : { - code: 1, - msg: `notion installation has been corrupted: no executable found.`, - restored: notion.restored || false, - }; - } - notion = { - version: files.readJSON( - resolvePath('app/node_modules/notion-enhancer/package.json') - ).version, - executable: resolvePath('app'), - packed: resolvePath(notion.packed), - backup: resolvePath(notion.backup), - }; - return notion.version === enhancerVersion - ? { - code: 2, - msg: `notion-enhancer v${enhancerVersion} applied.`, - ...notion, - } - : { - code: 3, - msg: `notion-enhancer v${notion.version} found applied != v${enhancerVersion} package.`, - ...notion, - }; -} diff --git a/pkg/check.mjs b/pkg/check.mjs new file mode 100644 index 0000000..64aabe6 --- /dev/null +++ b/pkg/check.mjs @@ -0,0 +1,54 @@ +/* + * notion-enhancer + * (c) 2021 dragonwocky (https://dragonwocky.me/) + * (https://notion-enhancer.github.io/) under the MIT license + */ + +import fs from 'fs'; +import path from 'path'; + +import { pkg, findNotion, findEnhancerCache } from './helpers.mjs'; + +export default function (notionFolder = findNotion()) { + const resolvePath = (filepath) => path.resolve(`${notionFolder}/${filepath}`), + pathExists = (filepath) => fs.existsSync(resolvePath(filepath)), + enhancerVersion = pkg().version; + + const executableApp = pathExists('app'), + executableAsar = pathExists('app.asar'), + executable = executableApp ? 'app' : executableAsar ? 'app.asar' : undefined, + backupApp = pathExists('app.bak'), + backupAsar = pathExists('app.asar.bak'), + backup = backupApp ? 'app.bak' : backupAsar ? 'app.asar.bak' : undefined, + insert = pathExists('app/node_modules/notion-enhancer'), + insertVersion = insert + ? pkg(resolvePath('app/node_modules/notion-enhancer/package.json')).version + : undefined, + insertCache = findEnhancerCache(); + + const res = { + executable: executable ? resolvePath(executable) : undefined, + backup: backup ? resolvePath(backup) : undefined, + cache: fs.existsSync(insertCache) ? insertCache : undefined, + }; + if (insert) { + if (insertVersion === enhancerVersion) { + res.code = 2; + res.version = enhancerVersion; + res.message = `notion-enhancer v${enhancerVersion} applied.`; + } else { + res.code = 3; + res.version = insertVersion; + res.message = `notion-enhancer v${insertVersion} found applied != v${enhancerVersion} package.`; + } + } else { + if (executable) { + res.code = 0; + res.message = 'notion-enhancer has not been applied.'; + } else { + res.code = 1; + res.message = 'notion installation has been corrupted, no executable found.'; + } + } + return res; +} diff --git a/pkg/cli.mjs b/pkg/cli.mjs new file mode 100644 index 0000000..f3dba4c --- /dev/null +++ b/pkg/cli.mjs @@ -0,0 +1,138 @@ +/* + * notion-enhancer + * (c) 2021 dragonwocky (https://dragonwocky.me/) + * (https://notion-enhancer.github.io/) under the MIT license + */ + +'use strict'; + +import chalk from 'chalk'; + +export const log = (strs, ...tags) => { + if (!Array.isArray(strs)) strs = [strs]; + if (!strs.raw) strs.raw = [...strs]; + console.log(chalk(strs, ...tags)); +}; + +export const cursor = { + hide: () => process.stdout.write('\x1b[?25l'), + show: () => process.stdout.write('\x1b[?25h'), +}; + +export const line = { + clear: () => process.stdout.write('\r\x1b[K'), + backspace: (n = 1) => process.stdout.write('\b'.repeat(n)), + write: (string) => process.stdout.write(string), + prev: (n = 1) => process.stdout.write(`\x1b[${n}A`), + next: (n = 1) => process.stdout.write(`\x1b[${n}B`), + forward: (n = 1) => process.stdout.write(`\x1b[${n}C`), + back: (n = 1) => process.stdout.write(`\x1b[${n}D`), + new: () => process.stdout.write('\n'), + async read(prompt = '', values = []) { + let input = ''; + prompt = [prompt]; + prompt.raw = [prompt[0]]; + prompt = chalk(prompt); + this.new(); + do { + this.prev(); + this.clear(); + this.write(prompt); + input = await new Promise((res, rej) => { + process.stdin.resume(); + process.stdin.setEncoding('utf8'); + process.stdin.once('data', (key) => { + process.stdin.pause(); + res(key.slice(0, -1)); + }); + }); + } while (values.length && !values.includes(input)); + return input; + }, +}; + +export let lastSpinner; + +export const spinner = ( + message, + frames = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'], + complete = '→' +) => { + if (lastSpinner?.interval) lastSpinner.stop(); + const spinner = { + interval: undefined, + i: 0, + step() { + this.i = (this.i + 1) % frames.length; + line.backspace(3); + line.write(chalk` {bold.yellow ${frames[this.i]}} `); + cursor.hide(); + return this; + }, + loop(ms = 80) { + if (this.interval) clearInterval(this.interval); + this.interval = setInterval(() => this.step(), ms); + return this; + }, + stop() { + if (this.interval) { + clearInterval(this.interval); + this.interval = undefined; + } + line.backspace(3); + line.write(chalk` {bold.yellow ${complete}}\n`); + cursor.show(); + return this; + }, + }; + line.write(chalk`${message} {bold.yellow ${frames[spinner.i]}} `); + lastSpinner = spinner; + return spinner; +}; + +export const args = () => process.argv.slice(2).filter((arg) => !arg.startsWith('-')); + +export const options = (aliases = {}) => { + return new Map( + process.argv + .slice(2) + .filter((arg) => arg.startsWith('-')) + .map((arg) => { + let opt, + val = true; + if (arg.startsWith('--')) { + if (arg.includes('=')) { + [opt, val] = arg.slice(2).split(/=((.+)|$)/); + } else opt = arg.slice(2); + } else { + opt = arg.slice(1); + } + if (parseInt(val).toString() === val) val = +val; + if (aliases[opt]) opt = aliases[opt]; + return [opt, val]; + }) + ); +}; + +export const help = ({ + name = process.argv[1].split('/').reverse()[0], + usage = `${name} [options]`, + version = '', + link = '', + commands = [], + options = [], +}) => { + if (version) version = ' v' + version; + const cmdPad = Math.max(...commands.map((cmd) => cmd[0].length)), + optPad = Math.max(...options.map((opt) => opt[0].length)); + commands = commands.map((cmd) => ` ${cmd[0].padEnd(cmdPad)} : ${cmd[1]}`).join('\n'); + options = options.map((opt) => ` ${opt[0].padEnd(optPad)} : ${opt[1]}`).join('\n'); + log`{bold.rgb(245,245,245) ${name}${version}}`; + if (link) log`{grey ${link}}`; + log`\n{bold.rgb(245,245,245) USAGE}`; + log`{yellow $} ${usage}`; + log`\n{bold.rgb(245,245,245) COMMANDS}`; + log`${commands}`; + log`\n{bold.rgb(245,245,245) OPTIONS}`; + log`${options}`; +}; diff --git a/pkg/helpers.js b/pkg/helpers.js deleted file mode 100644 index 0ef4df8..0000000 --- a/pkg/helpers.js +++ /dev/null @@ -1,250 +0,0 @@ -/* - * notion-enhancer - * (c) 2020 dragonwocky (https://dragonwocky.me/) - * (https://dragonwocky.me/notion-enhancer) under the MIT license - */ - -'use strict'; - -import os from 'os'; -import fs from 'fs'; -import fsp from 'fs/promises'; -import path from 'path'; -import chalk from 'chalk'; -import { fileURLToPath } from 'url'; -import { execSync } from 'child_process'; - -const platform = - process.platform === 'linux' && - os.release().toLowerCase().includes('microsoft') - ? 'wsl' - : process.platform, - locationCache = {}; - -export const locations = { - notion() { - if (locationCache.notion) return locationCache.notion; - switch (platform) { - case 'darwin': - locationCache.notion = '/Applications/Notion.app/Contents/Resources'; - break; - case 'win32': - locationCache.notion = - process.env.LOCALAPPDATA + '\\Programs\\Notion\\resources'; - break; - case 'wsl': - const [drive, ...windowsPath] = execSync( - 'cmd.exe /c echo %localappdata%', - { - encoding: 'utf8', - stdio: 'pipe', - } - ); - locationCache.notion = `/mnt/${drive.toLowerCase()}${windowsPath - .slice(1, -2) - .join('') - .replace(/\\/g, '/')}/Programs/Notion/resources`; - break; - case 'linux': - for (let folder of [ - '/usr/lib/notion-desktop/resources', // https://github.com/davidbailey00/notion-deb-builder/ - '/opt/notion-app', // https://aur.archlinux.org/packages/notion-app/ - '/opt/notion', // https://github.com/jaredallard/notion-app - ]) - if (fs.existsSync(folder)) locationCache.notion = folder; - } - return locationCache.notion; - }, - enhancer() { - if (locationCache.enhancer) return locationCache.enhancer; - let home = os.homedir(); - if (platform === 'wsl') { - const [drive, ...windowsPath] = execSync( - 'cmd.exe /c echo %systemdrive%%homepath%', - { - encoding: 'utf8', - stdio: 'pipe', - } - ); - home = `/mnt/${drive.toLowerCase()}${windowsPath - .slice(1, -2) - .join('') - .replace(/\\/g, '/')}`; - } - locationCache.enhancer = path.resolve(`${home}/.notion-enhancer`); - return locationCache.enhancer; - }, - config() { - return `${this.enhancer()}/config`; - }, - cache() { - return `${this.enhancer()}/cache`; - }, -}; - -export const line = { - chalk: chalk, - style: { - title: chalk.bold.rgb(245, 245, 245), - }, - clear: () => process.stdout.write('\r\x1b[K'), - write: (string) => process.stdout.write(string), - prev: (n = 1) => process.stdout.write(`\x1b[${n}A`), - next: (n = 1) => process.stdout.write(`\x1b[${n}B`), - forward: (n = 1) => process.stdout.write(`\x1b[${n}C`), - back: (n = 1) => process.stdout.write(`\x1b[${n}D`), - new: () => process.stdout.write('\n'), - async read(prompt = '', values = []) { - let input = ''; - this.write(prompt); - this.new(); - do { - for (let i = 0; i < prompt.split('\n').length; i++) { - this.prev(); - this.clear(); - } - this.write(prompt); - input = await new Promise((res, rej) => { - process.stdin.resume(); - process.stdin.setEncoding('utf8'); - process.stdin.once('data', (key) => { - process.stdin.pause(); - res(key.slice(0, -1)); - }); - }); - } while (values.length && !values.includes(input)); - return input; - }, - spinner( - message, - frames = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'], - complete = '→' - ) { - const spinner = { - message, - frames, - complete, - interval: undefined, - i: 0, - }; - spinner.step = () => { - spinner.i = (spinner.i + 1) % spinner.frames.length; - this.clear(); - this.write( - line.chalk`${spinner.message} {bold.yellow ${frames[spinner.i]}} ` - ); - return spinner; - }; - spinner.loop = (ms = 80) => { - if (!spinner.interval) spinner.interval = setInterval(spinner.step, ms); - return spinner; - }; - spinner.stop = () => { - if (spinner.interval) clearInterval(spinner.interval); - this.clear(); - this.write(line.chalk`${spinner.message} {bold.yellow ${complete}}\r\n`); - return spinner; - }; - spinner.step(); - return spinner; - }, -}; - -export const cli = { - args() { - return process.argv.slice(2).filter((arg) => !arg.startsWith('-')); - }, - options(aliases = {}) { - return new Map( - process.argv - .slice(2) - .filter((arg) => arg.startsWith('-')) - .map((arg) => { - let opt, - val = true; - if (arg.startsWith('--')) { - if (arg.includes('=')) { - [opt, val] = arg.slice(2).split(/=((.+)|$)/); - } else opt = arg.slice(2); - } else { - opt = arg.slice(1); - } - if (parseInt(val).toString() === val) val = +val; - if (aliases[opt]) opt = aliases[opt]; - return [opt, val]; - }) - ); - }, - help({ - name = process.argv[1].split('/').reverse()[0], - usage = `${name} [options]`, - version = '', - link = '', - commands = [], - options = [], - }) { - if (version) version = ' v' + version; - if (link) link = '\n' + link; - const cmdPad = Math.max(...commands.map((cmd) => cmd[0].length)); - commands = commands - .map((cmd) => ` ${cmd[0].padEnd(cmdPad)} : ${cmd[1]}`) - .join('\n'); - const optPad = Math.max(...options.map((opt) => opt[0].length)); - options = options - .map((opt) => ` ${opt[0].padEnd(optPad)} : ${opt[1]}`) - .join('\n'); - return `${line.style.title(name)}${line.style.title(version)}${link} -\n${line.style.title('USAGE')} - ${line.chalk.yellow('$')} ${usage} -\n${line.style.title('COMMANDS')}\n${commands} -\n${line.style.title('OPTIONS')}\n${options}`; - }, -}; - -export const files = { - __dirname: (meta) => path.dirname(fileURLToPath(meta.url)), - readJSON(file, defaults = {}) { - try { - return { - ...defaults, - ...JSON.parse(fs.readFileSync(path.resolve(file))), - }; - } catch { - return defaults; - } - }, - pkgJSON() { - return this.readJSON(`${this.__dirname(import.meta)}/../package.json`); - }, - async copyDir(src, dest) { - src = path.resolve(src); - dest = path.resolve(dest); - if (!fs.existsSync(dest)) await fsp.mkdir(dest); - for (let file of await fsp.readdir(src)) { - const stat = await fsp.lstat(path.join(src, file)); - if (stat.isDirectory()) { - await this.copyDir(path.join(src, file), path.join(dest, file)); - } else if (stat.isSymbolicLink()) { - await fsp.symlink( - await fsp.readlink(path.join(src, file)), - path.join(dest, file) - ); - } else await fsp.copyFile(path.join(src, file), path.join(dest, file)); - } - return true; - }, - async readDirDeep(dir) { - dir = path.resolve(dir); - let files = []; - for (let file of await fsp.readdir(dir)) { - file = path.join(dir, file); - const stat = await fsp.lstat(file); - if (stat.isDirectory()) { - files = files.concat(await this.readDirDeep(file)); - } else if (stat.isSymbolicLink()) { - files.push({ type: 'symbolic', path: file }); - } else files.push({ type: 'file', path: file }); - } - return files; - }, -}; diff --git a/pkg/helpers.mjs b/pkg/helpers.mjs new file mode 100644 index 0000000..6b7fc58 --- /dev/null +++ b/pkg/helpers.mjs @@ -0,0 +1,110 @@ +/* + * notion-enhancer + * (c) 2021 dragonwocky (https://dragonwocky.me/) + * (https://notion-enhancer.github.io/) under the MIT license + */ + +import os from 'os'; +import fs from 'fs'; +import fsp from 'fs/promises'; +import path from 'path'; +import { fileURLToPath } from 'url'; +import { execSync } from 'child_process'; + +export const __dirname = (meta) => path.dirname(fileURLToPath(meta.url)); + +export const pkg = (filepath = `${__dirname(import.meta)}/../package.json`) => { + try { + return JSON.parse(fs.readFileSync(path.resolve(filepath))); + } catch { + return {}; + } +}; + +export const platform = + process.platform === 'linux' && os.release().toLowerCase().includes('microsoft') + ? 'wsl' + : process.platform; + +let __notion; +export const findNotion = () => { + if (__notion) return __notion; + switch (platform) { + case 'darwin': + __notion = ''; + const userInstall = `/Users/${process.env.USER}/Applications/Notion.app/Contents/Resources`, + globalInstall = '/Applications/Notion.app/Contents/Resources'; + if (fs.existsSync(userInstall)) { + __notion = userInstall; + } else if (fs.existsSync(globalInstall)) { + __notion = globalInstall; + } + break; + case 'win32': + __notion = process.env.LOCALAPPDATA + '\\Programs\\Notion\\resources'; + break; + case 'wsl': + const [drive, ...windowsPath] = execSync('cmd.exe /c echo %localappdata%', { + encoding: 'utf8', + stdio: 'pipe', + }); + __notion = `/mnt/${drive.toLowerCase()}${windowsPath + .slice(1, -2) + .join('') + .replace(/\\/g, '/')}/Programs/Notion/resources`; + break; + case 'linux': + // https://aur.archlinux.org/packages/notion-app/ + if (fs.existsSync('/opt/notion-app')) __notion = '/opt/notion-app'; + } + return __notion; +}; + +let __enhancerCache; +export const findEnhancerCache = () => { + if (__enhancerCache) return __enhancerCache; + let home = os.homedir(); + if (platform === 'wsl') { + const [drive, ...windowsPath] = execSync('cmd.exe /c echo %systemdrive%%homepath%', { + encoding: 'utf8', + stdio: 'pipe', + }); + home = `/mnt/${drive.toLowerCase()}${windowsPath + .slice(1, -2) + .join('') + .replace(/\\/g, '/')}`; + } + __enhancerCache = path.resolve(`${home}/.notion-enhancer`); + return __enhancerCache; +}; + +export const copyDir = async (src, dest) => { + src = path.resolve(src); + dest = path.resolve(dest); + if (!fs.existsSync(dest)) await fsp.mkdir(dest); + for (let file of await fsp.readdir(src)) { + const stat = await fsp.lstat(path.join(src, file)); + if (stat.isDirectory()) { + await copyDir(path.join(src, file), path.join(dest, file)); + } else if (stat.isSymbolicLink()) { + await fsp.symlink(await fsp.readlink(path.join(src, file)), path.join(dest, file)); + } else await fsp.copyFile(path.join(src, file), path.join(dest, file)); + } + return true; +}; + +export const readDirDeep = async (dir) => { + dir = path.resolve(dir); + let files = []; + for (let file of await fsp.readdir(dir)) { + if (['node_modules', '.git'].includes(file)) continue; + file = path.join(dir, file); + const stat = await fsp.lstat(file); + if (stat.isDirectory()) { + files = files.concat(await readDirDeep(file)); + } else if (stat.isSymbolicLink()) { + files.push({ type: 'symbolic', path: file }); + } else files.push({ type: 'file', path: file }); + } + return files; +}; diff --git a/pkg/remove.js b/pkg/remove.js deleted file mode 100644 index 9e9a106..0000000 --- a/pkg/remove.js +++ /dev/null @@ -1,107 +0,0 @@ -/* - * notion-enhancer - * (c) 2020 dragonwocky (https://dragonwocky.me/) - * (https://dragonwocky.me/notion-enhancer) under the MIT license - */ - -'use strict'; - -import fs from 'fs'; -import fsp from 'fs/promises'; -import check from './check.js'; -import { locations, line } from './helpers.js'; - -export default async function ({ - deleteConfig, - deleteCache, - __notion = locations.notion(), -} = {}) { - const status = check({ __notion }); - let spinner; - - if (status.code > 1 && status.executable) { - spinner = line.spinner(' * removing enhancements').loop(); - await fsp.rmdir(status.executable, { recursive: true }); - spinner.stop(); - } else console.warn(line.chalk.grey(' * enhancements not found: skipping')); - - if (status.restored || status.backup) { - spinner = line.spinner(' * restoring backup').loop(); - if (status.backup) - await fsp.rename(status.backup, status.backup.replace(/\.bak$/, '')); - spinner.stop(); - } else console.warn(line.chalk.grey(' * backup not found: skipping')); - - const prompt = { - prefix: line.chalk` {inverse > delete? [Y/n]:} `, - responses: ['Y', 'y', 'N', 'n', ''], - }; - for (let folder of [ - { - description: 'config folder', - name: 'config', - action: deleteConfig, - location: locations.config(), - }, - { - description: 'module cache', - name: 'cache', - action: deleteCache, - location: locations.cache(), - }, - ]) { - if (fs.existsSync(folder.location)) { - console.info(` * ${folder.description} ${folder.location} found`); - const action = prompt.responses.includes(folder.action) - ? folder.action - : (await line.read(prompt.prefix, prompt.responses)).toLowerCase(); - if (action === folder.action) - console.info( - `${prompt.prefix}${folder.action} ${line.chalk.grey('(auto-filled)')}` - ); - if (action !== 'n') { - spinner = line.spinner(` * deleting ${folder.name}`).loop(); - await fsp.rmdir(folder.location, { recursive: true }); - spinner.stop(); - } else console.info(` * keeping ${folder.name}`); - } else - console.warn( - line.chalk.grey(` * ${folder.description} not found: skipping`) - ); - } - - if ( - !fs.existsSync(locations.config()) && - !fs.existsSync(locations.cache()) && - fs.existsSync(locations.enhancer()) - ) - fsp.rmdir(locations.enhancer()).catch((err) => {}); - - if ( - status.packed && - [ - '/opt/notion-app', // https://aur.archlinux.org/packages/notion-app/ - '/opt/notion', // https://github.com/jaredallard/notion-app - ].includes(__notion) - ) { - spinner = line - .spinner( - line.chalk` * patching app launcher {grey (notion-app linux wrappers only)}` - ) - .loop(); - for (let bin of [ - `/usr/bin/${__notion.split('/')[2]}`, - `${__notion}/${__notion.split('/')[2]}`, - ]) { - const script = await fsp.readFile(bin, 'utf8'); - if (!script.includes('app.asar')) { - await fsp.writeFile( - bin, - script.replace(/(electron\d*) app(.asar)+/g, '$1 app.asar') - ); - } - } - spinner.stop(); - } - return true; -} diff --git a/pkg/remove.mjs b/pkg/remove.mjs new file mode 100644 index 0000000..6fcfa35 --- /dev/null +++ b/pkg/remove.mjs @@ -0,0 +1,46 @@ +/* + * notion-enhancer + * (c) 2021 dragonwocky (https://dragonwocky.me/) + * (https://notion-enhancer.github.io/) under the MIT license + */ + +import fsp from 'fs/promises'; + +import { log, spinner, line } from './cli.mjs'; +import { findNotion } from './helpers.mjs'; + +import check from './check.mjs'; + +export default async function (notionFolder = findNotion(), { delCache = undefined } = {}) { + const status = check(notionFolder); + + let s; + if (status.code > 1 && status.executable) { + s = spinner(' * removing enhancements').loop(); + await fsp.rm(status.executable, { recursive: true }); + s.stop(); + } else log` {grey * enhancements not found: skipping}`; + + if (status.backup) { + s = spinner(' * restoring backup').loop(); + await fsp.rename(status.backup, status.backup.replace(/\.bak$/, '')); + s.stop(); + } else log` {grey * backup not found: skipping}`; + + if (status.cache) { + log` * enhancer cache found: ${status.cache}`; + const prompt = ['Y', 'y', 'N', 'n', '']; + let res; + if (prompt.includes(delCache)) { + res = delCache; + log` {inverse > delete? [Y/n]:} ${delCache} {grey (auto-filled)}`; + } else res = await line.read(' {inverse > delete? [Y/n]:} ', prompt); + if (res.toLowerCase() === 'n') { + log` * keeping enhancer cache`; + } else { + s = spinner(' * deleting enhancer cache').loop(); + await fsp.rm(status.cache, { recursive: true }); + s.stop(); + } + } else log` {grey * enhancer cache not found: skipping}`; +} diff --git a/pkg/replacers/main/main.js b/pkg/replacers/main/main.mjs similarity index 82% rename from pkg/replacers/main/main.js rename to pkg/replacers/main/main.mjs index c9ad5fd..ae80308 100644 --- a/pkg/replacers/main/main.js +++ b/pkg/replacers/main/main.mjs @@ -8,12 +8,12 @@ import fsp from 'fs/promises'; -export default async function (file) { +export default async function (filepath) { // https://github.com/notion-enhancer/notion-enhancer/issues/160 // enable the notion:// url scheme/protocol on linux - const contents = await fsp.readFile(file, 'utf8'); + const contents = await fsp.readFile(filepath, 'utf8'); await fsp.writeFile( - file, + filepath, contents.replace( /process.platform === "win32"/g, 'process.platform === "win32" || process.platform === "linux"' diff --git a/pkg/replacers/main/schemeHandler.js b/pkg/replacers/main/schemeHandler.js deleted file mode 100644 index 4ab42d2..0000000 --- a/pkg/replacers/main/schemeHandler.js +++ /dev/null @@ -1,36 +0,0 @@ -/* - * notion-enhancer - * (c) 2020 dragonwocky (https://dragonwocky.me/) - * (https://dragonwocky.me/notion-enhancer) under the MIT license - */ - -'use strict'; - -import fsp from 'fs/promises'; - -export default async function (file) { - // https://github.com/notion-enhancer/notion-enhancer/issues/160 - // enable the notion:// url scheme/protocol on linux - const contents = await fsp.readFile(file, 'utf8'); - await fsp.writeFile( - file, - contents.replace( - /registerStreamProtocol\(config_1\.default\.protocol, async \(req, callback\) => {/, - `registerStreamProtocol(config_1.default.protocol, async (req, callback) => { - if (req.url.startsWith('notion://enhancer/')) { - const { enhancements } = require('notion-enhancer/helpers'), - query = req.url.replace(/^notion:\\/\\/enhancer\\//, '').split('/'), - mod = enhancements.get(query.shift()); - if (mod && !mod.error) { - callback( - fs.createReadStream( - require('path').resolve(\`\${mod.source}/\${query.join('/')}\`) - ) - ); - return; - } - }` - ) - ); - return true; -} diff --git a/temp/core/app.css b/temp/core/app.css deleted file mode 100644 index 06ffc57..0000000 --- a/temp/core/app.css +++ /dev/null @@ -1,9 +0,0 @@ -/* - * notion-enhancer - * (c) 2020 dragonwocky (https://dragonwocky.me/) - * under the MIT license - */ - -@import './css/theme.css'; -@import './css/scrollbars.css'; -@import './css/titlebar.css'; diff --git a/temp/core/buttons.js b/temp/core/buttons.js deleted file mode 100644 index d132722..0000000 --- a/temp/core/buttons.js +++ /dev/null @@ -1,106 +0,0 @@ -/* - * notion-enhancer - * (c) 2020 dragonwocky (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('

'), - 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 += ``; - } - 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; -}; diff --git a/temp/core/client.js b/temp/core/client.js deleted file mode 100644 index a6eddd0..0000000 --- a/temp/core/client.js +++ /dev/null @@ -1,269 +0,0 @@ -/* - * notion-enhancer - * (c) 2020 dragonwocky (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('
')); - } - - // 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') - ? `` - : '', - 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') }]); - } - } -}; diff --git a/temp/core/colorjoe/min.js b/temp/core/colorjoe/min.js deleted file mode 100644 index 0d60153..0000000 --- a/temp/core/colorjoe/min.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! colorjoe - v4.1.1 - Juho Vepsalainen - MIT -https://bebraw.github.com/colorjoe - 2020-01-27 */ -!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):e.colorjoe=n()}(this,function(){"use strict";"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self&&self;function e(e,n){return e(n={exports:{}},n.exports),n.exports}var p=e(function(e,n){e.exports=function(){function r(e,n){e?(t(e,n,"touchstart","touchmove","touchend"),t(e,n,"mousedown","mousemove","mouseup")):console.warn("drag is missing elem!")}return r.xyslider=function(e){var n=i(e.class||"",e.parent),t=i("pointer",n);return i("shape shape1",t),i("shape shape2",t),i("bg bg1",n),i("bg bg2",n),r(n,a(e.cbs,t)),{background:n,pointer:t}},r.slider=function(e){var n=i(e.class,e.parent),t=i("pointer",n);return i("shape",t),i("bg",n),r(n,a(e.cbs,t)),{background:n,pointer:t}},r;function a(e,t){var n={};for(var r in e)n[r]=a(e[r]);function a(n){return function(e){e.pointer=t,n(e)}}return n}function i(e,n){return t="div",r=e,a=n,i=document.createElement(t),r&&(i.className=r),a.appendChild(i),i;var t,r,a,i}function t(r,e,n,a,i){var t,o,u,s=(e=(t=e)?{begin:t.begin||p,change:t.change||p,end:t.end||p}:{begin:function(e){o={x:e.elem.offsetLeft,y:e.elem.offsetTop},u=e.cursor},change:function(e){d(e.elem,"left",o.x+e.cursor.x-u.x+"px"),d(e.elem,"top",o.y+e.cursor.y-u.y+"px")},end:p}).begin,l=e.change,f=e.end;c(r,n,function(n){var t=function(e){var n=Array.prototype.slice,t=n.apply(arguments,[1]);return function(){return e.apply(null,t.concat(n.apply(arguments)))}}(g,l,r);c(document,a,t),c(document,i,function e(){h(document,a,t),h(document,i,e),g(f,r,n)}),g(s,r,n)})}function c(e,n,t){var r=!1;try{var a=Object.defineProperty({},"passive",{get:function(){r=!0}});window.addEventListener("testPassive",null,a),window.removeEventListener("testPassive",null,a)}catch(e){}e.addEventListener(n,t,!!r&&{passive:!1})}function h(e,n,t){e.removeEventListener(n,t,!1)}function d(e,n,t){e.style[n]=t}function p(){}function g(e,n,t){t.preventDefault();var r,a,i,o={x:(r=n.getBoundingClientRect()).left,y:r.top},u=n.clientWidth,s=n.clientHeight,l={x:(i=t,(i.touches?i.touches[i.touches.length-1]:i).clientX),y:(a=t,(a.touches?a.touches[a.touches.length-1]:a).clientY)},f=(l.x-o.x)/u,c=(l.y-o.y)/s;e({x:isNaN(f)?0:f,y:isNaN(c)?0:c,cursor:l,elem:n,e:t})}}()}),a=e(function(e,n){e.exports=function(){function c(e){if(Array.isArray(e)){if("string"==typeof e[0]&&"function"==typeof c[e[0]])return new c[e[0]](e.slice(1,e.length));if(4===e.length)return new c.RGB(e[0]/255,e[1]/255,e[2]/255,e[3]/255)}else if("string"==typeof e){var n=e.toLowerCase();c.namedColors[n]&&(e="#"+c.namedColors[n]),"transparent"===n&&(e="rgba(0,0,0,0)");var t=e.match(p);if(t){var r=t[1].toUpperCase(),a=h(t[8])?t[8]:parseFloat(t[8]),i="H"===r[0],o=t[3]?100:i?360:255,u=t[5]||i?100:255,s=t[7]||i?100:255;if(h(c[r]))throw new Error("color."+r+" is not installed.");return new c[r](parseFloat(t[2])/o,parseFloat(t[4])/u,parseFloat(t[6])/s,a)}e.length<6&&(e=e.replace(/^#?([0-9a-f])([0-9a-f])([0-9a-f])$/i,"$1$1$2$2$3$3"));var l=e.match(/^#?([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])$/i);if(l)return new c.RGB(parseInt(l[1],16)/255,parseInt(l[2],16)/255,parseInt(l[3],16)/255);if(c.CMYK){var f=e.match(new RegExp("^cmyk\\("+d.source+","+d.source+","+d.source+","+d.source+"\\)$","i"));if(f)return new c.CMYK(parseFloat(f[1])/100,parseFloat(f[2])/100,parseFloat(f[3])/100,parseFloat(f[4])/100)}}else if("object"==typeof e&&e.isColor)return e;return!1}var u=[],h=function(e){return void 0===e},e=/\s*(\.\d+|\d+(?:\.\d+)?)(%)?\s*/,d=/\s*(\.\d+|100|\d?\d(?:\.\d+)?)%\s*/,p=new RegExp("^(rgb|hsl|hsv)a?\\("+e.source+","+e.source+","+e.source+"(?:,"+/\s*(\.\d+|\d+(?:\.\d+)?)\s*/.source+")?\\)$","i");c.namedColors={},c.installColorSpace=function(a,i,e){function n(e,r){var n={};for(var t in n[r.toLowerCase()]=function(){return this.rgb()[r.toLowerCase()]()},c[r].propertyNames.forEach(function(t){var e="black"===t?"k":t.charAt(0);n[t]=n[e]=function(e,n){return this[r.toLowerCase()]()[t](e,n)}}),n)n.hasOwnProperty(t)&&void 0===c[e].prototype[t]&&(c[e].prototype[t]=n[t])}(c[a]=function(e){var r=Array.isArray(e)?e:arguments;i.forEach(function(e,n){var t=r[n];if("alpha"===e)this._alpha=isNaN(t)||1n)return!1;return!0},r.toJSON=function(){return[a].concat(i.map(function(e){return this["_"+e]},this))},e)if(e.hasOwnProperty(t)){var o=t.match(/^from(.*)$/);o?c[o[1].toUpperCase()].prototype[a.toLowerCase()]=e[t]:r[t]=e[t]}return r[a.toLowerCase()]=function(){return this},r.toString=function(){return"["+a+" "+i.map(function(e){return this["_"+e]},this).join(", ")+"]"},i.forEach(function(t){var e="black"===t?"k":t.charAt(0);r[t]=r[e]=function(n,e){return void 0===n?this["_"+t]:e?new this.constructor(i.map(function(e){return this["_"+e]+(t===e?n:0)},this)):new this.constructor(i.map(function(e){return t===e?n:this["_"+e]},this))}}),u.forEach(function(e){n(a,e),n(e,a)}),u.push(a),c},c.pluginList=[],c.use=function(e){return-1===c.pluginList.indexOf(e)&&(this.pluginList.push(e),e(c)),c},c.installMethod=function(n,t){return u.forEach(function(e){c[e].prototype[n]=t}),this},c.installColorSpace("RGB",["red","green","blue","alpha"],{hex:function(){var e=(65536*Math.round(255*this._red)+256*Math.round(255*this._green)+Math.round(255*this._blue)).toString(16);return"#"+"00000".substr(0,6-e.length)+e},hexa:function(){var e=Math.round(255*this._alpha).toString(16);return"#"+"00".substr(0,2-e.length)+e+this.hex().substr(1,6)},css:function(){return"rgb("+Math.round(255*this._red)+","+Math.round(255*this._green)+","+Math.round(255*this._blue)+")"},cssa:function(){return"rgba("+Math.round(255*this._red)+","+Math.round(255*this._green)+","+Math.round(255*this._blue)+","+this._alpha+")"}});var n=function(a){a.installColorSpace("XYZ",["x","y","z","alpha"],{fromRgb:function(){var e=function(e){return.04045t[e]?r[e]=(n[e]-t[e])/(1-t[e]):n[e]>t[e]?r[e]=(t[e]-n[e])/t[e]:r[e]=0}),r._red>r._green?r._red>r._blue?n._alpha=r._red:n._alpha=r._blue:r._green>r._blue?n._alpha=r._green:n._alpha=r._blue,n._alpha<1e-10||(a.forEach(function(e){n[e]=(n[e]-t[e])/n._alpha+t[e]}),n._alpha*=r._alpha),n})})}()}),g=n(b,"div");function b(e,n,t){var r=document.createElement(e);return r.className=n,t.appendChild(r),r}function n(e){var n=Array.prototype.slice,t=n.apply(arguments,[1]);return function(){return e.apply(null,t.concat(n.apply(arguments)))}}function t(e,n,t){return Math.min(Math.max(e,n),t)}var v={clamp:t,e:b,div:g,partial:n,labelInput:function(e,n,t,r){var a="colorPickerInput"+Math.floor(1001*Math.random()),i=g(e,t);return{label:(c=n,h=i,d=a,p=b("label","",h),p.innerHTML=c,d&&p.setAttribute("for",d),p),input:(o="text",u=i,s=r,l=a,f=b("input","",u),f.type=o,s&&(f.maxLength=s),l&&f.setAttribute("id",l),s&&(f.maxLength=s),f)};var o,u,s,l,f;var c,h,d,p},X:function(e,n){e.style.left=t(100*n,0,100)+"%"},Y:function(e,n){e.style.top=t(100*n,0,100)+"%"},BG:function(e,n){e.style.background=n}};var r={currentColor:function(e){var n=v.div("currentColorContainer",e),t=v.div("currentColor",n);return{change:function(e){v.BG(t,e.cssa())}}},fields:function(e,t,n){var r=n.space,a=n.limit||255,i=0<=n.fix?n.fix:0,o=(""+a).length+i;o=i?o+1:o;var u=r.split(""),s="A"==r[r.length-1];if(r=s?r.slice(0,-1):r,["RGB","HSL","HSV","CMYK"].indexOf(r)<0)return console.warn("Invalid field names",r);var l=v.div("colorFields",e),f=u.map(function(e){e=e.toLowerCase();var n=v.labelInput("color "+e,e,l,o);return n.input.onblur=c,n.input.onkeydown=h,n.input.onkeyup=d,{name:e,e:n}});function c(){t.done()}function h(e){e.ctrlKey||e.altKey||!/^[a-zA-Z]$/.test(e.key)||e.preventDefault()}function d(){var n=[r];f.forEach(function(e){n.push(e.e.input.value/a)}),s||n.push(t.getAlpha()),t.set(n)}return{change:function(n){f.forEach(function(e){e.e.input.value=(n[e.name]()*a).toFixed(i)})}}},hex:function(e,r,n){var t=v.labelInput("hex",n.label||"",e,7);return t.input.value="#",t.input.onkeyup=function(e){var n=e.keyCode||e.which,t=e.target.value;t=function(e,n,t){for(var r=e,a=e.length;a (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; -}; diff --git a/temp/core/css/buttons.css b/temp/core/css/buttons.css deleted file mode 100644 index 70b8465..0000000 --- a/temp/core/css/buttons.css +++ /dev/null @@ -1,43 +0,0 @@ -/* - * notion-enhancer - * (c) 2020 dragonwocky (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); -} diff --git a/temp/core/css/scrollbars.css b/temp/core/css/scrollbars.css deleted file mode 100644 index a837c92..0000000 --- a/temp/core/css/scrollbars.css +++ /dev/null @@ -1,29 +0,0 @@ -/* - * notion-enhancer - * (c) 2020 dragonwocky (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); -} diff --git a/temp/core/css/theme.css b/temp/core/css/theme.css deleted file mode 100644 index 8bbf38b..0000000 --- a/temp/core/css/theme.css +++ /dev/null @@ -1,1123 +0,0 @@ -/* - * notion-enhancer - * (c) 2020 dragonwocky (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 - */ - -/** app **/ - -.notion-body, -.notion-body.dark [style*='background: rgb(47, 52, 55)'], -.notion-body.dark [style*='background-color: rgb(47, 52, 55)'], -.notion-body:not(.dark) - .notion-light-theme - [style*='background: white']:not(.notion-help-button), -.notion-body:not(.dark) - .notion-dark-theme - [style*='background: white']:not(.notion-help-button):not([style*='box-shadow: 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;']), -.notion-body:not(.dark) [style*='background-color: white'] { - background: var(--theme--main) !important; -} -.notion-sidebar > div, -.notion-body.dark [style*='background: rgb(55, 60, 63)'], -.notion-body.dark [style*='background: rgb(120, 123, 123)'], -.notion-body:not(.dark) [style*='background: rgb(247, 246, 243)'], -.notion-body:not(.dark) [style*='background: rgb(223, 223, 222)'] { - background: var(--theme--sidebar) !important; -} -.notion-peek-renderer, -[style*='background: rgba(15, 15, 15, 0.6)'] { - background: var(--theme--overlay) !important; -} - -.notion-frame - .notion-scroller - [style*='env(safe-area-inset-'][style*=' width: 900px'], -.notion-frame - .notion-scroller - [style*='env(safe-area-inset-'][style*=';width: 900px'], -.notion-frame - .notion-scroller - [style*='height: 30vh'] - [style*='pointer-events:'][style*='max-width: 100%; width: 900px'] { - width: var(--theme--page_normal-width) !important; -} - -.notion-frame - [style*='padding-left: calc(96px + env(safe-area-inset-left)); padding-right: calc(96px + env(safe-area-inset-right));'] { - padding-left: var(--theme--page-padding) !important; - padding-right: var(--theme--page-padding) !important; -} - -.notion-page-content [data-block-id][style*='max-width'] { - max-width: 100% !important; -} -.notion-frame - .notion-scroller - [style*='env(safe-area-inset-'][style*=' width: 100%'], -.notion-frame - .notion-scroller - [style*='height: 30vh'] - [style*='pointer-events:'][style*='max-width: 100%; width: 100%'] { - width: var(--theme--page_full-width) !important; -} -.notion-frame .notion-scroller [style*='padding-left: 136.5px;'] { - padding-left: 0 !important; -} -.notion-frame .notion-scroller [style*='padding-right: 136.5px;'] { - padding-right: 0 !important; -} -.notion-collection_view-block > :first-child, -.notion-collection_view-block .notion-scroller > :first-child { - padding-left: 0 !important; - padding-right: 0 !important; -} - -.notion-peek-renderer - .notion-scroller.vertical - [style*='position: relative; width: 100%; display: flex; flex-direction: column; align-items: center; height: 20vh;'], -.notion-peek-renderer - .notion-scroller.vertical - [style*='position: relative; width: 100%; display: flex; flex-direction: column; align-items: center; height: 20vh;'] - img { - height: var(--theme--preview_banner-height) !important; -} -[style^='position: relative; width: 100%; display: flex; flex-direction: column; align-items: center; height: 30vh;'], -[style^='position: relative; width: 100%; display: flex; flex-direction: column; align-items: center; height: 30vh;'] - img { - height: var(--theme--page_banner-height) !important; -} - -/* colour help button - one of the few specific classes notion does give us */ -.notion-help-button { - background: var(--theme--interactive_hover) !important; - box-shadow: 0 0 0 0.5px var(--theme--interactive_hover-border) !important; -} - -/* page preview sizing */ -.notion-peek-renderer > div:nth-child(2) { - max-width: var(--theme--preview-width) !important; -} -.notion-peek-renderer .notion-page-content [style*='max-width: 943px;'] { - max-width: none !important; -} - -.notion-peek-renderer - .notion-scroller.vertical - [style*='padding-left: calc(126px + env(safe-area-inset-left));'] { - padding-left: var(--theme--preview-padding) !important; -} -.notion-peek-renderer - .notion-scroller.vertical - [style*='padding-right: calc(126px + env(safe-area-inset-right));'] { - padding-right: var(--theme--preview-padding) !important; -} -.notion-peek-renderer - .notion-scroller.vertical - [style*='margin-left: calc(126px + env(safe-area-inset-left));'] { - margin-left: var(--theme--preview-padding) !important; -} -.notion-peek-renderer - .notion-scroller.vertical - [style*='margin-right: calc(126px + env(safe-area-inset-right));'] { - margin-right: var(--theme--preview-padding) !important; -} -.notion-peek-renderer .notion-page-content { - padding-left: var(--theme--preview-padding) !important; - padding-right: var(--theme--preview-padding) !important; - width: 100%; -} - -/** fonts **/ - -[style*='Segoe UI'] { - font-family: var(--theme--font_sans) !important; -} -[style*='Georgia'] { - font-family: var(--theme--font_serif) !important; -} -[style*='iawriter-mono'] { - font-family: var(--theme--font_mono) !important; -} -[style*='SFMono-Regular'] { - font-family: var(--theme--font_code) !important; -} -.notion-selectable.notion-quote-block div[spellcheck="true"] { - font-family: var(--theme--font_quote) !important; -} -[placeholder='Heading 1'], [placeholder='Heading 2'], [placeholder='Heading 3'] { - font-family: var(--theme--font_headings) !important; -} -.notion-frame .notion-page-block div[placeholder='Untitled'], -.notion-overlay-container .notion-page-block div[placeholder='Untitled'] { - font-size: calc( - var(--theme--font_body-size) * (var(--theme--font_heading1-size) / 1em) - ) !important; -} -[placeholder='Heading 1'] { - font-size: calc( - var(--theme--font_body-size) * (var(--theme--font_heading1-size) / 1em) - ) !important; -} -[placeholder='Heading 2'] { - font-size: calc( - var(--theme--font_body-size) * (var(--theme--font_heading2-size) / 1em) - ) !important; -} -[placeholder='Heading 3'] { - font-size: calc( - var(--theme--font_body-size) * (var(--theme--font_heading3-size) / 1em) - ) !important; -} -.notion-frame .notion-scroller.vertical.horizontal [style*='font-size: 14px'], -.notion-overlay-container .notion-scroller.vertical [style*='font-size: 14px'] { - font-size: var(--theme--font_label-size) !important; -} -.notion-frame .notion-scroller.vertical.horizontal .notion-page-content, -.notion-overlay-container .notion-scroller.vertical .notion-page-content { - font-size: var(--theme--font_body-size) !important; -} -.notion-frame - .notion-scroller.vertical.horizontal - .notion-page-content[style*='font-size: 14px'], -.notion-overlay-container - .notion-scroller.vertical - .notion-page-content[style*='font-size: 14px'] { - font-size: var(--theme--font_body-size_small) !important; -} -.notion-code-block [placeholder=' '] { - font-size: var(--theme--font_code-size) !important; -} -.notion-sidebar [style*='font-size: 14px'] { - font-size: var(--theme--font_sidebar-size) !important; -} - -/** text-block readability **/ - -.notion-page-content .notion-selectable.notion-text-block { - line-height: var(--theme--text-block_line-height) !important; - margin-top: var(--theme--text-block_margin-top) !important; -} - -/** databases **/ - -.notion-body.dark [style*='background: rgb(63, 68, 71)'], -.notion-body.dark [style*='background-color: rgb(64, 68, 71);'], -.notion-body:not(.dark) - .notion-scroller.horizontal.vertical - .notion-selectable - > a[style*='background: white'], -.notion-body:not(.dark) [style*='background: rgb(247, 246, 243)'], -.notion-body:not(.dark) - .notion-dark-theme - [style*='background: white'][style*='box-shadow: 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;'] { - background: var(--theme--card) !important; -} -.notion-body.dark - .notion-page-block.notion-collection-item - [style*='background: rgba(255, 255, 255, 0.05)'], -.notion-body:not(.dark) - .notion-page-block.notion-collection-item - [style*='background: rgba(55, 53, 47, 0.024)'] { - background: var(--theme--gallery) !important; -} -.notion-body.dark .notion-scroller > [style*='rgb(55, 60, 63)'], -.notion-body:not(.dark) [style*='background: rgba(242, 241, 238, 0.6)'] { - background: var(--theme--select_input) !important; -} - -.notion-body.dark - [style*='box-shadow: rgba(255, 255, 255, 0.14) 0px -1px inset;'], -.notion-body:not(.dark) - [style*='box-shadow: rgba(55, 53, 47, 0.16) 0px -1px 0px inset'] { - box-shadow: rgba(55, 53, 47, 0.16) 0px -1px inset !important; -} - -.notion-body.dark [style*='box-shadow: rgba(255, 255, 255, 0.07) 0px 1px 0px'], -.notion-body:not(.dark) - [style*='box-shadow: rgba(55, 53, 47, 0.09) 0px 1px 0px'] { - box-shadow: var(--theme--ui-border) 0px 1px 0px !important; -} -.notion-body.dark - [style*='box-shadow: rgba(255, 255, 255, 0.14) 0px 1px 0px inset'], -.notion-body:not(.dark) - [style*='box-shadow: rgba(55, 53, 47, 0.16) 0px 1px 0px inset'] { - box-shadow: var(--theme--table-border) 0px 1px 0px inset !important; -} - -.notion-body.dark [style*='box-shadow: rgb(47, 52, 55) -3px 0px 0px;'], -.notion-body:not(.dark) [style*='box-shadow: white -3px 0px 0px;'] { - box-shadow: var(--theme--main) -3px 0px 0px !important; -} -.notion-body.dark - [style*='box-shadow: rgb(47, 52, 55) -3px 0px 0px, rgba(255, 255, 255, 0.14) 0px 1px 0px'], -.notion-body:not(.dark) - [style*='box-shadow: white -3px 0px 0px, rgba(55, 53, 47, 0.16) 0px 1px 0px'], -.notion-body:not(.dark) - [style*='box-shadow: rgba(255, 255, 255, 0.07) 0px -1px 0px'] { - box-shadow: var(--theme--main) -3px 0px 0px, - var(--theme--ui-border) 0px 1px 0px !important; -} - -.notion-body.dark [style*='border-top: 1px solid rgba(255, 255, 255,'], -.notion-body:not(.dark) [style*='border-top: 1px solid rgba(55, 53, 47,'] { - border-top: 1px solid var(--theme--table-border) !important; -} -.notion-body.dark - [style*='box-shadow: rgba(255, 255, 255, 0.14) -1px 0px 0px'] { - box-shadow: var(--theme--table-border) -1px 0px 0px !important; -} -.notion-body.dark [style*='border-bottom: 1px solid rgba(255, 255, 255,'], -.notion-body:not(.dark) [style*='border-bottom: 1px solid rgba(55, 53, 47,'] { - border-bottom: 1px solid var(--theme--table-border) !important; -} -.notion-body.dark [style*='box-shadow: rgba(255, 255, 255, 0.14) 0px 1px 0px'], -.notion-body:not(.dark) - [style*='box-shadow: rgba(55, 53, 47, 0.16) 0px 1px 0px'] { - box-shadow: var(--theme--table-border) 0px 1px 0px !important; -} -.notion-body.dark [style*='border-right: 1px solid rgba(255, 255, 255,'], -.notion-body:not(.dark) [style*='border-right: 1px solid rgba(55, 53, 47,'] { - border-right: 1px solid var(--theme--table-border) !important; -} -.notion-body.dark [style*='box-shadow: rgba(255, 255, 255, 0.07) 0px -1px 0px'], -.notion-body.dark [style*='box-shadow: rgba(55, 53, 47, 0.09) 0px -1px 0px'], -.notion-body:not(.dark) - [style*='box-shadow: rgba(55, 53, 47, 0.09) 0px -1px 0px'] { - box-shadow: var(--theme--ui-border) 0px -1px 0px !important; -} -.notion-body.dark [style*='border-left: 1px solid rgba(255, 255, 255,'], -.notion-body.dark - .notion-block-permission-settings-public-access - [role='button'][style*='border-left: none'], -.notion-body:not(.dark) [style*='border-left: 1px solid rgba(55, 53, 47,'] { - border-left: 1px solid var(--theme--table-border) !important; -} -.notion-body.dark - [style*='box-shadow: rgba(255, 255, 255, 0.14) 1px 0px 0px inset'], -.notion-body:not(.dark) - [style*='box-shadow: rgba(55, 53, 47, 0.16) 1px 0px 0px inset'] { - box-shadow: var(--theme--table-border) 1px 0px 0px inset !important; -} -.notion-body:not(.dark) - [style*='box-shadow: rgba(55, 53, 47, 0.09) -1px 0px 0px'], -.notion-body:not(.dark) - [style*='box-shadow: rgba(55, 53, 47, 0.16) -1px 0px 0px'] { - box-shadow: -1px -1px 0 var(--theme--table-border) !important; -} - -.notion-body.dark - [style*='border-top: 1px solid rgb(77, 81, 83)'], -.notion-body:not(.dark) - [style*='border-top: 1px solid rgb(223, 223, 222)'] { - border-top: 1px solid var(--theme--table-border_row) !important; -} -.notion-body.dark - [style*='border-bottom: 1px solid rgb(77, 81, 83)'], -.notion-body:not(.dark) - [style*='border-bottom: 1px solid rgb(223, 223, 222)'] { - border-bottom: 1px solid var(--theme--table-border_row) !important; -} -.notion-body.dark - [style*='border-right: 1px solid rgb(77, 81, 83)'], -.notion-body:not(.dark) - [style*='border-right: 1px solid rgb(223, 223, 222)'] { - border-right: 1px solid var(--theme--table-border_row) !important; -} - -.notion-body.dark - [style*='border-right: 1px solid rgb(63, 66, 69)'], -.notion-body:not(.dark) - [style*='border-right: 1px solid rgb(237, 237, 236)'] { - border-right: 1px solid var(--theme--table-border_column) !important; -} - -.notion-body.dark - [style*='box-shadow: rgb(47, 52, 55) -3px 0px 0px, rgb(77, 81, 83) 0px 1px 0px'], -.notion-body:not(.dark) - [style*='box-shadow: white -3px 0px 0px, rgb(223, 223, 222) 0px 1px 0px'] { - box-shadow: var(--theme--main) -3px 0px 0px, - var(--theme--table-border_row) 0px 1px 0px !important; -} -.notion-body.dark - [style*='box-shadow: rgb(77, 81, 83) -1px 0px 0px'], -.notion-body:not(.dark) - [style*='box-shadow: rgb(223, 223, 222) -1px 0px 0px'] { - box-shadow: var(--theme--table-border_row) -1px 0px 0px !important; -} -.notion-body.dark - [style*='box-shadow: rgb(77, 81, 83) 0px 1px 0px'], -.notion-body:not(.dark) - [style*='box-shadow: rgb(223, 223, 222) 0px 1px 0px'] { - box-shadow: var(--theme--table-border_row) 0 1px 0px !important; -} -.notion-body.dark - [style*='box-shadow: rgb(77, 81, 83) 0px 1px 0px inset'], -.notion-body:not(.dark) - [style*='box-shadow: rgb(223, 223, 222) 0px 1px 0px inset'] { - box-shadow: var(--theme--table-border_row) 0 1px 0px inset !important; -} - -[style*='border: 1px solid rgba(46, 170, 220, 0.6)'] { - border: 1px solid var(--theme--table-border_selected) !important; -} - -.notion-body.dark - [style*='background-image: linear-gradient(to right, rgba(255, 255, 255, 0.14) 0%, rgba(255, 255, 255, 0.14) 100%);'], -.notion-body:not(.dark) - [style*='background-image: linear-gradient(to right, rgba(55, 53, 47, 0.16) 0%, rgba(55, 53, 47, 0.16) 100%);'] { - background-image: linear-gradient( - to right, - var(--theme--bg_gray) 0%, - var(--theme--bg_gray) 100% - ) !important; -} - -.notion-body.dark [style*='background: rgb(71, 76, 80)'], -.notion-body.dark [style*='background: rgb(80, 85, 88)'], -.notion-body.dark [style*='background: rgb(98, 102, 104)'], -.notion-body.dark [style*='height: 1px; background: rgba(255, 255, 255, 0.07)'], -.notion-body:not(.dark) [style*='background: rgba(55, 53, 47,'], -.notion-body:not(.dark) [style*='background: rgb(239, 239, 238)'], -.notion-body:not(.dark) [style*='background: rgba(206, 205, 202, 0.5)'] { - background: var(--theme--interactive_hover) !important; - box-shadow: 0 0 0 0.5px var(--theme--interactive_hover-border) !important; -} - -/* normalise inline-table size */ -.notion-page-content .notion-collection_view-block[style*=' width'], -.notion-page-content .notion-collection_view-block[style^='width'] { - width: 100% !important; -} -.notion-page-content - .notion-collection_view-block - [style*='padding-left: 50px'], -.notion-page-content - .notion-collection_view-block - [style*='padding-left: 96px'], -.notion-page-content - .notion-collection_view-block - [style*='padding-left: 126px'] { - padding-left: 0 !important; -} -.notion-page-content - .notion-collection_view-block - [style*='padding-right: 50px'], -.notion-page-content - .notion-collection_view-block - [style*='padding-right: 96px'], -.notion-page-content - .notion-collection_view-block - [style*='padding-right: 126px'] { - padding-right: 0 !important; -} -.notion-page-content - .notion-collection_view-block - [style*='min-width: calc(100% - 192px);'], -.notion-page-content - .notion-collection_view-block - [style*='min-width: 708px;'] { - min-width: 100% !important; -} -.notion-page-content .notion-collection_view-block > div { - padding: 0 1px; -} - -/* smooth transitions */ -.notion-calendar-view-day, -.DayPicker-Day--today:not(.DayPicker-Day--selected):not(.DayPicker-Day--value):not(.DayPicker-Day--start):not(.DayPicker-Day--end), -.DayPicker-Day.DayPicker-Day--start.DayPicker-Day--selected, -.DayPicker:not(.DayPicker--interactionDisabled) .DayPicker-Day--outside:hover, -.DayPicker:not(.DayPicker--interactionDisabled) - .DayPicker-Day:not(.DayPicker-Day--disabled):not(.DayPicker-Day--selected):not(.DayPicker-Day--value):not(.DayPicker-Day--start):not(.DayPicker-Day--end) { - transition: all 200ms ease !important; -} -.notion-token-remove-button { - transition: opacity 200ms ease !important; -} -.notion-to_do-block > div > div > div[style*='background:'] { - transition: background 200ms ease !important; -} - -/* fix button resizing */ -.notion-collection_view-block [role='button'], -.notion-collection_view_page-block [role='button'] { - border-width: 0 !important; -} - -/** general ui **/ - -::selection, -[style*='background: rgba(46, 170, 220,']:not([style*='background: rgba(46, 170, 220, 0)']), -[style*='background-color: rgba(46, 170, 220,']:not([style*='background-color: rgba(46, 170, 220, 0)']) { - background: var(--theme--selected) !important; -} - -[style*=' color: rgb(46, 170, 220)'], -[style^='color: rgb(46, 170, 220)'] { - color: var(--theme--primary) !important; -} -[style*='fill: rgb(46, 170, 220)'] { - fill: var(--theme--primary) !important; -} -[style*='background: rgb(46, 170, 220)'], -[style*='background-color: rgb(46, 170, 220)'] { - background: var(--theme--primary) !important; -} -[style*='box-shadow: rgb(46, 170, 220) 0px 0px 0px 2px inset'] { - box-shadow: var(--theme--primary) 0px 0px 0px 2px inset !important; -} -[style*='background: rgb(6, 156, 205)'] { - background: var(--theme--primary_hover) !important; -} -[style*='background: rgb(0, 141, 190)'] { - background: var(--theme--primary_click) !important; -} -[style*='background: rgb(46, 170, 220)'][style*='color: white'], -[style*='background-color: rgb(46, 170, 220)'][style*='color: white'], -[style*='background: rgb(6, 156, 205)'][style*='color: white'], -[style*='background: rgb(0, 141, 190)'][style*='color: white'] { - color: var(--theme--primary_text) !important; -} -[style*='background: rgb(46, 170, 220)'] [style*='fill: white'], -[style*='background-color: rgb(46, 170, 220)'] [style*='fill: white'], -[style*='background: rgb(6, 156, 205)'] [style*='fill: white'], -[style*='background: rgb(0, 141, 190)'] [style*='fill: white'] { - fill: var(--theme--primary_text) !important; -} -.DayPicker-Day--today:not(.DayPicker-Day--selected):not(.DayPicker-Day--value):not(.DayPicker-Day--start):not(.DayPicker-Day--end)::after, -[style*='background: rgb(235, 87, 87)'] { - background: var(--theme--primary_indicator) !important; -} -[style*='background: rgb(235, 87, 87)'][style*='color: white'] { - color: var(--theme--primary_indicator_text) !important; -} -#notion-app .DayPicker:not(.DayPicker--interactionDisabled) .DayPicker-Day--outside:hover, #notion-app .DayPicker:not(.DayPicker--interactionDisabled) .DayPicker-Day:not(.DayPicker-Day--disabled):not(.DayPicker-Day--selected):not(.DayPicker-Day--value):not(.DayPicker-Day--start):not(.DayPicker-Day--end):hover { - background: var(--theme--primary_indicator_hover) !important; -} - -.notion-body.dark - [style*='box-shadow: 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'], -.notion-body:not(.dark) - [style*='box-shadow: 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'] { - box-shadow: var(--theme--box-shadow_strong) !important; -} -.notion-body.dark - [style*='box-shadow: rgba(15, 15, 15, 0.2) 0px 0px 0px 1px, rgba(15, 15, 15, 0.2) 0px 2px 4px'], -.notion-body:not(.dark) - [style*='box-shadow: rgba(15, 15, 15, 0.1) 0px 0px 0px 1px, rgba(15, 15, 15, 0.1) 0px 2px 4px'] { - box-shadow: var(--theme--box-shadow) !important; -} - -.notion-to_do-block > div [role='button']:hover, -.notion-to_do-block > div [role='button']:hover .checkboxSquare, -.notion-to_do-block > div [role='button']:hover .check { - background: var(--theme--option_hover-background) !important; -} -.notion-to_do-block > div [role='button']:hover .checkboxSquare path, -.notion-to_do-block > div [role='button']:hover .check polygon { - fill: var(--theme--option_hover-color) !important; -} -.notion-to_do-block > div [role='button']:not(:hover) .check { - background: var(--theme--option_active-background) !important; -} -.notion-to_do-block > div [role='button']:not(:hover) .check polygon { - fill: var(--theme--option_active-color) !important; -} - -.notion-to_do-block .checkboxSquare { - background: var(--theme--option-background) !important; -} -.notion-to_do-block .checkboxSquare path { - fill: var(--theme--option-color) !important; -} - -[style*='color: rgb(235, 87, 87); border: 1px solid rgba(235, 87, 87, 0.5);'] { - color: var(--theme--danger_text) !important; - border: 1px solid var(--theme--danger_border) !important; -} - -/* divider */ - -.notion-body.dark .notion-divider-block [style*='border-bottom: 1px solid rgba(255, 255, 255,'], -.notion-body:not(.dark) .notion-divider-block [style*='border-bottom: 1px solid rgba(55, 53, 47,'] { - border-bottom: 1px solid var(--theme--divider) !important; -} - -/* inputs */ -.notion-focusable:focus-within { - box-shadow: var(--theme--primary_hover) 0px 0px 0px 2px !important; -} - -/** content colours **/ - -.notion-body, -.notion-frame .notion-page-block, -.notion-body.dark [style*=' color: rgba(255, 255, 255, 0.9)'], -.notion-body.dark [style^='color: rgba(255, 255, 255, 0.9)'], -.notion-body.dark [style*=' color: rgba(255, 255, 255, 0.7)'], -.notion-body.dark [style^='color: rgba(255, 255, 255, 0.7)'], -.notion-body:not(.dark) [style*=' color: rgb(55, 53, 47);'], -.notion-body:not(.dark) [style^='color: rgb(55, 53, 47);'] { - color: var(--theme--text) !important; -} -.notion-body.dark [style*='color: rgba(255, 255, 255, 0.6)'], -.notion-body:not(.dark) [style*='color: rgba(55, 53, 47, 0.6)'], -.notion-body:not(.dark) [style*='color: rgba(25, 23, 17, 0.6)'] { - color: var(--theme--text_ui) !important; -} -::placeholder { - opacity: 1 !important; -} -::placeholder, -[style*='-webkit-text-fill-color:'], -.notion-body.dark [style*='color: rgba(255, 255, 255, 0.4)'], -.notion-body.dark [style*='color: rgba(255, 255, 255, 0.4)']::before, -.notion-body:not(.dark) [style*='color: rgba(55, 53, 47, 0.4)'], -.notion-body:not(.dark) [style*='color: rgba(55, 53, 47, 0.4)']::before { - color: var(--theme--text_ui_info) !important; - -webkit-text-fill-color: var(--theme--text_ui_info) !important; -} -.notion-body.dark [style*='fill: rgb(202, 204, 206)'] { - fill: var(--theme--text) !important; -} - -.notion-body.dark [style*='fill: rgba(255, 255, 255, 0.6)'], -.notion-body:not(.dark) [style*='fill: rgba(55, 53, 47, 0.8)'], -.notion-body:not(.dark) [style*='fill: rgba(55, 53, 47, 0.6)'], -.notion-body:not(.dark) [style*='fill: rgba(25, 23, 17, 0.6)'] { - fill: var(--theme--text_ui) !important; -} -.notion-body.dark [style*='fill: rgba(202, 204, 206, 0.6)'], -.notion-body.dark [style*='fill: rgba(202, 204, 206, 0.4)'], -.notion-body:not(.dark) [style*='fill: rgba(55, 53, 47, 0.4)'], -.notion-body:not(.dark) [style*='fill: rgba(55, 53, 47, 0.3)'] { - fill: var(--theme--text_ui_info) !important; -} -.notion-body.dark [style*='border-color:rgba(255,255,255,0.4);opacity:0.7'], -.notion-body:not(.dark) [style*='border-color:rgba(55,53,47,0.4);opacity:0.7'] { - border-color: var(--theme--text_ui_info) !important; -} -.notion-body.dark [style*='caret-color: rgba(255, 255, 255, 0.9)'], -.notion-body:not(.dark) [style*='caret-color: rgb(55, 53, 47)'] { - caret-color: var(--theme--text) !important; -} - -.notion-body.dark [style*='color:rgba(151,154,155,0.95)'], -.notion-body.dark - [style*='color: rgba(255, 255, 255, 0.6); fill: rgba(255, 255, 255, 0.6);'], -.notion-body:not(.dark) [style*='color:rgb(155,154,151)'], -.notion-body:not(.dark) - [style*='color: rgba(55, 53, 47, 0.6); fill: rgba(55, 53, 47, 0.6);'] { - color: var(--theme--text_gray) !important; - fill: var(--theme--text_gray) !important; -} -.notion-body.dark [style*='background:rgb(69,75,78)'], -.notion-body:not(.dark) [style*='background:rgb(235,236,237)'] { - background: var(--theme--bg_gray) !important; - color: var(--theme--bg_gray-text) !important; -} -.notion-body.dark - [style*='color:rgba(151,154,155,0.95)'] - [style*='background:rgb(69,75,78)'], -.notion-body.dark - [style*='color: rgba(255, 255, 255, 0.6); fill: rgba(255, 255, 255, 0.6);'] - [style*='background:rgb(69,75,78)'], -.notion-body:not(.dark) - [style*='color:rgb(155,154,151)'] - [style*='background:rgb(235,236,237)'], -.notion-body:not(.dark) - [style*='color: rgba(55, 53, 47, 0.6); fill: rgba(55, 53, 47, 0.6);'] - [style*='background:rgb(235,236,237)'] { - background: var(--theme--bg_gray) !important; - color: var(--theme--text_gray) !important; - fill: var(--theme--text_gray) !important; -} -.notion-body.dark [style*='background: rgb(69, 75, 78)'], -.notion-body:not(.dark) [style*='background: rgb(235, 236, 237)'] { - background: var(--theme--line_gray) !important; - color: var(--theme--line_gray-text) !important; -} -.notion-body.dark [style*='background: rgba(151, 154, 155, 0.5)'], -.notion-body:not(.dark) [style*='background: rgba(140, 46, 0, 0.2)'] { - background: var(--theme--select_gray) !important; - color: var(--theme--select_gray-text) !important; -} -.notion-body.dark [style*='background: rgba(69, 75, 78, 0.3)'], -.notion-body:not(.dark) [style*='background: rgba(235, 236, 237, 0.3)'] { - background: var(--theme--callout_gray) !important; - color: var(--theme--callout_gray-text) !important; -} - -.notion-body.dark [style*='color:rgb(147,114,100)'], -.notion-body.dark - [style*='color: rgb(147, 114, 100); fill: rgb(147, 114, 100);'], -.notion-body:not(.dark) [style*='color:rgb(100,71,58)'], -.notion-body:not(.dark) - [style*='color: rgb(100, 71, 58); fill: rgb(100, 71, 58);'] { - color: var(--theme--text_brown) !important; - fill: var(--theme--text_brown) !important; -} -.notion-body.dark [style*='background:rgb(67,64,64)'], -.notion-body:not(.dark) [style*='background:rgb(233,229,227)'] { - background: var(--theme--bg_brown) !important; - color: var(--theme--bg_brown-text) !important; -} -.notion-body.dark - [style*='color:rgb(147,114,100)'] - [style*='background:rgb(67,64,64)'], -.notion-body.dark - [style*='color: rgb(147, 114, 100); fill: rgb(147, 114, 100);'] - [style*='background:rgb(67,64,64)'], -.notion-body:not(.dark) - [style*='color:rgb(100,71,58)'] - [style*='background:rgb(233,229,227)'], -.notion-body:not(.dark) - [style*='color: rgb(100, 71, 58); fill: rgb(100, 71, 58);'] - [style*='background:rgb(233,229,227)'] { - background: var(--theme--bg_brown) !important; - color: var(--theme--text_brown) !important; - fill: var(--theme--text_brown) !important; -} -.notion-body.dark [style*='background: rgb(67, 64, 64)'], -.notion-body:not(.dark) [style*='background: rgb(233, 229, 227)'] { - background: var(--theme--line_brown) !important; - color: var(--theme--line_brown-text) !important; -} -.notion-body.dark [style*='background: rgba(147, 114, 100, 0.5)'], -.notion-body:not(.dark) [style*='background: rgba(140, 46, 0, 0.2)'] { - background: var(--theme--select_brown) !important; - color: var(--theme--select_brown-text) !important; -} -.notion-body.dark [style*='background: rgba(67, 64, 64, 0.3)'], -.notion-body:not(.dark) [style*='background: rgba(233, 229, 227, 0.3)'] { - background: var(--theme--callout_brown) !important; - color: var(--theme--callout_brown-text) !important; -} - -.notion-body.dark [style*='color:rgb(255,163,68)'], -.notion-body.dark [style*='color: rgb(255, 163, 68); fill: rgb(255, 163, 68);'], -.notion-body:not(.dark) [style*='color:rgb(217,115,13)'], -.notion-body:not(.dark) - [style*='color: rgb(217, 115, 13); fill: rgb(217, 115, 13);'] { - color: var(--theme--text_orange) !important; - fill: var(--theme--text_orange) !important; -} -.notion-body.dark [style*='background:rgb(89,74,58)'], -.notion-body:not(.dark) [style*='background:rgb(250,235,221)'] { - background: var(--theme--bg_orange) !important; - color: var(--theme--bg_orange-text) !important; -} -.notion-body.dark - [style*='color:rgb(255,163,68)'] - [style*='background:rgb(89,74,58)'], -.notion-body.dark - [style*='color: rgb(255, 163, 68); fill: rgb(255, 163, 68);'] - [style*='background:rgb(89,74,58)'], -.notion-body:not(.dark) - [style*='color:rgb(217,115,13)'] - [style*='background:rgb(250,235,221)'], -.notion-body:not(.dark) - [style*='color: rgb(217, 115, 13); fill: rgb(217, 115, 13);'] - [style*='background:rgb(250,235,221)'] { - background: var(--theme--bg_orange) !important; - color: var(--theme--text_orange) !important; - fill: var(--theme--text_orange) !important; -} -.notion-body.dark [style*='background: rgb(89, 74, 58)'], -.notion-body:not(.dark) [style*='background: rgb(250, 235, 221)'] { - background: var(--theme--line_orange) !important; - color: var(--theme--line_orange-text) !important; -} -.notion-body.dark [style*='background: rgba(255, 163, 68, 0.5)'], -.notion-body:not(.dark) [style*='background: rgba(245, 93, 0, 0.2)'] { - background: var(--theme--select_orange) !important; - color: var(--theme--select_orange-text) !important; -} -.notion-body.dark [style*='background: rgba(89, 74, 58, 0.3)'], -.notion-body:not(.dark) [style*='background: rgba(250, 235, 221, 0.3)'] { - background: var(--theme--callout_orange) !important; - color: var(--theme--callout_orange-text) !important; -} - -.notion-body.dark [style*='color:rgb(255,220,73)'], -.notion-body.dark [style*='color: rgb(255, 220, 73); fill: rgb(255, 220, 73);'], -.notion-body:not(.dark) [style*='color:rgb(223,171,1)'], -.notion-body:not(.dark) - [style*='color: rgb(223, 171, 1); fill: rgb(223, 171, 1);'] { - color: var(--theme--text_yellow) !important; - fill: var(--theme--text_yellow) !important; -} -.notion-body.dark [style*='background:rgb(89,86,59)'], -.notion-body:not(.dark) [style*='background:rgb(251,243,219)'] { - background: var(--theme--bg_yellow) !important; - color: var(--theme--bg_yellow-text) !important; -} -.notion-body.dark - [style*='color:rgb(255,220,73)'] - [style*='background:rgb(89,86,59)'], -.notion-body.dark - [style*='color: rgb(255, 220, 73); fill: rgb(255, 220, 73);'] - [style*='background:rgb(89,86,59)'], -.notion-body:not(.dark) - [style*='color:rgb(223,171,1)'] - [style*='background:rgb(251,243,219)'], -.notion-body:not(.dark) - [style*='color: rgb(223, 171, 1); fill: rgb(223, 171, 1);'] - [style*='background:rgb(251,243,219)'] { - background: var(--theme--bg_yellow) !important; - color: var(--theme--text_yellow) !important; - fill: var(--theme--text_yellow) !important; -} -.notion-body.dark [style*='background: rgb(89, 86, 59)'], -.notion-body:not(.dark) [style*='background: rgb(251, 243, 219)'] { - background: var(--theme--line_yellow) !important; - color: var(--theme--line_yellow-text) !important; -} -.notion-body.dark [style*='background: rgba(255, 220, 73, 0.5)'], -.notion-body:not(.dark) [style*='background: rgba(233, 168, 0, 0.2)'] { - background: var(--theme--select_yellow) !important; - color: var(--theme--select_yellow-text) !important; -} -.notion-body.dark [style*='background: rgba(89, 86, 59, 0.3)'], -.notion-body:not(.dark) [style*='background: rgba(251, 243, 219, 0.3)'] { - background: var(--theme--callout_yellow) !important; - color: var(--theme--callout_yellow-text) !important; -} - -.notion-body.dark [style*='color:rgb(77,171,154)'], -.notion-body.dark [style*='color: rgb(77, 171, 154); fill: rgb(77, 171, 154);'], -.notion-body:not(.dark) [style*='color:rgb(15,123,108)'], -.notion-body:not(.dark) - [style*='color: rgb(15, 123, 108); fill: rgb(15, 123, 108);'] { - color: var(--theme--text_green) !important; - fill: var(--theme--text_green) !important; -} -.notion-body.dark [style*='background:rgb(53,76,75)'], -.notion-body:not(.dark) [style*='background:rgb(221,237,234)'] { - background: var(--theme--bg_green) !important; - color: var(--theme--bg_green-text) !important; -} -.notion-body.dark - [style*='color:rgb(77,171,154)'] - [style*='background:rgb(53,76,75)'], -.notion-body.dark - [style*='color: rgb(77, 171, 154); fill: rgb(77, 171, 154);'] - [style*='background:rgb(53,76,75)'], -.notion-body:not(.dark) - [style*='color:rgb(15,123,108)'] - [style*='background:rgb(221,237,234)'], -.notion-body:not(.dark) - [style*='color: rgb(15, 123, 108); fill: rgb(15, 123, 108);'] - [style*='background:rgb(221,237,234)'] { - background: var(--theme--bg_green) !important; - color: var(--theme--text_green) !important; - fill: var(--theme--text_green) !important; -} -.notion-body.dark [style*='background: rgb(53, 76, 75)'], -.notion-body:not(.dark) [style*='background: rgb(221, 237, 234)'] { - background: var(--theme--line_green) !important; - color: var(--theme--line_green-text) !important; -} -.notion-body.dark [style*='background: rgba(77, 171, 154, 0.5)'], -.notion-body:not(.dark) [style*='background: rgba(0, 135, 107, 0.2)'] { - background: var(--theme--select_green) !important; - color: var(--theme--select_green-text) !important; -} -.notion-body.dark [style*='background: rgba(53, 76, 75, 0.3)'], -.notion-body:not(.dark) [style*='background: rgba(221, 237, 234, 0.3)'] { - background: var(--theme--callout_green) !important; - color: var(--theme--callout_green-text) !important; -} - -.notion-body.dark [style*='color:rgb(82,156,202)'], -.notion-body.dark [style*='color: rgb(82, 156, 202); fill: rgb(82, 156, 202);'], -.notion-body:not(.dark) [style*='color:rgb(11,110,153)'], -.notion-body:not(.dark) - [style*='color: rgb(11, 110, 153); fill: rgb(11, 110, 153);'] { - color: var(--theme--text_blue) !important; - fill: var(--theme--text_blue) !important; -} -.notion-body.dark [style*='background:rgb(54,73,84)'], -.notion-body:not(.dark) [style*='background:rgb(221,235,241)'] { - background: var(--theme--bg_blue) !important; - color: var(--theme--bg_blue-text) !important; -} -.notion-body.dark - [style*='color:rgb(82,156,202)'] - [style*='background:rgb(54,73,84)'], -.notion-body.dark - [style*='color: rgb(82, 156, 202); fill: rgb(82, 156, 202);'] - [style*='background:rgb(54,73,84)'], -.notion-body:not(.dark) - [style*='color:rgb(11,110,153)'] - [style*='background:rgb(221,235,241)'], -.notion-body:not(.dark) - [style*='color: rgb(11, 110, 153); fill: rgb(11, 110, 153);'] - [style*='background:rgb(221,235,241)'] { - background: var(--theme--bg_blue) !important; - color: var(--theme--text_blue) !important; - fill: var(--theme--text_blue) !important; -} -.notion-body.dark [style*='background: rgb(54, 73, 84)'], -.notion-body:not(.dark) [style*='background: rgb(221, 235, 241)'] { - background: var(--theme--line_blue) !important; - color: var(--theme--line_blue-text) !important; -} -.notion-body.dark [style*='background: rgba(82, 156, 202, 0.5)'], -.notion-body:not(.dark) [style*='background: rgba(0, 120, 223, 0.2)'] { - background: var(--theme--select_blue) !important; - color: var(--theme--select_blue-text) !important; -} -.notion-body.dark [style*='background: rgba(54, 73, 84, 0.3)'], -.notion-body:not(.dark) [style*='background: rgba(221, 235, 241, 0.3)'] { - background: var(--theme--callout_blue) !important; - color: var(--theme--callout_blue-text) !important; -} - -.notion-body.dark [style*='color:rgb(154,109,215)'], -.notion-body.dark - [style*='color: rgb(154, 109, 215); fill: rgb(154, 109, 215);'], -.notion-body:not(.dark) [style*='color:rgb(105,64,165)'], -.notion-body:not(.dark) - [style*='color: rgb(105, 64, 165); fill: rgb(105, 64, 165);'] { - color: var(--theme--text_purple) !important; - fill: var(--theme--text_purple) !important; -} -.notion-body.dark [style*='background:rgb(68,63,87)'], -.notion-body:not(.dark) [style*='background:rgb(234,228,242)'] { - background: var(--theme--bg_purple) !important; - color: var(--theme--bg_purple-text) !important; -} -.notion-body.dark - [style*='color:rgb(154,109,215)'] - [style*='background:rgb(68,63,87)'], -.notion-body.dark - [style*='color: rgb(154, 109, 215); fill: rgb(154, 109, 215);'] - [style*='background:rgb(68,63,87)'], -.notion-body:not(.dark) - [style*='color:rgb(105,64,165)'] - [style*='background:rgb(234,228,242)'], -.notion-body:not(.dark) - [style*='color: rgb(105, 64, 165); fill: rgb(105, 64, 165);'] - [style*='background:rgb(234,228,242)'] { - background: var(--theme--bg_purple) !important; - color: var(--theme--text_purple) !important; - fill: var(--theme--text_purple) !important; -} -.notion-body.dark [style*='background: rgb(68, 63, 87)'], -.notion-body:not(.dark) [style*='background: rgb(234, 228, 242)'] { - background: var(--theme--line_purple) !important; - color: var(--theme--line_purple-text) !important; -} -.notion-body.dark [style*='background: rgba(154, 109, 215, 0.5)'], -.notion-body:not(.dark) [style*='background: rgba(103, 36, 222, 0.2)'] { - background: var(--theme--select_purple) !important; - color: var(--theme--select_purple-text) !important; -} -.notion-body.dark [style*='background: rgba(68, 63, 87, 0.3)'], -.notion-body:not(.dark) [style*='background: rgba(234, 228, 242, 0.3)'] { - background: var(--theme--callout_purple) !important; - color: var(--theme--callout_purple-text) !important; -} - -.notion-body.dark [style*='color:rgb(226,85,161)'], -.notion-body.dark [style*='color: rgb(226, 85, 161); fill: rgb(226, 85, 161);'], -.notion-body:not(.dark) [style*='color:rgb(173,26,114)'], -.notion-body:not(.dark) - [style*='color: rgb(173, 26, 114); fill: rgb(173, 26, 114);'] { - color: var(--theme--text_pink) !important; - fill: var(--theme--text_pink) !important; -} -.notion-body.dark [style*='background:rgb(83,59,76)'], -.notion-body:not(.dark) [style*='background:rgb(244,223,235)'] { - background: var(--theme--bg_pink) !important; - color: var(--theme--bg_pink-text) !important; -} -.notion-body.dark - [style*='color:rgb(226,85,161)'] - [style*='background:rgb(83,59,76)'], -.notion-body.dark - [style*='color: rgb(226, 85, 161); fill: rgb(226, 85, 161);'] - [style*='background:rgb(83,59,76)'], -.notion-body:not(.dark) - [style*='color:rgb(173,26,114)'] - [style*='background:rgb(244,223,235)'], -.notion-body:not(.dark) - [style*='color: rgb(173, 26, 114); fill: rgb(173, 26, 114);'] - [style*='background:rgb(244,223,235)'] { - background: var(--theme--bg_pink) !important; - color: var(--theme--text_pink) !important; - fill: var(--theme--text_pink) !important; -} -.notion-body.dark [style*='background: rgb(83, 59, 76)'], -.notion-body:not(.dark) [style*='background: rgb(244, 223, 235)'] { - background: var(--theme--line_pink) !important; - color: var(--theme--line_pink-text) !important; -} -.notion-body.dark [style*='background: rgba(226, 85, 161, 0.5)'], -.notion-body:not(.dark) [style*='background: rgba(221, 0, 129, 0.2)'] { - background: var(--theme--select_pink) !important; - color: var(--theme--select_pink-text) !important; -} -.notion-body.dark [style*='background: rgba(83, 59, 76, 0.3)'], -.notion-body:not(.dark) [style*='background: rgba(244, 223, 235, 0.3)'] { - background: var(--theme--callout_pink) !important; - color: var(--theme--callout_pink-text) !important; -} - -.notion-body.dark [style*='color:rgb(255,115,105)'], -.notion-body.dark - [style*='color: rgb(255, 115, 105); fill: rgb(255, 115, 105);'], -.notion-body:not(.dark) [style*='color:rgb(224,62,62)'], -.notion-body:not(.dark) - [style*='color: rgb(224, 62, 62); fill: rgb(224, 62, 62);'] { - color: var(--theme--text_red) !important; - fill: var(--theme--text_red) !important; -} -.notion-body.dark [style*='background:rgb(89,65,65)'], -.notion-body:not(.dark) [style*='background:rgb(251,228,228)'] { - background: var(--theme--bg_red) !important; - color: var(--theme--bg_red-text) !important; -} -.notion-body.dark - [style*='color:rgb(255,115,105)'] - [style*='background:rgb(89,65,65)'], -.notion-body.dark - [style*='color: rgb(255, 115, 105); fill: rgb(255, 115, 105);'] - [style*='background:rgb(89,65,65)'], -.notion-body:not(.dark) - [style*='color:rgb(224,62,62)'] - [style*='background:rgb(251,228,228)'], -.notion-body:not(.dark) - [style*='color: rgb(224, 62, 62); fill: rgb(224, 62, 62);'] - [style*='background:rgb(251,228,228)'] { - background: var(--theme--bg_red) !important; - color: var(--theme--text_red) !important; - fill: var(--theme--text_red) !important; -} -.notion-body.dark [style*='background: rgb(89, 65, 65)'], -.notion-body:not(.dark) [style*='background: rgb(251, 228, 228)'] { - background: var(--theme--line_red) !important; - color: var(--theme--line_red-text) !important; -} -.notion-body.dark [style*='background: rgba(255, 115, 105, 0.5);'], -.notion-body:not(.dark) [style*='background: rgba(255, 0, 26, 0.2)'] { - background: var(--theme--select_red) !important; - color: var(--theme--select_red-text) !important; -} -.notion-body.dark [style*='background: rgba(89, 65, 65, 0.3)'], -.notion-body:not(.dark) [style*='background: rgba(251, 228, 228, 0.3)'] { - background: var(--theme--callout_red) !important; - color: var(--theme--callout_red-text) !important; -} - -/* fix highlight padding: this isn't a typo */ -[style*='background:rgb('] { - padding-bottom: 3px !important; -} - -/** code **/ - -[style*='color:#EB5757'] { - color: var(--theme--code_inline-text) !important; - background: var(--theme--code_inline-background) !important; -} - -.notion-page-content .notion-code-block { - background: var(--theme--code-background) !important; -} -.notion-code-block > div { - color: var(--theme--code-text) !important; -} -.notion-code-block .token.function { - color: var(--theme--code_function) !important; -} -.notion-code-block .token.parameter { - color: var(--theme--code_parameter) !important; -} -.notion-code-block .token.keyword { - color: var(--theme--code_keyword) !important; -} -.notion-code-block .token.constant { - color: var(--theme--code_constant) !important; -} -.notion-code-block .token.tag { - color: var(--theme--code_tag) !important; -} -.notion-code-block .token.operator { - color: var(--theme--code_operator) !important; -} -.notion-code-block .token.important { - color: var(--theme--code_important) !important; -} -.notion-code-block .token.regex { - color: var(--theme--code_regex) !important; -} -.notion-code-block .token.property { - color: var(--theme--code_property) !important; -} -.notion-code-block .token.builtin { - color: var(--theme--code_builtin) !important; -} -.notion-code-block .token.class-name { - color: var(--theme--code_class-name) !important; -} -.notion-code-block .token.attr-name { - color: var(--theme--code_attr-name) !important; -} -.notion-code-block .token.attr-value { - color: var(--theme--code_attr-value) !important; -} -.notion-code-block .token.selector { - color: var(--theme--code_selector) !important; -} -.notion-code-block .token.id { - color: var(--theme--code_id) !important; -} -.notion-code-block .token.class { - color: var(--theme--code_class) !important; -} -.notion-code-block .token.pseudo-element { - color: var(--theme--code_pseudo-element) !important; -} -.notion-code-block .token.pseudo-class { - color: var(--theme--code_pseudo-class) !important; -} -.notion-code-block .token.attribute { - color: var(--theme--code_attribute) !important; -} -.notion-code-block .token.value { - color: var(--theme--code_value) !important; -} -.notion-code-block .token.unit { - color: var(--theme--code_unit) !important; -} -.notion-code-block .token.comment { - color: var(--theme--code_comment) !important; -} -.notion-code-block .token.punctuation { - color: var(--theme--code_punctuation) !important; -} -.notion-code-block .token.annotation { - color: var(--theme--code_annotation) !important; -} -.notion-code-block .token.decorator { - color: var(--theme--code_decorator) !important; -} -.notion-code-block .token.doctype { - color: var(--theme--code_doctype) !important; -} -.notion-code-block .token.number { - color: var(--theme--code_number) !important; -} -.notion-code-block .token.string { - color: var(--theme--code_string) !important; -} -.notion-code-block .token.boolean { - color: var(--theme--code_boolean) !important; -} diff --git a/temp/core/css/titlebar.css b/temp/core/css/titlebar.css deleted file mode 100644 index 9ab225c..0000000 --- a/temp/core/css/titlebar.css +++ /dev/null @@ -1,48 +0,0 @@ -/* - * notion-enhancer - * (c) 2020 dragonwocky (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; - } -} diff --git a/temp/core/enhancerMenu.js b/temp/core/enhancerMenu.js deleted file mode 100644 index 909c251..0000000 --- a/temp/core/enhancerMenu.js +++ /dev/null @@ -1,762 +0,0 @@ -/* - * notion-enhancer - * (c) 2020 dragonwocky (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( - ` enhancements loaded: ${modules.loaded - .map((mod) => mod.name) - .join(', ')}.` - ); - } - if (modules.invalid.length) { - createAlert( - 'error', - `invalid mods found: ${modules.invalid - .map((mod) => `${mod}`) - .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(' @ createAlert: no alert type specified'); - const el = createElement(` - - `); - 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 v${version.repo} available!
- run npm i -g notion-enhancer` - : `local build v${raw_v} 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('')); - 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) => `${mod.name}`) - .join( - ', ' - )}.
resolve or dismiss 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 app relaunch.' - ); - 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(' @ createTag: no tagname specified'); - if (!onclick) - throw Error(' @ createTag: no action specified'); - const el = createElement( - `${tagname}` - ); - 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, '
$1
') - // ~~strikethrough~~ - .replace(/([^\\])?~~((?:(?!~~).)*[^\\])~~/g, '$1$2') - // __underline__ - .replace(/([^\\])?__((?:(?!__).)*[^\\])__/g, '$1$2') - // **bold** - .replace(/([^\\])?\*\*((?:(?!\*\*).)*[^\\])\*\*/g, '$1$2') - // *italic* - .replace(/([^\\])?\*([^*]*[^\\*])\*/g, '$1$2') - // _italic_ - .replace(/([^\\])?_([^_]*[^\\_])_/g, '$1$2') - // `code` - .replace(/([^\\])?`([^`]*[^\\`])`/g, '$1$2') - // ![image_title](source) - .replace( - /([^\\])?\!\[([^\]]*[^\\\]]?)\]\(([^)]*[^\\)])\)/g, - `$1$2` - ) - // [link](destination) - .replace( - /([^\\])?\[([^\]]*[^\\\]]?)\]\(([^)]*[^\\)])\)/g, - '$1
$2' - ) - ) - .map((line) => - line.startsWith('
') ? line : `

${line}

` - ) - .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( - ' - - `; - break; - case 'select': - $opt = ` - - - `; - break; - case 'input': - $opt = ` - - - `; - break; - case 'color': - $opt = ` - - - `; - break; - case 'file': - $opt = ` - - - `; - } - $opt = createElement(`

${$opt}

`); - 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( - `` - ) - ); - } - } - } - mod.elem = createElement(` -
-
-

${mod.name}` - : `class="toggle"> - - ` - }

-

${mod.tags - .map((tag) => (tag.startsWith('#') ? tag : `#${tag}`)) - .join(' ')}

-
${markdown(mod.desc)}
-

- - - ${author.name} - - v${mod.version} -

-
- ${ - mod.options && mod.options.length - ? '
' - : '' - } -
- `); - 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[1]} data-bolded="reorder">reorder - `; - 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') - ); - }); -}; diff --git a/temp/core/icons/alwaysontop_off.svg b/temp/core/icons/alwaysontop_off.svg deleted file mode 100644 index 96afcf0..0000000 --- a/temp/core/icons/alwaysontop_off.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/temp/core/icons/alwaysontop_on.svg b/temp/core/icons/alwaysontop_on.svg deleted file mode 100644 index 3fec5d5..0000000 --- a/temp/core/icons/alwaysontop_on.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/temp/core/icons/close.svg b/temp/core/icons/close.svg deleted file mode 100644 index 7268fb0..0000000 --- a/temp/core/icons/close.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/temp/core/icons/file.svg b/temp/core/icons/file.svg deleted file mode 100644 index 81c387e..0000000 --- a/temp/core/icons/file.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/temp/core/icons/mac+linux.png b/temp/core/icons/mac+linux.png deleted file mode 100644 index 3a7708f539f0bd34da5c4acabc2f47fec0932f49..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8295 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 \ No newline at end of file diff --git a/temp/core/icons/maximize_on.svg b/temp/core/icons/maximize_on.svg deleted file mode 100644 index af77a3e..0000000 --- a/temp/core/icons/maximize_on.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/temp/core/icons/minimize.svg b/temp/core/icons/minimize.svg deleted file mode 100644 index d179e14..0000000 --- a/temp/core/icons/minimize.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/temp/core/icons/question.svg b/temp/core/icons/question.svg deleted file mode 100644 index 3389568..0000000 --- a/temp/core/icons/question.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/temp/core/icons/user.png b/temp/core/icons/user.png deleted file mode 100644 index 252c20d3a5394add646d31042401691dddc00d11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 324 zcmeAS@N?(olHy`uVBq!ia0vp^mq3`28A!5*^DqJ_mUKs7M+SzC{oH>NS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lwb?+332`Z|9{Vo{!Z=( zAQ8qSZ+91l4pvzYAcwug)7O>#35PVVsKl*|)+(TowWo_?NW|f{ClB&A81S%c@Zh-= zDmjz0s>U&iLFi_DxZ#0Qho8=QU3b97ebStBJKs&$zis(^PI0|O#ZJbblaju!D*Cn@ zXpCx!YeY#(Vo9o1a#1RfVlXl=GSD@!&^0m-F*LR^GO#i+&^9ozGBCIxt?7oMAvZrI YGp!Q0hJ|huL4IcNboFyt=akR{07zC~o&W#< diff --git a/temp/core/icons/windows.ico b/temp/core/icons/windows.ico deleted file mode 100644 index 3f8a1c7a3d7f63b62564fcc5cdbdb992829fc193..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 285478 zcmeI53Ai0avBxinfQTU?Ld3izBAbAK2ob^(WHSN+vdO;562f8xgn&RoL_{_rK-j|; zAOvKIfDvO7BAW<^h^P^BBO(tG5qUo3@p#Vr|2n4*eJ8V@Im^9w`upnioaw!%tGc?n zy1J`tiLRx(1`h0!Kdfu?Qe9m;baizN8@A~GG`+t|?>5}9_J578uDw612y(<5iGgnlEDW*_`%@gAOCo;&N}M^n{K*kFlyAO;45GG zN^sOsM+K*xa!T-%pZp|HnhCY^7uf|p);DK@5cagfR+m4H zG0u0Q&IcZNV6fwkI|d_0j0lDgAMODB898!fu>JPi2fzRQ@84CLbCq`48tyEq=N*`v#!Xi2| zOewY&K!5T&)d@QCw0!EP$KVaY!dhMVzBBZHs$jC<9Kp$g(Sm&hqXe5O&f4-<6)Z1U zO0Z;>dMMsu0ynN+eDTGgySv-b4se8Vn#WOh0d06o>0XonqL^ z@TD(($&D$+b2M<7WtIsB4jdQ^88XC;)2+7J%Ej4lzx{%vk3KpWH*TC8n~YJ$D)jNO z#~yQI@8y?Y4*u)E{>#;$I?2rx^ym-$UrAvv5Ptme$Gftj+eu^BjY-fF-XTHyUlug|!m$K%}nG^i?fB$y?{Rh9Fe)?(m4qTl&b!sqq^5oz< z-}#PfJAFW3?6lKP!RDK99;~_UVG)*T4RCu>A7N zyRw&Fdg;YzG~Zu%W9dnf>Sz;bpx4v^T&}r^lutkC|GUg@%!|YUtbEer$OBr%cjjC2 z-Us5?f1Yvv{~!PO$BUJ(D9b92`{vBUR(802@_}YEe-p-BZM4kFNb~*jYjG#4{GEA* zzWQZ{%cm_5Km2g;{`bG%#bYepeDlq2E@3_aH%iRl=9_Q!C^MXf|Kaj$WoIg%HsCB@_`p?GS*2cwlTJEmvGM4~=Q&)y z@^bAb44kw+HQ(@$@F+KT?%W>Z@rE02aO07Ci0_wQt5>1#Pg>})ee;t~J~?>msiz!2ci3TvIUfC?haL)6 zTWz%-<1(szE*_P4+F2=mLYrD=HllMl|X z!|d6!d(Z+450|g^w4FLcet+hg@EVP{MV()MEsw2=FguWfZKfg z|NYh^ad^(U`}3dwe6ZVYy9LZo@Q-JlaYlWe z#X6n!7x{o|wR*Y!=Q#@hz-MF!qeqVp_St72w}#tnv(17}ed<%es;jQ*_%yx|W8JS` z+B1A2Wy&%4M}B|m$~>3kz<=WW^{;;o7A#m0{NfkCsPm@KVt9qK&N|ESqgE$m3eZlR z>aew-2mZlp!_!hfgIe6!{}#`DKmPZ>|9$t3mR)w);F3!&snbHmJx{Qt;*KNT*S_{O z*N5=F#~ypEtM_G>T^8JO%PqkJ4?N P55$C|USE#;5UAj1A--wfem(pS7J^d&nQb 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 diff --git a/temp/core/menu.css b/temp/core/menu.css deleted file mode 100644 index 412c901..0000000 --- a/temp/core/menu.css +++ /dev/null @@ -1,655 +0,0 @@ -/* - * notion-enhancer - * (c) 2020 dragonwocky (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); -} diff --git a/temp/core/menu.html b/temp/core/menu.html deleted file mode 100644 index 8369d30..0000000 --- a/temp/core/menu.html +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - notion-enhancer menu - - - - - -
-
-
- -
-
- - - - - diff --git a/temp/core/mod.js b/temp/core/mod.js deleted file mode 100644 index f38e99f..0000000 --- a/temp/core/mod.js +++ /dev/null @@ -1,103 +0,0 @@ -/* - * notion-enhancer - * (c) 2020 dragonwocky (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'), - }, -}; diff --git a/temp/core/render.js b/temp/core/render.js deleted file mode 100644 index cfc1857..0000000 --- a/temp/core/render.js +++ /dev/null @@ -1,1066 +0,0 @@ -/* - * notion-enhancer - * (c) 2020 dragonwocky (https://dragonwocky.me/) - * under the MIT license - */ - -'use strict'; - -const url = require('url'), - path = require('path'), - electron = require('electron'), - fs = require('fs-extra'), - { - getNotionResources, - getEnhancements, - createElement, - } = require('../../pkg/helpers.js'), - __notion = getNotionResources(), - config = require(`${__notion}/app/config.js`), - constants = require(`${__notion}/app/shared/constants.js`), - notion_intl = require(`${__notion}/app/shared/notion-intl/index.js`), - notionIpc = require(`${__notion}/app/helpers/notionIpc.js`), - localizationHelper = require(`${__notion}/app/helpers/localizationHelper.js`), - koMessages = require(`${__notion}/app/i18n/ko_KR/messages.json`), - schemeHelpers = require(`${__notion}/app/shared/schemeHelpers.js`), - React = require(`${__notion}/app/node_modules/react/index.js`), - ReactDOM = require(`${__notion}/app/node_modules/react-dom/index.js`), - { toKeyEvent } = require('keyboardevent-from-electron-accelerator'); - -const insertCSP = `{ - const csp = document.createElement('meta'); - csp.httpEquiv = 'Content-Security-Policy'; - csp.content = "script-src 'self' 'unsafe-inline' 'unsafe-eval' enhancement: https://gist.github.com https://apis.google.com https://api.amplitude.com https://widget.intercom.io https://js.intercomcdn.com https://logs-01.loggly.com https://cdn.segment.com https://analytics.pgncs.notion.so https://checkout.stripe.com https://embed.typeform.com https://admin.typeform.com https://platform.twitter.com https://cdn.syndication.twimg.com; connect-src 'self' https://msgstore.www.notion.so wss://msgstore.www.notion.so https://notion-emojis.s3-us-west-2.amazonaws.com https://s3-us-west-2.amazonaws.com https://s3.us-west-2.amazonaws.com https://notion-production-snapshots-2.s3.us-west-2.amazonaws.com https: http: https://api.amplitude.com https://api.embed.ly https://js.intercomcdn.com https://api-iam.intercom.io wss://nexus-websocket-a.intercom.io https://logs-01.loggly.com https://api.segment.io https://api.pgncs.notion.so https://checkout.stripe.com https://cdn.contentful.com https://preview.contentful.com https://images.ctfassets.net https://api.unsplash.com https://boards-api.greenhouse.io; font-src 'self' data: enhancement: https: http:; img-src 'self' data: blob: https: https://platform.twitter.com https://syndication.twitter.com https://pbs.twimg.com https://ton.twimg.com; style-src 'self' 'unsafe-inline' enhancement: https: http:; frame-src https: http:; media-src https: http:"; - document.head.appendChild(csp); -}`, - idToNotionURL = (id) => - `notion://www.notion.so/${ - url.parse(id).pathname.split('/').reverse()[0] || '' - }/${url.parse(id).search || ''}`; - -module.exports = (store, __exports) => { - if ((store('mods')['e1692c29-475e-437b-b7ff-3eee872e1a42'] || {}).enabled) { - class Index extends React.PureComponent { - constructor() { - super(...arguments); - this.state = { - error: false, - searching: false, - searchingPeekView: false, - zoomFactor: 1, - tabs: new Map([[0, { title: 'notion.so', open: true }]]), - slideIn: new Set(), - slideOut: new Set(), - }; - this.$titlebar = null; - this.$dragging = null; - this.views = { - active: null, - current: { - $el: () => this.views.html[this.views.current.id], - id: 0, - }, - react: {}, - html: {}, - loaded: {}, - tabs: {}, - }; - this.$search = null; - this.handleReload = () => { - this.setState({ error: false }); - Object.values(this.views.html).forEach(($notion) => { - if ($notion.isWaitingForResponse()) $notion.reload(); - }); - }; - this.communicateWithView = this.communicateWithView.bind(this); - this.startSearch = this.startSearch.bind(this); - this.stopSearch = this.stopSearch.bind(this); - this.nextSearch = this.nextSearch.bind(this); - this.prevSearch = this.prevSearch.bind(this); - this.clearSearch = this.clearSearch.bind(this); - this.doneSearch = this.doneSearch.bind(this); - - // draggable re-ordering - const getTab = ($el) => { - if ($el.tagName !== 'BUTTON') $el = $el.parentElement; - if ($el.innerText === '+') - return [null, document.querySelector('.tab.new')]; - const tab = Object.entries(this.views.tabs).find( - ([id, $node]) => $node === $el - ); - return tab ? [+tab[0], tab[1]] : []; - }; - document.addEventListener('dragstart', (event) => { - if (!this.$titlebar) return; - const tab = getTab(event.target); - this.$dragging = tab[0]; - event.dataTransfer.setData( - 'text', - JSON.stringify({ - target: electron.remote.getCurrentWindow().webContents.id, - tab: tab[0], - title: tab[1].children[0].innerText, - url: document.getElementById(getTab(event.target)[0]).src, - }) - ); - event.target.style.opacity = 0.5; - }); - document.addEventListener('dragend', (event) => { - if (!this.$titlebar) return; - event.target.style.opacity = ''; - document - .querySelectorAll('.dragged-over') - .forEach((el) => el.classList.remove('dragged-over')); - }); - document.addEventListener('dragover', (event) => { - if (!this.$titlebar) return; - event.preventDefault(); - document - .querySelectorAll('.dragged-over') - .forEach((el) => el.classList.remove('dragged-over')); - const tab = getTab(event.target)[1]; - if (tab) tab.classList.add('dragged-over'); - }); - document.addEventListener('drop', async (event) => { - event.preventDefault(); - const eventData = JSON.parse(event.dataTransfer.getData('text')); - if ( - eventData.target !== - electron.remote.getCurrentWindow().webContents.id - ) { - electron.ipcRenderer.send( - 'enhancer:close-tab', - eventData.target, - eventData.tab - ); - this.$dragging = await this.newTab( - eventData.url, - eventData.title, - false - ); - } - if (this.$titlebar) { - const from = getTab(this.views.tabs[+this.$dragging]), - to = getTab(event.target); - if (from[0] !== to[0]) { - if (to[1].classList.contains('new')) { - const list = new Map(this.state.tabs); - list.delete(from[0]); - list.set(from[0], this.state.tabs.get(from[0])); - this.setState({ tabs: list }); - } else { - const list = [...this.state.tabs], - fromIndex = list.findIndex( - ([id, { title, open }]) => id === from[0] - ), - toIndex = list.findIndex( - ([id, { title, open }]) => id === to[0] - ); - list.splice( - toIndex > fromIndex ? toIndex - 1 : toIndex, - 0, - list.splice(fromIndex, 1)[0] - ); - this.setState({ tabs: new Map(list) }); - } - } - this.$dragging = null; - } - }); - electron.ipcRenderer.on('enhancer:close-tab', (event, tab) => { - this.closeTab(tab); - }); - } - - componentDidMount() { - const buttons = require('./buttons.js')(store); - this.$titlebar.appendChild(buttons.element); - this.loadListeners(); - - let electronWindow; - try { - electronWindow = electron.remote.getCurrentWindow(); - } catch (error) { - notionIpc.sendToMain('notion:log-error', { - level: 'error', - from: 'index', - type: 'GetCurrentWindowError', - error: error.message, - }); - } - if (!electronWindow) { - this.setState({ error: true }); - this.handleReload(); - return; - } - electronWindow.addListener('app-command', (e, cmd) => { - if (cmd === 'browser-backward' && webContents.canGoBack()) { - this.views.current.$el().goBack(); - } else if (cmd === 'browser-forward' && webContents.canGoForward()) { - this.views.current.$el().goForward(); - } - }); - electronWindow.addListener('swipe', (e, dir) => { - if (dir === 'left' && webContents.canGoBack()) { - this.views.current.$el().goBack(); - } else if (dir === 'right' && webContents.canGoForward()) { - this.views.current.$el().goForward(); - } - }); - electronWindow.addListener('focus', (e) => { - this.views.current.$el().focus(); - }); - } - - newTab(url = '', title = 'notion.so', animate = true) { - let id = 0; - const list = new Map(this.state.tabs); - while (this.state.tabs.get(id) && this.state.tabs.get(id).open) id++; - list.delete(id); - return this.openTab(id, { - state: list, - load: url || true, - title, - animate, - }); - } - openTab( - id, - { - state = new Map(this.state.tabs), - slideOut = new Set(this.state.slideOut), - load, - animate, - title = 'notion.so', - } = { - state: new Map(this.state.tabs), - slideOut: new Set(this.state.slideOut), - load: false, - title: 'notion.so', - animate: false, - } - ) { - return new Promise((res, rej) => { - if (!id && id !== 0) { - if (state.get(this.views.current.id).open) return res(id); - const currentIndex = [...state].findIndex( - ([id, { title, open }]) => id === this.views.current.id - ); - id = ([...state].find( - ([id, { title, open }], tabIndex) => - open && tabIndex > currentIndex - ) || [...state].find(([id, { title, open }]) => open))[0]; - } - const current_src = this.views.current.$el().src; - this.views.current.id = id; - this.setState( - { - tabs: state.set(id, { - title: state.get(id) ? state.get(id).title : title, - open: true, - }), - slideIn: animate - ? this.state.slideIn.add(id) - : this.state.slideIn, - slideOut: slideOut, - }, - async () => { - this.focusTab(); - new Promise((resolve, reject) => { - let attempt, - clear = () => { - clearInterval(attempt); - return true; - }; - attempt = setInterval(() => { - if (this.views.current.id !== id) return clear() && reject(); - if (document.body.contains(this.views.html[id])) - return clear() && resolve(); - }, 50); - }) - .then(() => { - if (load) { - this.views.html[id].style.opacity = '0'; - let unhide; - unhide = () => { - this.views.html[id].style.opacity = ''; - this.views.html[id].removeEventListener( - 'did-stop-loading', - unhide - ); - }; - this.views.html[id].addEventListener( - 'did-stop-loading', - unhide - ); - this.views.html[id].loadURL( - typeof load === 'string' - ? load - : store().default_page - ? idToNotionURL(store().default_page) - : current_src - ); - } - }) - .catch(() => { - // nothing - }) - .finally(() => { - setTimeout(() => { - this.setState( - { slideIn: new Set(), slideOut: new Set() }, - () => res(id) - ); - }, 150); - }); - } - ); - }); - } - closeTab(id) { - if ((!id && id !== 0) || !this.state.tabs.get(id)) return; - const list = new Map(this.state.tabs); - list.set(id, { ...list.get(id), open: false }); - if (![...list].filter(([id, { title, open }]) => open).length) - return electron.remote.getCurrentWindow().close(); - return this.openTab( - this.views.current.id === id ? null : this.views.current.id, - { state: list, slideOut: this.state.slideOut.add(id) } - ); - } - focusTab() { - if (this.views.active === this.views.current.id) return; - this.loadListeners(); - this.blurListeners(); - this.focusListeners(); - for (const id in this.views.loaded) { - if (this.views.loaded.hasOwnProperty(id) && this.views.loaded[id]) { - const selected = - id == this.views.current.id && - this.state.tabs.get(+id) && - this.state.tabs.get(+id).open; - this.views.loaded[id].style.display = selected ? 'flex' : 'none'; - if (selected) { - this.views.active = +id; - this.views.loaded[id].focus(); - const electronWindow = electron.remote.getCurrentWindow(), - title = - (this.state.tabs.get(+id).emoji - ? `${this.state.tabs.get(+id).emoji} ` - : '') + (this.state.tabs.get(+id).text || 'Notion Desktop'); - if (electronWindow && electronWindow.getTitle() !== title) - electronWindow.setTitle(title); - } - } - } - } - selectTab(num) { - if (num === 'ArrowLeft') { - const prev = document.querySelector('.tab.current') - .previousElementSibling; - if (prev) prev.click(); - } else if (num === 'ArrowRight') { - const next = document.querySelector('.tab.current') - .nextElementSibling; - if (next && !next.classList.contains('new')) next.click(); - } else { - num = +num; - if (num == 9) { - document - .querySelector('#tabs') - .children[ - document.querySelector('#tabs').children.length - 2 - ].click(); - } else if ( - document.querySelector('#tabs').children[num - 1] && - document.querySelector('#tabs').children.length > num - ) { - document.querySelector('#tabs').children[num - 1].click(); - } - } - } - - communicateWithView(event) { - switch (event.channel) { - case 'enhancer:set-tab-title': - if (this.state.tabs.get(+event.target.id)) { - this.setState({ - tabs: new Map( - this.state.tabs.set(+event.target.id, { - ...this.state.tabs.get(+event.target.id), - title: event.args[0], - }) - ), - }); - const electronWindow = electron.remote.getCurrentWindow(), - title = - (event.args[0].emoji ? `${event.args[0].emoji} ` : '') + - (event.args[0].text || 'Notion Desktop'); - if ( - event.target.id == this.views.current.id && - electronWindow.getTitle() !== title - ) - electronWindow.setTitle(title); - } - break; - case 'enhancer:select-tab': - this.selectTab(event.args[0]); - break; - case 'enhancer:new-tab': - this.newTab(event.args[0]); - break; - case 'enhancer:close-tab': - this.closeTab( - event.args[0] || event.args[0] === 0 - ? event.args[0] - : this.views.current.id - ); - break; - } - } - startSearch(isPeekView) { - this.setState( - { - searching: true, - searchingPeekView: isPeekView, - }, - () => { - if (document.activeElement instanceof HTMLElement) - document.activeElement.blur(); - this.$search.focus(); - notionIpc.sendIndexToSearch(this.$search, 'search:start'); - notionIpc.sendIndexToNotion(this.$search, 'search:started'); - } - ); - } - stopSearch() { - notionIpc.sendIndexToSearch(this.$search, 'search:reset'); - this.setState({ - searching: false, - }); - this.lastSearchQuery = undefined; - this.views.current - .$el() - - .stopFindInPage('clearSelection'); - notionIpc.sendIndexToNotion(this.views.current.$el(), 'search:stopped'); - } - nextSearch(query) { - this.views.current - .$el() - - .findInPage(query, { - forward: true, - findNext: query === this.lastSearchQuery, - }); - this.lastSearchQuery = query; - } - prevSearch(query) { - this.views.current - .$el() - - .findInPage(query, { - forward: false, - findNext: query === this.lastSearchQuery, - }); - this.lastSearchQuery = query; - } - clearSearch() { - this.lastSearchQuery = undefined; - this.views.current - .$el() - - .stopFindInPage('clearSelection'); - } - doneSearch() { - this.lastSearchQuery = undefined; - this.views.current - .$el() - - .stopFindInPage('clearSelection'); - this.setState({ searching: false }); - if (document.activeElement instanceof HTMLElement) { - document.activeElement.blur(); - } - this.views.current.$el().focus(); - notionIpc.sendIndexToNotion(this.views.current.$el(), 'search:stopped'); - } - focusListeners() { - if (!this.views.current.$el() || !this.$search) return; - this.views.current - .$el() - .addEventListener('ipc-message', this.communicateWithView); - notionIpc.receiveIndexFromNotion.addListener( - this.views.current.$el(), - 'search:start', - this.startSearch - ); - notionIpc.receiveIndexFromNotion.addListener( - this.views.current.$el(), - 'search:stop', - this.stopSearch - ); - notionIpc.receiveIndexFromSearch.addListener( - this.$search, - 'search:next', - this.nextSearch - ); - notionIpc.receiveIndexFromSearch.addListener( - this.$search, - 'search:prev', - this.prevSearch - ); - notionIpc.receiveIndexFromSearch.addListener( - this.$search, - 'search:clear', - this.clearSearch - ); - notionIpc.receiveIndexFromSearch.addListener( - this.$search, - 'search:stop', - this.doneSearch - ); - } - blurListeners() { - if (!this.views.current.$el() || !this.$search) return; - if (this.state.searching) this.stopSearch(); - this.views.current - .$el() - .removeEventListener('ipc-message', this.communicateWithView); - notionIpc.receiveIndexFromNotion.removeListener( - this.views.current.$el(), - 'search:start', - this.startSearch - ); - notionIpc.receiveIndexFromNotion.removeListener( - this.views.current.$el(), - 'search:stop', - this.stopSearch - ); - notionIpc.receiveIndexFromSearch.removeListener( - this.$search, - 'search:next', - this.nextSearch - ); - notionIpc.receiveIndexFromSearch.removeListener( - this.$search, - 'search:prev', - this.prevSearch - ); - notionIpc.receiveIndexFromSearch.removeListener( - this.$search, - 'search:clear', - this.clearSearch - ); - notionIpc.receiveIndexFromSearch.removeListener( - this.$search, - 'search:stop', - this.doneSearch - ); - } - loadListeners() { - if (!this.$search) return; - Object.entries(this.views.html) - .filter(([id, $notion]) => !this.views.loaded[id] && $notion) - .forEach(([id, $notion]) => { - if (!$notion) return; - this.views.loaded[id] = $notion; - $notion.addEventListener('did-fail-load', (error) => { - // logger.info('Failed to load:', error); - if ( - error.errorCode === -3 || - !error.validatedURL.startsWith( - schemeHelpers.getSchemeUrl({ - httpUrl: config.default.baseURL, - protocol: config.default.protocol, - }) - ) - ) { - return; - } - this.setState({ error: true }); - }); - $notion.addEventListener('dom-ready', () => { - // $notion.executeJavaScript(insertCSP); - electron.remote.webContents - .fromId($notion.getWebContentsId()) - .addListener('found-in-page', (event, result) => { - const matches = result - ? { - count: result.matches, - index: result.activeMatchOrdinal, - } - : { count: 0, index: 0 }; - notionIpc.sendIndexToSearch( - this.$search, - 'search:result', - matches - ); - }); - notionIpc.proxyAllMainToNotion($notion); - }); - notionIpc.receiveIndexFromNotion.addListener( - $notion, - 'search:set-theme', - (theme) => { - notionIpc.sendIndexToSearch( - this.$search, - 'search:set-theme', - theme - ); - } - ); - notionIpc.receiveIndexFromNotion.addListener( - $notion, - 'zoom', - (zoomFactor) => { - $notion.setZoomFactor(zoomFactor); - this.$search.setZoomFactor(zoomFactor); - this.setState({ zoomFactor }); - } - ); - let electronWindow; - try { - electronWindow = electron.remote.getCurrentWindow(); - } catch (error) { - notionIpc.sendToMain('notion:log-error', { - level: 'error', - from: 'index', - type: 'GetCurrentWindowError', - error: error.message, - }); - } - if (!electronWindow) { - this.setState({ error: true }); - this.handleReload(); - return; - } - const sendFullScreenChangeEvent = () => { - notionIpc.sendIndexToNotion( - $notion, - 'notion:full-screen-changed' - ); - }; - electronWindow.addListener( - 'enter-full-screen', - sendFullScreenChangeEvent - ); - electronWindow.addListener( - 'leave-full-screen', - sendFullScreenChangeEvent - ); - electronWindow.addListener( - 'enter-html-full-screen', - sendFullScreenChangeEvent - ); - electronWindow.addListener( - 'leave-html-full-screen', - sendFullScreenChangeEvent - ); - }); - } - - renderTitlebar() { - return React.createElement( - 'header', - { - id: 'titlebar', - ref: ($titlebar) => { - this.$titlebar = $titlebar; - }, - onClick: (e) => { - this.views.current.$el().focus(); - }, - }, - React.createElement('button', { - id: 'open-enhancer-menu', - onClick: (e) => { - electron.ipcRenderer.send('enhancer:open-menu'); - }, - }), - React.createElement( - 'div', - { id: 'tabs' }, - ...[...this.state.tabs] - .filter( - ([id, { title, open }]) => open || this.state.slideOut.has(id) - ) - .map(([id, { title, open }]) => - React.createElement( - 'button', - { - className: - 'tab' + - (id === this.views.current.id ? ' current' : '') + - (this.state.slideIn.has(id) ? ' slideIn' : '') + - (this.state.slideOut.has(id) ? ' slideOut' : ''), - draggable: true, - onClick: (e) => { - if (!e.target.classList.contains('close')) - this.openTab(id); - }, - onMouseUp: (e) => { - if (window.event.which === 2) this.closeTab(id); - }, - ref: ($tab) => { - this.views.tabs[id] = $tab; - }, - }, - React.createElement('span', { - dangerouslySetInnerHTML: { - __html: (title.img || '') + (title.text || 'notion.so'), - }, - }), - React.createElement( - 'span', - { - className: 'close', - onClick: () => { - this.closeTab(id); - }, - }, - '×' - ) - ) - ), - React.createElement( - 'button', - { - className: 'tab new', - onClick: () => { - this.newTab(); - }, - }, - React.createElement('span', {}, '+') - ) - ) - ); - } - renderNotionContainer() { - this.views.react = Object.fromEntries( - [...this.state.tabs].map(([id, { title, open }]) => { - return [ - id, - this.views.react[id] || - React.createElement('webview', { - className: 'notion', - id, - ref: ($notion) => { - this.views.html[id] = $notion; - this.focusTab(); - }, - partition: constants.electronSessionPartition, - preload: path.resolve(`${__notion}/app/renderer/preload.js`), - src: this.props.notionUrl, - webpreferences: 'spellcheck=yes, enableremotemodule=yes', - }), - ]; - }) - ); - return React.createElement( - 'div', - { - style: { - flexGrow: 1, - display: this.state.error ? 'none' : 'flex', - }, - }, - ...Object.values(this.views.react) - ); - } - renderSearchContainer() { - return React.createElement( - 'div', - { - style: { - position: 'fixed', - overflow: 'hidden', - pointerEvents: 'none', - padding: '0 20px', - top: - (this.state.searchingPeekView - ? 0 - : process.platform === 'darwin' - ? 37 - : 45) * this.state.zoomFactor, - right: (48 - 24) * this.state.zoomFactor, - width: 460 * this.state.zoomFactor, - height: 72 * this.state.zoomFactor, - zIndex: 99, - }, - }, - React.createElement('webview', { - id: 'search', - style: { - width: '100%', - height: '100%', - transition: `transform 70ms ease-${ - this.state.searching ? 'out' : 'in' - }`, - transform: `translateY(${this.state.searching ? '0' : '-100'}%)`, - pointerEvents: this.state.searching ? 'auto' : 'none', - }, - ref: ($search) => { - this.$search = $search; - this.focusTab(); - }, - partition: constants.electronSessionPartition, - preload: `file://${path.resolve( - `${__notion}/app/renderer/search.js` - )}`, - src: `file://${path.resolve( - `${__notion}/app/renderer/search.html` - )}`, - webpreferences: 'spellcheck=no, enableremotemodule=yes', - }) - ); - } - renderErrorContainer() { - return React.createElement( - 'div', - { - style: { - position: 'fixed', - top: 0, - left: 0, - right: 0, - bottom: 0, - display: this.state.error ? 'flex' : 'none', - flexDirection: 'column', - alignItems: 'center', - justifyContent: 'center', - padding: 24, - paddingBottom: '8vh', - }, - }, - React.createElement('img', { - style: { - width: 300, - maxWidth: '100%', - }, - src: './onboarding-offline.png', - }), - React.createElement( - 'div', - { - style: { - paddingTop: 16, - paddingBottom: 16, - textAlign: 'center', - lineHeight: 1.4, - fontSize: 17, - letterSpacing: '-0.01em', - color: '#424241', - fontWeight: 500, - }, - }, - React.createElement( - 'div', - null, - React.createElement(notion_intl.FormattedMessage, { - id: 'desktopLogin.offline.title', - defaultMessage: 'Welcome to Notion!', - values: { - strong: (...chunks) => - React.createElement('strong', null, chunks), - }, - }) - ), - React.createElement( - 'div', - null, - React.createElement(notion_intl.FormattedMessage, { - id: 'desktopLogin.offline.message', - defaultMessage: 'Connect to the internet to get started.', - }) - ) - ), - React.createElement( - 'div', - null, - React.createElement( - 'button', - { - style: { - background: '#fefaf8', - border: '1px solid #f1cbca', - boxSizing: 'border-box', - boxShadow: '0px 1px 2px rgba(0, 0, 0, 0.1)', - borderRadius: 3, - lineHeight: 'normal', - fontSize: 14, - fontWeight: 600, - letterSpacing: '-0.03em', - color: '#d8615c', - paddingLeft: 12, - paddingRight: 12, - height: 36, - }, - onClick: this.handleReload, - }, - React.createElement(notion_intl.FormattedMessage, { - id: - 'desktopLogin.offline.retryConnectingToInternetButton.label', - defaultMessage: 'Try again', - }) - ) - ) - ); - } - render() { - const notionLocale = localizationHelper.getNotionLocaleFromElectronLocale( - window.navigator.language - ), - result = React.createElement( - notion_intl.IntlProvider, - { - locale: notionLocale, - messages: - notionLocale === 'ko-KR' - ? koMessages - : { - 'desktopLogin.offline.title': - 'Welcome to Notion!', - 'desktopLogin.offline.message': - 'Connect to the internet to get started.', - 'desktopLogin.offline.retryConnectingToInternetButton.label': - 'Try again', - }, - }, - this.renderTitlebar(), - this.renderNotionContainer(), - this.renderSearchContainer(), - this.renderErrorContainer() - ); - document.body.classList[this.state.error ? 'add' : 'remove']('error'); - this.loadListeners(); - return result; - } - } - - window['__start'] = () => { - document.body.className = 'notion-dark-theme'; - document.body.setAttribute('data-platform', process.platform); - - const modules = getEnhancements(); - for (let mod of modules.loaded) { - for (let font of mod.fonts || []) { - document - .querySelector('head') - .appendChild( - createElement(``) - ); - } - } - - for (let mod of modules.loaded) { - if ( - mod.alwaysActive || - store('mods', { [mod.id]: { enabled: false } })[mod.id].enabled - ) { - const fileExists = (file) => fs.pathExistsSync(path.resolve(file)); - for (let sheet of ['tabs', 'variables']) { - if (fileExists(`${__dirname}/../${mod.dir}/${sheet}.css`)) { - document.head.appendChild( - createElement( - `` - ) - ); - } - } - } - } - electron.ipcRenderer.on('enhancer:set-app-theme', (event, theme) => { - document.body.className = `notion-${theme}-theme`; - }); - - const parsed = url.parse(window.location.href, true), - notionUrl = - parsed.query.path || - (store().default_page - ? idToNotionURL(store().default_page) - : schemeHelpers.getSchemeUrl({ - httpUrl: config.default.baseURL, - protocol: config.default.protocol, - })); - delete parsed.search; - delete parsed.query; - const plainUrl = url.format(parsed); - window.history.replaceState(undefined, undefined, plainUrl); - - document.title = localizationHelper - .createIntlShape( - localizationHelper.getNotionLocaleFromElectronLocale( - window.navigator.language - ) - ) - .formatMessage( - notion_intl.defineMessages({ - documentTitle: { - id: 'desktop.documentTitle', - defaultMessage: 'Notion Desktop', - }, - }).documentTitle - ); - const $root = document.getElementById('root'); - ReactDOM.render( - React.createElement(Index, { notionUrl: notionUrl }), - $root - ); - }; - } else { - const __start = window['__start']; - window['__start'] = () => { - __start(); - - if (store().default_page) { - new Promise((res, rej) => { - let attempt; - attempt = setInterval(() => { - if ( - !document.getElementById('notion') || - !document.getElementById('notion').loadURL - ) - return; - clearInterval(attempt); - res(); - }, 50); - }).then(() => { - if ( - document.getElementById('notion').getAttribute('src') === - 'notion://www.notion.so' && - idToNotionURL(store().default_page) - ) { - document - .getElementById('notion') - .loadURL(idToNotionURL(store().default_page)); - } - }); - } - - const dragarea = document.querySelector( - '#root [style*="-webkit-app-region: drag"]' - ), - default_styles = dragarea.getAttribute('style'); - if (store().tiling_mode) { - dragarea.style.display = 'none'; - } else { - document - .getElementById('notion') - .addEventListener('ipc-message', (event) => { - if (event.channel !== 'enhancer:sidebar-width') return; - dragarea.setAttribute( - 'style', - `${default_styles} top: 2px; height: ${ - store('cf8a7b27-5a4c-4d45-a4cb-1d2bbc9e9014').dragarea_height - }px; left: ${event.args[0]};` - ); - }); - - document.getElementById('notion').addEventListener('dom-ready', () => { - // document.getElementById('notion').executeJavaScript(insertCSP); - }); - } - }; - } -}; diff --git a/temp/core/systemMenu.js b/temp/core/systemMenu.js deleted file mode 100644 index 2fb0535..0000000 --- a/temp/core/systemMenu.js +++ /dev/null @@ -1,477 +0,0 @@ -/* - * notion-enhancer - * (c) 2020 dragonwocky (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); - }; -}; diff --git a/temp/core/tabs.css b/temp/core/tabs.css deleted file mode 100644 index 41c53fb..0000000 --- a/temp/core/tabs.css +++ /dev/null @@ -1,196 +0,0 @@ -/* - * notion-enhancer - * (c) 2020 dragonwocky (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; -} diff --git a/temp/core/tray.js b/temp/core/tray.js deleted file mode 100644 index 53464a8..0000000 --- a/temp/core/tray.js +++ /dev/null @@ -1,261 +0,0 @@ -/* - * notion-enhancer - * (c) 2020 dragonwocky (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); - }); - } - }); -}; diff --git a/temp/core/variables.css b/temp/core/variables.css deleted file mode 100644 index 63d2f9d..0000000 --- a/temp/core/variables.css +++ /dev/null @@ -1,810 +0,0 @@ -/* - * notion-enhancer - * (c) 2020 dragonwocky (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); -} diff --git a/temp/custom-inserts/mod.js b/temp/custom-inserts/mod.js deleted file mode 100644 index 9c05008..0000000 --- a/temp/custom-inserts/mod.js +++ /dev/null @@ -1,65 +0,0 @@ -/* - * custom inserts - * (c) 2020 dragonwocky (https://dragonwocky.me/) - * under the MIT license - */ - -'use strict'; - -const { createElement } = require('../../pkg/helpers.js'); - -module.exports = { - id: 'b4b0aced-2059-43bf-8d1d-ccd757ee5ebb', - tags: ['extension'], - name: 'custom inserts', - desc: `link files for small client-side tweaks. (not sure how to do something? check out the - [tweaks](https://github.com/notion-enhancer/notion-enhancer/blob/master/TWEAKS.md) collection.)`, - version: '0.1.3', - author: 'dragonwocky', - options: [ - { - key: 'css', - label: 'css insert', - type: 'file', - extensions: ['css'], - }, - { - key: 'js', - label: 'client-side js insert', - type: 'file', - extensions: ['js'], - }, - ], - hacks: { - 'renderer/preload.js'(store, __exports) { - const fs = require('fs-extra'); - document.addEventListener('readystatechange', (event) => { - if (document.readyState !== 'complete') return false; - if (store().css) { - try { - document - .querySelector('head') - .appendChild( - createElement( - `` - ) - ); - } catch (err) { - console.warn(' invalid css file... unsetting.'); - store().css = ''; - } - } - if (store().js) { - try { - require(store().js); - } catch (err) { - console.warn(' invalid js file... unsetting.'); - store().js = ''; - } - } - }); - }, - }, -}; diff --git a/temp/panel-sites/app.css b/temp/panel-sites/app.css deleted file mode 100644 index c4aaf3e..0000000 --- a/temp/panel-sites/app.css +++ /dev/null @@ -1,12 +0,0 @@ -/* - * panel sites - * (c) 2020 dragonwocky (https://dragonwocky.me/) - * (c) 2020 CloudHill - * under the MIT license - */ - -.panel-site { - border: none; - flex: 1; - background: white; -} diff --git a/temp/panel-sites/mod.js b/temp/panel-sites/mod.js deleted file mode 100644 index fb83182..0000000 --- a/temp/panel-sites/mod.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * panel sites - * (c) 2020 dragonwocky (https://dragonwocky.me/) - * (c) 2020 CloudHill - * under the MIT license - */ - -'use strict'; - -module.exports = { - id: '0d541743-eb2c-4d77-83a8-3b2f5e8e5dff', - tags: ['extension', 'panel'], - name: 'panel sites', - desc: 'embed sites on the site panel.', - version: '1.0.0', - author: 'CloudHill', - options: [ - { - key: 'sites', - label: 'list of sites', - type: 'file', - extensions: ['json'], - }, - ], - panel: { - js: 'panel.js' - } -}; diff --git a/temp/panel-sites/panel.js b/temp/panel-sites/panel.js deleted file mode 100644 index 04d9ff4..0000000 --- a/temp/panel-sites/panel.js +++ /dev/null @@ -1,45 +0,0 @@ -/* - * panel sites - * (c) 2020 dragonwocky (https://dragonwocky.me/) - * (c) 2020 CloudHill - * under the MIT license - */ - -const electron = require('electron') - -module.exports = (store) => { - let iframe; - const mainWindow = electron.remote.getCurrentWindow(); - const originalUserAgent = mainWindow.webContents.getUserAgent(); - const mobileUserAgent = - 'Mozilla/5.0 (Linux; Android 7.0; SM-G930V Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.125 Mobile Safari/537.36' - - // bypass x-frame-options - mainWindow.webContents.session.webRequest.onHeadersReceived((details, callback) => { - const responseHeaders = Object.entries(details.responseHeaders) - .filter( h => !/x-frame-options/i.test(h[0]) ); - callback({ - responseHeaders: Object.fromEntries(responseHeaders) - }); - }); - - // handle opening mobile sites - function setUserAgent(userAgent) { - mainWindow.webContents.session.webRequest.onBeforeSendHeaders((details, callback) => { - details.requestHeaders['User-Agent'] = userAgent; - callback({ cancel: false, requestHeaders: details.requestHeaders }); - }); - } - - return { - onLoad() { - iframe = document.querySelector('.panel-site'); - if (iframe.hasAttribute('mobile-user-agent')) - setUserAgent(mobileUserAgent); - }, - onSwitch() { - if (iframe.hasAttribute('mobile-user-agent')) - setUserAgent(originalUserAgent); - } - } -} diff --git a/temp/side-panel/app.css b/temp/side-panel/app.css deleted file mode 100644 index 901147c..0000000 --- a/temp/side-panel/app.css +++ /dev/null @@ -1,219 +0,0 @@ -/* - * side panel - * (c) 2020 dragonwocky (https://dragonwocky.me/) - * (c) 2020 CloudHill - * under the MIT license - */ - -.notion-frame { - transition: padding-right 300ms ease-in-out; -} -.enhancer-panel--container { - flex-grow: 0; - flex-shrink: 0; - position: absolute; - top: 0; - bottom: 0; - right: 0; - z-index: 99; - height: 100vh; - background: var(--theme--sidebar); - color: var(--theme--text_ui); - font-weight: 500; - cursor: default; - transition: box-shadow 300ms ease-in, width 300ms ease-in-out; -} - -#enhancer-panel { - display: flex; - flex-direction: column; - position: relative; - pointer-events: auto; - background: var(--theme--sidebar); - cursor: auto; - max-height: 100%; - transition: transform 300ms ease-in-out, - opacity 300ms ease-in-out, - right 300ms ease-in-out; -} -#enhancer-panel[data-locked="false"] { - max-height: calc(100vh - 120px); - box-shadow: var(--theme--box-shadow_strong) !important; -} -#enhancer-panel[data-full-height="true"] { - height: 100%; -} -#enhancer-panel[data-locked="false"][data-full-height="true"] { - height: calc(100vh - 120px); -} - -.enhancer-panel--header { - flex-grow: 0; - flex-shrink: 0; - display: flex; - align-items: center; - height: 45px; - width: 100%; - color: var(--theme--text); - font-size: 14px; - padding: 2px 14px; - overflow: hidden; - user-select: none; - cursor: pointer; - transition: color 0.4s ease, background 0.4s ease, box-shadow 0.4s ease; -} -.enhancer-panel--header:hover { - background: var(--theme--interactive_hover); -} - -.enhancer-panel--icon { - flex-grow: 0; - flex-shrink: 0; - border-radius: 3px; - width: 22px; - height: 22px; - margin-right: 8px; - display: flex; - align-items: center; - justify-content: center; -} -.enhancer-panel--icon svg { - width: 100%; - height: 100%; -} - -.enhancer-panel--title { - margin-right: 6px; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -.enhancer-panel--reload-button { - flex-grow: 0; - flex-shrink: 0; - display: flex; - align-items: center; - justify-content: center; - width: 24px; - height: 24px; - padding: 6px; - margin-right: 6px; - border-radius: 3px; - transition: background 20ms ease-in; -} -.enhancer-panel--reload-button:hover { - background: var(--theme--main) -} - -.enhancer-panel--switcher-icon { - flex-grow: 0; - flex-shrink: 0; - width: 12px; - height: 12px; - fill: var(--theme--text_ui); -} -.enhancer-panel--reload-button svg, -.enhancer-panel--switcher-icon svg { - width: 100%; - height: 100%; - display: block; - fill: var(--theme--text_ui_info); -} - -.enhancer-panel--toggle { - flex-grow: 0; - flex-shrink: 0; - position: relative; - display: flex; - align-items: center; - justify-content: center; - margin-left: auto; - height: 24px; - width: 24px; - border-radius: 3px; - cursor: pointer; - opacity: 0; - transition: background 20ms ease-in, opacity 300ms ease-in; -} -#enhancer-panel:hover .enhancer-panel--toggle { - opacity: 1; -} -.enhancer-panel--toggle:hover { - background: var(--theme--interactive_hover); -} -.enhancer-panel--toggle svg { - width: 14px; - height: 14px; - fill: var(--theme--text_ui); - transition: transform 400ms ease-in; - fill: var(--theme--text_ui_info); -} -#enhancer-panel[data-locked="false"] .enhancer-panel--toggle svg { - transform: rotateZ(-180deg); -} - -#enhancer-panel--content { - flex: 1; - width: 100%; - color: var(--theme--text); - font-size: var(--theme--font_body-size); - display: flex; - flex-direction: column; - position: relative; - min-height: 0; -} - -.enhancer-panel--resize { - position: absolute; - top: 0px; - left: 0px; - height: 100vh; - width: 0px; - z-index: 1; -} -#enhancer-panel[data-locked="false"] .enhancer-panel--resize { - height: 100%; -} -.enhancer-panel--resize div { - height: 100%; - width: 6px; -} - -.enhancer-panel--overlay-container { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 999; - overflow: hidden; -} - -.enhancer-panel--switcher { - max-width: 320px; - position: relative; - right: 14px; - border-radius: 3px; - padding: 8px 0; - box-shadow: var(--theme--box-shadow_strong); - background: var(--theme--card); - overflow: hidden; -} - -.enhancer-panel--switcher-item { - display: flex; - align-items: center; - width: 100%; - padding: 8px 14px; - color: var(--theme--text); - font-size: 14px; - user-select: none; - cursor: pointer; - overflow: hidden; - transition: background 300ms ease; -} -.enhancer-panel--switcher-item:hover, -.enhancer-panel--switcher-item:focus { - background: var(--theme--interactive_hover); -} diff --git a/temp/side-panel/icons/double-chevron.svg b/temp/side-panel/icons/double-chevron.svg deleted file mode 100644 index 725d191..0000000 --- a/temp/side-panel/icons/double-chevron.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/temp/side-panel/icons/reload.svg b/temp/side-panel/icons/reload.svg deleted file mode 100644 index d50b922..0000000 --- a/temp/side-panel/icons/reload.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/temp/side-panel/icons/switcher.svg b/temp/side-panel/icons/switcher.svg deleted file mode 100644 index e47e262..0000000 --- a/temp/side-panel/icons/switcher.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/temp/side-panel/mod.js b/temp/side-panel/mod.js deleted file mode 100644 index c830516..0000000 --- a/temp/side-panel/mod.js +++ /dev/null @@ -1,506 +0,0 @@ -/* - * side panel - * (c) 2020 dragonwocky (https://dragonwocky.me/) - * (c) 2020 CloudHill - * under the MIT license - */ - -'use strict'; - -const { createElement, getEnhancements } = require('../../pkg/helpers.js'), - path = require('path'), - fs = require('fs-extra'); - -module.exports = { - id: 'c8b1db83-ee37-45b4-bdb3-a7f3d36113db', - tags: ['extension', 'panel'], - name: 'side panel', - desc: 'adds a side panel to notion.', - version: '1.1.0', - author: 'CloudHill', - hacks: { - 'renderer/preload.js'(store, __exports) { - // Load icons - let icons = {}; - (async () => { - icons.doubleChevron = await fs.readFile( path.resolve(__dirname, 'icons/double-chevron.svg') ); - icons.switcher = await fs.readFile( path.resolve(__dirname, 'icons/switcher.svg') ); - icons.reload = await fs.readFile( path.resolve(__dirname, 'icons/reload.svg') ); - })(); - - // Load panel mods - let panelMods = - getEnhancements().loaded.filter( - mod => (mod.panel && (store('mods')[mod.id] || {}).enabled) - ); - panelMods.forEach(mod => initMod(mod)); - - document.addEventListener('readystatechange', (event) => { - if (document.readyState !== 'complete') return false; - if (panelMods.length < 1) return; - - const attempt_interval = setInterval(enhance, 500); - function enhance() { - if (!store().width) store().width = 220; - let curPanel = {}; - - const frame = document.querySelector('.notion-frame'); - if (!frame) return; - clearInterval(attempt_interval); - - // Initialize panel - const container = createElement( - '
' - ); - const panel = createElement( - `
` - ); - - frame.after(container); - container.appendChild(panel); - - // Panel contents - const header = createElement(` -
-
-
-
- `); - const toggle = createElement( - `
${icons.doubleChevron}
` - ); - const content = createElement( - '
' - ); - const resize = createElement(` -
-
-
- `); - - panel.append(header, content, resize); - - // Add switcher if there is more than one panel mods - if (panelMods.length > 1) { - header.addEventListener('click', renderSwitcher); - const switcherIcon = createElement( - `
${icons.switcher}
` - ) - header.appendChild(switcherIcon); - } else { - header.addEventListener('click', togglePanel); - } - - header.appendChild(toggle); - toggle.addEventListener('click', togglePanel); - - // Keybind - document.addEventListener('keyup', e => { - const hotkey = { - code: 'Backslash', - ctrlKey: true, - shiftKey: true, - metaKey: false, - altKey: false, - }; - for (let prop in hotkey) - if (hotkey[prop] !== e[prop]) return; - togglePanel(); - }); - - // Restore lock state - if (store().locked === 'false') unlockPanel(false); - else lockPanel(); - - enableResize(); - - // Attempt to load last opened mod - let loaded = false; - if (store().last_open) { - panelMods.forEach(mod => { - if (mod.id === store().last_open) { - loadContent(mod); - loaded = true; - } - }); - } - if (!loaded) loadContent(panelMods[0]); - - function loadContent(mod) { - if (curPanel.js && curPanel.js.onSwitch) curPanel.js.onSwitch(); - curPanel = mod.panel; - - store().last_open = mod.id; - panel.querySelector('.enhancer-panel--title').innerHTML = mod.panel.name || mod.name; - - // Reload button - let reloadButton = panel.querySelector('.enhancer-panel--reload-button'); - if (reloadButton) reloadButton.remove(); - if (mod.panel.reload) { - reloadButton = createElement( - `
${icons.reload}
` - ) - reloadButton.addEventListener('click', e => { - e.stopPropagation(); - loadContent(mod); - }) - panel.querySelector('.enhancer-panel--title').after(reloadButton); - } - - panel.querySelector('.enhancer-panel--icon').innerHTML = mod.panel.icon; - document.getElementById('enhancer-panel--content').innerHTML = mod.panel.html; - panel.dataset.fullHeight = mod.panel.fullHeight || false; - - if (curPanel.js && curPanel.js.onLoad) - curPanel.js.onLoad(); - } - - function unlockPanel(animate) { - panel.dataset.locked = 'false'; - setPanelWidth(store().width); - - if (animate) { - panel.animate( - [ - { opacity: 1, transform: 'none' }, - { opacity: 1, transform: 'translateY(60px)', offset: 0.4}, - { opacity: 0, transform: `translateX(${store().width - 30}px) translateY(60px)`}, - ], - { duration: 600, easing: 'ease-out' } - ).onfinish = () => { - panel.addEventListener('mouseover', showPanel); - panel.addEventListener('mouseleave', hidePanel); - } - } else { - panel.addEventListener('mouseover', showPanel); - panel.addEventListener('mouseleave', hidePanel); - } - - hidePanel(); - - if (curPanel.js && curPanel.js.onUnlock) { - curPanel.js.onUnlock(); - } - } - - function lockPanel() { - panel.dataset.locked = 'true'; - setPanelWidth(store().width); - - // Reset animation styles - panel.style.opacity = ''; - panel.style.transform = ''; - - // Hover event listeners - panel.removeEventListener('mouseover', showPanel); - panel.removeEventListener('mouseleave', hidePanel); - - if (curPanel.js && curPanel.js.onLock) { - curPanel.js.onLock(); - } - } - - function togglePanel(e) { - if (e) e.stopPropagation(); - if (isLocked()) unlockPanel(true); - else lockPanel(); - store().locked = panel.dataset.locked; - } - - function showPanel() { - if (!isLocked()) { - panel.style.opacity = 1; - panel.style.transform = 'translateY(60px)'; - } - } - - function hidePanel() { - if (!isLocked()) { - panel.style.opacity = 0; - panel.style.transform = `translateX(${store().width - 30}px) translateY(60px)`; - } - } - - function renderSwitcherItem(mod) { - if (mod.panel) { - const item = createElement( - `
-
${mod.panel.icon}
-
${mod.panel.name || mod.name}
-
` - ); - item.addEventListener('click', () => loadContent(mod)); - return item; - } - } - - function renderSwitcher() { - if (document.querySelector('.enhancer-panel--overlay-container')) return; - - // Layer to close switcher - const overlayContainer = createElement( - '
' - ); - overlayContainer.addEventListener('click', hideSwitcher) - document - .querySelector('.notion-app-inner') - .appendChild(overlayContainer); - - // Position switcher below header - const rect = panel.querySelector('.enhancer-panel--header').getBoundingClientRect(); - const div = createElement(` -
-
-
- `); - - // Render switcher - const switcher = createElement( - '
' - ); - panelMods.forEach(mod => - switcher.append(renderSwitcherItem(mod)) - ); - - overlayContainer.appendChild(div); - div.firstElementChild.appendChild(switcher); - - switcher.firstElementChild.focus(); - - // Fade in - switcher.animate( - [ {opacity: 0}, {opacity: 1} ], - { duration: 200 } - ); - - // Prevent panel from closing if unlocked - panel.removeEventListener('mouseleave', hidePanel); - - // Escape key listener - document.addEventListener('keydown', switcherKeyEvent); - } - - function hideSwitcher() { - const overlayContainer = document.querySelector('.enhancer-panel--overlay-container'); - overlayContainer.removeEventListener('click', hideSwitcher); - document.removeEventListener('keydown', switcherKeyEvent); - - // Fade out - document.querySelector('.enhancer-panel--switcher').animate( - [ {opacity: 1}, {opacity: 0} ], - { duration: 200 } - ).onfinish = () => overlayContainer.remove(); - - if (!isLocked()) panel.addEventListener('mouseleave', hidePanel); - } - - function setPanelWidth(width) { - store().width = width; - panel.style.width = width + 'px'; - - if (isLocked()) { - container.style.width = width + 'px'; - frame.style.paddingRight = width + 'px'; - panel.style.right = 0; - } else { - container.style.width = 0; - frame.style.paddingRight = 0; - panel.style.right = width + 'px'; - } - } - - function enableResize() { - const handle = panel.querySelector('.enhancer-panel--resize div'); - handle.addEventListener('mousedown', initDrag); - - let startX, startWidth; - const div = createElement( - '
' - ); - - function initDrag(e) { - startX = e.clientX; - startWidth = store().width; - - panel.appendChild(div); - - // Set transitions - container.style.transition = 'width 50ms ease-in'; - panel.style.transition = 'width 50ms ease-in, right 50ms ease-in'; - frame.style.transition = 'padding-right 50ms ease-in'; - - handle.style.cursor = ''; - // Prevent panel from closing if unlocked - panel.removeEventListener('mouseleave', hidePanel); - - document.body.addEventListener('mousemove', drag); - document.body.addEventListener('mouseup', stopDrag); - } - - function drag(e) { - e.preventDefault(); - let width = startWidth + (startX - e.clientX); - if (width < 190) width = 190; - if (width > 480) width = 480; - setPanelWidth(width); - - if (curPanel.js && curPanel.js.onResize) { - curPanel.js.onResize(); - } - } - - function stopDrag() { - handle.style.cursor = 'col-resize'; - panel.removeChild(div); - - // Reset transitions - container.style.transition = - panel.style.transition = - frame.style.transition = ''; - - if (!isLocked()) panel.addEventListener('mouseleave', hidePanel); - - document.body.removeEventListener('mousemove', drag); - document.body.removeEventListener('mouseup', stopDrag); - } - } - - function isLocked() { - if (panel.dataset.locked === 'true') return true; - else return false; - } - - function switcherKeyEvent(e) { - e.stopPropagation(); - - if (e.key === 'Escape') return hideSwitcher(); - - const currentFocus = document.activeElement; - if ([' ', 'Enter'].includes(e.key)) return currentFocus.click(); - - const focusNext = () => { - const nextEl = currentFocus.nextElementSibling; - if (nextEl) nextEl.focus(); - else currentFocus.parentElement.firstElementChild.focus(); - } - const focusPrevious = () => { - const prevEl = currentFocus.previousElementSibling; - if (prevEl) prevEl.focus(); - else currentFocus.parentElement.lastElementChild.focus(); - } - - if (e.key === 'ArrowUp') focusPrevious(); - else if (e.key === 'ArrowDown') focusNext(); - else if (e.key === 'Tab') { - if (e.shiftKey) focusPrevious(); - else focusNext(); - - e.preventDefault(); - } - } - } - }); - - // INITIALIZATION FUNCTIONS - - async function initMod(mod) { - // load panel sites - if (mod.id === '0d541743-eb2c-4d77-83a8-3b2f5e8e5dff') { - panelMods = panelMods.filter(panelMod => panelMod !== mod); - return panelMods.push(...initPanelSites(mod)); - } - try { - if (typeof mod.panel === 'object') { - // html - mod.panel.html = await fs.readFile( - path.resolve(__dirname, `../${mod.dir}/${mod.panel.html}`) - ); - // name - if (!mod.panel.name) mod.panel.name = mod.name; - // icon - if (mod.panel.icon) { - const iconPath = path.resolve(__dirname, `../${mod.dir}/${mod.panel.icon}`); - if (await fs.pathExists(iconPath)) - mod.panel.icon = await fs.readFile(iconPath); - } else { - mod.panel.icon = mod.panel.name[0]; - } - // js - if (mod.panel.js) { - const jsPath = `../${mod.dir}/${mod.panel.js}`; - if (await fs.pathExists(path.resolve(__dirname, jsPath))) { - mod.panel.js = require(jsPath)(loadStore(mod), __exports); - } - } - } else if (typeof mod.panel === 'string') { - mod.panel.icon = mod.name[0]; - mod.panel.html = await fs.readFile( - path.resolve(__dirname, `../${mod.dir}/${mod.panel}`) - ); - } else throw Error; - } catch (err) { - console.log('invalid panel mod: ' + mod.name); - panelMods = panelMods.filter(panelMod => panelMod !== mod); - } - } - - function initPanelSites(mod) { - let panelSites = []; - const sitesPath = store(mod.id).sites; - if (sitesPath) { - try { - const sites = require(sitesPath); - const invalid = false; - const sitePanelJs = require('../panel-sites/panel.js')(loadStore(mod), __exports); - - const frameUrl = function(url, mobile) { - if (!/(^https?:\/\/)/.test(url)) url = 'https://' + url; - return ``; - } - - sites.forEach(site => { - if (site.url && site.name) { - - // get url and icon - const iframe = frameUrl(site.url, site.mobile); - const icon = ``; - - const panelMod = { - id: `${mod.id}-${site.url}`, - panel: { - name: site.name, - html: iframe, - icon: icon, - js: sitePanelJs, - fullHeight: true, - reload: true, - }, - } - panelSites.push(panelMod); - } else invalid = true; - }); - if (invalid) throw Error; - } - catch (err) { - console.log('panel site error'); - } - } - return panelSites; - } - - function loadStore(mod) { - return (...args) => { - if (!args.length) return store(mod.id, mod.defaults); - if (args.length === 1 && typeof args[0] === 'object') - return store(mod.id, { ...mod.defaults, ...args[0] }); - const other_mod = modules.find((m) => m.id === args[0]); - return store(args[0], { - ...(other_mod ? other_mod.defaults : {}), - ...(args[1] || {}) - }) - } - } - }, - }, -}; diff --git a/temp/tabs/mod.js b/temp/tabs/mod.js deleted file mode 100644 index 7e9d7dc..0000000 --- a/temp/tabs/mod.js +++ /dev/null @@ -1,49 +0,0 @@ -/* - * tabs - * (c) 2020 dragonwocky (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', - }, - ], -}; diff --git a/temp/tweaks/app.css b/temp/tweaks/app.css deleted file mode 100644 index 6811304..0000000 --- a/temp/tweaks/app.css +++ /dev/null @@ -1,62 +0,0 @@ -/* - * tweaks - * (c) 2020 dragonwocky (https://dragonwocky.me/) - * under the MIT license - */ - -[data-tweaks*='[responsive_breakpoint]'] - .notion-column_list-block - [style='display: flex;'] - > div { - width: 100% !important; -} -[data-tweaks*='[responsive_breakpoint]'] - .notion-column_list-block - [style='display: flex;'] { - flex-direction: column !important; -} -[data-tweaks*='[responsive_breakpoint]'] .notion-app-inner { - --theme_dark--page_normal-width: 100%; - --theme_dark--page-padding: calc(48px + env(safe-area-inset-left)); - --theme_light--page_normal-width: 100%; - --theme_light--page-padding: calc(48px + env(safe-area-inset-left)); -} - -[data-tweaks*='[snappy_transitions]'] * { - animation-duration: 0s !important; - transition-duration: 0s !important; -} -[data-tweaks*='[snappy_transitions]'] .notion-selectable-halo { - opacity: 1 !important; -} - -[data-tweaks*='[hide_help]'] .notion-help-button { - display: none !important; -} - -[data-tweaks*='[thicker_bold]'] - .notion-page-content - span[style*='font-weight:600'] { - font-weight: 700 !important; -} - -[data-tweaks*='[spaced_lines]'] { - --theme_dark--text-block_line-height: 1.65; - --theme_dark--text-block_margin-top: 0.75em; - --theme_light--text-block_line-height: 1.65; - --theme_light--text-block_margin-top: 0.75em; -} - -[data-tweaks*='[condensed_bullets]'] - .notion-selectable.notion-bulleted_list-block { - line-height: 1.1 !important; - margin-top: -1.5px !important; - margin-bottom: -1.5px !important; -} - -[data-tweaks*='[scroll_db_toolbars]'] .notion-collection_view-block > [style*=" height: 42px"] { - overflow-x: auto !important; -} -[data-tweaks*='[scroll_db_toolbars]'] .notion-collection_view-block > [style*=" height: 42px"]::-webkit-scrollbar { - display: none; -} diff --git a/temp/tweaks/mod.js b/temp/tweaks/mod.js deleted file mode 100644 index daa5a67..0000000 --- a/temp/tweaks/mod.js +++ /dev/null @@ -1,120 +0,0 @@ -/* - * tweaks - * (c) 2020 dragonwocky (https://dragonwocky.me/) - * under the MIT license - */ - -'use strict'; - -module.exports = { - id: 'cf8a7b27-5a4c-4d45-a4cb-1d2bbc9e9014', - alwaysActive: true, - tags: ['core', 'extension'], - name: 'tweaks', - desc: 'common style/layout changes.', - version: '0.1.0', - author: 'dragonwocky', - options: [ - { - key: 'dragarea_height', - label: 'height of frameless dragarea:', - desc: `the rectangle added at the top of a window in "integrated titlebar" mode,\ - used to drag/move the window.`, - type: 'input', - value: 15, - platformOverwrite: { - darwin: 0, - }, - }, - { - key: 'responsive_breakpoint', - label: 'width to wrap columns at:', - desc: `the size in pixels below which in-page columns are resized to appear\ - full width so content isn't squished.`, - type: 'input', - value: 600, - }, - { - key: 'smooth_scrollbars', - label: 'integrated scrollbars', - desc: - "use scrollbars that fit better into notion's ui instead of the default chrome ones.", - type: 'toggle', - value: true, - }, - { - key: 'snappy_transitions', - label: 'snappy transitions', - type: 'toggle', - value: false, - }, - { - key: 'thicker_bold', - label: 'thicker bold text', - type: 'toggle', - value: true, - }, - { - key: 'spaced_lines', - label: 'more readable line spacing', - type: 'toggle', - value: false, - }, - { - key: 'hide_help', - label: 'hide help button', - type: 'toggle', - value: false, - }, - { - key: 'condensed_bullets', - label: 'condense bullet points', - desc: - 'makes bullet point blocks closer together and have tighter line spacing', - type: 'toggle', - value: false, - }, - { - key: 'scroll_db_toolbars', - label: 'scroll database toolbars', - desc: - 'allows scrolling database toolbars horizontally if\ - part of the toolbar is hidden (hold shift while scrolling)', - type: 'toggle', - value: true, - }, - ], - hacks: { - 'renderer/preload.js': (store, __exports) => { - document.addEventListener('readystatechange', (event) => { - if (document.readyState !== 'complete') return false; - document.body.dataset.tweaks = [ - 'smooth_scrollbars', - 'snappy_transitions', - 'thicker_bold', - 'spaced_lines', - 'hide_help', - 'condensed_bullets', - 'scroll_db_toolbars', - ] - .filter((tweak) => store()[tweak]) - .map((tweak) => `[${tweak}]`) - .join(''); - document.documentElement.style.setProperty( - '--configured--dragarea_height', - `${store().dragarea_height + 2}px` - ); - const addResponsiveBreakpoint = () => { - document.body.dataset.tweaks = document.body.dataset.tweaks.replace( - /\[responsive_breakpoint\]/g, - '' - ); - if (window.outerWidth <= store().responsive_breakpoint) - document.body.dataset.tweaks += '[responsive_breakpoint]'; - }; - window.addEventListener('resize', addResponsiveBreakpoint); - addResponsiveBreakpoint(); - }); - }, - }, -}; diff --git a/yarn.lock b/yarn.lock index 0c35d95..a5954d6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,22 +3,22 @@ "@types/glob@^7.1.1": - version "7.1.3" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" - integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== + version "7.2.0" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" + integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== dependencies: "@types/minimatch" "*" "@types/node" "*" "@types/minimatch@*": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" - integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== + version "3.0.5" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" + integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== "@types/node@*": - version "14.14.14" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.14.tgz#f7fd5f3cc8521301119f63910f0fb965c7d761ae" - integrity sha512-UHnOPWVWV1z+VV8k6L1HhG7UbGBgIdghqF3l9Ny9ApPghbjICXkUJSd/b9gOgQfjM1r+37cipdw/HJ3F6ICEnQ== + version "16.11.6" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.6.tgz#6bef7a2a0ad684cf6e90fcfe31cecabd9ce0a3ae" + integrity sha512-ua7PgUoeQFjmWPcoo9khiPum3Pd60k4/2ZGXt18sm2Slk0W0xZTqt5Y0Ny1NyBiN1EVQ/+FaF9NcY4Qe6rwk5w== ansi-styles@^4.1.0: version "4.3.0" @@ -27,10 +27,10 @@ ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" -asar@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/asar/-/asar-3.0.3.tgz#1fef03c2d6d2de0cbad138788e4f7ae03b129c7b" - integrity sha512-k7zd+KoR+n8pl71PvgElcoKHrVNiSXtw7odKbyNpmgKe7EGRF9Pnu3uLOukD37EvavKwVFxOUpqXTIZC5B5Pmw== +asar@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/asar/-/asar-3.1.0.tgz#70b0509449fe3daccc63beb4d3c7d2e24d3c6473" + integrity sha512-vyxPxP5arcAqN4F/ebHd/HhwnAiZtwhglvdmc7BR2f0ywbVNTOpSeyhLDbGXtE/y58hv1oC75TaNIXutnsOZsQ== dependencies: chromium-pickle-js "^0.2.0" commander "^5.0.0" @@ -40,9 +40,9 @@ asar@^3.0.3: "@types/glob" "^7.1.1" balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== brace-expansion@^1.1.7: version "1.1.11" @@ -52,10 +52,10 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -chalk@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" - integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== +chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" @@ -93,9 +93,9 @@ fs.realpath@^1.0.0: integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= glob@^7.1.6: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4"