├── .gitignore ├── .python-version ├── README.md ├── img └── calendar-view.png ├── plugins ├── package-lock.json ├── package.json └── src │ ├── dailyNote.js │ ├── noteWithTemplate.js │ ├── print.js │ └── vimTweaks.js └── ulfric ├── README.md ├── back-links.scss ├── checkbox.scss ├── drag-ghost.scss ├── dragonglass.scss ├── edit-mode.scss ├── embed.scss ├── frameless.scss ├── graph.scss ├── hacks ├── blockquote.scss ├── gutter-headings.scss ├── hide-prompt-instructions.scss ├── hide-sidebar-panels.scss ├── image-zoom.scss └── tag.scss ├── highlight.scss ├── icons.scss ├── index.scss ├── links.scss ├── notification.scss ├── package-lock.json ├── preview-mode.scss ├── scrollbar.scss ├── search.scss ├── settings.scss ├── status-bar.scss ├── table.scss ├── typography.scss ├── ui-frame.scss ├── variables.scss ├── vim ├── cursor.scss └── highlight-line.scss └── workspace.scss /.gitignore: -------------------------------------------------------------------------------- 1 | # Sass 2 | *.css.map 3 | *.pyc 4 | node_modules/ -------------------------------------------------------------------------------- /.python-version: -------------------------------------------------------------------------------- 1 | 3.7.3 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Dragonglass 2 | 3 | Dragonglass is a collection of scripts and themes used to power my [Obsidian](http://obsidian.md) workflow. Note, everything here is very Work-In-Progress and likely only works on my own computer! 4 | 5 | ## Instructions 6 | 7 | ### Volcano Plugins 8 | 9 | > These require Volcano to be installed and setup on your computer to run. Install instructions can be [found here](https://github.com/kognise/volcano#installation). 10 | 11 | The Volcano plugins are written in ES6, so you'll need to transpile them with babel before you can drop them into your Volcano plugins directory. 12 | 13 | ``` 14 | $ cd /volcano_plugins 15 | $ npm install 16 | $ npm run build 17 | ``` 18 | 19 | ``` 20 | $ ln -s /volcano_plugins/build ~/volcano/plugins/ 21 | ``` 22 | 23 | (better install instructions Coming Soon:tm:) 24 | 25 | ## Contents 26 | 27 | ### [Volcano](https://github.com/kognise/volcano) Plugins 28 | 29 | #### Calendar 30 | 31 | A widget that shows a calendar view of the current month. Select a day to view that day's daily note. 32 | 33 | More features to come soon. 34 | 35 | ![Calendar view screenshot](img/calendar-view.png) 36 | 37 | #### **[WIP]** Daily Notes (with dynamic templates) 38 | 39 | Based on the existing "Daily Note" plugin in Obsidian, but it renders the template with [Handlebars](https://handlebarsjs.com/). This allows for dynamic content within the template, such as timestamps. 40 | 41 | ### Scripts 42 | 43 | #### `daily-note-template.py` 44 | 45 | A script used in conjunction with Keyboard Maestro to create a new daily note if one doesn't exist. It supports dynamic content. 46 | 47 | #### `markdown-calendar.py` 48 | 49 | Insired by this [Obsidian forum post](https://forum.obsidian.md/t/calendar-and-tasks-for-daily-notes/3218), the markdown-calendar creates a calendar view autofilled with the daily notes that you have in your vault. I have it configured to regenerate whenever Obsidian regains focus. 50 | 51 | #### `format-date-files.py` 52 | 53 | A crude script for migrating all my Bear notes in the format of `Month Day, Year.md` into `YYYY-mm-dd.md`. 54 | 55 | ### Theme(s) 56 | 57 | #### Ulfric 58 | 59 | A modified version of the [Nord Theme](https://www.nordtheme.com/) with added visual niceties (and hacks). 60 | -------------------------------------------------------------------------------- /img/calendar-view.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liamcain/obsidian-scripts-and-plugins/42949e1897ced511c7926d82db31f88c7535464e/img/calendar-view.png -------------------------------------------------------------------------------- /plugins/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "dragonglass", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "noteWithTemplate.js", 6 | "dependencies": { 7 | "clsx": "^1.1.1", 8 | "core-js": "^3.6.5", 9 | "electron": "^9.1.2", 10 | "handlebars": "^4.7.6", 11 | "moment": "^2.27.0" 12 | }, 13 | "devDependencies": { 14 | "@babel/cli": "^7.10.5", 15 | "@babel/core": "^7.11.0", 16 | "@babel/preset-env": "^7.11.0", 17 | "nodemon": "^2.0.4" 18 | }, 19 | "scripts": { 20 | "build": "babel src -d build", 21 | "build:watch": "nodemon --ignore build/ --ignore node_modules/ --exec 'babel src -d build'", 22 | "test": "echo \"Error: no test specified\" && exit 1" 23 | }, 24 | "author": "", 25 | "license": "ISC" 26 | } 27 | -------------------------------------------------------------------------------- /plugins/src/dailyNote.js: -------------------------------------------------------------------------------- 1 | import electron from "electron"; 2 | import fs from "fs"; 3 | import Handlebars from "handlebars"; 4 | import moment from "moment"; 5 | import path from "path"; 6 | 7 | module.exports = () => { 8 | class DailyNotePlugin { 9 | constructor() { 10 | this.id = "daily-notes-dynamic"; 11 | this.name = "Dynamic Daily Notes"; 12 | this.description = "Create a new daily note"; 13 | this.defaultOn = true; 14 | 15 | this.app = null; 16 | this.instance = null; 17 | this.volcanoPath = path.join( 18 | electron.remote.app.getPath("home"), 19 | "volcano" 20 | ); 21 | } 22 | 23 | init(app, instance) { 24 | this.app = app; 25 | this.instance = instance; 26 | 27 | this.instance.registerGlobalCommand({ 28 | id: "daily-note-dynamic", 29 | name: "Open today's note", 30 | callback: this._openDailyNote.bind(this), 31 | }); 32 | } 33 | 34 | _openFileByName(filename) { 35 | const fileObj = this.app.vault.fileMap[filename]; 36 | this.app.workspace.activeLeaf.openFile(fileObj); 37 | } 38 | 39 | _openFile(fileObj) { 40 | this.app.workspace.activeLeaf.openFile(fileObj); 41 | return fileObj; 42 | } 43 | 44 | _fileExistsInVault(filename) { 45 | return !!this.app.vault.fileMap[filename]; 46 | } 47 | 48 | async _openDailyNote() { 49 | const today = moment(); 50 | const todaysFilename = `${today.format("YYYY-MM-DD")}.md`; 51 | 52 | if (this._fileExistsInVault(todaysFilename)) { 53 | console.info(`${todaysFilename} exists. Opening...`); 54 | this._openFileByName(todaysFilename); 55 | return; 56 | } 57 | 58 | const dailyNoteSkeleton = fs 59 | .readFileSync(`${this.volcanoPath}/templates/daily_note.hbs`) 60 | .toString(); 61 | const dailyNoteTemplate = Handlebars.compile(dailyNoteSkeleton); 62 | 63 | let temperature = ""; 64 | let shortForecast = ""; 65 | 66 | try { 67 | const dailyWeather = await fetch( 68 | "https://api.weather.gov/gridpoints/OKX/30,34/forecast" 69 | ); 70 | const dailyWeatherJson = await dailyWeather.json(); 71 | const currentWeather = dailyWeatherJson.properties.periods[0]; 72 | temperature = currentWeather.temperature; 73 | shortForecast = currentWeather.shortForecast; 74 | } catch (err) { 75 | shortForecast = "???"; 76 | temperature = "???"; 77 | } 78 | 79 | const dailyNoteContents = dailyNoteTemplate({ 80 | shortForecast, 81 | todayHeader: today.format("ddd MMMM DD, YYYY"), 82 | temperature, 83 | }); 84 | 85 | this._createFile(todaysFilename, dailyNoteContents); 86 | } 87 | 88 | _createFile(filename, contents) { 89 | // TODO how to refresh the active pane? 90 | this.app.fileManager 91 | .createNewMarkdownFile("", filename) 92 | .then(this._openFile.bind(this)) 93 | .then((createdFile) => { 94 | this.app.vault.modify(createdFile, contents); 95 | return createdFile; 96 | }); 97 | } 98 | 99 | onEnable() {} 100 | onLoad() {} 101 | } 102 | return new DailyNotePlugin(); 103 | }; 104 | -------------------------------------------------------------------------------- /plugins/src/noteWithTemplate.js: -------------------------------------------------------------------------------- 1 | import Handlebars from "handlebars"; 2 | import fs from "fs"; 3 | 4 | // const dailyNoteSkeleton = fs 5 | // .readFileSync("~/volcano/templates/daily_note.hbs") 6 | // .toString(); 7 | // const dailyNoteTemplate = Handlebars.compile(dailyNoteSkeleton); 8 | 9 | module.exports = () => { 10 | class NoteWithTemplatePlugin { 11 | constructor() { 12 | this.id = "note-with-template"; 13 | this.name = "New Note with Template"; 14 | this.description = "Create a new note with a given template"; 15 | this.defaultOn = false; 16 | 17 | this.app = null; 18 | this.instance = null; 19 | } 20 | 21 | init(app, instance) { 22 | this.app = app; 23 | this.instance = instance; 24 | 25 | this.instance.registerGlobalCommand({ 26 | id: "create-from-template", 27 | name: "Create new file from template...", 28 | callback: this._createFile.bind(this), 29 | }); 30 | } 31 | 32 | _openFileByName(filename) { 33 | const fileObj = this.app.vault.fileMap[filename]; 34 | this.app.workspace.activeLeaf.openFile(fileObj); 35 | } 36 | 37 | _openFile(fileObj) { 38 | this.app.workspace.activeLeaf.openFile(fileObj); 39 | return fileObj; 40 | } 41 | 42 | _createFile() { 43 | const filename = "testing12345"; 44 | 45 | // TODO how to refresh the active pane? 46 | this.app.fileManager 47 | .createNewMarkdownFile("", filename) 48 | .then(this._openFile.bind(this)) 49 | .then((createdFile) => { 50 | this.app.vault.modify( 51 | createdFile, 52 | dailyNoteTemplate({ 53 | todayHeader: "title", // TODO 54 | }) 55 | ); 56 | return createdFile; 57 | }); 58 | } 59 | 60 | onEnable() {} 61 | onLoad() {} 62 | } 63 | 64 | return new NoteWithTemplatePlugin(); 65 | }; 66 | -------------------------------------------------------------------------------- /plugins/src/print.js: -------------------------------------------------------------------------------- 1 | function htmlToElements(html) { 2 | const template = document.createElement("template"); 3 | template.innerHTML = html.trim(); 4 | return template.content.firstChild; 5 | } 6 | 7 | module.exports = () => { 8 | class PrintPlugin { 9 | constructor() { 10 | this.id = "print"; 11 | this.name = "Print"; 12 | this.description = "Print a markdown file"; 13 | this.defaultOn = true; 14 | 15 | this.app = null; 16 | this.instance = null; 17 | } 18 | 19 | init(app, instance) { 20 | this.app = app; 21 | this.instance = instance; 22 | this.instance.registerGlobalCommand({ 23 | id: "print-file", 24 | name: "Print file", 25 | callback: this.printFile.bind(this), 26 | }); 27 | } 28 | 29 | printFile() { 30 | const { activeLeaf } = this.app.workspace; 31 | 32 | const fileContent = activeLeaf.containerEl.find(".markdown-preview-view"); 33 | const printFrame = document.createElement("iframe"); 34 | printFrame.setAttribute( 35 | "style", 36 | "visibility: hidden; height: 0; width: 0; position: absolute;" 37 | ); 38 | document.body.appendChild(printFrame); 39 | 40 | const printContainer = htmlToElements(fileContent.innerHTML); 41 | printFrame.contentWindow.document.body.appendChild(printContainer); 42 | printFrame.contentWindow.print(); 43 | printFrame.contentWindow.close(); 44 | } 45 | 46 | onEnable() {} 47 | onLoad() {} 48 | } 49 | return new PrintPlugin(); 50 | }; 51 | -------------------------------------------------------------------------------- /plugins/src/vimTweaks.js: -------------------------------------------------------------------------------- 1 | import { clipboard } from "electron"; 2 | 3 | module.exports = () => { 4 | class VimTweaksPlugin { 5 | constructor() { 6 | this.id = "vim-tweaks"; 7 | this.name = "VIM Tweaks"; 8 | this.description = "Small tweaks to improve CodeMirror vim-mode"; 9 | this.defaultOn = true; 10 | 11 | this.app = null; 12 | this.instance = null; 13 | this.CodeMirror = window.CodeMirror; 14 | } 15 | 16 | init(app, instance) { 17 | this.app = app; 18 | this.instance = instance; 19 | } 20 | 21 | onEnable() { 22 | // set clipboard=unnamed 23 | const unnamedRegister = this.CodeMirror.Vim.getRegisterController()[ 24 | "unnamedRegister" 25 | ]; 26 | const defaultSetText = unnamedRegister.setText.bind(unnamedRegister); 27 | unnamedRegister.setText = function (text, linewise, blockwise) { 28 | defaultSetText(text, linewise, blockwise); 29 | clipboard.writeText(text); 30 | }; 31 | 32 | unnamedRegister.toString = function () { 33 | return clipboard.readText(); 34 | }; 35 | 36 | // noremap k gk 37 | // noremap j gj 38 | this.CodeMirror.Vim.map("k", "gk"); 39 | this.CodeMirror.Vim.map("j", "gj"); 40 | } 41 | 42 | onDisable() { 43 | // reset unnamed register's `.setText` 44 | const unnamedRegister = this.CodeMirror.Vim.getRegisterController()[ 45 | "unnamedRegister" 46 | ]; 47 | unnamedRegister.setText = unnamedRegister.__proto__.setText; 48 | unnamedRegister.toString = unnamedRegister.__proto__.toString; 49 | } 50 | } 51 | 52 | return new VimTweaksPlugin(); 53 | }; 54 | -------------------------------------------------------------------------------- /ulfric/README.md: -------------------------------------------------------------------------------- 1 | # Ulfric 2 | 3 | A theme for Obsidian based on [Nord Theme](https://www.nordtheme.com/). 4 | -------------------------------------------------------------------------------- /ulfric/back-links.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/liamcain/obsidian-scripts-and-plugins/42949e1897ced511c7926d82db31f88c7535464e/ulfric/back-links.scss -------------------------------------------------------------------------------- /ulfric/checkbox.scss: -------------------------------------------------------------------------------- 1 | ul { 2 | padding-inline-start: 0; 3 | } 4 | 5 | input[type="checkbox"] { 6 | -webkit-appearance: none; 7 | appearance: none; 8 | border-radius: 50%; 9 | border: 1px solid var(--background-secondary-alt); 10 | padding: 0; 11 | } 12 | input[type="checkbox"]:focus, 13 | input[type="checkbox"]:hover { 14 | outline: 0; 15 | border-color: var(--text-faint); 16 | } 17 | input[type="checkbox"]:checked { 18 | background-color: var(--background-modifier-accent); 19 | border: 1px solid var(--background-modifier-accent); 20 | background-position: center; 21 | background-size: 70%; 22 | background-repeat: no-repeat; 23 | background-image: url('data:image/svg+xml; utf8, '); 24 | } 25 | .markdown-preview-view ul > li.task-list-item.is-checked { 26 | text-decoration: none; 27 | color: var(--text-normal); 28 | } 29 | .markdown-preview-view .task-list-item-checkbox { 30 | width: 18px; 31 | height: 18px; 32 | position: relative; 33 | top: 6px; 34 | line-height: 0; 35 | margin-left: -2em; 36 | margin-right: 10px; 37 | filter: none; 38 | } 39 | .markdown-preview-view .task-list-item { 40 | padding-inline-start: 1.5em; 41 | } 42 | .side-dock-plugin-panel-inner { 43 | padding-right: 6px; 44 | padding-left: 6px; 45 | } 46 | -------------------------------------------------------------------------------- /ulfric/drag-ghost.scss: -------------------------------------------------------------------------------- 1 | /* --------------- */ 2 | /* Drag ghost */ 3 | 4 | .workspace-drop-overlay:before, 5 | .mod-drag, 6 | .drag-ghost { 7 | opacity: 0.8; 8 | border-radius: 0 !important; 9 | } 10 | 11 | .nav-folder-title.is-being-dragged-over { 12 | background-color: var(--background-modifier-accent); 13 | border-color: var(--background-modifier-accent); 14 | border-radius: 0; 15 | border-left: 1px solid transparent; 16 | border-right: 1px solid transparent; 17 | } 18 | -------------------------------------------------------------------------------- /ulfric/dragonglass.scss: -------------------------------------------------------------------------------- 1 | .pane-title { 2 | font-size: 16px; 3 | margin: 12px 16px 0px; 4 | } 5 | 6 | .dragonglass__plugin-list--container { 7 | padding: 0 8px; 8 | 9 | h4, 10 | p { 11 | margin-block-end: 0; 12 | margin-block-start: 0; 13 | } 14 | 15 | h4 { 16 | font-size: 14px; 17 | line-height: 24px; 18 | } 19 | 20 | p, 21 | small { 22 | font-size: 12px; 23 | line-height: 16px; 24 | } 25 | 26 | .plugin-version { 27 | font-size: 10px; 28 | margin-left: 0.3em; 29 | opacity: 0.8; 30 | } 31 | 32 | button { 33 | display: block; 34 | margin-top: 8px; 35 | } 36 | } 37 | 38 | .dragonglass__plugin-list--item { 39 | margin: 4px 0; 40 | padding: 8px; 41 | 42 | &:not(:last-child) { 43 | border-bottom: 1px solid var(--dark3); 44 | } 45 | 46 | button { 47 | display: inline-block; 48 | } 49 | 50 | button.hidden { 51 | display: none; 52 | } 53 | 54 | .installed { 55 | background-color: var(--dark0); 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /ulfric/edit-mode.scss: -------------------------------------------------------------------------------- 1 | .markdown-source-view { 2 | font-family: var(--font-monospace); 3 | padding: 0; 4 | } 5 | 6 | .CodeMirror { 7 | font-family: var(--font-monospace); 8 | font-size: 14px; 9 | padding-bottom: 0; 10 | 11 | pre.CodeMirror-line { 12 | z-index: auto; 13 | } 14 | } 15 | 16 | .cm-searching { 17 | background-color: rgba(255, 255, 0, 0.2); 18 | } 19 | 20 | .cm-s-obsidian { 21 | padding-left: 0; 22 | padding-right: 0; 23 | 24 | pre.HyperMD-codeblock { 25 | background-color: var(--pre-code); 26 | color: var(--code-block); 27 | line-height: 1.4em; 28 | padding-left: 4px; 29 | padding-right: 4px; 30 | } 31 | 32 | pre.HyperMD-header { 33 | padding: 12px 0 !important; 34 | } 35 | } 36 | 37 | .cm-s-obsidian span.cm-inline-code, 38 | .cm-s-obsidian 39 | span.cm-inline-code:not(.cm-formatting):not(.cm-hmd-indented-code):not(.obsidian-search-match-highlight) { 40 | color: var(--inline-code); 41 | background-color: var(--pre-code); 42 | } 43 | 44 | .CodeMirror-foldgutter-open, 45 | .CodeMirror-foldgutter-folded { 46 | margin-left: 4px; 47 | } 48 | -------------------------------------------------------------------------------- /ulfric/embed.scss: -------------------------------------------------------------------------------- 1 | .markdown-embed { 2 | padding-left: 10px; 3 | padding-right: 10px; 4 | margin-left: 10px; 5 | margin-right: 10px; 6 | } 7 | 8 | .internal-embed img { 9 | max-height: 300px; 10 | } 11 | 12 | .markdown-embed-title, 13 | .file-embed-title { 14 | color: var(--dark3); 15 | font-family: "Avenir Next"; 16 | font-size: 16px; 17 | text-align: left; 18 | } 19 | -------------------------------------------------------------------------------- /ulfric/frameless.scss: -------------------------------------------------------------------------------- 1 | /* Frameless mode */ 2 | 3 | .titlebar, 4 | .titlebar-inner { 5 | background: transparent; 6 | position: fixed; 7 | top: 0; 8 | height: 12px; 9 | } 10 | 11 | .titlebar-text { 12 | display: none; 13 | } 14 | 15 | .is-frameless { 16 | padding-top: 0px !important; 17 | } 18 | 19 | .view-header { 20 | background-color: transparent; 21 | padding-left: 40px; 22 | height: 40px; 23 | } 24 | 25 | .workspace-split.mod-root { 26 | background-color: transparent !important; 27 | } 28 | 29 | .workspace-split.mod-right-split > .workspace-tabs, 30 | .workspace-split.mod-root .view-header { 31 | padding-top: 4px; 32 | } 33 | .workspace-split.mod-left-split > .workspace-tabs { 34 | padding-top: 24px; 35 | } 36 | .workspace-split.mod-right-split > .workspace-tabs ~ .workspace-tabs, 37 | .workspace-split.mod-left-split > .workspace-tabs ~ .workspace-tabs { 38 | padding-top: 0px; 39 | } 40 | .is-fullscreen .workspace-split.mod-left-split > .workspace-tabs, 41 | .is-fullscreen .workspace-split.mod-root .view-header { 42 | padding-top: 0px; 43 | } 44 | 45 | /* --------------- */ 46 | /* App Menu ribbon moved to the bottom edge */ 47 | 48 | .workspace-ribbon.mod-left { 49 | position: fixed; 50 | border-right: 0px; 51 | margin: 0; 52 | height: 40px; 53 | bottom: 0; 54 | top: auto; 55 | display: flex; 56 | flex-direction: row; 57 | background: var(--background-primary); 58 | z-index: 17; 59 | opacity: 0; 60 | transition: opacity 0.25s ease-in-out; 61 | 62 | &:after { 63 | content: " "; 64 | border-top: 1px solid var(--background-modifier-border); 65 | background: var(--background-primary); 66 | padding-right: 100vw; 67 | pointer-events: none; 68 | } 69 | } 70 | .side-dock-actions, 71 | .side-dock-settings { 72 | display: flex; 73 | border-top: 1px solid var(--background-modifier-border); 74 | background: var(--background-primary); 75 | margin: 0; 76 | } 77 | .workspace-ribbon.mod-left .side-dock-ribbon-action { 78 | display: inline-block; 79 | padding: 9px 5px 0 12px; 80 | } 81 | .workspace-ribbon.mod-left:hover { 82 | opacity: 1; 83 | transition: opacity 0.25s ease-in-out; 84 | } 85 | .workspace-ribbon.mod-left .workspace-ribbon-collapse-btn { 86 | border-top: 1px solid var(--background-modifier-border); 87 | } 88 | .workspace-split.mod-left-split { 89 | margin: 0; 90 | } 91 | .workspace-ribbon.mod-right { 92 | opacity: 1; 93 | height: 40px; 94 | position: fixed; 95 | top: auto; 96 | right: 5px; 97 | bottom: 0; 98 | z-index: 999; 99 | } 100 | .workspace-ribbon-collapse-btn { 101 | margin: 0; 102 | padding-top: 8px; 103 | } 104 | 105 | .workspace-split.mod-root 106 | > .workspace-leaf:first-of-type:last-of-type 107 | .view-header { 108 | background: transparent; 109 | } 110 | 111 | .titlebar-button-container.mod-left { 112 | display: none; 113 | } 114 | 115 | .view-header-title-container:after { 116 | display: none; 117 | } 118 | 119 | .workspace-tabs { 120 | background: transparent; 121 | } 122 | 123 | .workspace-split.mod-left-split > .workspace-leaf-resize-handle, 124 | .workspace-split.mod-right-split > .workspace-leaf-resize-handle { 125 | top: 0; 126 | width: 1px; 127 | } 128 | -------------------------------------------------------------------------------- /ulfric/graph.scss: -------------------------------------------------------------------------------- 1 | #graph-view-canvas .links { 2 | stroke: var(--interactive-accent-rgb); 3 | } 4 | -------------------------------------------------------------------------------- /ulfric/hacks/blockquote.scss: -------------------------------------------------------------------------------- 1 | /* Add quotation character before quote */ 2 | blockquote:before { 3 | font: 14px/20px italic Times, serif; 4 | content: "“"; 5 | font-size: 3em; 6 | line-height: 0.1em; 7 | vertical-align: -0.4em; 8 | } 9 | 10 | blockquote p { 11 | display: inline; 12 | } 13 | 14 | blockquote { 15 | margin-inline-start: 0; 16 | } 17 | -------------------------------------------------------------------------------- /ulfric/hacks/gutter-headings.scss: -------------------------------------------------------------------------------- 1 | .cm-formatting-header { 2 | left: calc(-60px + 0.2em); 3 | opacity: 0.25; 4 | position: absolute; 5 | text-align: right; 6 | width: 60px; 7 | } 8 | 9 | .CodeMirror-gutter-elt { 10 | top: 15px; 11 | } 12 | 13 | .cm-s-obsidian .CodeMirror-gutters { 14 | left: 0px !important; 15 | } 16 | 17 | .CodeMirror-scroll { 18 | padding-left: 48px; 19 | padding-right: 48px; 20 | } 21 | -------------------------------------------------------------------------------- /ulfric/hacks/hide-prompt-instructions.scss: -------------------------------------------------------------------------------- 1 | .prompt-instructions { 2 | display: none; 3 | } 4 | 5 | input.prompt-input { 6 | background-color: var(--dark0); 7 | border: none; 8 | font-size: 1.1em; 9 | height: 40px; 10 | min-height: 40px; 11 | } 12 | -------------------------------------------------------------------------------- /ulfric/hacks/hide-sidebar-panels.scss: -------------------------------------------------------------------------------- 1 | .workspace-split.mod-right-split { 2 | margin-right: 0 !important; 3 | } 4 | 5 | .workspace-tabs { 6 | margin-left: 4px; 7 | } 8 | -------------------------------------------------------------------------------- /ulfric/hacks/image-zoom.scss: -------------------------------------------------------------------------------- 1 | /* --------------- */ 2 | /* Image zoom */ 3 | 4 | .view-content img { 5 | cursor: zoom-in; 6 | } 7 | .view-content img:active { 8 | cursor: zoom-out; 9 | display: block; 10 | z-index: 100; 11 | position: fixed; 12 | max-height: calc(100% + 1px); 13 | max-width: calc(100% - 20px); 14 | height: calc(100% + 1px); 15 | width: 100%; 16 | object-fit: contain; 17 | margin: -0.5px auto 0; 18 | text-align: center; 19 | top: 50%; 20 | transform: translateY(-50%); 21 | padding: 0; 22 | left: 0; 23 | right: 0; 24 | bottom: 0; 25 | background: var(--background-translucent); 26 | } 27 | -------------------------------------------------------------------------------- /ulfric/hacks/tag.scss: -------------------------------------------------------------------------------- 1 | .tag { 2 | background-color: var(--text-a); 3 | color: white; 4 | border-radius: 12px; 5 | padding: 4px 12px; 6 | } 7 | -------------------------------------------------------------------------------- /ulfric/highlight.scss: -------------------------------------------------------------------------------- 1 | markdown-preview-view mark, 2 | mark { 3 | background-color: var(--purple) !important; 4 | border-radius: 4px; 5 | padding: 2px 8px; 6 | } 7 | -------------------------------------------------------------------------------- /ulfric/icons.scss: -------------------------------------------------------------------------------- 1 | /* --------------- */ 2 | /* Icons */ 3 | 4 | .nav-buttons-container { 5 | padding: 10px 5px 0px 5px; 6 | margin-bottom: 0px !important; 7 | justify-content: flex-start; 8 | border: 0; 9 | } 10 | 11 | .nav-action-button svg { 12 | width: 15px; 13 | } 14 | .workspace-ribbon-collapse-btn svg path { 15 | stroke-width: 3px; 16 | } 17 | .nav-action-button svg path { 18 | stroke-width: 2px; 19 | } 20 | .view-header-icon, 21 | .workspace-tab-header, 22 | .nav-action-button, 23 | .side-dock-ribbon-tab, 24 | .view-action { 25 | background: transparent; 26 | color: var(--text-muted); 27 | opacity: 0.4; 28 | transition: opacity 0.1s ease-in-out; 29 | } 30 | .view-header-icon { 31 | opacity: 0; 32 | } 33 | .workspace-leaf-content[data-type="search"] .nav-action-button.is-active, 34 | .workspace-leaf-content[data-type="backlink"] .nav-action-button.is-active, 35 | .workspace-tab-header.is-active, 36 | .workspace-leaf-content[data-type="search"] .nav-action-button.is-active { 37 | background: transparent; 38 | color: var(--text-muted); 39 | opacity: 1; 40 | transition: opacity 0.1s ease-in-out; 41 | } 42 | .view-action:hover, 43 | .view-header-icon:hover, 44 | .nav-action-button:hover, 45 | .workspace-tab-header:hover, 46 | .side-dock-ribbon-tab:hover, 47 | .side-dock-ribbon-action:hover { 48 | background: transparent; 49 | color: var(--text-muted); 50 | opacity: 1; 51 | transition: opacity 0 ease-in-out; 52 | } 53 | .workspace-leaf-content[data-type="search"] .nav-action-button.is-active { 54 | background: transparent; 55 | } 56 | .nav-action-button, 57 | .workspace-leaf-content[data-type="search"] .nav-action-button, 58 | .workspace-leaf-content[data-type="backlink"] .nav-action-button { 59 | padding: 0 4px 0 8px; 60 | margin: 0; 61 | } 62 | .workspace-tab-header-inner { 63 | padding: 3px 3px 3px 10px; 64 | } 65 | 66 | /* --------------- */ 67 | /* Sidedock icons */ 68 | 69 | .workspace-ribbon-collapse-btn, 70 | .view-action, 71 | .side-dock-ribbon-tab, 72 | .side-dock-ribbon-action { 73 | } 74 | .workspace-ribbon { 75 | border-color: var(--background-modifier-border); 76 | background: var(--background-secondary); 77 | } 78 | .workspace-ribbon.mod-right { 79 | right: 0; 80 | position: absolute; 81 | background: transparent; 82 | border-right: 0; 83 | } 84 | .mod-right:not(.is-collapsed) ~ .workspace-split.mod-right-split { 85 | margin-right: 0; 86 | } 87 | .side-dock-ribbon-action { 88 | padding: 6px 0; 89 | } 90 | .side-dock-settings { 91 | padding-bottom: 5px; 92 | } 93 | .side-dock-ribbon { 94 | border-left: 0; 95 | } 96 | 97 | /* --------------- */ 98 | /* Toggle switches */ 99 | 100 | .checkbox-container { 101 | background-color: var(--background-modifier-border); 102 | border: 1px solid var(--background-modifier-border); 103 | } 104 | .checkbox-container.is-enabled { 105 | border-color: var(--interactive-accent); 106 | } 107 | -------------------------------------------------------------------------------- /ulfric/index.scss: -------------------------------------------------------------------------------- 1 | @use 'variables.scss'; 2 | @use 'typography.scss'; 3 | 4 | // Views 5 | @use 'ui-frame.scss'; 6 | @use 'edit-mode.scss'; 7 | @use 'frameless.scss'; 8 | @use 'preview-mode.scss'; 9 | @use 'settings.scss'; 10 | 11 | // Components 12 | @use 'back-links.scss'; 13 | @use 'checkbox.scss'; 14 | @use 'drag-ghost.scss'; 15 | @use 'embed.scss'; 16 | @use 'graph.scss'; 17 | @use 'highlight.scss'; 18 | @use 'icons.scss'; 19 | @use 'links.scss'; 20 | @use 'notification.scss'; 21 | @use 'scrollbar.scss'; 22 | @use 'search.scss'; 23 | @use 'status-bar.scss'; 24 | @use 'table.scss'; 25 | @use 'workspace.scss'; 26 | 27 | // Vim 28 | @use 'vim/cursor.scss'; 29 | @use 'vim/highlight-line.scss'; 30 | 31 | // Hacks 32 | @use 'hacks/blockquote.scss'; 33 | @use 'hacks/gutter-headings.scss'; 34 | @use 'hacks/hide-prompt-instructions.scss'; 35 | @use 'hacks/hide-sidebar-panels.scss'; 36 | @use 'hacks/image-zoom.scss'; 37 | 38 | // Plugins 39 | @use 'dragonglass.scss'; 40 | -------------------------------------------------------------------------------- /ulfric/links.scss: -------------------------------------------------------------------------------- 1 | a, 2 | .cm-hmd-internal-link { 3 | color: inherit; 4 | text-decoration: none; 5 | } 6 | 7 | a:hover, 8 | .cm-hmd-internal-link:hover, 9 | .cm-url { 10 | color: var(--text-a-hover); 11 | text-decoration: none; 12 | } 13 | -------------------------------------------------------------------------------- /ulfric/notification.scss: -------------------------------------------------------------------------------- 1 | .theme-dark .notice { 2 | background: var(--background-secondary); 3 | } 4 | -------------------------------------------------------------------------------- /ulfric/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "requires": true, 3 | "lockfileVersion": 1, 4 | "dependencies": { 5 | "abbrev": { 6 | "version": "1.1.1", 7 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 8 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" 9 | }, 10 | "ajv": { 11 | "version": "6.12.5", 12 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.5.tgz", 13 | "integrity": "sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag==", 14 | "requires": { 15 | "fast-deep-equal": "^3.1.1", 16 | "fast-json-stable-stringify": "^2.0.0", 17 | "json-schema-traverse": "^0.4.1", 18 | "uri-js": "^4.2.2" 19 | } 20 | }, 21 | "ansi-regex": { 22 | "version": "2.1.1", 23 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 24 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" 25 | }, 26 | "aproba": { 27 | "version": "1.2.0", 28 | "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", 29 | "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" 30 | }, 31 | "are-we-there-yet": { 32 | "version": "1.1.5", 33 | "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", 34 | "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", 35 | "requires": { 36 | "delegates": "^1.0.0", 37 | "readable-stream": "^2.0.6" 38 | } 39 | }, 40 | "asn1": { 41 | "version": "0.2.4", 42 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", 43 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", 44 | "requires": { 45 | "safer-buffer": "~2.1.0" 46 | } 47 | }, 48 | "assert-plus": { 49 | "version": "1.0.0", 50 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 51 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" 52 | }, 53 | "asynckit": { 54 | "version": "0.4.0", 55 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 56 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" 57 | }, 58 | "aws-sign2": { 59 | "version": "0.7.0", 60 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 61 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" 62 | }, 63 | "aws4": { 64 | "version": "1.10.1", 65 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.1.tgz", 66 | "integrity": "sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA==" 67 | }, 68 | "balanced-match": { 69 | "version": "1.0.0", 70 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 71 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" 72 | }, 73 | "bcrypt-pbkdf": { 74 | "version": "1.0.2", 75 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", 76 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", 77 | "requires": { 78 | "tweetnacl": "^0.14.3" 79 | } 80 | }, 81 | "block-stream": { 82 | "version": "0.0.9", 83 | "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", 84 | "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", 85 | "requires": { 86 | "inherits": "~2.0.0" 87 | } 88 | }, 89 | "brace-expansion": { 90 | "version": "1.1.11", 91 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 92 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 93 | "requires": { 94 | "balanced-match": "^1.0.0", 95 | "concat-map": "0.0.1" 96 | } 97 | }, 98 | "caseless": { 99 | "version": "0.12.0", 100 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 101 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" 102 | }, 103 | "chownr": { 104 | "version": "1.1.4", 105 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", 106 | "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" 107 | }, 108 | "code-point-at": { 109 | "version": "1.1.0", 110 | "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", 111 | "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" 112 | }, 113 | "combined-stream": { 114 | "version": "1.0.8", 115 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 116 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 117 | "requires": { 118 | "delayed-stream": "~1.0.0" 119 | } 120 | }, 121 | "concat-map": { 122 | "version": "0.0.1", 123 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 124 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 125 | }, 126 | "console-control-strings": { 127 | "version": "1.1.0", 128 | "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", 129 | "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" 130 | }, 131 | "core-util-is": { 132 | "version": "1.0.2", 133 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 134 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 135 | }, 136 | "dashdash": { 137 | "version": "1.14.1", 138 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 139 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 140 | "requires": { 141 | "assert-plus": "^1.0.0" 142 | } 143 | }, 144 | "debug": { 145 | "version": "3.2.6", 146 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", 147 | "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", 148 | "requires": { 149 | "ms": "^2.1.1" 150 | } 151 | }, 152 | "deep-extend": { 153 | "version": "0.6.0", 154 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", 155 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" 156 | }, 157 | "delayed-stream": { 158 | "version": "1.0.0", 159 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 160 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" 161 | }, 162 | "delegates": { 163 | "version": "1.0.0", 164 | "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", 165 | "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" 166 | }, 167 | "detect-libc": { 168 | "version": "1.0.3", 169 | "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", 170 | "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" 171 | }, 172 | "ecc-jsbn": { 173 | "version": "0.1.2", 174 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", 175 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", 176 | "requires": { 177 | "jsbn": "~0.1.0", 178 | "safer-buffer": "^2.1.0" 179 | } 180 | }, 181 | "extend": { 182 | "version": "3.0.2", 183 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 184 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" 185 | }, 186 | "extsprintf": { 187 | "version": "1.3.0", 188 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 189 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" 190 | }, 191 | "fast-deep-equal": { 192 | "version": "3.1.3", 193 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 194 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 195 | }, 196 | "fast-json-stable-stringify": { 197 | "version": "2.1.0", 198 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 199 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" 200 | }, 201 | "forever-agent": { 202 | "version": "0.6.1", 203 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 204 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" 205 | }, 206 | "form-data": { 207 | "version": "2.3.3", 208 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", 209 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", 210 | "requires": { 211 | "asynckit": "^0.4.0", 212 | "combined-stream": "^1.0.6", 213 | "mime-types": "^2.1.12" 214 | } 215 | }, 216 | "fs-minipass": { 217 | "version": "1.2.7", 218 | "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", 219 | "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", 220 | "requires": { 221 | "minipass": "^2.6.0" 222 | } 223 | }, 224 | "fs.realpath": { 225 | "version": "1.0.0", 226 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 227 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 228 | }, 229 | "fstream": { 230 | "version": "1.0.12", 231 | "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", 232 | "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", 233 | "requires": { 234 | "graceful-fs": "^4.1.2", 235 | "inherits": "~2.0.0", 236 | "mkdirp": ">=0.5 0", 237 | "rimraf": "2" 238 | } 239 | }, 240 | "gauge": { 241 | "version": "2.7.4", 242 | "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", 243 | "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", 244 | "requires": { 245 | "aproba": "^1.0.3", 246 | "console-control-strings": "^1.0.0", 247 | "has-unicode": "^2.0.0", 248 | "object-assign": "^4.1.0", 249 | "signal-exit": "^3.0.0", 250 | "string-width": "^1.0.1", 251 | "strip-ansi": "^3.0.1", 252 | "wide-align": "^1.1.0" 253 | } 254 | }, 255 | "getpass": { 256 | "version": "0.1.7", 257 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 258 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 259 | "requires": { 260 | "assert-plus": "^1.0.0" 261 | } 262 | }, 263 | "glob": { 264 | "version": "7.1.6", 265 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 266 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 267 | "requires": { 268 | "fs.realpath": "^1.0.0", 269 | "inflight": "^1.0.4", 270 | "inherits": "2", 271 | "minimatch": "^3.0.4", 272 | "once": "^1.3.0", 273 | "path-is-absolute": "^1.0.0" 274 | } 275 | }, 276 | "graceful-fs": { 277 | "version": "4.2.4", 278 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", 279 | "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" 280 | }, 281 | "har-schema": { 282 | "version": "2.0.0", 283 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 284 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" 285 | }, 286 | "har-validator": { 287 | "version": "5.1.5", 288 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", 289 | "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", 290 | "requires": { 291 | "ajv": "^6.12.3", 292 | "har-schema": "^2.0.0" 293 | } 294 | }, 295 | "has-unicode": { 296 | "version": "2.0.1", 297 | "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", 298 | "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" 299 | }, 300 | "http-signature": { 301 | "version": "1.2.0", 302 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 303 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 304 | "requires": { 305 | "assert-plus": "^1.0.0", 306 | "jsprim": "^1.2.2", 307 | "sshpk": "^1.7.0" 308 | } 309 | }, 310 | "iconv-lite": { 311 | "version": "0.4.24", 312 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 313 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 314 | "requires": { 315 | "safer-buffer": ">= 2.1.2 < 3" 316 | } 317 | }, 318 | "ignore-walk": { 319 | "version": "3.0.3", 320 | "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", 321 | "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", 322 | "requires": { 323 | "minimatch": "^3.0.4" 324 | } 325 | }, 326 | "inflight": { 327 | "version": "1.0.6", 328 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 329 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 330 | "requires": { 331 | "once": "^1.3.0", 332 | "wrappy": "1" 333 | } 334 | }, 335 | "inherits": { 336 | "version": "2.0.4", 337 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 338 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 339 | }, 340 | "ini": { 341 | "version": "1.3.5", 342 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", 343 | "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" 344 | }, 345 | "is-fullwidth-code-point": { 346 | "version": "1.0.0", 347 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", 348 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", 349 | "requires": { 350 | "number-is-nan": "^1.0.0" 351 | } 352 | }, 353 | "is-typedarray": { 354 | "version": "1.0.0", 355 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 356 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" 357 | }, 358 | "isarray": { 359 | "version": "1.0.0", 360 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 361 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" 362 | }, 363 | "isexe": { 364 | "version": "2.0.0", 365 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 366 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" 367 | }, 368 | "isstream": { 369 | "version": "0.1.2", 370 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 371 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" 372 | }, 373 | "jsbn": { 374 | "version": "0.1.1", 375 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 376 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" 377 | }, 378 | "json-schema": { 379 | "version": "0.2.3", 380 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 381 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" 382 | }, 383 | "json-schema-traverse": { 384 | "version": "0.4.1", 385 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 386 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" 387 | }, 388 | "json-stringify-safe": { 389 | "version": "5.0.1", 390 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 391 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" 392 | }, 393 | "jsprim": { 394 | "version": "1.4.1", 395 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 396 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 397 | "requires": { 398 | "assert-plus": "1.0.0", 399 | "extsprintf": "1.3.0", 400 | "json-schema": "0.2.3", 401 | "verror": "1.10.0" 402 | } 403 | }, 404 | "mime-db": { 405 | "version": "1.44.0", 406 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", 407 | "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" 408 | }, 409 | "mime-types": { 410 | "version": "2.1.27", 411 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", 412 | "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", 413 | "requires": { 414 | "mime-db": "1.44.0" 415 | } 416 | }, 417 | "minimatch": { 418 | "version": "3.0.4", 419 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 420 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 421 | "requires": { 422 | "brace-expansion": "^1.1.7" 423 | } 424 | }, 425 | "minimist": { 426 | "version": "1.2.5", 427 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 428 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" 429 | }, 430 | "minipass": { 431 | "version": "2.9.0", 432 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", 433 | "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", 434 | "requires": { 435 | "safe-buffer": "^5.1.2", 436 | "yallist": "^3.0.0" 437 | } 438 | }, 439 | "minizlib": { 440 | "version": "1.3.3", 441 | "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", 442 | "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", 443 | "requires": { 444 | "minipass": "^2.9.0" 445 | } 446 | }, 447 | "mkdirp": { 448 | "version": "0.5.5", 449 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", 450 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", 451 | "requires": { 452 | "minimist": "^1.2.5" 453 | } 454 | }, 455 | "ms": { 456 | "version": "2.1.2", 457 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 458 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 459 | }, 460 | "needle": { 461 | "version": "2.5.2", 462 | "resolved": "https://registry.npmjs.org/needle/-/needle-2.5.2.tgz", 463 | "integrity": "sha512-LbRIwS9BfkPvNwNHlsA41Q29kL2L/6VaOJ0qisM5lLWsTV3nP15abO5ITL6L81zqFhzjRKDAYjpcBcwM0AVvLQ==", 464 | "requires": { 465 | "debug": "^3.2.6", 466 | "iconv-lite": "^0.4.4", 467 | "sax": "^1.2.4" 468 | } 469 | }, 470 | "node-addon-api": { 471 | "version": "2.0.0", 472 | "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.0.tgz", 473 | "integrity": "sha512-ASCL5U13as7HhOExbT6OlWJJUV/lLzL2voOSP1UVehpRD8FbSrSDjfScK/KwAvVTI5AS6r4VwbOMlIqtvRidnA==" 474 | }, 475 | "node-gyp": { 476 | "version": "3.8.0", 477 | "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", 478 | "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", 479 | "requires": { 480 | "fstream": "^1.0.0", 481 | "glob": "^7.0.3", 482 | "graceful-fs": "^4.1.2", 483 | "mkdirp": "^0.5.0", 484 | "nopt": "2 || 3", 485 | "npmlog": "0 || 1 || 2 || 3 || 4", 486 | "osenv": "0", 487 | "request": "^2.87.0", 488 | "rimraf": "2", 489 | "semver": "~5.3.0", 490 | "tar": "^2.0.0", 491 | "which": "1" 492 | } 493 | }, 494 | "node-pre-gyp": { 495 | "version": "0.11.0", 496 | "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz", 497 | "integrity": "sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==", 498 | "requires": { 499 | "detect-libc": "^1.0.2", 500 | "mkdirp": "^0.5.1", 501 | "needle": "^2.2.1", 502 | "nopt": "^4.0.1", 503 | "npm-packlist": "^1.1.6", 504 | "npmlog": "^4.0.2", 505 | "rc": "^1.2.7", 506 | "rimraf": "^2.6.1", 507 | "semver": "^5.3.0", 508 | "tar": "^4" 509 | }, 510 | "dependencies": { 511 | "nopt": { 512 | "version": "4.0.3", 513 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", 514 | "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", 515 | "requires": { 516 | "abbrev": "1", 517 | "osenv": "^0.1.4" 518 | } 519 | }, 520 | "tar": { 521 | "version": "4.4.13", 522 | "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", 523 | "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", 524 | "requires": { 525 | "chownr": "^1.1.1", 526 | "fs-minipass": "^1.2.5", 527 | "minipass": "^2.8.6", 528 | "minizlib": "^1.2.1", 529 | "mkdirp": "^0.5.0", 530 | "safe-buffer": "^5.1.2", 531 | "yallist": "^3.0.3" 532 | } 533 | } 534 | } 535 | }, 536 | "nopt": { 537 | "version": "3.0.6", 538 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", 539 | "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", 540 | "requires": { 541 | "abbrev": "1" 542 | } 543 | }, 544 | "npm-bundled": { 545 | "version": "1.1.1", 546 | "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", 547 | "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", 548 | "requires": { 549 | "npm-normalize-package-bin": "^1.0.1" 550 | } 551 | }, 552 | "npm-normalize-package-bin": { 553 | "version": "1.0.1", 554 | "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", 555 | "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" 556 | }, 557 | "npm-packlist": { 558 | "version": "1.4.8", 559 | "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", 560 | "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", 561 | "requires": { 562 | "ignore-walk": "^3.0.1", 563 | "npm-bundled": "^1.0.1", 564 | "npm-normalize-package-bin": "^1.0.1" 565 | } 566 | }, 567 | "npmlog": { 568 | "version": "4.1.2", 569 | "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", 570 | "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", 571 | "requires": { 572 | "are-we-there-yet": "~1.1.2", 573 | "console-control-strings": "~1.1.0", 574 | "gauge": "~2.7.3", 575 | "set-blocking": "~2.0.0" 576 | } 577 | }, 578 | "number-is-nan": { 579 | "version": "1.0.1", 580 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 581 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" 582 | }, 583 | "oauth-sign": { 584 | "version": "0.9.0", 585 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", 586 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" 587 | }, 588 | "object-assign": { 589 | "version": "4.1.1", 590 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 591 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 592 | }, 593 | "once": { 594 | "version": "1.4.0", 595 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 596 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 597 | "requires": { 598 | "wrappy": "1" 599 | } 600 | }, 601 | "os-homedir": { 602 | "version": "1.0.2", 603 | "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", 604 | "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" 605 | }, 606 | "os-tmpdir": { 607 | "version": "1.0.2", 608 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 609 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" 610 | }, 611 | "osenv": { 612 | "version": "0.1.5", 613 | "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", 614 | "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", 615 | "requires": { 616 | "os-homedir": "^1.0.0", 617 | "os-tmpdir": "^1.0.0" 618 | } 619 | }, 620 | "path-is-absolute": { 621 | "version": "1.0.1", 622 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 623 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" 624 | }, 625 | "performance-now": { 626 | "version": "2.1.0", 627 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 628 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" 629 | }, 630 | "process-nextick-args": { 631 | "version": "2.0.1", 632 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 633 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" 634 | }, 635 | "psl": { 636 | "version": "1.8.0", 637 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", 638 | "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" 639 | }, 640 | "punycode": { 641 | "version": "2.1.1", 642 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 643 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" 644 | }, 645 | "qs": { 646 | "version": "6.5.2", 647 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 648 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" 649 | }, 650 | "rc": { 651 | "version": "1.2.8", 652 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", 653 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", 654 | "requires": { 655 | "deep-extend": "^0.6.0", 656 | "ini": "~1.3.0", 657 | "minimist": "^1.2.0", 658 | "strip-json-comments": "~2.0.1" 659 | } 660 | }, 661 | "readable-stream": { 662 | "version": "2.3.7", 663 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 664 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 665 | "requires": { 666 | "core-util-is": "~1.0.0", 667 | "inherits": "~2.0.3", 668 | "isarray": "~1.0.0", 669 | "process-nextick-args": "~2.0.0", 670 | "safe-buffer": "~5.1.1", 671 | "string_decoder": "~1.1.1", 672 | "util-deprecate": "~1.0.1" 673 | } 674 | }, 675 | "request": { 676 | "version": "2.88.2", 677 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", 678 | "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", 679 | "requires": { 680 | "aws-sign2": "~0.7.0", 681 | "aws4": "^1.8.0", 682 | "caseless": "~0.12.0", 683 | "combined-stream": "~1.0.6", 684 | "extend": "~3.0.2", 685 | "forever-agent": "~0.6.1", 686 | "form-data": "~2.3.2", 687 | "har-validator": "~5.1.3", 688 | "http-signature": "~1.2.0", 689 | "is-typedarray": "~1.0.0", 690 | "isstream": "~0.1.2", 691 | "json-stringify-safe": "~5.0.1", 692 | "mime-types": "~2.1.19", 693 | "oauth-sign": "~0.9.0", 694 | "performance-now": "^2.1.0", 695 | "qs": "~6.5.2", 696 | "safe-buffer": "^5.1.2", 697 | "tough-cookie": "~2.5.0", 698 | "tunnel-agent": "^0.6.0", 699 | "uuid": "^3.3.2" 700 | } 701 | }, 702 | "rimraf": { 703 | "version": "2.7.1", 704 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", 705 | "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", 706 | "requires": { 707 | "glob": "^7.1.3" 708 | } 709 | }, 710 | "safe-buffer": { 711 | "version": "5.1.2", 712 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 713 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 714 | }, 715 | "safer-buffer": { 716 | "version": "2.1.2", 717 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 718 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 719 | }, 720 | "sax": { 721 | "version": "1.2.4", 722 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", 723 | "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" 724 | }, 725 | "semver": { 726 | "version": "5.3.0", 727 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", 728 | "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=" 729 | }, 730 | "set-blocking": { 731 | "version": "2.0.0", 732 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 733 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" 734 | }, 735 | "signal-exit": { 736 | "version": "3.0.3", 737 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", 738 | "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" 739 | }, 740 | "sqlite3": { 741 | "version": "5.0.0", 742 | "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.0.0.tgz", 743 | "integrity": "sha512-rjvqHFUaSGnzxDy2AHCwhHy6Zp6MNJzCPGYju4kD8yi6bze4d1/zMTg6C7JI49b7/EM7jKMTvyfN/4ylBKdwfw==", 744 | "requires": { 745 | "node-addon-api": "2.0.0", 746 | "node-gyp": "3.x", 747 | "node-pre-gyp": "^0.11.0" 748 | } 749 | }, 750 | "sshpk": { 751 | "version": "1.16.1", 752 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", 753 | "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", 754 | "requires": { 755 | "asn1": "~0.2.3", 756 | "assert-plus": "^1.0.0", 757 | "bcrypt-pbkdf": "^1.0.0", 758 | "dashdash": "^1.12.0", 759 | "ecc-jsbn": "~0.1.1", 760 | "getpass": "^0.1.1", 761 | "jsbn": "~0.1.0", 762 | "safer-buffer": "^2.0.2", 763 | "tweetnacl": "~0.14.0" 764 | } 765 | }, 766 | "string-width": { 767 | "version": "1.0.2", 768 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", 769 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", 770 | "requires": { 771 | "code-point-at": "^1.0.0", 772 | "is-fullwidth-code-point": "^1.0.0", 773 | "strip-ansi": "^3.0.0" 774 | } 775 | }, 776 | "string_decoder": { 777 | "version": "1.1.1", 778 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 779 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 780 | "requires": { 781 | "safe-buffer": "~5.1.0" 782 | } 783 | }, 784 | "strip-ansi": { 785 | "version": "3.0.1", 786 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 787 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 788 | "requires": { 789 | "ansi-regex": "^2.0.0" 790 | } 791 | }, 792 | "strip-json-comments": { 793 | "version": "2.0.1", 794 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 795 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" 796 | }, 797 | "tar": { 798 | "version": "2.2.2", 799 | "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", 800 | "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", 801 | "requires": { 802 | "block-stream": "*", 803 | "fstream": "^1.0.12", 804 | "inherits": "2" 805 | } 806 | }, 807 | "tough-cookie": { 808 | "version": "2.5.0", 809 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", 810 | "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", 811 | "requires": { 812 | "psl": "^1.1.28", 813 | "punycode": "^2.1.1" 814 | } 815 | }, 816 | "tunnel-agent": { 817 | "version": "0.6.0", 818 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 819 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 820 | "requires": { 821 | "safe-buffer": "^5.0.1" 822 | } 823 | }, 824 | "tweetnacl": { 825 | "version": "0.14.5", 826 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 827 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" 828 | }, 829 | "uri-js": { 830 | "version": "4.4.0", 831 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", 832 | "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", 833 | "requires": { 834 | "punycode": "^2.1.0" 835 | } 836 | }, 837 | "util-deprecate": { 838 | "version": "1.0.2", 839 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 840 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 841 | }, 842 | "uuid": { 843 | "version": "3.4.0", 844 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", 845 | "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" 846 | }, 847 | "verror": { 848 | "version": "1.10.0", 849 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 850 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 851 | "requires": { 852 | "assert-plus": "^1.0.0", 853 | "core-util-is": "1.0.2", 854 | "extsprintf": "^1.2.0" 855 | } 856 | }, 857 | "which": { 858 | "version": "1.3.1", 859 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 860 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 861 | "requires": { 862 | "isexe": "^2.0.0" 863 | } 864 | }, 865 | "wide-align": { 866 | "version": "1.1.3", 867 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", 868 | "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", 869 | "requires": { 870 | "string-width": "^1.0.2 || 2" 871 | } 872 | }, 873 | "wrappy": { 874 | "version": "1.0.2", 875 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 876 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 877 | }, 878 | "yallist": { 879 | "version": "3.1.1", 880 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", 881 | "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" 882 | } 883 | } 884 | } 885 | -------------------------------------------------------------------------------- /ulfric/preview-mode.scss: -------------------------------------------------------------------------------- 1 | .markdown-preview-view { 2 | font-family: "Avenir Next"; 3 | font-size: 17px; 4 | padding-left: 48px; 5 | padding-right: 48px; 6 | 7 | .cm-header, 8 | h1, 9 | h2, 10 | h3, 11 | h4, 12 | h5, 13 | h6 { 14 | font-family: "Georgia"; 15 | margin: 24px 0; 16 | } 17 | 18 | hr { 19 | margin: 32px 0; 20 | } 21 | } 22 | 23 | .markdown-preview-section { 24 | pre code, 25 | code { 26 | background-color: var(--pre-code); 27 | } 28 | 29 | pre code { 30 | color: var(--code-block); 31 | display: block; 32 | line-height: 1.4em; 33 | padding: 4px; 34 | } 35 | 36 | code { 37 | color: var(--inline-code); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /ulfric/scrollbar.scss: -------------------------------------------------------------------------------- 1 | ::-webkit-scrollbar { 2 | width: 16px; 3 | } 4 | 5 | ::-webkit-scrollbar-track { 6 | background-color: var(--background-primary); 7 | } 8 | 9 | ::-webkit-scrollbar-thumb { 10 | border: solid 4px var(--background-primary); 11 | min-height: 40px; 12 | } 13 | -------------------------------------------------------------------------------- /ulfric/search.scss: -------------------------------------------------------------------------------- 1 | $PANEL_SIDE_MARGINS: 8px; 2 | 3 | input[type="text"], 4 | input[type="email"], 5 | input[type="password"], 6 | input[type="number"] { 7 | background-color: var(--dark1); 8 | border-radius: 20px; 9 | border: none; 10 | height: 32px; 11 | min-height: 32px; 12 | padding: 8px 16px; 13 | transition: background-color 0.2s ease-in-out; 14 | } 15 | 16 | .search-empty-state { 17 | color: var(--text-faint); 18 | } 19 | 20 | .search-result { 21 | background-color: var(--dark0); 22 | border-radius: 4px; 23 | margin-bottom: 8px; 24 | padding: 4px; 25 | } 26 | 27 | .search-result-file-title { 28 | color: var(--text-muted); 29 | padding: 4px 8px 4px 24px; 30 | 31 | span:last-child { 32 | font-weight: 600; 33 | margin-left: 20px; 34 | } 35 | } 36 | 37 | .search-result-file-match { 38 | border-radius: 4px; 39 | padding: 4px 8px; 40 | } 41 | 42 | .search-result-file-matched-text { 43 | background: var(--frost3); 44 | border-radius: 4px; 45 | color: var(--dark0); 46 | font-weight: 600; 47 | padding: 2px; 48 | font-size: 92%; 49 | } 50 | 51 | .search-result-container { 52 | margin: 0; 53 | padding: 4px 12px; 54 | } 55 | 56 | .nav-action-button { 57 | border-radius: 4px; 58 | height: 24px; 59 | margin: 2px 4px; 60 | padding: 2px 4px; 61 | 62 | &:hover, 63 | &.is-active { 64 | color: var(--dark0); 65 | background: var(--text-accent); 66 | } 67 | } 68 | 69 | .search-info-container { 70 | margin: 4px 0; 71 | } 72 | 73 | .workspace-leaf-content .search-input { 74 | border-radius: 20px; 75 | border: none; 76 | font-size: var(--font-small); 77 | margin: 8px 12px; 78 | width: calc(100% - 24px); 79 | 80 | &:hover { 81 | background: var(--dark2); 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /ulfric/settings.scss: -------------------------------------------------------------------------------- 1 | button.mod-cta { 2 | background-color: var(--frost3); 3 | font-weight: 600; 4 | 5 | &:hover { 6 | background-color: var(--interactive-before); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /ulfric/status-bar.scss: -------------------------------------------------------------------------------- 1 | .status-bar { 2 | line-height: 32px; 3 | max-height: 32px; 4 | } 5 | -------------------------------------------------------------------------------- /ulfric/table.scss: -------------------------------------------------------------------------------- 1 | thead { 2 | border-bottom: 2px solid var(--background-modifier-border); 3 | } 4 | 5 | .calendarview__day--today { 6 | background: var(--purple); 7 | } 8 | 9 | .calendarview__day--active { 10 | background: var(--red) !important; 11 | z-index: 1; 12 | position: relative; 13 | } 14 | 15 | .calendarview__container { 16 | overflow-y: scroll; 17 | padding: 0 16px; 18 | } 19 | 20 | .calendarview__table { 21 | border: solid 1px var(--dark0); 22 | border-collapse: collapse; 23 | width: 100%; 24 | 25 | th { 26 | background-color: var(--dark0); 27 | padding: 8px; 28 | } 29 | 30 | td { 31 | cursor: pointer; 32 | border: solid 1px var(--dark0); 33 | font-size: 0.8em; 34 | padding: 8px; 35 | 36 | &:empty { 37 | background-color: var(--dark2); 38 | } 39 | 40 | &:hover { 41 | background-color: var(--dark0); 42 | } 43 | } 44 | 45 | .dot-container { 46 | line-height: 4px; 47 | zoom: 0.6; 48 | } 49 | 50 | .calendar-dot { 51 | border-radius: 100%; 52 | background: var(--frost2); 53 | width: 6px; 54 | height: 6px; 55 | display: inline-block; 56 | margin-right: 4px; 57 | 58 | &:last-of-type { 59 | margin-right: 0; 60 | } 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /ulfric/typography.scss: -------------------------------------------------------------------------------- 1 | $fontsize-heading1: 34px; 2 | $fontsize-heading2: 26px; 3 | $fontsize-heading3: 22px; 4 | $fontsize-heading4: 20px; 5 | $fontsize-heading5: 18px; 6 | $fontsize-heading6: 18px; 7 | 8 | h1, 9 | h2, 10 | h3, 11 | h4, 12 | h5, 13 | h6 { 14 | font-weight: 500; 15 | } 16 | 17 | .cm-formatting { 18 | margin-top: 4px; 19 | } 20 | 21 | strong, 22 | .cm-s-obsidian .cm-strong { 23 | font-weight: 700; 24 | } 25 | 26 | th, 27 | .cm-s-obsidian .cm-header, 28 | .markdown-embed-title { 29 | font-weight: 500; 30 | } 31 | 32 | .cm-header-1, 33 | .markdown-preview-section h1 { 34 | font-size: $fontsize-heading1; 35 | color: var(--text-title-h1); 36 | 37 | &.cm-formatting { 38 | font-size: $fontsize-heading1 - 4px; 39 | } 40 | } 41 | 42 | .cm-header-2, 43 | .markdown-preview-section h2 { 44 | font-size: $fontsize-heading2; 45 | color: var(--text-title-h2); 46 | 47 | &.cm-formatting { 48 | font-size: $fontsize-heading2 - 4px; 49 | } 50 | } 51 | 52 | .cm-header-3, 53 | .markdown-preview-section h3 { 54 | font-size: $fontsize-heading3; 55 | color: var(--text-title-h3); 56 | &.cm-formatting { 57 | font-size: $fontsize-heading3 - 4px; 58 | } 59 | } 60 | 61 | .cm-header-4, 62 | .markdown-preview-section h4 { 63 | font-size: $fontsize-heading4; 64 | color: var(--text-title-h4); 65 | &.cm-formatting { 66 | font-size: $fontsize-heading4 - 6px; 67 | } 68 | } 69 | 70 | .cm-header-5, 71 | .cm-header-6, 72 | .markdown-preview-section h5, 73 | .markdown-preview-section h6 { 74 | font-size: $fontsize-heading5; 75 | color: var(--text-title-h5); 76 | &.cm-formatting { 77 | font-size: $fontsize-heading5 - 8px; 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /ulfric/ui-frame.scss: -------------------------------------------------------------------------------- 1 | .workspace-leaf-content .view-content { 2 | padding: 8px 0; 3 | } 4 | 5 | .workspace-leaf-resize-handle { 6 | background-color: var(--dark2); 7 | } 8 | 9 | .workspace-leaf.mod-active .view-header { 10 | border-bottom: none; 11 | } 12 | 13 | .view-actions a { 14 | color: var(--text-normal); 15 | 16 | &:hover { 17 | color: var(--text-a); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /ulfric/variables.scss: -------------------------------------------------------------------------------- 1 | :root { 2 | --dark0: #2e3440; 3 | --dark1: #3b4252; 4 | --dark2: #434c5e; 5 | --dark3: #4c566a; 6 | 7 | --light0: #d8dee9; 8 | --light1: #e5e9f0; 9 | --light2: #eceff4; 10 | 11 | --frost0: #8fbcbb; 12 | --frost1: #88c0d0; 13 | --frost2: #81a1c1; 14 | --frost3: #5e81ac; 15 | 16 | --red: #bf616a; 17 | --orange: #d08770; 18 | --yellow: #ebcb8b; 19 | --green: #a3be8c; 20 | --purple: rgb(72, 54, 153); 21 | --purpleLight: #b48ead; 22 | } 23 | 24 | .theme-dark, 25 | .theme-light { 26 | --font-monospace: "Fira Code"; 27 | --background-primary: var(--dark0); 28 | --background-primary-alt: var(--dark0); 29 | --background-secondary: var(--dark1); 30 | --background-secondary-alt: var(--dark2); 31 | --text-normal: var(--light2); 32 | --text-faint: rgba(255, 255, 255, 0.2); 33 | --text-muted: var(--light0); 34 | --text-title-h1: var(--purpleLight); 35 | --text-title-h2: var(--orange); 36 | --text-title-h3: var(--yellow); 37 | --text-title-h4: var(--green); 38 | --text-title-h5: var(--red); 39 | --text-link: var(--frost0); 40 | --text-a: var(--frost3); 41 | --text-a-hover: var(--frost2); 42 | --text-mark: var(--yellow); 43 | --pre-code: var(--dark1); 44 | --text-highlight-bg: var(--dark3); 45 | --interactive-accent: var(--purple); 46 | --interactive-before: var(--dark3); 47 | --interactive-normal: var(--dark3); 48 | --background-modifier-border: var(--dark1); 49 | --background-modifier-form-field: var(--dark0); 50 | --background-modifier-form-field-highlighted: var(--dark0); 51 | --text-accent: var(--purpleLight); 52 | --interactive-accent-rgb: var(--orange); 53 | --inline-code: var(--frost1); 54 | --code-block: var(--frost1); 55 | --vim-cursor: var(--orange); 56 | --text-selection: rgba(30, 150, 220, 0.2); 57 | --scrollbar-bg: var(--dark0); 58 | --scrollbar-thumb-bg: var(--dark1); 59 | } 60 | -------------------------------------------------------------------------------- /ulfric/vim/cursor.scss: -------------------------------------------------------------------------------- 1 | .CodeMirror-cursor { 2 | background-color: var(--vim-cursor); 3 | opacity: 60%; 4 | } 5 | -------------------------------------------------------------------------------- /ulfric/vim/highlight-line.scss: -------------------------------------------------------------------------------- 1 | /*an active line highlight in vim normal mode */ 2 | .mod-active .cm-fat-cursor .CodeMirror-activeline .CodeMirror-linebackground { 3 | background-color: rgba(89, 75, 95, 0.3) !important; 4 | } 5 | -------------------------------------------------------------------------------- /ulfric/workspace.scss: -------------------------------------------------------------------------------- 1 | .nav-header { 2 | padding: 0; 3 | } 4 | 5 | .workspace > .workspace-split:not(.mod-root) .workspace-leaf-content { 6 | height: calc(100% - 6px); 7 | } 8 | 9 | .workspace-split.mod-horizontal > * > .workspace-leaf-resize-handle { 10 | height: 0px; 11 | background: transparent; 12 | border-bottom: 1px solid var(--background-modifier-border); 13 | 14 | &:hover { 15 | border-color: var(--dark2); 16 | } 17 | } 18 | .workspace-split.mod-right-split > .workspace-leaf-resize-handle { 19 | background: transparent; 20 | border-left: 1px solid var(--background-modifier-border); 21 | width: 0px !important; 22 | 23 | &:hover { 24 | border-color: var(--dark2); 25 | } 26 | } 27 | .workspace-split.mod-vertical > * > .workspace-leaf-resize-handle, 28 | .workspace-split.mod-left-split > .workspace-leaf-resize-handle { 29 | background: transparent; 30 | border-right: 1px solid var(--background-modifier-border); 31 | width: 0px !important; 32 | 33 | &:hover { 34 | border-color: var(--dark2); 35 | } 36 | } 37 | .workspace-split.mod-right-split > .workspace-leaf-resize-handle:active, 38 | .workspace-split.mod-horizontal > * > .workspace-leaf-resize-handle:active, 39 | .workspace-split.mod-vertical > * > .workspace-leaf-resize-handle:active, 40 | .workspace-split.mod-left-split > .workspace-leaf-resize-handle:active { 41 | border-color: var(--purple); 42 | } 43 | 44 | .workspace-tab-container-before, 45 | .workspace-tab-container-after { 46 | width: 0; 47 | } 48 | .workspace-leaf { 49 | border-left: 0px; 50 | } 51 | .mod-horizontal .workspace-leaf { 52 | border-bottom: 0px; 53 | background-color: transparent; 54 | } 55 | 56 | .workspace-tab-container-inner { 57 | background: transparent; 58 | border-bottom: 1px solid var(--background-modifier-border); 59 | border-radius: 0; 60 | width: 100%; 61 | max-width: 100%; 62 | margin: 0 auto; 63 | padding-left: 5px; 64 | } 65 | .workspace-tab-header.is-before-active .workspace-tab-header-inner, 66 | .workspace-tab-header.is-active, 67 | .workspace-tab-header.is-after-active, 68 | .workspace-tab-header.is-after-active .workspace-tab-header-inner, 69 | .workspace-tab-header.is-before-active, 70 | .workspace-tab-header.is-after-active { 71 | background: transparent; 72 | } 73 | .workspace .workspace-tabs { 74 | margin-left: 0; 75 | padding: 0; 76 | } 77 | 78 | .workspace-tab-header-container { 79 | border: 0 !important; 80 | height: 36px; 81 | background-color: transparent; 82 | } 83 | --------------------------------------------------------------------------------