From 5832628666f038a981b5be9ae609cbf004df928d Mon Sep 17 00:00:00 2001 From: quorafind <951011105@qq.com> Date: Thu, 31 Oct 2024 16:17:09 +0800 Subject: [PATCH] feat: support open search view directly --- manifest.json | 2 +- package.json | 2 +- pnpm-lock.yaml | 1740 ++++++++++++++++++--------------- src/floatSearchIndex.ts | 1153 ++++++++++++++++------ src/leafView.ts | 34 +- src/types/types-obsidian.d.ts | 432 ++++---- styles.css | 11 +- 7 files changed, 2084 insertions(+), 1290 deletions(-) diff --git a/manifest.json b/manifest.json index 41b0a24..cc7c442 100644 --- a/manifest.json +++ b/manifest.json @@ -12,4 +12,4 @@ "支付宝": "https://cdn.jsdelivr.net/gh/Quorafind/.github@main/IMAGE/%E6%94%AF%E4%BB%98%E5%AE%9D%E4%BB%98%E6%AC%BE%E7%A0%81.jpg" }, "isDesktopOnly": false -} \ No newline at end of file +} diff --git a/package.json b/package.json index 47c445e..913e603 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "@typescript-eslint/parser": "5.29.0", "builtin-modules": "3.3.0", "esbuild": "0.14.47", - "obsidian": "latest", + "obsidian": "^1.7.2", "tslib": "2.4.0", "typescript": "4.7.4" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 124ada3..4a71c86 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,162 +1,109 @@ -lockfileVersion: '6.0' +lockfileVersion: '9.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - monkey-around: - specifier: ^2.3.0 - version: 2.3.0 +importers: -devDependencies: - '@types/node': - specifier: ^16.18.50 - version: 16.18.50 - '@typescript-eslint/eslint-plugin': - specifier: 5.29.0 - version: 5.29.0(@typescript-eslint/parser@5.29.0)(eslint@8.49.0)(typescript@4.7.4) - '@typescript-eslint/parser': - specifier: 5.29.0 - version: 5.29.0(eslint@8.49.0)(typescript@4.7.4) - builtin-modules: - specifier: 3.3.0 - version: 3.3.0 - esbuild: - specifier: 0.14.47 - version: 0.14.47 - obsidian: - specifier: latest - version: 1.4.11(@codemirror/state@6.2.1)(@codemirror/view@6.18.1) - tslib: - specifier: 2.4.0 - version: 2.4.0 - typescript: - specifier: 4.7.4 - version: 4.7.4 + .: + dependencies: + monkey-around: + specifier: ^2.3.0 + version: 2.3.0 + devDependencies: + '@types/node': + specifier: ^16.18.50 + version: 16.18.50 + '@typescript-eslint/eslint-plugin': + specifier: 5.29.0 + version: 5.29.0(@typescript-eslint/parser@5.29.0(eslint@8.49.0)(typescript@4.7.4))(eslint@8.49.0)(typescript@4.7.4) + '@typescript-eslint/parser': + specifier: 5.29.0 + version: 5.29.0(eslint@8.49.0)(typescript@4.7.4) + builtin-modules: + specifier: 3.3.0 + version: 3.3.0 + esbuild: + specifier: 0.14.47 + version: 0.14.47 + obsidian: + specifier: ^1.7.2 + version: 1.7.2(@codemirror/state@6.2.1)(@codemirror/view@6.18.1) + tslib: + specifier: 2.4.0 + version: 2.4.0 + typescript: + specifier: 4.7.4 + version: 4.7.4 packages: - /@aashutoshrathi/word-wrap@1.2.6: - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - dev: true - - /@codemirror/state@6.2.1: + '@codemirror/state@6.2.1': resolution: {integrity: sha512-RupHSZ8+OjNT38zU9fKH2sv+Dnlr8Eb8sl4NOnnqz95mCFTZUaiRP8Xv5MeeaG0px2b8Bnfe7YGwCV3nsBhbuw==} - dev: true - /@codemirror/view@6.18.1: + '@codemirror/view@6.18.1': resolution: {integrity: sha512-xcsXcMkIMd7l3WZEWoc4ljteAiqzxb5gVerRxk5132p5cLix6rTydWTQjsj2oxORepfsrwy1fC4r20iMa9plrg==} - dependencies: - '@codemirror/state': 6.2.1 - style-mod: 4.1.0 - w3c-keyname: 2.2.8 - dev: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.49.0): - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + '@eslint-community/eslint-utils@4.4.1': + resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - dependencies: - eslint: 8.49.0 - eslint-visitor-keys: 3.4.3 - dev: true - /@eslint-community/regexpp@4.8.1: - resolution: {integrity: sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ==} + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - dev: true - /@eslint/eslintrc@2.1.2: - resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==} + '@eslint/eslintrc@2.1.4': + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - ajv: 6.12.6 - debug: 4.3.4 - espree: 9.6.1 - globals: 13.21.0 - ignore: 5.2.4 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - dev: true - /@eslint/js@8.49.0: + '@eslint/js@8.49.0': resolution: {integrity: sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - /@humanwhocodes/config-array@0.11.11: - resolution: {integrity: sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==} + '@humanwhocodes/config-array@0.11.14': + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} - dependencies: - '@humanwhocodes/object-schema': 1.2.1 - debug: 4.3.4 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - dev: true + deprecated: Use @eslint/config-array instead - /@humanwhocodes/module-importer@1.0.1: + '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - dev: true - /@humanwhocodes/object-schema@1.2.1: - resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} - dev: true + '@humanwhocodes/object-schema@2.0.3': + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + deprecated: Use @eslint/object-schema instead - /@nodelib/fs.scandir@2.1.5: + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - dev: true - /@nodelib/fs.stat@2.0.5: + '@nodelib/fs.stat@2.0.5': resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} - dev: true - /@nodelib/fs.walk@1.2.8: + '@nodelib/fs.walk@1.2.8': resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 - dev: true - /@types/codemirror@5.60.8: + '@types/codemirror@5.60.8': resolution: {integrity: sha512-VjFgDF/eB+Aklcy15TtOTLQeMjTo07k7KAjql8OK5Dirr7a6sJY4T1uVBDuTVG9VEmn1uUsohOpYnVfgC6/jyw==} - dependencies: - '@types/tern': 0.23.4 - dev: true - /@types/estree@1.0.1: + '@types/estree@1.0.1': resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} - dev: true - /@types/json-schema@7.0.12: + '@types/json-schema@7.0.12': resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} - dev: true - /@types/node@16.18.50: + '@types/node@16.18.50': resolution: {integrity: sha512-OiDU5xRgYTJ203v4cprTs0RwOCd5c5Zjv+K5P8KSqfiCsB1W3LcamTUMcnQarpq5kOYbhHfSOgIEJvdPyb5xyw==} - dev: true - /@types/tern@0.23.4: + '@types/tern@0.23.4': resolution: {integrity: sha512-JAUw1iXGO1qaWwEOzxTKJZ/5JxVeON9kvGZ/osgZaJImBnyjyn0cjovPsf6FNLmyGY8Vw9DoXZCMlfMkMwHRWg==} - dependencies: - '@types/estree': 1.0.1 - dev: true - /@typescript-eslint/eslint-plugin@5.29.0(@typescript-eslint/parser@5.29.0)(eslint@8.49.0)(typescript@4.7.4): + '@typescript-eslint/eslint-plugin@5.29.0': resolution: {integrity: sha512-kgTsISt9pM53yRFQmLZ4npj99yGl3x3Pl7z4eA66OuTzAGC4bQB5H5fuLwPnqTKU3yyrrg4MIhjF17UYnL4c0w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -166,6 +113,732 @@ packages: peerDependenciesMeta: typescript: optional: true + + '@typescript-eslint/parser@5.29.0': + resolution: {integrity: sha512-ruKWTv+x0OOxbzIw9nW5oWlUopvP/IQDjB5ZqmTglLIoDTctLlAJpAQFpNPJP/ZI7hTT9sARBosEfaKbcFuECw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/scope-manager@5.29.0': + resolution: {integrity: sha512-etbXUT0FygFi2ihcxDZjz21LtC+Eps9V2xVx09zFoN44RRHPrkMflidGMI+2dUs821zR1tDS6Oc9IXxIjOUZwA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@typescript-eslint/type-utils@5.29.0': + resolution: {integrity: sha512-JK6bAaaiJozbox3K220VRfCzLa9n0ib/J+FHIwnaV3Enw/TO267qe0pM1b1QrrEuy6xun374XEAsRlA86JJnyg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '*' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/types@5.29.0': + resolution: {integrity: sha512-X99VbqvAXOMdVyfFmksMy3u8p8yoRGITgU1joBJPzeYa0rhdf5ok9S56/itRoUSh99fiDoMtarSIJXo7H/SnOg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@typescript-eslint/typescript-estree@5.29.0': + resolution: {integrity: sha512-mQvSUJ/JjGBdvo+1LwC+GY2XmSYjK1nAaVw2emp/E61wEVYEyibRHCqm1I1vEKbXCpUKuW4G7u9ZCaZhJbLoNQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/utils@5.29.0': + resolution: {integrity: sha512-3Eos6uP1nyLOBayc/VUdKZikV90HahXE5Dx9L5YlSd/7ylQPXhLk1BYb29SDgnBnTp+jmSZUU0QxUiyHgW4p7A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + + '@typescript-eslint/visitor-keys@5.29.0': + resolution: {integrity: sha512-Hpb/mCWsjILvikMQoZIE3voc9wtQcS0A9FUw3h8bhr9UxBdtI/tw1ZDZUOXHXLOVMedKCH5NxyzATwnU78bWCQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + + builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + + esbuild-android-64@0.14.47: + resolution: {integrity: sha512-R13Bd9+tqLVFndncMHssZrPWe6/0Kpv2/dt4aA69soX4PRxlzsVpCvoJeFE8sOEoeVEiBkI0myjlkDodXlHa0g==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + esbuild-android-arm64@0.14.47: + resolution: {integrity: sha512-OkwOjj7ts4lBp/TL6hdd8HftIzOy/pdtbrNA4+0oVWgGG64HrdVzAF5gxtJufAPOsEjkyh1oIYvKAUinKKQRSQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + esbuild-darwin-64@0.14.47: + resolution: {integrity: sha512-R6oaW0y5/u6Eccti/TS6c/2c1xYTb1izwK3gajJwi4vIfNs1s8B1dQzI1UiC9T61YovOQVuePDcfqHLT3mUZJA==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + esbuild-darwin-arm64@0.14.47: + resolution: {integrity: sha512-seCmearlQyvdvM/noz1L9+qblC5vcBrhUaOoLEDDoLInF/VQ9IkobGiLlyTPYP5dW1YD4LXhtBgOyevoIHGGnw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + esbuild-freebsd-64@0.14.47: + resolution: {integrity: sha512-ZH8K2Q8/Ux5kXXvQMDsJcxvkIwut69KVrYQhza/ptkW50DC089bCVrJZZ3sKzIoOx+YPTrmsZvqeZERjyYrlvQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + esbuild-freebsd-arm64@0.14.47: + resolution: {integrity: sha512-ZJMQAJQsIOhn3XTm7MPQfCzEu5b9STNC+s90zMWe2afy9EwnHV7Ov7ohEMv2lyWlc2pjqLW8QJnz2r0KZmeAEQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + esbuild-linux-32@0.14.47: + resolution: {integrity: sha512-FxZOCKoEDPRYvq300lsWCTv1kcHgiiZfNrPtEhFAiqD7QZaXrad8LxyJ8fXGcWzIFzRiYZVtB3ttvITBvAFhKw==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + esbuild-linux-64@0.14.47: + resolution: {integrity: sha512-nFNOk9vWVfvWYF9YNYksZptgQAdstnDCMtR6m42l5Wfugbzu11VpMCY9XrD4yFxvPo9zmzcoUL/88y0lfJZJJw==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + esbuild-linux-arm64@0.14.47: + resolution: {integrity: sha512-ywfme6HVrhWcevzmsufjd4iT3PxTfCX9HOdxA7Hd+/ZM23Y9nXeb+vG6AyA6jgq/JovkcqRHcL9XwRNpWG6XRw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + esbuild-linux-arm@0.14.47: + resolution: {integrity: sha512-ZGE1Bqg/gPRXrBpgpvH81tQHpiaGxa8c9Rx/XOylkIl2ypLuOcawXEAo8ls+5DFCcRGt/o3sV+PzpAFZobOsmA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + esbuild-linux-mips64le@0.14.47: + resolution: {integrity: sha512-mg3D8YndZ1LvUiEdDYR3OsmeyAew4MA/dvaEJxvyygahWmpv1SlEEnhEZlhPokjsUMfRagzsEF/d/2XF+kTQGg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + esbuild-linux-ppc64le@0.14.47: + resolution: {integrity: sha512-WER+f3+szmnZiWoK6AsrTKGoJoErG2LlauSmk73LEZFQ/iWC+KhhDsOkn1xBUpzXWsxN9THmQFltLoaFEH8F8w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + esbuild-linux-riscv64@0.14.47: + resolution: {integrity: sha512-1fI6bP3A3rvI9BsaaXbMoaOjLE3lVkJtLxsgLHqlBhLlBVY7UqffWBvkrX/9zfPhhVMd9ZRFiaqXnB1T7BsL2g==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + esbuild-linux-s390x@0.14.47: + resolution: {integrity: sha512-eZrWzy0xFAhki1CWRGnhsHVz7IlSKX6yT2tj2Eg8lhAwlRE5E96Hsb0M1mPSE1dHGpt1QVwwVivXIAacF/G6mw==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + esbuild-netbsd-64@0.14.47: + resolution: {integrity: sha512-Qjdjr+KQQVH5Q2Q1r6HBYswFTToPpss3gqCiSw2Fpq/ua8+eXSQyAMG+UvULPqXceOwpnPo4smyZyHdlkcPppQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + esbuild-openbsd-64@0.14.47: + resolution: {integrity: sha512-QpgN8ofL7B9z8g5zZqJE+eFvD1LehRlxr25PBkjyyasakm4599iroUpaj96rdqRlO2ShuyqwJdr+oNqWwTUmQw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + esbuild-sunos-64@0.14.47: + resolution: {integrity: sha512-uOeSgLUwukLioAJOiGYm3kNl+1wJjgJA8R671GYgcPgCx7QR73zfvYqXFFcIO93/nBdIbt5hd8RItqbbf3HtAQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + esbuild-windows-32@0.14.47: + resolution: {integrity: sha512-H0fWsLTp2WBfKLBgwYT4OTfFly4Im/8B5f3ojDv1Kx//kiubVY0IQunP2Koc/fr/0wI7hj3IiBDbSrmKlrNgLQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + esbuild-windows-64@0.14.47: + resolution: {integrity: sha512-/Pk5jIEH34T68r8PweKRi77W49KwanZ8X6lr3vDAtOlH5EumPE4pBHqkCUdELanvsT14yMXLQ/C/8XPi1pAtkQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + esbuild-windows-arm64@0.14.47: + resolution: {integrity: sha512-HFSW2lnp62fl86/qPQlqw6asIwCnEsEoNIL1h2uVMgakddf+vUuMcCbtUY1i8sst7KkgHrVKCJQB33YhhOweCQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + esbuild@0.14.47: + resolution: {integrity: sha512-wI4ZiIfFxpkuxB8ju4MHrGwGLyp1+awEHAHVpx6w7a+1pmYIq8T9FGEVVwFo0iFierDoMj++Xq69GXWYn2EiwA==} + engines: {node: '>=12'} + hasBin: true + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-utils@3.0.0: + resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} + engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} + peerDependencies: + eslint: '>=5' + + eslint-visitor-keys@2.1.0: + resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} + engines: {node: '>=10'} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint@8.49.0: + resolution: {integrity: sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + hasBin: true + + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.1: + resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fastq@1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + + file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + + fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + + flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + functional-red-black-tree@1.0.1: + resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + ignore@5.2.4: + resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} + engines: {node: '>= 4'} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + moment@2.29.4: + resolution: {integrity: sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==} + + monkey-around@2.3.0: + resolution: {integrity: sha512-QWcCUWjqE/MCk9cXlSKZ1Qc486LD439xw/Ak8Nt6l2PuL9+yrc9TJakt7OHDuOqPRYY4nTWBAEFKn32PE/SfXA==} + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + obsidian@1.7.2: + resolution: {integrity: sha512-k9hN9brdknJC+afKr5FQzDRuEFGDKbDjfCazJwpgibwCAoZNYHYV8p/s3mM8I6AsnKrPKNXf8xGuMZ4enWelZQ==} + peerDependencies: + '@codemirror/state': ^6.0.0 + '@codemirror/view': ^6.0.0 + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + regexpp@3.2.0: + resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} + engines: {node: '>=8'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + style-mod@4.1.2: + resolution: {integrity: sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + + tslib@2.4.0: + resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} + + tsutils@3.21.0: + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + typescript@4.7.4: + resolution: {integrity: sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==} + engines: {node: '>=4.2.0'} + hasBin: true + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + w3c-keyname@2.2.8: + resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@codemirror/state@6.2.1': {} + + '@codemirror/view@6.18.1': + dependencies: + '@codemirror/state': 6.2.1 + style-mod: 4.1.2 + w3c-keyname: 2.2.8 + + '@eslint-community/eslint-utils@4.4.1(eslint@8.49.0)': + dependencies: + eslint: 8.49.0 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/eslintrc@2.1.4': + dependencies: + ajv: 6.12.6 + debug: 4.3.7 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.2 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@8.49.0': {} + + '@humanwhocodes/config-array@0.11.14': + dependencies: + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.3.7 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/object-schema@2.0.3': {} + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.15.0 + + '@types/codemirror@5.60.8': + dependencies: + '@types/tern': 0.23.4 + + '@types/estree@1.0.1': {} + + '@types/json-schema@7.0.12': {} + + '@types/node@16.18.50': {} + + '@types/tern@0.23.4': + dependencies: + '@types/estree': 1.0.1 + + '@typescript-eslint/eslint-plugin@5.29.0(@typescript-eslint/parser@5.29.0(eslint@8.49.0)(typescript@4.7.4))(eslint@8.49.0)(typescript@4.7.4)': dependencies: '@typescript-eslint/parser': 5.29.0(eslint@8.49.0)(typescript@4.7.4) '@typescript-eslint/scope-manager': 5.29.0 @@ -178,71 +851,42 @@ packages: regexpp: 3.2.0 semver: 7.5.4 tsutils: 3.21.0(typescript@4.7.4) + optionalDependencies: typescript: 4.7.4 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/parser@5.29.0(eslint@8.49.0)(typescript@4.7.4): - resolution: {integrity: sha512-ruKWTv+x0OOxbzIw9nW5oWlUopvP/IQDjB5ZqmTglLIoDTctLlAJpAQFpNPJP/ZI7hTT9sARBosEfaKbcFuECw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/parser@5.29.0(eslint@8.49.0)(typescript@4.7.4)': dependencies: '@typescript-eslint/scope-manager': 5.29.0 '@typescript-eslint/types': 5.29.0 '@typescript-eslint/typescript-estree': 5.29.0(typescript@4.7.4) debug: 4.3.4 eslint: 8.49.0 + optionalDependencies: typescript: 4.7.4 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/scope-manager@5.29.0: - resolution: {integrity: sha512-etbXUT0FygFi2ihcxDZjz21LtC+Eps9V2xVx09zFoN44RRHPrkMflidGMI+2dUs821zR1tDS6Oc9IXxIjOUZwA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/scope-manager@5.29.0': dependencies: '@typescript-eslint/types': 5.29.0 '@typescript-eslint/visitor-keys': 5.29.0 - dev: true - /@typescript-eslint/type-utils@5.29.0(eslint@8.49.0)(typescript@4.7.4): - resolution: {integrity: sha512-JK6bAaaiJozbox3K220VRfCzLa9n0ib/J+FHIwnaV3Enw/TO267qe0pM1b1QrrEuy6xun374XEAsRlA86JJnyg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: '*' - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/type-utils@5.29.0(eslint@8.49.0)(typescript@4.7.4)': dependencies: '@typescript-eslint/utils': 5.29.0(eslint@8.49.0)(typescript@4.7.4) debug: 4.3.4 eslint: 8.49.0 tsutils: 3.21.0(typescript@4.7.4) + optionalDependencies: typescript: 4.7.4 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/types@5.29.0: - resolution: {integrity: sha512-X99VbqvAXOMdVyfFmksMy3u8p8yoRGITgU1joBJPzeYa0rhdf5ok9S56/itRoUSh99fiDoMtarSIJXo7H/SnOg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true + '@typescript-eslint/types@5.29.0': {} - /@typescript-eslint/typescript-estree@5.29.0(typescript@4.7.4): - resolution: {integrity: sha512-mQvSUJ/JjGBdvo+1LwC+GY2XmSYjK1nAaVw2emp/E61wEVYEyibRHCqm1I1vEKbXCpUKuW4G7u9ZCaZhJbLoNQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/typescript-estree@5.29.0(typescript@4.7.4)': dependencies: '@typescript-eslint/types': 5.29.0 '@typescript-eslint/visitor-keys': 5.29.0 @@ -251,16 +895,12 @@ packages: is-glob: 4.0.3 semver: 7.5.4 tsutils: 3.21.0(typescript@4.7.4) + optionalDependencies: typescript: 4.7.4 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/utils@5.29.0(eslint@8.49.0)(typescript@4.7.4): - resolution: {integrity: sha512-3Eos6uP1nyLOBayc/VUdKZikV90HahXE5Dx9L5YlSd/7ylQPXhLk1BYb29SDgnBnTp+jmSZUU0QxUiyHgW4p7A==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + '@typescript-eslint/utils@5.29.0(eslint@8.49.0)(typescript@4.7.4)': dependencies: '@types/json-schema': 7.0.12 '@typescript-eslint/scope-manager': 5.29.0 @@ -272,335 +912,148 @@ packages: transitivePeerDependencies: - supports-color - typescript - dev: true - /@typescript-eslint/visitor-keys@5.29.0: - resolution: {integrity: sha512-Hpb/mCWsjILvikMQoZIE3voc9wtQcS0A9FUw3h8bhr9UxBdtI/tw1ZDZUOXHXLOVMedKCH5NxyzATwnU78bWCQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/visitor-keys@5.29.0': dependencies: '@typescript-eslint/types': 5.29.0 eslint-visitor-keys: 3.4.3 - dev: true - /acorn-jsx@5.3.2(acorn@8.10.0): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + acorn-jsx@5.3.2(acorn@8.14.0): dependencies: - acorn: 8.10.0 - dev: true + acorn: 8.14.0 - /acorn@8.10.0: - resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true + acorn@8.14.0: {} - /ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 json-schema-traverse: 0.4.1 uri-js: 4.4.1 - dev: true - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - dev: true + ansi-regex@5.0.1: {} - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 - dev: true - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: true + argparse@2.0.1: {} - /array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - dev: true + array-union@2.1.0: {} - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true + balanced-match@1.0.2: {} - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - dev: true - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} + braces@3.0.2: dependencies: fill-range: 7.0.1 - dev: true - /builtin-modules@3.3.0: - resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} - engines: {node: '>=6'} - dev: true + builtin-modules@3.3.0: {} - /callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - dev: true + callsites@3.1.0: {} - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - dev: true - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + color-convert@2.0.1: dependencies: color-name: 1.1.4 - dev: true - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true + color-name@1.1.4: {} - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true + concat-map@0.0.1: {} - /cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} + cross-spawn@7.0.3: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 - dev: true - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@4.3.4: dependencies: ms: 2.1.2 - dev: true - /deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - dev: true + debug@4.3.7: + dependencies: + ms: 2.1.3 - /dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} + deep-is@0.1.4: {} + + dir-glob@3.0.1: dependencies: path-type: 4.0.0 - dev: true - /doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} + doctrine@3.0.0: dependencies: esutils: 2.0.3 - dev: true - /esbuild-android-64@0.14.47: - resolution: {integrity: sha512-R13Bd9+tqLVFndncMHssZrPWe6/0Kpv2/dt4aA69soX4PRxlzsVpCvoJeFE8sOEoeVEiBkI0myjlkDodXlHa0g==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true + esbuild-android-64@0.14.47: optional: true - /esbuild-android-arm64@0.14.47: - resolution: {integrity: sha512-OkwOjj7ts4lBp/TL6hdd8HftIzOy/pdtbrNA4+0oVWgGG64HrdVzAF5gxtJufAPOsEjkyh1oIYvKAUinKKQRSQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true + esbuild-android-arm64@0.14.47: optional: true - /esbuild-darwin-64@0.14.47: - resolution: {integrity: sha512-R6oaW0y5/u6Eccti/TS6c/2c1xYTb1izwK3gajJwi4vIfNs1s8B1dQzI1UiC9T61YovOQVuePDcfqHLT3mUZJA==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true + esbuild-darwin-64@0.14.47: optional: true - /esbuild-darwin-arm64@0.14.47: - resolution: {integrity: sha512-seCmearlQyvdvM/noz1L9+qblC5vcBrhUaOoLEDDoLInF/VQ9IkobGiLlyTPYP5dW1YD4LXhtBgOyevoIHGGnw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true + esbuild-darwin-arm64@0.14.47: optional: true - /esbuild-freebsd-64@0.14.47: - resolution: {integrity: sha512-ZH8K2Q8/Ux5kXXvQMDsJcxvkIwut69KVrYQhza/ptkW50DC089bCVrJZZ3sKzIoOx+YPTrmsZvqeZERjyYrlvQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true + esbuild-freebsd-64@0.14.47: optional: true - /esbuild-freebsd-arm64@0.14.47: - resolution: {integrity: sha512-ZJMQAJQsIOhn3XTm7MPQfCzEu5b9STNC+s90zMWe2afy9EwnHV7Ov7ohEMv2lyWlc2pjqLW8QJnz2r0KZmeAEQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true + esbuild-freebsd-arm64@0.14.47: optional: true - /esbuild-linux-32@0.14.47: - resolution: {integrity: sha512-FxZOCKoEDPRYvq300lsWCTv1kcHgiiZfNrPtEhFAiqD7QZaXrad8LxyJ8fXGcWzIFzRiYZVtB3ttvITBvAFhKw==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true + esbuild-linux-32@0.14.47: optional: true - /esbuild-linux-64@0.14.47: - resolution: {integrity: sha512-nFNOk9vWVfvWYF9YNYksZptgQAdstnDCMtR6m42l5Wfugbzu11VpMCY9XrD4yFxvPo9zmzcoUL/88y0lfJZJJw==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true + esbuild-linux-64@0.14.47: optional: true - /esbuild-linux-arm64@0.14.47: - resolution: {integrity: sha512-ywfme6HVrhWcevzmsufjd4iT3PxTfCX9HOdxA7Hd+/ZM23Y9nXeb+vG6AyA6jgq/JovkcqRHcL9XwRNpWG6XRw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true + esbuild-linux-arm64@0.14.47: optional: true - /esbuild-linux-arm@0.14.47: - resolution: {integrity: sha512-ZGE1Bqg/gPRXrBpgpvH81tQHpiaGxa8c9Rx/XOylkIl2ypLuOcawXEAo8ls+5DFCcRGt/o3sV+PzpAFZobOsmA==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true + esbuild-linux-arm@0.14.47: optional: true - /esbuild-linux-mips64le@0.14.47: - resolution: {integrity: sha512-mg3D8YndZ1LvUiEdDYR3OsmeyAew4MA/dvaEJxvyygahWmpv1SlEEnhEZlhPokjsUMfRagzsEF/d/2XF+kTQGg==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true + esbuild-linux-mips64le@0.14.47: optional: true - /esbuild-linux-ppc64le@0.14.47: - resolution: {integrity: sha512-WER+f3+szmnZiWoK6AsrTKGoJoErG2LlauSmk73LEZFQ/iWC+KhhDsOkn1xBUpzXWsxN9THmQFltLoaFEH8F8w==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true + esbuild-linux-ppc64le@0.14.47: optional: true - /esbuild-linux-riscv64@0.14.47: - resolution: {integrity: sha512-1fI6bP3A3rvI9BsaaXbMoaOjLE3lVkJtLxsgLHqlBhLlBVY7UqffWBvkrX/9zfPhhVMd9ZRFiaqXnB1T7BsL2g==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true + esbuild-linux-riscv64@0.14.47: optional: true - /esbuild-linux-s390x@0.14.47: - resolution: {integrity: sha512-eZrWzy0xFAhki1CWRGnhsHVz7IlSKX6yT2tj2Eg8lhAwlRE5E96Hsb0M1mPSE1dHGpt1QVwwVivXIAacF/G6mw==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true + esbuild-linux-s390x@0.14.47: optional: true - /esbuild-netbsd-64@0.14.47: - resolution: {integrity: sha512-Qjdjr+KQQVH5Q2Q1r6HBYswFTToPpss3gqCiSw2Fpq/ua8+eXSQyAMG+UvULPqXceOwpnPo4smyZyHdlkcPppQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true + esbuild-netbsd-64@0.14.47: optional: true - /esbuild-openbsd-64@0.14.47: - resolution: {integrity: sha512-QpgN8ofL7B9z8g5zZqJE+eFvD1LehRlxr25PBkjyyasakm4599iroUpaj96rdqRlO2ShuyqwJdr+oNqWwTUmQw==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true + esbuild-openbsd-64@0.14.47: optional: true - /esbuild-sunos-64@0.14.47: - resolution: {integrity: sha512-uOeSgLUwukLioAJOiGYm3kNl+1wJjgJA8R671GYgcPgCx7QR73zfvYqXFFcIO93/nBdIbt5hd8RItqbbf3HtAQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true + esbuild-sunos-64@0.14.47: optional: true - /esbuild-windows-32@0.14.47: - resolution: {integrity: sha512-H0fWsLTp2WBfKLBgwYT4OTfFly4Im/8B5f3ojDv1Kx//kiubVY0IQunP2Koc/fr/0wI7hj3IiBDbSrmKlrNgLQ==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true + esbuild-windows-32@0.14.47: optional: true - /esbuild-windows-64@0.14.47: - resolution: {integrity: sha512-/Pk5jIEH34T68r8PweKRi77W49KwanZ8X6lr3vDAtOlH5EumPE4pBHqkCUdELanvsT14yMXLQ/C/8XPi1pAtkQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true + esbuild-windows-64@0.14.47: optional: true - /esbuild-windows-arm64@0.14.47: - resolution: {integrity: sha512-HFSW2lnp62fl86/qPQlqw6asIwCnEsEoNIL1h2uVMgakddf+vUuMcCbtUY1i8sst7KkgHrVKCJQB33YhhOweCQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true + esbuild-windows-arm64@0.14.47: optional: true - /esbuild@0.14.47: - resolution: {integrity: sha512-wI4ZiIfFxpkuxB8ju4MHrGwGLyp1+awEHAHVpx6w7a+1pmYIq8T9FGEVVwFo0iFierDoMj++Xq69GXWYn2EiwA==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true + esbuild@0.14.47: optionalDependencies: esbuild-android-64: 0.14.47 esbuild-android-arm64: 0.14.47 @@ -622,79 +1075,55 @@ packages: esbuild-windows-32: 0.14.47 esbuild-windows-64: 0.14.47 esbuild-windows-arm64: 0.14.47 - dev: true - /escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - dev: true + escape-string-regexp@4.0.0: {} - /eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} + eslint-scope@5.1.1: dependencies: esrecurse: 4.3.0 estraverse: 4.3.0 - dev: true - /eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-scope@7.2.2: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 - dev: true - /eslint-utils@3.0.0(eslint@8.49.0): - resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} - engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} - peerDependencies: - eslint: '>=5' + eslint-utils@3.0.0(eslint@8.49.0): dependencies: eslint: 8.49.0 eslint-visitor-keys: 2.1.0 - dev: true - /eslint-visitor-keys@2.1.0: - resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} - engines: {node: '>=10'} - dev: true + eslint-visitor-keys@2.1.0: {} - /eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true + eslint-visitor-keys@3.4.3: {} - /eslint@8.49.0: - resolution: {integrity: sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true + eslint@8.49.0: dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.49.0) - '@eslint-community/regexpp': 4.8.1 - '@eslint/eslintrc': 2.1.2 + '@eslint-community/eslint-utils': 4.4.1(eslint@8.49.0) + '@eslint-community/regexpp': 4.12.1 + '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.49.0 - '@humanwhocodes/config-array': 0.11.11 + '@humanwhocodes/config-array': 0.11.14 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4 + debug: 4.3.7 doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - esquery: 1.5.0 + esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.21.0 + globals: 13.24.0 graphemer: 1.4.0 - ignore: 5.2.4 + ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 @@ -704,139 +1133,84 @@ packages: lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 - optionator: 0.9.3 + optionator: 0.9.4 strip-ansi: 6.0.1 text-table: 0.2.0 transitivePeerDependencies: - supports-color - dev: true - /espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + espree@9.6.1: dependencies: - acorn: 8.10.0 - acorn-jsx: 5.3.2(acorn@8.10.0) + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) eslint-visitor-keys: 3.4.3 - dev: true - /esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} - engines: {node: '>=0.10'} + esquery@1.6.0: dependencies: estraverse: 5.3.0 - dev: true - /esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} + esrecurse@4.3.0: dependencies: estraverse: 5.3.0 - dev: true - /estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - dev: true + estraverse@4.3.0: {} - /estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - dev: true + estraverse@5.3.0: {} - /esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - dev: true + esutils@2.0.3: {} - /fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: true + fast-deep-equal@3.1.3: {} - /fast-glob@3.3.1: - resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} - engines: {node: '>=8.6.0'} + fast-glob@3.3.1: dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.5 - dev: true - /fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - dev: true + fast-json-stable-stringify@2.1.0: {} - /fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - dev: true + fast-levenshtein@2.0.6: {} - /fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + fastq@1.15.0: dependencies: reusify: 1.0.4 - dev: true - /file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + file-entry-cache@6.0.1: dependencies: - flat-cache: 3.1.0 - dev: true + flat-cache: 3.2.0 - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} + fill-range@7.0.1: dependencies: to-regex-range: 5.0.1 - dev: true - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} + find-up@5.0.0: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 - dev: true - /flat-cache@3.1.0: - resolution: {integrity: sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==} - engines: {node: '>=12.0.0'} + flat-cache@3.2.0: dependencies: - flatted: 3.2.7 - keyv: 4.5.3 + flatted: 3.3.1 + keyv: 4.5.4 rimraf: 3.0.2 - dev: true - /flatted@3.2.7: - resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} - dev: true + flatted@3.3.1: {} - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true + fs.realpath@1.0.0: {} - /functional-red-black-tree@1.0.1: - resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} - dev: true + functional-red-black-tree@1.0.1: {} - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 - dev: true - /glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} + glob-parent@6.0.2: dependencies: is-glob: 4.0.3 - dev: true - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + glob@7.2.3: dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -844,18 +1218,12 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - dev: true - /globals@13.21.0: - resolution: {integrity: sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==} - engines: {node: '>=8'} + globals@13.24.0: dependencies: type-fest: 0.20.2 - dev: true - /globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} + globby@11.1.0: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 @@ -863,398 +1231,214 @@ packages: ignore: 5.2.4 merge2: 1.4.1 slash: 3.0.0 - dev: true - /graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - dev: true + graphemer@1.4.0: {} - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - dev: true + has-flag@4.0.0: {} - /ignore@5.2.4: - resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} - engines: {node: '>= 4'} - dev: true + ignore@5.2.4: {} - /import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} + ignore@5.3.2: {} + + import-fresh@3.3.0: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 - dev: true - /imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - dev: true + imurmurhash@0.1.4: {} - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + inflight@1.0.6: dependencies: once: 1.4.0 wrappy: 1.0.2 - dev: true - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true + inherits@2.0.4: {} - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: true + is-extglob@2.1.1: {} - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 - dev: true - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: true + is-number@7.0.0: {} - /is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - dev: true + is-path-inside@3.0.3: {} - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true + isexe@2.0.0: {} - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true + js-yaml@4.1.0: dependencies: argparse: 2.0.1 - dev: true - /json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - dev: true + json-buffer@3.0.1: {} - /json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - dev: true + json-schema-traverse@0.4.1: {} - /json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - dev: true + json-stable-stringify-without-jsonify@1.0.1: {} - /keyv@4.5.3: - resolution: {integrity: sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==} + keyv@4.5.4: dependencies: json-buffer: 3.0.1 - dev: true - /levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} + levn@0.4.1: dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 - dev: true - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} + locate-path@6.0.0: dependencies: p-locate: 5.0.0 - dev: true - /lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - dev: true + lodash.merge@4.6.2: {} - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} + lru-cache@6.0.0: dependencies: yallist: 4.0.0 - dev: true - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - dev: true + merge2@1.4.1: {} - /micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} + micromatch@4.0.5: dependencies: braces: 3.0.2 picomatch: 2.3.1 - dev: true - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 - dev: true - /moment@2.29.4: - resolution: {integrity: sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==} - dev: true + moment@2.29.4: {} - /monkey-around@2.3.0: - resolution: {integrity: sha512-QWcCUWjqE/MCk9cXlSKZ1Qc486LD439xw/Ak8Nt6l2PuL9+yrc9TJakt7OHDuOqPRYY4nTWBAEFKn32PE/SfXA==} - dev: false + monkey-around@2.3.0: {} - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true + ms@2.1.2: {} - /natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - dev: true + ms@2.1.3: {} - /obsidian@1.4.11(@codemirror/state@6.2.1)(@codemirror/view@6.18.1): - resolution: {integrity: sha512-BCVYTvaXxElJMl6MMbDdY/CGK+aq18SdtDY/7vH8v6BxCBQ6KF4kKxL0vG9UZ0o5qh139KpUoJHNm+6O5dllKA==} - peerDependencies: - '@codemirror/state': ^6.0.0 - '@codemirror/view': ^6.0.0 + natural-compare@1.4.0: {} + + obsidian@1.7.2(@codemirror/state@6.2.1)(@codemirror/view@6.18.1): dependencies: '@codemirror/state': 6.2.1 '@codemirror/view': 6.18.1 '@types/codemirror': 5.60.8 moment: 2.29.4 - dev: true - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + once@1.4.0: dependencies: wrappy: 1.0.2 - dev: true - /optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} - engines: {node: '>= 0.8.0'} + optionator@0.9.4: dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 fast-levenshtein: 2.0.6 levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 - dev: true + word-wrap: 1.2.5 - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 - dev: true - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} + p-locate@5.0.0: dependencies: p-limit: 3.1.0 - dev: true - /parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} + parent-module@1.0.1: dependencies: callsites: 3.1.0 - dev: true - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - dev: true + path-exists@4.0.0: {} - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - dev: true + path-is-absolute@1.0.1: {} - /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - dev: true + path-key@3.1.1: {} - /path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - dev: true + path-type@4.0.0: {} - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - dev: true + picomatch@2.3.1: {} - /prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - dev: true + prelude-ls@1.2.1: {} - /punycode@2.3.0: - resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} - engines: {node: '>=6'} - dev: true + punycode@2.3.1: {} - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: true + queue-microtask@1.2.3: {} - /regexpp@3.2.0: - resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} - engines: {node: '>=8'} - dev: true + regexpp@3.2.0: {} - /resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - dev: true + resolve-from@4.0.0: {} - /reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: true + reusify@1.0.4: {} - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true + rimraf@3.0.2: dependencies: glob: 7.2.3 - dev: true - /run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - dev: true - /semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} - engines: {node: '>=10'} - hasBin: true + semver@7.5.4: dependencies: lru-cache: 6.0.0 - dev: true - /shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 - dev: true - /shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - dev: true + shebang-regex@3.0.0: {} - /slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - dev: true + slash@3.0.0: {} - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 - dev: true - /strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - dev: true + strip-json-comments@3.1.1: {} - /style-mod@4.1.0: - resolution: {integrity: sha512-Ca5ib8HrFn+f+0n4N4ScTIA9iTOQ7MaGS1ylHcoVqW9J7w2w8PzN6g9gKmTYgGEBH8e120+RCmhpje6jC5uGWA==} - dev: true + style-mod@4.1.2: {} - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} + supports-color@7.2.0: dependencies: has-flag: 4.0.0 - dev: true - /text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - dev: true + text-table@0.2.0: {} - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - dev: true - /tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - dev: true + tslib@1.14.1: {} - /tslib@2.4.0: - resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} - dev: true + tslib@2.4.0: {} - /tsutils@3.21.0(typescript@4.7.4): - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + tsutils@3.21.0(typescript@4.7.4): dependencies: tslib: 1.14.1 typescript: 4.7.4 - dev: true - /type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 - dev: true - /type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - dev: true + type-fest@0.20.2: {} - /typescript@4.7.4: - resolution: {integrity: sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==} - engines: {node: '>=4.2.0'} - hasBin: true - dev: true + typescript@4.7.4: {} - /uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + uri-js@4.4.1: dependencies: - punycode: 2.3.0 - dev: true + punycode: 2.3.1 - /w3c-keyname@2.2.8: - resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} - dev: true + w3c-keyname@2.2.8: {} - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true + which@2.0.2: dependencies: isexe: 2.0.0 - dev: true - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true + word-wrap@1.2.5: {} - /yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: true + wrappy@1.0.2: {} - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - dev: true + yallist@4.0.0: {} + + yocto-queue@0.1.0: {} diff --git a/src/floatSearchIndex.ts b/src/floatSearchIndex.ts index 0a38c2c..dfa1463 100644 --- a/src/floatSearchIndex.ts +++ b/src/floatSearchIndex.ts @@ -2,28 +2,34 @@ import { addIcon, App, Editor, - ExtraButtonComponent, Keymap, + ExtraButtonComponent, + Keymap, Menu, MenuItem, Modal, + ObsidianProtocolData, OpenViewState, PaneType, Plugin, + requireApiVersion, Scope, - SearchView, setIcon, Setting, + SearchView, + setIcon, + Setting, TAbstractFile, TFile, + ViewStateResult, Workspace, WorkspaceContainer, WorkspaceItem, - WorkspaceLeaf -} from 'obsidian'; + WorkspaceLeaf, +} from "obsidian"; import { EmbeddedView, isEmebeddedLeaf, spawnLeafView } from "./leafView"; import { around } from "monkey-around"; import { debounce } from "obsidian"; type sortOrder = - "alphabetical" + | "alphabetical" | "alphabeticalReverse" | "byModifiedTime" | "byModifiedTimeReverse" @@ -37,7 +43,7 @@ interface viewType { icon: string; } -interface searchState { +interface searchState extends Record { collapseAll?: boolean; explainSearch?: boolean; extraContext?: boolean; @@ -50,9 +56,10 @@ interface searchState { interface FloatSearchSettings { searchViewState: searchState; showFilePath: boolean; + showInstructions: boolean; + defaultViewType: searchType; } - const DEFAULT_SETTINGS: FloatSearchSettings = { searchViewState: { collapseAll: false, @@ -63,53 +70,86 @@ const DEFAULT_SETTINGS: FloatSearchSettings = { sortOrder: "alphabetical", }, showFilePath: false, + showInstructions: true, + defaultViewType: "modal", }; -const allViews: viewType[] = [{ - type: "modal", - icon: "square-equal" -}, { - type: "sidebar", - icon: "panel-left-inactive" -}, { - type: "split", - icon: "split-square-horizontal" -}, { - type: "tab", - icon: "panel-top" -}, { - type: "window", - icon: "app-window" -}]; +const allViews: viewType[] = [ + { + type: "modal", + icon: "square-equal", + }, + { + type: "sidebar", + icon: "panel-left-inactive", + }, + { + type: "split", + icon: "split-square-horizontal", + }, + { + type: "tab", + icon: "panel-top", + }, + { + type: "window", + icon: "app-window", + }, +]; -const initSearchViewWithLeaf = async (app: App, type: PaneType | 'sidebar', state?: searchState) => { - const leaf = type === 'sidebar' ? app.workspace.getLeftLeaf(false) : app.workspace.getLeaf(type); - leaf?.setPinned(type !== 'sidebar'); +const initSearchViewWithLeaf = async ( + app: App, + type: PaneType | "sidebar", + state?: searchState +) => { + const leaf = + type === "sidebar" + ? app.workspace.getLeftLeaf(false) + : app.workspace.getLeaf(type); + leaf?.setPinned(type !== "sidebar"); await leaf?.setViewState({ type: "search", active: true, - state: state + state: { + ...DEFAULT_SETTINGS.searchViewState, + ...state, + }, }); setTimeout(() => { const inputEl = leaf?.containerEl.getElementsByTagName("input")?.[0]; - inputEl.focus(); + inputEl?.focus(); }, 0); }; export default class FloatSearchPlugin extends Plugin { settings: FloatSearchSettings; - private state: any; + private state: searchState; private modal: FloatSearchModal; + allLoaded: boolean = false; + queryLoaded: boolean = false; + patchedDomChildren = false; public applySettingsUpdate = debounce(async () => { + if (!this.allLoaded) { + this.allLoaded = true; + return; + } + // Ensure all searchState properties are preserved + this.settings.searchViewState = { + ...DEFAULT_SETTINGS.searchViewState, + ...this.settings.searchViewState, + query: this.state?.query || "", + }; await this.saveSettings(); }, 1000); private applyStateUpdate = debounce(() => { + // Preserve all state properties when updating this.state = { + ...DEFAULT_SETTINGS.searchViewState, ...this.state, query: "", }; @@ -117,14 +157,16 @@ export default class FloatSearchPlugin extends Plugin { async onload() { await this.loadSettings(); - this.initState(); - this.registerIcons(); this.app.workspace.onLayoutReady(() => { + this.initState(); + this.registerIcons(); + this.patchWorkspace(); this.patchWorkspaceLeaf(); this.patchSearchView(); this.patchVchildren(); + this.patchDragManager(); }); this.registerObsidianURIHandler(); @@ -132,18 +174,34 @@ export default class FloatSearchPlugin extends Plugin { this.registerEditorMenuHandler(); this.registerContextMenuHandler(); - this.addRibbonIcon('search', 'Search Obsidian In Modal', () => this.initModal(this.state, true, true)); + this.addRibbonIcon( + "search", + `Search obsidian in ${this.settings.defaultViewType} view`, + () => { + if (this.settings.defaultViewType === "modal") { + this.initModal(this.state, true, true); + } else { + initSearchViewWithLeaf( + this.app, + this.settings.defaultViewType, + { + ...this.state, + query: "", + } + ); + } + } + ); this.updateFilePathVisibility(); } onunload() { - this.state = undefined; + // this.state = DEFAULT_SETTINGS.searchViewState; this.modal?.close(); } updateFilePathVisibility() { - const {showFilePath} = this.settings; - console.log(showFilePath); + const { showFilePath } = this.settings; document.body.toggleClass("show-file-path", showFilePath); } @@ -153,24 +211,33 @@ export default class FloatSearchPlugin extends Plugin { this.applySettingsUpdate(); } - registerIcons() { - addIcon('panel-left-inactive', ``); - addIcon('app-window', ``); - addIcon('panel-top', ``); - addIcon('square-equal', ``); - } - initState() { - this.state = this.settings.searchViewState as searchState; + // Initialize state with all default properties + this.state = { + ...DEFAULT_SETTINGS.searchViewState, + ...this.settings.searchViewState, + }; } - initModal(state: searchState, stateSave: boolean = false, clearQuery: boolean = false) { - this.modal = new FloatSearchModal((state) => { - this.state = state; - if (stateSave) this.applyStateUpdate(); - this.settings.searchViewState = state as searchState; - this.applySettingsUpdate(); - }, this, {...state, query: clearQuery ? "" : state.query}); + initModal( + state: searchState, + stateSave: boolean = false, + clearQuery: boolean = false + ) { + this.modal = new FloatSearchModal( + (state) => { + // Preserve all state properties when updating from modal + this.state = { + ...DEFAULT_SETTINGS.searchViewState, + ...state, + }; + if (stateSave) this.applyStateUpdate(); + this.settings.searchViewState = this.state; + this.applySettingsUpdate(); + }, + this, + { ...state, query: clearQuery ? "" : state.query } + ); this.modal.open(); } @@ -183,13 +250,16 @@ export default class FloatSearchPlugin extends Plugin { const activeLeaf = (this as Workspace).activeLeaf; if (activeLeaf) { // @ts-ignore - const fsCtnEl = (activeLeaf.parent.containerEl as HTMLElement).parentElement; + const fsCtnEl = ( + activeLeaf.parent.containerEl as HTMLElement + ).parentElement; if (fsCtnEl?.hasClass("fs-content")) { if (activeLeaf.view.getViewType() === "markdown") { return activeLeaf; } - const newLeaf = self.app.workspace.getMostRecentLeaf(); + const newLeaf = + self.app.workspace.getMostRecentLeaf(); if (newLeaf) { this.setActiveLeaf(newLeaf); @@ -217,19 +287,29 @@ export default class FloatSearchPlugin extends Plugin { if (old.call(this, arg1, arg2)) return true; // Handle old/new API parameter swap - const cb: leafIterator = (typeof arg1 === "function" ? arg1 : arg2) as leafIterator; - const parent: WorkspaceItem = (typeof arg1 === "function" ? arg2 : arg1) as WorkspaceItem; + const cb: leafIterator = ( + typeof arg1 === "function" ? arg1 : arg2 + ) as leafIterator; + const parent: WorkspaceItem = ( + typeof arg1 === "function" ? arg2 : arg1 + ) as WorkspaceItem; - if (!parent) return false; // <- during app startup, rootSplit can be null - if (layoutChanging) return false; // Don't let HEs close during workspace change + if (!parent) return false; // <- during app startup, rootSplit can be null + if (layoutChanging) return false; // Don't let HEs close during workspace change // 0.14.x doesn't have WorkspaceContainer; this can just be an instanceof check once 15.x is mandatory: - if (parent === self.app.workspace.rootSplit || (WorkspaceContainer && parent instanceof WorkspaceContainer)) { - for (const popover of EmbeddedView.popoversForWindow((parent as WorkspaceContainer).win)) { + if ( + parent === self.app.workspace.rootSplit || + (WorkspaceContainer && + parent instanceof WorkspaceContainer) + ) { + for (const popover of EmbeddedView.popoversForWindow( + (parent as WorkspaceContainer).win + )) { // Use old API here for compat w/0.14.x - if (old.call(this, cb, popover.rootSplit)) return false; - + if (old.call(this, cb, popover.rootSplit)) + return false; } } return false; @@ -250,14 +330,18 @@ export default class FloatSearchPlugin extends Plugin { }; }, pushUndoHistory(old: any) { - return function (leaf: WorkspaceLeaf, id: string, ...args: any[]) { + return function ( + leaf: WorkspaceLeaf, + id: string, + ...args: any[] + ) { const viewState = leaf.getViewState(); if (viewState.type === "search") { return; } return old.call(this, leaf, id, ...args); }; - } + }, }); this.register(uninstaller); } @@ -269,13 +353,16 @@ export default class FloatSearchPlugin extends Plugin { getRoot(old) { return function () { const top = old.call(this); - return top?.getRoot === this.getRoot ? top : top?.getRoot(); + return top?.getRoot === this.getRoot + ? top + : top?.getRoot(); }; }, setPinned(old) { return function (pinned: boolean) { old.call(this, pinned); - if (isEmebeddedLeaf(this) && !pinned) this.setPinned(true); + if (isEmebeddedLeaf(this) && !pinned) + this.setPinned(true); }; }, openFile(old) { @@ -292,39 +379,53 @@ export default class FloatSearchPlugin extends Plugin { }; }, }), - 1, + 1 ); - const recentFiles = this.app.plugins.plugins["recent-files-obsidian"]; + const recentFiles = + this.app.plugins.plugins[ + "recent-files-obsidian" + ]; if (recentFiles) { setTimeout( around(recentFiles, { shouldAddFile(old) { return function (_file: TFile) { // Don't update the Recent Files plugin - return _file !== file && old.call(this, _file); + return ( + _file !== file && + old.call(this, _file) + ); }; }, }), - 1, + 1 ); } - } const view = old.call(this, file, openState); setTimeout(() => { - const fsCtnEl = (this.parent.containerEl as HTMLElement).parentElement; - if (!(fsCtnEl?.classList.contains("fs-content"))) return; + const fsCtnEl = ( + this.parent.containerEl as HTMLElement + ).parentElement; + if (!fsCtnEl?.classList.contains("fs-content")) + return; if (file.extension != "canvas") return; const canvas = this.view.canvas; setTimeout(() => { if (canvas && openState?.eState?.match) { - let node = canvas.data.nodes?.find((e: any) => e.text === openState.eState.match.content); - node = canvas.nodes.get(node.id); - - canvas.selectOnly(node); - canvas.zoomToSelection(); + let node = canvas.data.nodes?.find( + (e: any) => + e.text === + (openState?.eState as any)?.match + ?.content + ); + if (node) { + node = canvas.nodes.get(node.id); + canvas.selectOnly(node); + canvas.zoomToSelection(); + } } }, 20); }, 1); @@ -332,26 +433,30 @@ export default class FloatSearchPlugin extends Plugin { return view; }; }, - }), + }) ); } patchSearchView() { - const updateCurrentState = (state: searchState) => { - this.state = state; - this.settings.searchViewState = state as searchState; - this.applySettingsUpdate(); - }; - const checkCurrentViewType = (leaf: WorkspaceLeaf) => { - const isModal = document.querySelector('.float-search-modal') !== null; + const isModal = + document.querySelector(".float-search-modal") !== null; const currentLeafRoot = leaf.getRoot(); - if (currentLeafRoot?.side && (currentLeafRoot?.side === "left" || currentLeafRoot?.side === 'right')) return "sidebar"; + if ( + currentLeafRoot?.side && + (currentLeafRoot?.side === "left" || + currentLeafRoot?.side === "right") + ) + return "sidebar"; if (leaf.getContainer()?.type === "window") return "window"; return isModal ? "modal" : "split"; }; - const initViewMenu = (menu: Menu, current: searchType, originLeaf?: WorkspaceLeaf) => { + const initViewMenu = ( + menu: Menu, + current: searchType, + originLeaf?: WorkspaceLeaf + ) => { menu.dom.toggleClass("float-search-view-menu", true); let availableViews = allViews.filter((view) => { if (current === "split") { @@ -362,38 +467,57 @@ export default class FloatSearchPlugin extends Plugin { }); for (const view of availableViews) { menu.addItem((item: MenuItem) => { - item.setTitle(`${view.type} view`).setIcon(`${view.icon}`).onClick(async () => { - if (view.type === "modal") { - originLeaf?.detach(); - setTimeout(() => { - this.initModal(this.state, true, false); - }, 10); - } else if (view.type === "sidebar") { - await initSearchViewWithLeaf(this.app, view.type, this.state); - } else { - if (current === "window") { + item.setTitle(`${view.type} view`) + .setIcon(`${view.icon}`) + .onClick(async () => { + if (view.type === "modal") { originLeaf?.detach(); - setTimeout(async () => { - await initSearchViewWithLeaf(this.app, <"tab" | "split">view.type, this.state); + setTimeout(() => { + this.initModal(this.state, true, false); }, 10); + } else if (view.type === "sidebar") { + await initSearchViewWithLeaf( + this.app, + view.type, + this.state + ); } else { - await initSearchViewWithLeaf(this.app, view.type, this.state); + if (current === "window") { + originLeaf?.detach(); + setTimeout(async () => { + await initSearchViewWithLeaf( + this.app, + <"tab" | "split">view.type, + this.state + ); + }, 10); + } else { + await initSearchViewWithLeaf( + this.app, + view.type, + this.state + ); + } } - - } - if (current === "modal") { - this.modal.close(); - } else { - originLeaf?.detach(); - } - }); + if (current === "modal") { + this.modal.close(); + } else { + originLeaf?.detach(); + } + }); }); } return menu; }; - const patchSearch = () => { - const searchView = this.app.workspace.getLeavesOfType("search")[0]?.view as any; + const patchSearch = async () => { + const searchLeaf = this.app.workspace.getLeavesOfType("search")[0]; + if (!searchLeaf) return false; + if (requireApiVersion("1.7.3") && searchLeaf.isDeferred) { + await searchLeaf.loadIfDeferred(); + } + + const searchView = searchLeaf?.view as any; const self = this; if (!searchView) return false; @@ -406,53 +530,218 @@ export default class FloatSearchPlugin extends Plugin { return function () { old.call(this); - (this.scope as Scope).register(['Mod'], 'w', () => { - this.leaf?.detach(); + const viewSwitchEl = createDiv({ + cls: "float-search-view-switch", }); - - const viewSwitchEl = createDiv({cls: "float-search-view-switch"}); const targetEl = this.filterSectionToggleEl; - const viewSwitchButton = new ExtraButtonComponent(viewSwitchEl); - viewSwitchButton.setIcon('layout-template').setTooltip("Switch to File View"); + const viewSwitchButton = new ExtraButtonComponent( + viewSwitchEl + ); + viewSwitchButton + .setIcon("layout-template") + .setTooltip("Switch to File View"); viewSwitchButton.onClick(() => { - const currentType = checkCurrentViewType(this.leaf); - const layoutMenu = initViewMenu(new Menu(), currentType, this.leaf); - const viewSwitchButtonPos = viewSwitchEl.getBoundingClientRect(); - layoutMenu.showAtPosition({x: viewSwitchButtonPos.x, y: viewSwitchButtonPos.y + 30}); - }); - targetEl.parentElement.insertBefore(viewSwitchEl, targetEl); - if (!this.hidePathToggle) { - this.hidePathToggle = new Setting(this.searchParamsContainerEl).setName('Show file path').addToggle((toggle) => { - toggle.toggleEl.toggleClass('mod-small', true); - toggle.setValue(self.settings.showFilePath).onChange(async (value) => { - self.settings.showFilePath = !value; - self.changeFilePathVisibility(); - self.applySettingsUpdate(); - }); + const currentType = checkCurrentViewType( + this.leaf + ); + const layoutMenu = initViewMenu( + new Menu(), + currentType, + this.leaf + ); + const viewSwitchButtonPos = + viewSwitchEl.getBoundingClientRect(); + layoutMenu.showAtPosition({ + x: viewSwitchButtonPos.x, + y: viewSwitchButtonPos.y + 30, }); + }); + targetEl.parentElement.insertBefore( + viewSwitchEl, + targetEl + ); + if (!this.hidePathToggle) { + this.hidePathToggle = new Setting( + this.searchParamsContainerEl + ) + .setName("Show file path") + .addToggle((toggle) => { + toggle.toggleEl.toggleClass( + "mod-small", + true + ); + toggle + .setValue( + self.settings.showFilePath + ) + .onChange(async (value) => { + self.settings.showFilePath = + !value; + self.changeFilePathVisibility(); + self.applySettingsUpdate(); + }); + }); + } + if (!this.showInstructionsToggle) { + this.showInstructionsToggle = new Setting( + this.searchParamsContainerEl + ) + .setName("Show instructions") + .addToggle((toggle) => { + toggle.toggleEl.toggleClass( + "mod-small", + true + ); + toggle + .setValue( + self.settings.showInstructions + ) + .onChange(async (value) => { + self.settings.showInstructions = + value; + self.applySettingsUpdate(); + }); + }); + } + if (!this.defaultViewTypeDropdown) { + this.defaultViewTypeDropdown = new Setting( + this.searchParamsContainerEl + ) + .setName("Default view type") + .addDropdown((dropdown) => { + dropdown.addOptions({ + modal: "Modal", + split: "Split", + tab: "Tab", + window: "Window", + sidebar: "Sidebar", + }); + dropdown.setValue( + self.settings.defaultViewType + ); + dropdown.onChange((value) => { + self.settings.defaultViewType = + value as searchType; + self.applySettingsUpdate(); + }); + }); + } + }; + }, + setExplainSearch(old) { + return function (value: boolean) { + old.call(this, value); + if (self.app.workspace.layoutReady) { + self.settings.searchViewState.explainSearch = + value; + self.applySettingsUpdate(); + } + }; + }, + setCollapseAll(old) { + return function (value: boolean) { + old.call(this, value); + if (self.app.workspace.layoutReady) { + self.settings.searchViewState.collapseAll = + value; + self.applySettingsUpdate(); + } + }; + }, + setExtraContext(old) { + return function (value: boolean) { + old.call(this, value); + if (self.app.workspace.layoutReady) { + self.settings.searchViewState.extraContext = + value; + self.applySettingsUpdate(); + } + }; + }, + setMatchingCase(old) { + return function (value: boolean) { + old.call(this, value); + if (self.app.workspace.layoutReady) { + self.settings.searchViewState.matchingCase = + value; + self.applySettingsUpdate(); + } + }; + }, + setSortOrder(old) { + return function (value: string) { + old.call(this, value); + if (self.app.workspace.layoutReady) { + self.settings.searchViewState.sortOrder = + value as sortOrder; + self.applySettingsUpdate(); + } + }; + }, + setQuery(old) { + return function (value: string) { + old.call(this, value); + if (self.app.workspace.layoutReady) { + self.settings.searchViewState.query = value; + self.applySettingsUpdate(); } }; }, setState(old) { - return async function (state: any, result: any) { - old.call(this, state, result); - if (self.app.workspace.layoutReady) { - updateCurrentState({ - ...state, - query: this.searchComponent.getValue(), - }); + return function ( + state: any, + eState: Record + ) { + if ( + typeof state.query === "string" && + !state?.triggerBySelf + ) { + if (self.queryLoaded) { + if ( + self.settings.defaultViewType === + "modal" + ) { + self.initModal( + { + ...state, + query: state.query, + current: false, + triggerBySelf: true, + }, + true, + false + ); + } else { + initSearchViewWithLeaf( + self.app, + self.settings.defaultViewType, + { + ...state, + query: state.query, + current: false, + triggerBySelf: true, + } + ); + } + + return; + } + + self.queryLoaded = true; } + + old.call(this, state, eState); }; - } + }, }) ); searchView.leaf?.rebuildView(); return true; }; - this.app.workspace.onLayoutReady(() => { - if (!patchSearch()) { - const evt = this.app.workspace.on("layout-change", () => { - patchSearch() && this.app.workspace.offref(evt); + this.app.workspace.onLayoutReady(async () => { + if (!(await patchSearch())) { + const evt = this.app.workspace.on("layout-change", async () => { + (await patchSearch()) && this.app.workspace.offref(evt); }); this.registerEvent(evt); } @@ -461,7 +750,8 @@ export default class FloatSearchPlugin extends Plugin { patchVchildren() { const patchSearchDom = () => { - const searchView = this.app.workspace.getLeavesOfType("search")[0]?.view as any; + const searchView = this.app.workspace.getLeavesOfType("search")[0] + ?.view as any; if (!searchView) return false; const dom = searchView.dom.constructor; @@ -475,22 +765,28 @@ export default class FloatSearchPlugin extends Plugin { // console.log(this?.vChildren?.children); this?.vChildren?.children?.forEach((child: any) => { if (child?.file && !child?.pathEl) { - const path = (child?.file.parent?.path) || '/'; - const pathEl = createDiv({cls: "search-result-file-path"}); - const pathIconEl = pathEl.createDiv({cls: "search-result-file-path-icon"}); + const path = + child?.file.parent?.path || "/"; + const pathEl = createDiv({ + cls: "search-result-file-path", + }); + const pathIconEl = pathEl.createDiv({ + cls: "search-result-file-path-icon", + }); setIcon(pathIconEl, "folder"); const pathTextEl = pathEl.createDiv({ cls: "search-result-file-path-text", - text: path + text: path, }); child.pathEl = pathEl; - const titleEl = child.containerEl.find('.search-result-file-title'); + const titleEl = child.containerEl.find( + ".search-result-file-title" + ); titleEl.prepend(pathEl); } }); - }; - } + }, }) ); return true; @@ -505,12 +801,71 @@ export default class FloatSearchPlugin extends Plugin { }); } + patchDragManager() { + const manager = this.app.dragManager; + if (!manager) return; + const self = this; + + this.register( + around(manager.constructor.prototype, { + dragFile(old: any) { + return function (e: any, a: TFile) { + self?.modal?.close(); + + const result = old.call(this, e, a); + return result; + }; + }, + }) + ); + } + registerObsidianURIHandler() { - this.registerObsidianProtocolHandler("fs", (path) => this.initModal({ - ...this.state, - query: path.query, - current: false - }, true, false)); + /** + * Handles obsidian://fs protocol for search functionality + * + * @param viewType - Where to open search: + * - "modal" (default) - Opens in modal popup + * - "tab" - Opens in new tab + * - "split" - Opens in split pane + * - "window" - Opens in new window + * - "sidebar" - Opens in sidebar + * @param query - Search query string + * + * Examples: + * obsidian://fs?query=hello&viewType=modal + * obsidian://fs?query=world&viewType=tab + * obsidian://fs?query=test (defaults to modal) + */ + this.registerObsidianProtocolHandler( + "fs", + async (path: ObsidianProtocolData) => { + const viewType = path.viewType || "modal"; + const query = path.query || ""; + + if (viewType === "modal") { + this.initModal( + { + ...this.state, + query, + current: false, + }, + true, + false + ); + } else { + await initSearchViewWithLeaf( + this.app, + viewType as PaneType | "sidebar", + { + ...this.state, + query, + current: false, + } + ); + } + } + ); } private createCommand(options: { @@ -530,66 +885,87 @@ export default class FloatSearchPlugin extends Plugin { if (!checking) { const currentFile = activeLeaf.view.file; const query = options.queryBuilder(currentFile); - this.initModal({...this.state, query, current: true}, true, false); + this.initModal( + { ...this.state, query, current: true }, + true, + false + ); } return true; } - } + }, }); } registerObsidianCommands() { this.addCommand({ - id: 'show-or-hide-file-path', - name: 'Show/hide file path', + id: "show-or-hide-file-path", + name: "Show/hide file path", callback: () => { this.changeFilePathVisibility(); - } + }, }); - this.addCommand({ - id: 'search-obsidian-globally', - name: 'Search obsidian globally', - callback: () => this.initModal({...this.state, query: "", current: false}, false, true) + id: "search-obsidian-globally", + name: "Search obsidian globally", + callback: () => + this.initModal( + { ...this.state, query: "", current: false }, + false, + true + ), }); - this.addCommand({ - id: 'search-obsidian-globally-state', - name: 'Search Obsidian Globally (With Last State)', - callback: () => this.initModal({...this.state, query: this.state.query, current: false}, true, false) + id: "search-obsidian-globally-state", + name: "Search Obsidian Globally (With Last State)", + callback: () => + this.initModal( + { ...this.state, query: this.state.query, current: false }, + true, + false + ), }); - this.createCommand({ - id: 'search-in-backlink', - name: 'Search in backlink Of current file', + id: "search-in-backlink", + name: "Search in backlink Of current file", queryBuilder: (file) => { - return " /\\[\\[" + (file.extension === "canvas" ? file.name : file.basename) + "(\\|[^\\]]*)?\\]\\]/"; - } + return ( + " /\\[\\[" + + (file.extension === "canvas" ? file.name : file.basename) + + "(\\|[^\\]]*)?\\]\\]/" + ); + }, }); this.createCommand({ - id: 'search-in-current-file', - name: 'Search in current file', + id: "search-in-current-file", + name: "Search in current file", queryBuilder: (file) => { return " path:" + `"${file.path}"`; - } + }, }); - for (const type of ['split', 'tab', 'window'] as PaneType[]) { + for (const type of ["split", "tab", "window"] as PaneType[]) { this.addCommand({ id: `open-search-view-${type}`, name: `Open search view (${type})`, callback: async () => { - const existingLeaf = this.app.workspace.getLeavesOfType("search"); + const existingLeaf = + this.app.workspace.getLeavesOfType("search"); switch (type) { case "window": // @ts-ignore - const isExistingWindowLeaf = existingLeaf.find((leaf) => leaf.parentSplit.parent.type === "window"); + const isExistingWindowLeaf = existingLeaf.find( + (leaf) => + leaf.parentSplit.parent.type === "window" + ); if (isExistingWindowLeaf) { - this.app.workspace.revealLeaf(isExistingWindowLeaf); + this.app.workspace.revealLeaf( + isExistingWindowLeaf + ); return; } await initSearchViewWithLeaf(this.app, type); @@ -597,80 +973,150 @@ export default class FloatSearchPlugin extends Plugin { case "tab": case "split": // @ts-ignore - const isExistingLeaf = existingLeaf.find((leaf) => !leaf.parentSplit.parent.side); + const isExistingLeaf = existingLeaf.find( + (leaf) => !leaf.parentSplit.parent.side + ); if (isExistingLeaf) { this.app.workspace.revealLeaf(isExistingLeaf); isExistingLeaf.setViewState({ type: "search", active: true, - state: this.state + state: this.state as Record< + string, + unknown + >, }); return; } await initSearchViewWithLeaf(this.app, type); break; } - } + }, }); } } registerEditorMenuHandler() { this.registerEvent( - this.app.workspace.on('editor-menu', (menu: Menu, editor: Editor) => { - if (!editor) { - return; - } - if (editor.getSelection().length === 0) { - return; - } - const selection = editor.getSelection().trim(); - let searchWord = selection; + this.app.workspace.on( + "editor-menu", + (menu: Menu, editor: Editor) => { + if (!editor) { + return; + } + if (editor.getSelection().length === 0) { + return; + } + const selection = editor.getSelection().trim(); + let searchWord = selection; - if (selection.length > 8) { - searchWord = selection.substring(0, 3) + "..." + selection.substring(selection.length - 3, selection.length); - } else { - searchWord = selection; - } + if (selection.length > 8) { + searchWord = + selection.substring(0, 3) + + "..." + + selection.substring( + selection.length - 3, + selection.length + ); + } else { + searchWord = selection; + } - menu.addItem((item) => { - // Add sub menu - item.setTitle('Search "' + searchWord + '"' + " in Float Search").setIcon("search") - .onClick(() => this.initModal({...this.state, query: selection, current: false}, true, false)); - }); - })); + menu.addItem((item) => { + // Add sub menu + item.setTitle( + 'Search "' + searchWord + '"' + " in Float Search" + ) + .setIcon("search") + .onClick(() => + this.initModal( + { + ...this.state, + query: selection, + current: false, + }, + true, + false + ) + ); + }); + } + ) + ); } registerContextMenuHandler() { this.registerEvent( - this.app.workspace.on("file-menu", (menu: Menu, file: TAbstractFile, source: string, leaf?: WorkspaceLeaf) => { - const popover = leaf ? EmbeddedView.forLeaf(leaf) : undefined; - if (file instanceof TFile && !popover && !leaf) { - menu.addItem(item => { - item - .setIcon("popup-open") - .setTitle("Open in Float Preview") - .onClick(async () => { - if (this.modal) { - await this.modal.initFileView(file, undefined); + this.app.workspace.on( + "file-menu", + ( + menu: Menu, + file: TAbstractFile, + source: string, + leaf?: WorkspaceLeaf + ) => { + const popover = leaf + ? EmbeddedView.forLeaf(leaf) + : undefined; + if (file instanceof TFile && !popover && !leaf) { + menu.addItem((item) => { + item.setIcon("popup-open") + .setTitle("Open in Float Preview") + .onClick(async () => { + if (this.modal) { + await this.modal.initFileView( + file, + undefined + ); - return; - } + return; + } - this.initModal({...this.state, current: false}, true, true); - setTimeout(async () => { - await this.modal.initFileView(file, undefined); - }, 20); - }) - .setSection?.("open"); - }); + this.initModal( + { ...this.state, current: false }, + true, + true + ); + setTimeout(async () => { + await this.modal.initFileView( + file, + undefined + ); + }, 20); + }) + .setSection?.("open"); + }); + } } - }), + ) + ); + } + + registerIcons() { + addIcon( + "panel-left-inactive", + `` + ); + addIcon( + "app-window", + `` + ); + addIcon( + "panel-top", + `` + ); + addIcon( + "square-equal", + `` ); } async loadSettings() { - this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData()); + this.settings = Object.assign( + {}, + DEFAULT_SETTINGS, + await this.loadData() + ); } async saveSettings() { @@ -678,18 +1124,26 @@ export default class FloatSearchPlugin extends Plugin { } } -function createInstructionElement(parentEl: HTMLElement, divCls: string, keyText: string, text: string) { - const divEl = parentEl.createDiv({cls: divCls}); - const iconEl = divEl.createSpan({cls: "float-search-modal-instructions-key"}); - const textEl = divEl.createSpan({cls: "float-search-modal-instructions-text"}); +function createInstructionElement( + parentEl: HTMLElement, + divCls: string, + keyText: string, + text: string +) { + const divEl = parentEl.createDiv({ cls: divCls }); + const iconEl = divEl.createSpan({ + cls: "float-search-modal-instructions-key", + }); + const textEl = divEl.createSpan({ + cls: "float-search-modal-instructions-text", + }); iconEl.setText(keyText); textEl.setText(text); - return {divEl, iconEl, textEl}; + return { divEl, iconEl, textEl }; } - class FloatSearchModal extends Modal { private readonly plugin: FloatSearchPlugin; private searchEmbeddedView: EmbeddedView; @@ -710,7 +1164,12 @@ class FloatSearchModal extends Modal { private focusdItem: any; - constructor(cb: (state: any) => void, plugin: FloatSearchPlugin, state: any, viewType: string = "search") { + constructor( + cb: (state: any) => void, + plugin: FloatSearchPlugin, + state: any, + viewType: string = "search" + ) { super(plugin.app); this.plugin = plugin; this.cb = cb; @@ -719,10 +1178,14 @@ class FloatSearchModal extends Modal { } async onOpen() { - const {contentEl, containerEl, modalEl} = this; + const { contentEl, containerEl, modalEl } = this; - this.searchCtnEl = contentEl.createDiv({cls: "float-search-modal-search-ctn"}); - this.instructionsEl = modalEl.createDiv({cls: "float-search-modal-instructions"}); + this.searchCtnEl = contentEl.createDiv({ + cls: "float-search-modal-search-ctn", + }); + this.instructionsEl = modalEl.createDiv({ + cls: "float-search-modal-instructions", + }); this.initInstructions(this.instructionsEl); this.initCss(contentEl, modalEl, containerEl); @@ -732,7 +1195,7 @@ class FloatSearchModal extends Modal { } onClose() { - const {contentEl} = this; + const { contentEl } = this; this.cb(this.searchLeaf.view.getState()); @@ -744,24 +1207,74 @@ class FloatSearchModal extends Modal { } initInstructions(instructionsEl: HTMLElement) { - const navigate = createInstructionElement(instructionsEl, "float-search-modal-instructions-navigate", "↑↓", "Navigate"); - const collapse = createInstructionElement(instructionsEl, "float-search-modal-instructions-collapse", "Shift+↑↓", "Collapse/Expand"); - const enter = createInstructionElement(instructionsEl, "float-search-modal-instructions-enter", "↵", "Open in background"); - const altEnter = createInstructionElement(instructionsEl, "float-search-modal-instructions-alt-enter", "Alt+↵", "Open File and Close"); - const ctrlEnter = createInstructionElement(instructionsEl, "float-search-modal-instructions-ctrl-enter", "Ctrl+↵", "Create File When Not Exist"); - const tab = createInstructionElement(instructionsEl, "float-search-modal-instructions-tab", "Tab/Shift+Tab", "Preview/Close Preview"); - const switchView = createInstructionElement(instructionsEl, "float-search-modal-instructions-switch", "Ctrl+G", "Switch Between Search and File View"); - const click = createInstructionElement(instructionsEl, "float-search-modal-instructions-click", "Alt+Click", "Close Modal While In File View"); + if (!this.plugin.settings.showInstructions) { + return; + } + const navigate = createInstructionElement( + instructionsEl, + "float-search-modal-instructions-navigate", + "↑↓", + "Navigate" + ); + const collapse = createInstructionElement( + instructionsEl, + "float-search-modal-instructions-collapse", + "Shift+↑↓", + "Collapse/Expand" + ); + const enter = createInstructionElement( + instructionsEl, + "float-search-modal-instructions-enter", + "↵", + "Open in background" + ); + const altEnter = createInstructionElement( + instructionsEl, + "float-search-modal-instructions-alt-enter", + "Alt+↵", + "Open File and Close" + ); + const ctrlEnter = createInstructionElement( + instructionsEl, + "float-search-modal-instructions-ctrl-enter", + "Ctrl+↵", + "Create File When Not Exist" + ); + const tab = createInstructionElement( + instructionsEl, + "float-search-modal-instructions-tab", + "Tab/Shift+Tab", + "Preview/Close Preview" + ); + const switchView = createInstructionElement( + instructionsEl, + "float-search-modal-instructions-switch", + "Ctrl+G", + "Switch Between Search and File View" + ); + const click = createInstructionElement( + instructionsEl, + "float-search-modal-instructions-click", + "Alt+Click", + "Close Modal While In File View" + ); } - initCss(contentEl: HTMLElement, modalEl: HTMLElement, containerEl: HTMLElement) { + initCss( + contentEl: HTMLElement, + modalEl: HTMLElement, + containerEl: HTMLElement + ) { contentEl.classList.add("float-search-modal-content"); modalEl.classList.add("float-search-modal"); containerEl.classList.add("float-search-modal-container"); } async initSearchView(contentEl: HTMLElement) { - const [createdLeaf, embeddedView] = spawnLeafView(this.plugin, contentEl); + const [createdLeaf, embeddedView] = spawnLeafView( + this.plugin, + contentEl + ); this.searchLeaf = createdLeaf; this.searchEmbeddedView = embeddedView; @@ -774,7 +1287,16 @@ class FloatSearchModal extends Modal { await this.searchLeaf.view.setState(this.state, { history: false, }); - this.state?.current ? (this.searchLeaf.view as SearchView).searchComponent.inputEl.setSelectionRange(0, 0) : (this.searchLeaf.view as SearchView).searchComponent.inputEl.setSelectionRange(0, this.state?.query?.length); + this.state?.current + ? ( + this.searchLeaf.view as SearchView + ).searchComponent.inputEl.setSelectionRange(0, 0) + : ( + this.searchLeaf.view as SearchView + ).searchComponent.inputEl.setSelectionRange( + 0, + this.state?.query?.length + ); }, 0); return; @@ -787,46 +1309,44 @@ class FloatSearchModal extends Modal { const currentView = this.searchLeaf.view as SearchView; switch (e.key) { case "ArrowDown": + case "n": + if (e.key === "n" && !e.ctrlKey) break; + if (e.key === "n") e.preventDefault(); + if (e.shiftKey) { currentView.onKeyShowMoreAfter(e); if (currentView.dom.focusedItem) { if (currentView.dom.focusedItem.collapsible) { currentView.dom.focusedItem.setCollapse(false); } - this.focusdItem = currentView.dom.focusedItem; - } - break; } else { currentView.onKeyArrowDownInFocus(e); - this.focusdItem = currentView.dom.focusedItem; - - break; } + break; case "ArrowUp": + case "p": + if (e.key === "p" && !e.ctrlKey) break; + if (e.key === "p") e.preventDefault(); + if (e.shiftKey) { currentView.onKeyShowMoreBefore(e); if (currentView.dom.focusedItem) { if (currentView.dom.focusedItem.collapseEl) { currentView.dom.focusedItem.setCollapse(true); } - this.focusdItem = currentView.dom.focusedItem; - } - break; } else { currentView.onKeyArrowUpInFocus(e); - this.focusdItem = currentView.dom.focusedItem; if (!currentView.dom.focusedItem.content) { this.focusdItem = undefined; } - - break; } + break; case "ArrowLeft": currentView.onKeyArrowLeftInFocus(e); break; @@ -834,10 +1354,14 @@ class FloatSearchModal extends Modal { currentView.onKeyArrowRightInFocus(e); break; case "Enter": - if (Keymap.isModifier(e, 'Mod') && Keymap.isModifier(e, 'Shift') && !this.focusdItem) { + if ( + Keymap.isModifier(e, "Mod") && + Keymap.isModifier(e, "Shift") && + !this.focusdItem + ) { e.preventDefault(); const fileName = inputEl.value.trim(); - const real = fileName.replace(/[/\\?%*:|"<>]/g, '-'); + const real = fileName.replace(/[/\\?%*:|"<>]/g, "-"); this.plugin.app.workspace.openLinkText(real, "", true); this.close(); break; @@ -854,7 +1378,10 @@ class FloatSearchModal extends Modal { this.fileLeaf?.detach(); this.fileLeaf = undefined; this.fileEmbeddedView?.unload(); - this.modalEl.toggleClass("float-search-width", false); + this.modalEl.toggleClass( + "float-search-width", + false + ); this.fileEl.detach(); break; @@ -863,14 +1390,19 @@ class FloatSearchModal extends Modal { if (currentView.dom.focusedItem) { const item = currentView.dom.focusedItem; - const file = item.parent.file instanceof TFile ? item.parent.file : item.file; + const file = + item.parent.file instanceof TFile + ? item.parent.file + : item.file; - item.parent.file instanceof TFile ? this.initFileView(file, { - match: { - content: item.content, - matches: item.matches - } - }) : this.initFileView(file, undefined); + item.parent.file instanceof TFile + ? this.initFileView(file, { + match: { + content: item.content, + matches: item.matches, + }, + }) + : this.initFileView(file, undefined); } break; case "e": @@ -878,12 +1410,20 @@ class FloatSearchModal extends Modal { e.preventDefault(); if (this.fileLeaf) { const estate = this.fileLeaf.getViewState(); - estate.state.mode = "preview" === estate.state.mode ? "source" : "preview"; + estate.state = { + ...estate.state, + mode: + "preview" === estate.state?.mode + ? "source" + : "preview", + }; this.fileLeaf.setViewState(estate, { - focus: !0 + focus: !0, }); setTimeout(() => { - (this.searchLeaf.view as SearchView).searchComponent.inputEl.focus(); + ( + this.searchLeaf.view as SearchView + ).searchComponent.inputEl.focus(); }, 0); } } @@ -903,15 +1443,16 @@ class FloatSearchModal extends Modal { navigator.clipboard.writeText(text); } break; - } }; } initContent() { - const {contentEl} = this; + const { contentEl } = this; contentEl.onclick = (e) => { - const resultElement = contentEl.getElementsByClassName('search-results-children')[0]; + const resultElement = contentEl.getElementsByClassName( + "search-results-children" + )[0]; if (resultElement.children.length < 2) { return; } @@ -920,13 +1461,17 @@ class FloatSearchModal extends Modal { if (e.altKey || !this.fileLeaf) { while (targetElement) { - if (targetElement.classList.contains('tree-item-icon')) { + if (targetElement.classList.contains("tree-item-icon")) { break; } - if (targetElement.classList.contains('search-result-hover-button')) { + if ( + targetElement.classList.contains( + "search-result-hover-button" + ) + ) { break; } - if (targetElement.classList.contains('tree-item')) { + if (targetElement.classList.contains("tree-item")) { this.close(); break; } @@ -938,28 +1483,37 @@ class FloatSearchModal extends Modal { if (this.fileLeaf) { const currentView = this.searchLeaf.view as SearchView; - if ((this.searchCtnEl as Node).contains(targetElement as Node)) { + if ( + (this.searchCtnEl as Node).contains(targetElement as Node) + ) { while (targetElement) { - if (targetElement.classList.contains('tree-item')) { + if (targetElement.classList.contains("tree-item")) { break; } targetElement = targetElement.parentElement; } if (!targetElement) return; - const fileInnerEl = targetElement?.getElementsByClassName("tree-item-inner")[0] as HTMLElement; + const fileInnerEl = targetElement?.getElementsByClassName( + "tree-item-inner" + )[0] as HTMLElement; const innerText = fileInnerEl.innerText; - const file = this.plugin.app.metadataCache.getFirstLinkpathDest(innerText, ""); + const file = + this.plugin.app.metadataCache.getFirstLinkpathDest( + innerText, + "" + ); if (file) { const item = currentView.dom.resultDomLookup.get(file); currentView.dom.setFocusedItem(item); this.initFileView(file, undefined); - (this.searchLeaf.view as SearchView).searchComponent.inputEl.focus(); + ( + this.searchLeaf.view as SearchView + ).searchComponent.inputEl.focus(); } } - return; } }; @@ -969,10 +1523,15 @@ class FloatSearchModal extends Modal { if (this.fileLeaf) { await this.fileLeaf.openFile(file, { active: false, - eState: state + eState: state, }); - if (this.fileState?.match?.matches[0] === state?.match?.matches[0] && state && this.fileState) { + if ( + this.fileState?.match?.matches[0] === + state?.match?.matches[0] && + state && + this.fileState + ) { setTimeout(() => { if (this.fileLeaf) { this.plugin.app.workspace.setActiveLeaf(this.fileLeaf, { @@ -983,46 +1542,56 @@ class FloatSearchModal extends Modal { } else { this.fileState = state; setTimeout(() => { - (this.searchLeaf.view as SearchView).searchComponent.inputEl.focus(); + ( + this.searchLeaf.view as SearchView + ).searchComponent.inputEl.focus(); }, 0); } return; } - const {contentEl} = this; - this.fileEl = contentEl.createDiv({cls: "float-search-modal-file-ctn"}); + const { contentEl } = this; + this.fileEl = contentEl.createDiv({ + cls: "float-search-modal-file-ctn", + }); this.modalEl.toggleClass("float-search-width", true); this.fileEl.onkeydown = (e) => { if (e.ctrlKey && e.key === "g") { e.preventDefault(); e.stopPropagation(); - (this.searchLeaf.view as SearchView).searchComponent.inputEl.focus(); + ( + this.searchLeaf.view as SearchView + ).searchComponent.inputEl.focus(); } if (e.key === "Tab" && e.ctrlKey) { e.preventDefault(); e.stopPropagation(); - (this.searchLeaf.view as SearchView).searchComponent.inputEl.focus(); + ( + this.searchLeaf.view as SearchView + ).searchComponent.inputEl.focus(); } }; if (!this.fileEl) return; - const [createdLeaf, embeddedView] = spawnLeafView(this.plugin, this.fileEl); + const [createdLeaf, embeddedView] = spawnLeafView( + this.plugin, + this.fileEl + ); this.fileLeaf = createdLeaf; this.fileEmbeddedView = embeddedView; this.fileLeaf.setPinned(true); await this.fileLeaf.openFile(file, { active: false, - eState: state + eState: state, }); this.fileState = state; (this.searchLeaf.view as SearchView).searchComponent.inputEl.focus(); - } } diff --git a/src/leafView.ts b/src/leafView.ts index ea5301a..fc4f6d9 100644 --- a/src/leafView.ts +++ b/src/leafView.ts @@ -53,7 +53,7 @@ function nosuper(base: new (...args: unknown[]) => T): new () => T { export const spawnLeafView = (plugin: FloatSearchPlugin, initiatingEl?: HTMLElement, leaf?: WorkspaceLeaf, onShowCallback?: () => unknown): [WorkspaceLeaf, EmbeddedView] => { // When Obsidian doesn't set any leaf active, use leaf instead. - let parent = app.workspace.activeLeaf as unknown as EmbeddedViewParent; + let parent = plugin.app.workspace.activeLeaf as unknown as EmbeddedViewParent; if (!parent) parent = leaf as unknown as EmbeddedViewParent; if (!initiatingEl) initiatingEl = parent?.containerEl; @@ -72,7 +72,7 @@ export class EmbeddedView extends nosuper(HoverPopover) { detaching = false; opening = false; - rootSplit: WorkspaceSplit = new (WorkspaceSplit as ConstructableWorkspaceSplit)(window.app.workspace, "vertical"); + rootSplit: WorkspaceSplit = new (WorkspaceSplit as ConstructableWorkspaceSplit)(this.plugin.app.workspace, "vertical"); isPinned = true; @@ -93,9 +93,9 @@ export class EmbeddedView extends nosuper(HoverPopover) { originalLinkText: string; static activePopover?: EmbeddedView; - static activeWindows() { + static activeWindows(plugin: FloatSearchPlugin) { const windows: Window[] = [window]; - const {floatingSplit} = app.workspace; + const {floatingSplit} = plugin.app.workspace; if (floatingSplit) { for (const split of floatingSplit.children) { if (split.win) windows.push(split.win); @@ -104,16 +104,16 @@ export class EmbeddedView extends nosuper(HoverPopover) { return windows; } - static containerForDocument(doc: Document) { - if (doc !== document && app.workspace.floatingSplit) - for (const container of app.workspace.floatingSplit.children) { + static containerForDocument(doc: Document, plugin: FloatSearchPlugin) { + if (doc !== document && plugin.app.workspace.floatingSplit) + for (const container of plugin.app.workspace.floatingSplit.children) { if (container.doc === doc) return container; } - return app.workspace.rootSplit; + return plugin.app.workspace.rootSplit; } - static activePopovers() { - return this.activeWindows().flatMap(this.popoversForWindow); + static activePopovers(plugin: FloatSearchPlugin) { + return this.activeWindows(plugin).flatMap(this.popoversForWindow); } static popoversForWindow(win?: Window) { @@ -128,8 +128,8 @@ export class EmbeddedView extends nosuper(HoverPopover) { return el ? popovers.get(el) : undefined; } - static iteratePopoverLeaves(ws: Workspace, cb: (leaf: WorkspaceLeaf) => boolean | void) { - for (const popover of this.activePopovers()) { + static iteratePopoverLeaves(ws: Workspace, cb: (leaf: WorkspaceLeaf) => boolean | void, plugin: FloatSearchPlugin) { + for (const popover of this.activePopovers(plugin)) { if (popover.rootSplit && ws.iterateLeaves(cb, popover.rootSplit)) return true; } return false; @@ -252,7 +252,7 @@ export class EmbeddedView extends nosuper(HoverPopover) { attachLeaf(): WorkspaceLeaf { this.rootSplit.getRoot = () => this.plugin.app.workspace[this.document === document ? "rootSplit" : "floatingSplit"]!; - this.rootSplit.getContainer = () => EmbeddedView.containerForDocument(this.document); + this.rootSplit.getContainer = () => EmbeddedView.containerForDocument(this.document, this.plugin); this.titleEl.insertAdjacentElement("afterend", this.rootSplit.containerEl); const leaf = this.plugin.app.workspace.createLeafInParent(this.rootSplit, 0); @@ -264,7 +264,7 @@ export class EmbeddedView extends nosuper(HoverPopover) { onload(): void { super.onload(); this.registerEvent(this.plugin.app.workspace.on("layout-change", this.updateLeaves, this)); - this.registerEvent(app.workspace.on("layout-change", () => { + this.registerEvent(this.plugin.app.workspace.on("layout-change", () => { // Ensure that top-level items in a popover are not tabbed // @ts-ignore this.rootSplit.children.forEach((item: any, index: any) => { @@ -326,7 +326,7 @@ export class EmbeddedView extends nosuper(HoverPopover) { } shouldShowChild(): boolean { - return EmbeddedView.activePopovers().some(popover => { + return EmbeddedView.activePopovers(this.plugin).some(popover => { if (popover !== this && popover.targetEl && this.hoverEl.contains(popover.targetEl)) { return popover.shouldShow(); } @@ -355,7 +355,7 @@ export class EmbeddedView extends nosuper(HoverPopover) { this.targetEl.appendChild(this.hoverEl); this.onShow(); - app.workspace.onLayoutChange(); + this.plugin.app.workspace.onLayoutChange(); // initializingHoverPopovers.remove(this); // activeHoverPopovers.push(this); @@ -465,7 +465,7 @@ export class EmbeddedView extends nosuper(HoverPopover) { eState = Object.assign(this.buildEphemeralState(file, link), eState); const parentMode = this.getDefaultMode(); const state = this.buildState(parentMode, eState); - const leaf = await this.openFile(file, state, createInLeaf); + const leaf = await this.openFile(file, state as OpenViewState, createInLeaf); const leafViewType = leaf?.view?.getViewType(); // console.log(leaf); if (leafViewType === "image") { diff --git a/src/types/types-obsidian.d.ts b/src/types/types-obsidian.d.ts index 97e2352..8d3ba1c 100644 --- a/src/types/types-obsidian.d.ts +++ b/src/types/types-obsidian.d.ts @@ -1,290 +1,326 @@ import "obsidian"; import { - EditorPosition, - EphemeralState, - Loc, - MarkdownPreviewRenderer, MarkdownSubView, - Plugin, - PluginManifest, - SuggestModal, - TFile, TFolder, - View, WorkspaceItem, - WorkspaceLeaf + EditorPosition, + EphemeralState, + Loc, + MarkdownPreviewRenderer, + MarkdownSubView, + Plugin, + PluginManifest, + SuggestModal, + TFile, + TFolder, + View, + WorkspaceItem, + WorkspaceLeaf, } from "obsidian"; import { EmbeddedViewParent } from "../leafView"; interface InternalPlugins { - switcher: QuickSwitcherPlugin; - "page-preview": InternalPlugin; - graph: GraphPlugin; + switcher: QuickSwitcherPlugin; + "page-preview": InternalPlugin; + graph: GraphPlugin; } interface OpenViewState { - eState?: EphemeralState; - state?: { mode: string }; - active?: boolean; + eState?: Record; + state?: { mode: string }; + active?: boolean; } declare class QuickSwitcherModal extends SuggestModal { - getSuggestions(query: string): TFile[] | Promise; + getSuggestions(query: string): TFile[] | Promise; - renderSuggestion(value: TFile, el: HTMLElement): unknown; + renderSuggestion(value: TFile, el: HTMLElement): unknown; - onChooseSuggestion(item: TFile, evt: MouseEvent | KeyboardEvent): unknown; + onChooseSuggestion(item: TFile, evt: MouseEvent | KeyboardEvent): unknown; } interface InternalPlugin { - disable(): void; + disable(): void; - enable(): void; + enable(): void; - enabled: boolean; - _loaded: boolean; - instance: { name: string; id: string }; + enabled: boolean; + _loaded: boolean; + instance: { name: string; id: string }; } interface GraphPlugin extends InternalPlugin { - views: { localgraph: (leaf: WorkspaceLeaf) => GraphView }; + views: { localgraph: (leaf: WorkspaceLeaf) => GraphView }; } interface GraphView extends View { - engine: typeof Object; - renderer: { worker: { terminate(): void } }; + engine: typeof Object; + renderer: { worker: { terminate(): void } }; } interface QuickSwitcherPlugin extends InternalPlugin { - instance: { - name: string; - id: string; - QuickSwitcherModal: typeof QuickSwitcherModal; - }; + instance: { + name: string; + id: string; + QuickSwitcherModal: typeof QuickSwitcherModal; + }; } declare global { - const i18next: { - t(id: string): string; - }; + const i18next: { + t(id: string): string; + }; - interface Window { - activeWindow: Window; - activeDocument: Document; - } + interface Window { + activeWindow: Window; + activeDocument: Document; + } } declare module "obsidian" { - interface App { - commands: { - listCommands(): Command[]; - findCommand(id: string): Command; - removeCommand(id: string): void; - executeCommandById(id: string): void; - commands: Record; - }; - internalPlugins: { - plugins: InternalPlugins; - getPluginById(id: T): InternalPlugins[T]; - }; - plugins: { - manifests: Record; - plugins: Record & { - ["recent-files-obsidian"]: Plugin & { - shouldAddFile(file: TFile): boolean; - }; - }; - getPlugin(id: string): Plugin; - getPlugin(id: "calendar"): CalendarPlugin; - }; - dom: { appContainerEl: HTMLElement }; - viewRegistry: ViewRegistry; + interface App { + commands: { + listCommands(): Command[]; + findCommand(id: string): Command; + removeCommand(id: string): void; + executeCommandById(id: string): void; + commands: Record; + }; + internalPlugins: { + plugins: InternalPlugins; + getPluginById( + id: T + ): InternalPlugins[T]; + }; + plugins: { + manifests: Record; + plugins: Record & { + ["recent-files-obsidian"]: Plugin & { + shouldAddFile(file: TFile): boolean; + }; + }; + getPlugin(id: string): Plugin; + getPlugin(id: "calendar"): CalendarPlugin; + }; + dom: { appContainerEl: HTMLElement }; + viewRegistry: ViewRegistry; - openWithDefaultApp(path: string): void; - } + openWithDefaultApp(path: string): void; - interface ViewRegistry { - typeByExtension: Record; // file extensions to view types - viewByType: Record View>; // file extensions to view types - } + dragManager: any; + } - interface CalendarPlugin { - view: View; - } + interface ViewRegistry { + typeByExtension: Record; // file extensions to view types + viewByType: Record View>; // file extensions to view types + } - interface WorkspaceParent { - insertChild(index: number, child: WorkspaceItem, resize?: boolean): void; + interface CalendarPlugin { + view: View; + } - replaceChild(index: number, child: WorkspaceItem, resize?: boolean): void; + interface WorkspaceParent { + insertChild( + index: number, + child: WorkspaceItem, + resize?: boolean + ): void; - removeChild(leaf: WorkspaceLeaf, resize?: boolean): void; + replaceChild( + index: number, + child: WorkspaceItem, + resize?: boolean + ): void; - containerEl: HTMLElement; - children: any; - } + removeChild(leaf: WorkspaceLeaf, resize?: boolean): void; - interface MarkdownEditView { - editorEl: HTMLElement; - } + containerEl: HTMLElement; + children: any; + parent: any; + } - class MarkdownPreviewRendererStatic extends MarkdownPreviewRenderer { - static registerDomEvents(el: HTMLElement, handlerInstance: unknown, cb: (el: HTMLElement) => unknown): void; - } + interface MarkdownEditView { + editorEl: HTMLElement; + } - interface WorkspaceLeaf { - openLinkText(linkText: string, path: string, state?: unknown): Promise; + class MarkdownPreviewRendererStatic extends MarkdownPreviewRenderer { + static registerDomEvents( + el: HTMLElement, + handlerInstance: unknown, + cb: (el: HTMLElement) => unknown + ): void; + } - updateHeader(): void; + interface WorkspaceLeaf { + openLinkText( + linkText: string, + path: string, + state?: unknown + ): Promise; - containerEl: HTMLDivElement; - working: boolean; - parentSplit: WorkspaceParent; - activeTime: number; - } + updateHeader(): void; - interface Workspace { - recordHistory(leaf: WorkspaceLeaf, pushHistory: boolean): void; + containerEl: HTMLDivElement; + working: boolean; + parentSplit: WorkspaceParent; + activeTime: number; + } - iterateLeaves(callback: (item: WorkspaceLeaf) => boolean | void, item: WorkspaceItem | WorkspaceItem[]): boolean; + interface Workspace { + recordHistory(leaf: WorkspaceLeaf, pushHistory: boolean): void; - iterateLeaves(item: WorkspaceItem | WorkspaceItem[], callback: (item: WorkspaceLeaf) => boolean | void): boolean; + iterateLeaves( + callback: (item: WorkspaceLeaf) => boolean | void, + item: WorkspaceItem | WorkspaceItem[] + ): boolean; - getDropLocation(event: MouseEvent): { - target: WorkspaceItem; - sidedock: boolean; - }; + iterateLeaves( + item: WorkspaceItem | WorkspaceItem[], + callback: (item: WorkspaceLeaf) => boolean | void + ): boolean; - recursiveGetTarget(event: MouseEvent, parent: WorkspaceParent): WorkspaceItem; + getDropLocation(event: MouseEvent): { + target: WorkspaceItem; + sidedock: boolean; + }; - recordMostRecentOpenedFile(file: TFile): void; + recursiveGetTarget( + event: MouseEvent, + parent: WorkspaceParent + ): WorkspaceItem; - onDragLeaf(event: MouseEvent, leaf: WorkspaceLeaf): void; + recordMostRecentOpenedFile(file: TFile): void; - onLayoutChange(): void; // tell Obsidian leaves have been added/removed/etc. - activeLeafEvents(): void; + onDragLeaf(event: MouseEvent, leaf: WorkspaceLeaf): void; - floatingSplit: any; + onLayoutChange(): void; // tell Obsidian leaves have been added/removed/etc. + activeLeafEvents(): void; - pushUndoHistory(leaf: WorkspaceLeaf, id: string, e: any): void; - } + floatingSplit: any; - interface Editor { - getClickableTokenAt(pos: EditorPosition): { - text: string; - type: string; - start: EditorPosition; - end: EditorPosition; - }; - } + pushUndoHistory(leaf: WorkspaceLeaf, id: string, e: any): void; + } - interface WorkspaceItem { - side?: "left" | "right"; - } + interface Editor { + getClickableTokenAt(pos: EditorPosition): { + text: string; + type: string; + start: EditorPosition; + end: EditorPosition; + }; + } - interface View { - iconEl: HTMLElement; - file: TFile; + interface WorkspaceItem { + side?: "left" | "right"; + } - setMode(mode: MarkdownSubView): Promise; + interface View { + iconEl: HTMLElement; + file: TFile; - followLinkUnderCursor(newLeaf: boolean): void; + setMode(mode: MarkdownSubView): Promise; - modes: Record; + followLinkUnderCursor(newLeaf: boolean): void; - getMode(): string; + modes: Record; - headerEl: HTMLElement; - contentEl: HTMLElement; - } + getMode(): string; - interface SearchView extends View { - onKeyArrowRightInFocus(e: KeyboardEvent): void; + headerEl: HTMLElement; + contentEl: HTMLElement; + } - onKeyArrowLeftInFocus(e: KeyboardEvent): void; + interface SearchView extends View { + onKeyArrowRightInFocus(e: KeyboardEvent): void; - onKeyArrowUpInFocus(e: KeyboardEvent): void; + onKeyArrowLeftInFocus(e: KeyboardEvent): void; - onKeyArrowDownInFocus(e: KeyboardEvent): void; + onKeyArrowUpInFocus(e: KeyboardEvent): void; - onKeyEnterInFocus(e: KeyboardEvent): void; + onKeyArrowDownInFocus(e: KeyboardEvent): void; - onKeyShowMoreBefore(e: KeyboardEvent): void; + onKeyEnterInFocus(e: KeyboardEvent): void; - onKeyShowMoreAfter(e: KeyboardEvent): void; + onKeyShowMoreBefore(e: KeyboardEvent): void; - dom: any; - searchComponent: SearchComponent; - headerDom: any; - } + onKeyShowMoreAfter(e: KeyboardEvent): void; - interface EmptyView extends View { - actionListEl: HTMLElement; - emptyTitleEl: HTMLElement; - } + dom: any; + searchComponent: SearchComponent; + headerDom: any; + } - interface FileManager { - createNewMarkdownFile(folder: TFolder, fileName: string): Promise; - } + interface EmptyView extends View { + actionListEl: HTMLElement; + emptyTitleEl: HTMLElement; + } - enum PopoverState { - Showing, - Shown, - Hiding, - Hidden, - } + interface FileManager { + createNewMarkdownFile( + folder: TFolder, + fileName: string + ): Promise; + } - interface Menu { - items: MenuItem[]; - dom: HTMLElement; - hideCallback: () => unknown; - } + enum PopoverState { + Showing, + Shown, + Hiding, + Hidden, + } - interface MenuItem { - iconEl: HTMLElement; - dom: HTMLElement; - } + interface Menu { + items: MenuItem[]; + dom: HTMLElement; + hideCallback: () => unknown; + } - interface EphemeralState { - focus?: boolean; - subpath?: string; - line?: number; - startLoc?: Loc; - endLoc?: Loc; - scroll?: number; - } + interface MenuItem { + iconEl: HTMLElement; + dom: HTMLElement; + } - interface HoverParent { - type?: string; - } + interface EphemeralState { + focus?: boolean; + subpath?: string; + line?: number; + startLoc?: Loc; + endLoc?: Loc; + scroll?: number; + } - interface WorkspaceContainer { - type: "window" | "split" | "tab"; - } + interface HoverParent { + type?: string; + } - interface HoverPopover { - parent: EmbeddedViewParent | null; - targetEl: HTMLElement; - hoverEl: HTMLElement; + interface WorkspaceContainer { + type: "window" | "split" | "tab"; + } - position(pos?: MousePos): void; + interface HoverPopover { + parent: EmbeddedViewParent | null; + targetEl: HTMLElement; + hoverEl: HTMLElement; - hide(): void; + position(pos?: MousePos): void; - show(): void; + hide(): void; - shouldShowSelf(): boolean; + show(): void; - timer: number; - waitTime: number; + shouldShowSelf(): boolean; - shouldShow(): boolean; + timer: number; + waitTime: number; - transition(): void; - } + shouldShow(): boolean; - interface MousePos { - x: number; - y: number; - } + transition(): void; + } - interface Plugin { - registerGlobalCommand(command: Command): void; - } + interface MousePos { + x: number; + y: number; + } + + interface Plugin { + registerGlobalCommand(command: Command): void; + } } diff --git a/styles.css b/styles.css index 1eaee37..2c69a6b 100644 --- a/styles.css +++ b/styles.css @@ -15,7 +15,8 @@ If your plugin does not need CSS, delete this file. width: 1200px; } -.float-search-modal-search-ctn, .float-search-modal-file-ctn { +.float-search-modal-search-ctn, +.float-search-modal-file-ctn { height: 100%; width: 100%; } @@ -63,7 +64,6 @@ If your plugin does not need CSS, delete this file. z-index: 30; } - .float-search-modal-instructions { border-top: 1px solid var(--background-secondary); user-select: none; @@ -82,7 +82,8 @@ If your plugin does not need CSS, delete this file. margin-right: var(--size-2-2); } -.float-search-modal-content:has(.float-search-modal-file-ctn) .float-search-modal-search-ctn { +.float-search-modal-content:has(.float-search-modal-file-ctn) + .float-search-modal-search-ctn { border-right: 1px solid var(--background-secondary); } @@ -142,3 +143,7 @@ body:not(.show-file-path) .search-result-file-title .search-result-file-path { .show-file-path .search-result-file-title .search-result-file-path:hover { background-color: var(--background-secondary); } + +.fs-leaf-view .workspace-split { + background-color: var(--background-primary); +}