├── .gitignore ├── LICENSE ├── README.md ├── build ├── clean.js ├── copy-static-files.js ├── deploy-clean.js └── deploy.js ├── demo.gif ├── manifest.json ├── package.json ├── rollup.config.js ├── src ├── LimelightPlugin.ts ├── data │ ├── DataSchema.ts │ ├── LimelightData.ts │ └── defaultData.ts ├── main.ts ├── settings │ ├── LimelightSettingTab.ts │ └── intensitySetting.ts └── styles.css ├── tsconfig.json ├── versions.json └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | dist/ 3 | deployConfig.json -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Scott Mikula 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Obsidian Limelight 2 | 3 | This is a plugin for [Obsidian](https://obsidian.md) that spotlights your active pane to make it more obvious. 4 | 5 | ## Demo 6 | 7 | ![Demo](demo.gif) 8 | 9 | 10 | ## Installation 11 | 12 | > This plugin is brand new and hasn't been accepted as a community plugin yet. If you want to try it out, you can install it manually with the below steps (based on [this guide](https://forum.obsidian.md/t/plugins-mini-faq/7737)). Once it is a community plugin this section will be updated with the normal installation steps. 13 | 14 | 1. Find the latest release on [this page](https://github.com/smikula/obsidian-limelight/releases). 15 | 2. Download `obsidian-limelight.zip` from that release. 16 | 3. In your vault, extract that zip file into `.obsidian/plugins/`. (You may need to create the `plugins` directory if this is your first plugin.) 17 | 4. In Obsidian, go to Settings > Community plugins and enable "Limelight". (You may need to disable safe mode first.) 18 | 19 | 20 | ## Contributing 21 | 22 | If you run into problems, feel free to open an issue in this repository. In particular, if the plugin doesn't play well with some other plugin or theme, please let me know! Issues or pull requests are also welcome if you have ideas for improvements. 23 | -------------------------------------------------------------------------------- /build/clean.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | fs.rmdirSync('./dist', { recursive: true }); 3 | -------------------------------------------------------------------------------- /build/copy-static-files.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs'); 2 | fs.copyFileSync('./manifest.json', './dist/manifest.json'); 3 | fs.copyFileSync('./src/styles.css', './dist/styles.css'); 4 | -------------------------------------------------------------------------------- /build/deploy-clean.js: -------------------------------------------------------------------------------- 1 | const fse = require('fs-extra'); 2 | const { deployDir } = require('../deployConfig.json'); 3 | fse.removeSync(deployDir); 4 | -------------------------------------------------------------------------------- /build/deploy.js: -------------------------------------------------------------------------------- 1 | const fse = require('fs-extra'); 2 | const { deployDir } = require('../deployConfig.json'); 3 | fse.copySync('./dist', deployDir); 4 | -------------------------------------------------------------------------------- /demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/smikula/obsidian-limelight/98712eb36db1b077d397500c094623877e30255d/demo.gif -------------------------------------------------------------------------------- /manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "obsidian-limelight", 3 | "name": "Limelight", 4 | "version": "1.1.0", 5 | "minAppVersion": "0.9.12", 6 | "description": "Put a spotlight on your active pane", 7 | "author": "Scott Mikula", 8 | "authorUrl": "https://github.com/smikula/obsidian-limelight", 9 | "isDesktopOnly": false 10 | } 11 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "obsidian-limelight", 3 | "version": "1.1.0", 4 | "description": "Put a spotlight on your active pane", 5 | "author": "Scott Mikula ", 6 | "main": "main.js", 7 | "scripts": { 8 | "clean": "node ./build/clean.js", 9 | "dev": "rollup --config rollup.config.js && node ./build/copy-static-files.js", 10 | "build": "rollup --config rollup.config.js --environment BUILD:production && node ./build/copy-static-files.js", 11 | "deploy": "node ./build/deploy.js", 12 | "dev-deploy": "yarn dev && yarn deploy", 13 | "build-deploy": "yarn build && yarn deploy", 14 | "deploy-clean": "node ./build/deploy-clean.js" 15 | }, 16 | "devDependencies": { 17 | "@rollup/plugin-commonjs": "^18.0.0", 18 | "@rollup/plugin-node-resolve": "^11.2.1", 19 | "@rollup/plugin-typescript": "^8.2.1", 20 | "@types/node": "^14.14.37", 21 | "fs-extra": "^9.1.0", 22 | "obsidian": "^0.12.0", 23 | "rollup": "^2.32.1", 24 | "tslib": "^2.2.0", 25 | "typescript": "^4.2.4" 26 | }, 27 | "license": "MIT" 28 | } 29 | -------------------------------------------------------------------------------- /rollup.config.js: -------------------------------------------------------------------------------- 1 | import typescript from '@rollup/plugin-typescript'; 2 | import { nodeResolve } from '@rollup/plugin-node-resolve'; 3 | import commonjs from '@rollup/plugin-commonjs'; 4 | 5 | const isProd = process.env.BUILD === 'production'; 6 | 7 | const banner = `/* 8 | THIS IS A GENERATED/BUNDLED FILE BY ROLLUP 9 | if you want to view the source visit the plugins github repository 10 | */ 11 | `; 12 | 13 | export default { 14 | input: 'src/main.ts', 15 | output: { 16 | dir: './dist', 17 | sourcemap: 'inline', 18 | sourcemapExcludeSources: isProd, 19 | format: 'cjs', 20 | exports: 'default', 21 | banner, 22 | }, 23 | external: ['obsidian'], 24 | plugins: [typescript(), nodeResolve({ browser: true }), commonjs()], 25 | }; 26 | -------------------------------------------------------------------------------- /src/LimelightPlugin.ts: -------------------------------------------------------------------------------- 1 | import { Plugin } from 'obsidian'; 2 | import { LimelightData } from './data/LimelightData'; 3 | import { initializeIntensity } from './settings/intensitySetting'; 4 | import { LimelightSettingTab } from './settings/LimelightSettingTab'; 5 | 6 | export class LimelightPlugin extends Plugin { 7 | private data: LimelightData | undefined; 8 | 9 | getData() { 10 | if (!this.data) { 11 | throw new Error('Plugin data has not been initialized yet.'); 12 | } 13 | 14 | return this.data; 15 | } 16 | 17 | async onload() { 18 | this.data = new LimelightData(this); 19 | await this.data.initialize(); 20 | this.addSettingTab(new LimelightSettingTab(this.app, this)); 21 | initializeIntensity(this.data); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/data/DataSchema.ts: -------------------------------------------------------------------------------- 1 | export interface DataSchema { 2 | intensity: number; 3 | } 4 | 5 | export type DataSchemaKey = keyof DataSchema; 6 | -------------------------------------------------------------------------------- /src/data/LimelightData.ts: -------------------------------------------------------------------------------- 1 | import { Plugin } from 'obsidian'; 2 | import { DEFAULT_DATA } from './defaultData'; 3 | import { DataSchema, DataSchemaKey } from './DataSchema'; 4 | 5 | export class LimelightData { 6 | private data: DataSchema | undefined; 7 | 8 | constructor(private plugin: Plugin) {} 9 | 10 | initialize(): Promise { 11 | return this.plugin.loadData().then((rawData) => { 12 | this.data = Object.assign({}, DEFAULT_DATA, rawData); 13 | }); 14 | } 15 | 16 | getField(key: TKey): DataSchema[TKey] { 17 | this.validateInitialized(); 18 | return this.data![key]; 19 | } 20 | 21 | setField(key: TKey, value: DataSchema[TKey]): Promise { 22 | this.validateInitialized(); 23 | this.data![key] = value; 24 | return this.plugin.saveData(this.data); 25 | } 26 | 27 | validateInitialized() { 28 | if (!this.data) { 29 | throw new Error('Plugin data is not initialized yet.'); 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/data/defaultData.ts: -------------------------------------------------------------------------------- 1 | import { DataSchema } from './DataSchema'; 2 | 3 | export const DEFAULT_DATA: DataSchema = { 4 | intensity: 40, 5 | }; 6 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | export { LimelightPlugin as default } from './LimelightPlugin'; 2 | -------------------------------------------------------------------------------- /src/settings/LimelightSettingTab.ts: -------------------------------------------------------------------------------- 1 | import { App, PluginSettingTab } from 'obsidian'; 2 | import { LimelightData } from 'src/data/LimelightData'; 3 | import { LimelightPlugin } from 'src/LimelightPlugin'; 4 | import { createIntensitySetting } from './intensitySetting'; 5 | 6 | export class LimelightSettingTab extends PluginSettingTab { 7 | private data: LimelightData; 8 | 9 | constructor(app: App, plugin: LimelightPlugin) { 10 | super(app, plugin); 11 | this.data = plugin.getData(); 12 | } 13 | 14 | display() { 15 | const { containerEl } = this; 16 | containerEl.empty(); 17 | createIntensitySetting(containerEl, this.data); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/settings/intensitySetting.ts: -------------------------------------------------------------------------------- 1 | import { Setting } from 'obsidian'; 2 | import { LimelightData } from 'src/data/LimelightData'; 3 | 4 | export function createIntensitySetting(container: HTMLElement, data: LimelightData) { 5 | new Setting(container) 6 | .setName('Spotlight intensity') 7 | .setDesc('Controls how dim the inactive panes are relative to the spotlighted pane.') 8 | .addSlider((slider) => { 9 | slider 10 | .setValue(data.getField('intensity')) // populate initial value from settings 11 | .onChange((value) => { 12 | // Write new value to settings 13 | data.setField('intensity', value); 14 | 15 | // Apply the new value to the UI 16 | applyIntensity(value); 17 | }); 18 | }); 19 | } 20 | 21 | export function initializeIntensity(data: LimelightData) { 22 | // Apply the initial value to the UI 23 | applyIntensity(data.getField('intensity')); 24 | } 25 | 26 | function applyIntensity(intensity: number) { 27 | // Opacity ranges from 0.1 - 0.9, with MORE intense having a LOWER opacity 28 | // value (i.e. the other panes appear dimmer because the spotlight is so 29 | // bright). 30 | const opacity = 0.9 - 0.8 * (intensity / 100); 31 | document.body.style.setProperty('--limelight-opacity', opacity.toString()); 32 | } 33 | -------------------------------------------------------------------------------- /src/styles.css: -------------------------------------------------------------------------------- 1 | /* Give the parent element a background color so overlapping panes don't show through */ 2 | .workspace-leaf { 3 | background-color: inherit; 4 | } 5 | 6 | /* Dim non-active markdown panes */ 7 | .workspace-leaf:not(.mod-active) .workspace-leaf-content[data-type='markdown'] { 8 | opacity: var(--limelight-opacity, 0.75); 9 | } 10 | 11 | /* Apply opacity transition to all panes */ 12 | .workspace-leaf .workspace-leaf-content[data-type='markdown'] { 13 | transition: opacity 0.25s ease-out; 14 | } 15 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "baseUrl": ".", 4 | "inlineSourceMap": true, 5 | "inlineSources": true, 6 | "module": "ESNext", 7 | "target": "es6", 8 | "allowJs": true, 9 | "strict": true, 10 | "noImplicitAny": true, 11 | "moduleResolution": "node", 12 | "importHelpers": true, 13 | "lib": [ 14 | "dom", 15 | "es5", 16 | "scripthost", 17 | "es2015" 18 | ] 19 | }, 20 | "include": [ 21 | "**/*.ts" 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /versions.json: -------------------------------------------------------------------------------- 1 | { 2 | "1.0.0": "0.9.12", 3 | "1.1.0": "0.9.12" 4 | } 5 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@rollup/plugin-commonjs@^18.0.0": 6 | version "18.1.0" 7 | resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-18.1.0.tgz#5a760d757af168a50727c0ae080251fbfcc5eb02" 8 | integrity sha512-h3e6T9rUxVMAQswpDIobfUHn/doMzM9sgkMrsMWCFLmB84PSoC8mV8tOloAJjSRwdqhXBqstlX2BwBpHJvbhxg== 9 | dependencies: 10 | "@rollup/pluginutils" "^3.1.0" 11 | commondir "^1.0.1" 12 | estree-walker "^2.0.1" 13 | glob "^7.1.6" 14 | is-reference "^1.2.1" 15 | magic-string "^0.25.7" 16 | resolve "^1.17.0" 17 | 18 | "@rollup/plugin-node-resolve@^11.2.1": 19 | version "11.2.1" 20 | resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz#82aa59397a29cd4e13248b106e6a4a1880362a60" 21 | integrity sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg== 22 | dependencies: 23 | "@rollup/pluginutils" "^3.1.0" 24 | "@types/resolve" "1.17.1" 25 | builtin-modules "^3.1.0" 26 | deepmerge "^4.2.2" 27 | is-module "^1.0.0" 28 | resolve "^1.19.0" 29 | 30 | "@rollup/plugin-typescript@^8.2.1": 31 | version "8.2.5" 32 | resolved "https://registry.yarnpkg.com/@rollup/plugin-typescript/-/plugin-typescript-8.2.5.tgz#e0319761b2b5105615e5a0c371ae05bc2984b7de" 33 | integrity sha512-QL/LvDol/PAGB2O0S7/+q2HpSUNodpw7z6nGn9BfoVCPOZ0r4EALrojFU29Bkoi2Hr2jgTocTejJ5GGWZfOxbQ== 34 | dependencies: 35 | "@rollup/pluginutils" "^3.1.0" 36 | resolve "^1.17.0" 37 | 38 | "@rollup/pluginutils@^3.1.0": 39 | version "3.1.0" 40 | resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" 41 | integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== 42 | dependencies: 43 | "@types/estree" "0.0.39" 44 | estree-walker "^1.0.1" 45 | picomatch "^2.2.2" 46 | 47 | "@types/codemirror@0.0.108": 48 | version "0.0.108" 49 | resolved "https://registry.yarnpkg.com/@types/codemirror/-/codemirror-0.0.108.tgz#e640422b666bf49251b384c390cdeb2362585bde" 50 | integrity sha512-3FGFcus0P7C2UOGCNUVENqObEb4SFk+S8Dnxq7K6aIsLVs/vDtlangl3PEO0ykaKXyK56swVF6Nho7VsA44uhw== 51 | dependencies: 52 | "@types/tern" "*" 53 | 54 | "@types/estree@*": 55 | version "0.0.50" 56 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.50.tgz#1e0caa9364d3fccd2931c3ed96fdbeaa5d4cca83" 57 | integrity sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw== 58 | 59 | "@types/estree@0.0.39": 60 | version "0.0.39" 61 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" 62 | integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== 63 | 64 | "@types/node@*": 65 | version "16.10.4" 66 | resolved "https://registry.yarnpkg.com/@types/node/-/node-16.10.4.tgz#592f12b0b5f357533ddc3310b0176d42ea3e45d1" 67 | integrity sha512-EITwVTX5B4nDjXjGeQAfXOrm+Jn+qNjDmyDRtWoD+wZsl/RDPRTFRKivs4Mt74iOFlLOrE5+Kf+p5yjyhm3+cA== 68 | 69 | "@types/node@^14.14.37": 70 | version "14.17.22" 71 | resolved "https://registry.yarnpkg.com/@types/node/-/node-14.17.22.tgz#4053ec255ede70104f23df4a326c5f8e72b71d7d" 72 | integrity sha512-6Mgu9YWd8j0dk9M8V9+5w6ktqIFCcn/fFXAVIDFk/niAOFiOiz4GeFAMWYAQjKrcsASbFqMkqR8/Y2wuVCAkNg== 73 | 74 | "@types/resolve@1.17.1": 75 | version "1.17.1" 76 | resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" 77 | integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== 78 | dependencies: 79 | "@types/node" "*" 80 | 81 | "@types/tern@*": 82 | version "0.23.4" 83 | resolved "https://registry.yarnpkg.com/@types/tern/-/tern-0.23.4.tgz#03926eb13dbeaf3ae0d390caf706b2643a0127fb" 84 | integrity sha512-JAUw1iXGO1qaWwEOzxTKJZ/5JxVeON9kvGZ/osgZaJImBnyjyn0cjovPsf6FNLmyGY8Vw9DoXZCMlfMkMwHRWg== 85 | dependencies: 86 | "@types/estree" "*" 87 | 88 | at-least-node@^1.0.0: 89 | version "1.0.0" 90 | resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" 91 | integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== 92 | 93 | balanced-match@^1.0.0: 94 | version "1.0.2" 95 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 96 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 97 | 98 | brace-expansion@^1.1.7: 99 | version "1.1.11" 100 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 101 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 102 | dependencies: 103 | balanced-match "^1.0.0" 104 | concat-map "0.0.1" 105 | 106 | builtin-modules@^3.1.0: 107 | version "3.2.0" 108 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887" 109 | integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== 110 | 111 | commondir@^1.0.1: 112 | version "1.0.1" 113 | resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" 114 | integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= 115 | 116 | concat-map@0.0.1: 117 | version "0.0.1" 118 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 119 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 120 | 121 | deepmerge@^4.2.2: 122 | version "4.2.2" 123 | resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" 124 | integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== 125 | 126 | estree-walker@^1.0.1: 127 | version "1.0.1" 128 | resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" 129 | integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== 130 | 131 | estree-walker@^2.0.1: 132 | version "2.0.2" 133 | resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" 134 | integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== 135 | 136 | fs-extra@^9.1.0: 137 | version "9.1.0" 138 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" 139 | integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== 140 | dependencies: 141 | at-least-node "^1.0.0" 142 | graceful-fs "^4.2.0" 143 | jsonfile "^6.0.1" 144 | universalify "^2.0.0" 145 | 146 | fs.realpath@^1.0.0: 147 | version "1.0.0" 148 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 149 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 150 | 151 | fsevents@~2.3.2: 152 | version "2.3.2" 153 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 154 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 155 | 156 | function-bind@^1.1.1: 157 | version "1.1.1" 158 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 159 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 160 | 161 | glob@^7.1.6: 162 | version "7.2.0" 163 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" 164 | integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== 165 | dependencies: 166 | fs.realpath "^1.0.0" 167 | inflight "^1.0.4" 168 | inherits "2" 169 | minimatch "^3.0.4" 170 | once "^1.3.0" 171 | path-is-absolute "^1.0.0" 172 | 173 | graceful-fs@^4.1.6, graceful-fs@^4.2.0: 174 | version "4.2.8" 175 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" 176 | integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== 177 | 178 | has@^1.0.3: 179 | version "1.0.3" 180 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 181 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 182 | dependencies: 183 | function-bind "^1.1.1" 184 | 185 | inflight@^1.0.4: 186 | version "1.0.6" 187 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 188 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 189 | dependencies: 190 | once "^1.3.0" 191 | wrappy "1" 192 | 193 | inherits@2: 194 | version "2.0.4" 195 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 196 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 197 | 198 | is-core-module@^2.2.0: 199 | version "2.7.0" 200 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.7.0.tgz#3c0ef7d31b4acfc574f80c58409d568a836848e3" 201 | integrity sha512-ByY+tjCciCr+9nLryBYcSD50EOGWt95c7tIsKTG1J2ixKKXPvF7Ej3AVd+UfDydAJom3biBGDBALaO79ktwgEQ== 202 | dependencies: 203 | has "^1.0.3" 204 | 205 | is-module@^1.0.0: 206 | version "1.0.0" 207 | resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" 208 | integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= 209 | 210 | is-reference@^1.2.1: 211 | version "1.2.1" 212 | resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" 213 | integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== 214 | dependencies: 215 | "@types/estree" "*" 216 | 217 | jsonfile@^6.0.1: 218 | version "6.1.0" 219 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" 220 | integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== 221 | dependencies: 222 | universalify "^2.0.0" 223 | optionalDependencies: 224 | graceful-fs "^4.1.6" 225 | 226 | magic-string@^0.25.7: 227 | version "0.25.7" 228 | resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" 229 | integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== 230 | dependencies: 231 | sourcemap-codec "^1.4.4" 232 | 233 | minimatch@^3.0.4: 234 | version "3.1.2" 235 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 236 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 237 | dependencies: 238 | brace-expansion "^1.1.7" 239 | 240 | moment@2.29.1: 241 | version "2.29.1" 242 | resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" 243 | integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ== 244 | 245 | obsidian@^0.12.0: 246 | version "0.12.17" 247 | resolved "https://registry.yarnpkg.com/obsidian/-/obsidian-0.12.17.tgz#8efe75310d0e3988cdeccfbb176d3a8ff7b363c7" 248 | integrity sha512-YvCAlRym9D8zNPXt6Ez8QubSTVGoChx6lb58zqI13Dcrz3l1lgUO+pcOGDiD5Qa67nzDZLXo3aV2rqkCCpTvGQ== 249 | dependencies: 250 | "@types/codemirror" "0.0.108" 251 | moment "2.29.1" 252 | 253 | once@^1.3.0: 254 | version "1.4.0" 255 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 256 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 257 | dependencies: 258 | wrappy "1" 259 | 260 | path-is-absolute@^1.0.0: 261 | version "1.0.1" 262 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 263 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 264 | 265 | path-parse@^1.0.6: 266 | version "1.0.7" 267 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 268 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 269 | 270 | picomatch@^2.2.2: 271 | version "2.3.0" 272 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" 273 | integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== 274 | 275 | resolve@^1.17.0, resolve@^1.19.0: 276 | version "1.20.0" 277 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" 278 | integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== 279 | dependencies: 280 | is-core-module "^2.2.0" 281 | path-parse "^1.0.6" 282 | 283 | rollup@^2.32.1: 284 | version "2.58.0" 285 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.58.0.tgz#a643983365e7bf7f5b7c62a8331b983b7c4c67fb" 286 | integrity sha512-NOXpusKnaRpbS7ZVSzcEXqxcLDOagN6iFS8p45RkoiMqPHDLwJm758UF05KlMoCRbLBTZsPOIa887gZJ1AiXvw== 287 | optionalDependencies: 288 | fsevents "~2.3.2" 289 | 290 | sourcemap-codec@^1.4.4: 291 | version "1.4.8" 292 | resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" 293 | integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== 294 | 295 | tslib@^2.2.0: 296 | version "2.3.1" 297 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" 298 | integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== 299 | 300 | typescript@^4.2.4: 301 | version "4.4.4" 302 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.4.tgz#2cd01a1a1f160704d3101fd5a58ff0f9fcb8030c" 303 | integrity sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA== 304 | 305 | universalify@^2.0.0: 306 | version "2.0.0" 307 | resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" 308 | integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== 309 | 310 | wrappy@1: 311 | version "1.0.2" 312 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 313 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 314 | --------------------------------------------------------------------------------