obsidian-dev-utils 93.3.0 → 94.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/integration-test-plugin/main.js +1 -0
  3. package/dist/lib/cjs/generated-during-build.cjs +1 -1
  4. package/dist/lib/cjs/obsidian/plugin/obsidian-plugin-repo-paths.cjs +2 -1
  5. package/dist/lib/cjs/obsidian/plugin/obsidian-plugin-repo-paths.d.cts +4 -0
  6. package/dist/lib/cjs/script-utils/demo-vault-app-json.cjs +164 -0
  7. package/dist/lib/cjs/script-utils/demo-vault-app-json.d.cts +93 -0
  8. package/dist/lib/cjs/script-utils/demo-vault-coverage.cjs +18 -1
  9. package/dist/lib/cjs/script-utils/demo-vault-coverage.d.cts +13 -0
  10. package/dist/lib/cjs/script-utils/demo-vault.cjs +27 -1
  11. package/dist/lib/cjs/script-utils/demo-vault.d.cts +5 -0
  12. package/dist/lib/cjs/script-utils/index.cjs +4 -1
  13. package/dist/lib/cjs/script-utils/index.d.cts +1 -0
  14. package/dist/lib/cjs/script-utils/linters/markdownlint-cli2-config.cjs +6 -1
  15. package/dist/lib/esm/generated-during-build.mjs +1 -1
  16. package/dist/lib/esm/obsidian/plugin/obsidian-plugin-repo-paths.d.mts +4 -0
  17. package/dist/lib/esm/obsidian/plugin/obsidian-plugin-repo-paths.mjs +2 -1
  18. package/dist/lib/esm/script-utils/demo-vault-app-json.d.mts +93 -0
  19. package/dist/lib/esm/script-utils/demo-vault-app-json.mjs +57 -0
  20. package/dist/lib/esm/script-utils/demo-vault-coverage.d.mts +13 -0
  21. package/dist/lib/esm/script-utils/demo-vault-coverage.mjs +22 -1
  22. package/dist/lib/esm/script-utils/demo-vault.d.mts +5 -0
  23. package/dist/lib/esm/script-utils/demo-vault.mjs +31 -1
  24. package/dist/lib/esm/script-utils/index.d.mts +1 -0
  25. package/dist/lib/esm/script-utils/index.mjs +3 -1
  26. package/dist/lib/esm/script-utils/linters/markdownlint-cli2-config.mjs +6 -1
  27. package/package.json +1 -1
  28. package/script-utils/demo-vault-app-json/package.json +6 -0
@@ -146,7 +146,12 @@ const obsidianDevUtilsConfig = {
146
146
  "MD052": {
147
147
  // eslint-disable-next-line camelcase -- That's how it is defined in the schema.
148
148
  ignored_labels: [
149
+ // GitHub's five alert types, all of which Obsidian renders as callouts. markdownlint reads the
150
+ // Bracketed marker opening one as a shortcut reference link, so each has to be ignored explicitly.
151
+ "!caution",
152
+ "!important",
149
153
  "!note",
154
+ "!tip",
150
155
  "!warning",
151
156
  // Preserve markdownlint's default ignored label so GFM task-list items (`- [x]`) are not flagged as undefined shortcut references.
152
157
  "x"
@@ -179,4 +184,4 @@ const obsidianDevUtilsConfig = {
179
184
  0 && (module.exports = {
180
185
  obsidianDevUtilsConfig
181
186
  });
182
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL21hcmtkb3dubGludC1jbGkyLWNvbmZpZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIERlZmF1bHQgbWFya2Rvd25saW50LWNsaTIgY29uZmlndXJhdGlvbiBmb3IgdGhlIE9ic2lkaWFuIERldiBVdGlscy5cbiAqL1xuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gRGVjbGFyYXRpdmUgbWFya2Rvd25saW50LWNsaTIgcnVsZS9wbHVnaW4gY29uZmlndXJhdGlvbjsgY29ycmVjdG5lc3MgaXMgdmVyaWZpZWQgYnkgcnVubmluZyBtYXJrZG93bmxpbnQsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQgcmVsYXRpdmVMaW5rc1J1bGUgZnJvbSAnbWFya2Rvd25saW50LXJ1bGUtcmVsYXRpdmUtbGlua3MnO1xuXG5pbXBvcnQgdHlwZSB7IE1hcmtkb3dubGludENsaTJDb25maWd1cmF0aW9uU2NoZW1hIGFzIE1hcmtkb3dubGludENsaTJDb25maWdTY2hlbWEgfSBmcm9tICcuL21hcmtkb3dubGludC10eXBlcy9AdHlwZXMvbWFya2Rvd25saW50LWNsaTItY29uZmlnLXNjaGVtYS5kLnRzJztcblxuaW1wb3J0IHsgTk9ERV9NT0RVTEVTX0lHTk9SRV9HTE9CIH0gZnJvbSAnLi9tYXJrZG93bmxpbnQtaWdub3Jlcy50cyc7XG5cbi8qKlxuICogRGVmYXVsdCBtYXJrZG93bmxpbnQtY2xpMiBjb25maWd1cmF0aW9uIGZvciB0aGUgT2JzaWRpYW4gRGV2IFV0aWxzLlxuICovXG5leHBvcnQgY29uc3Qgb2JzaWRpYW5EZXZVdGlsc0NvbmZpZzogTWFya2Rvd25saW50Q2xpMkNvbmZpZ1NjaGVtYSA9IHtcbiAgY29uZmlnOiB7XG4gICAgJ01EMDEzJzogZmFsc2UsXG4gICAgJ01EMDI0Jzoge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNhbWVsY2FzZSAtLSBUaGF0J3MgaG93IGl0IGlzIGRlZmluZWQgaW4gdGhlIHNjaGVtYS5cbiAgICAgIHNpYmxpbmdzX29ubHk6IHRydWVcbiAgICB9LFxuICAgICdNRDA1Mic6IHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjYW1lbGNhc2UgLS0gVGhhdCdzIGhvdyBpdCBpcyBkZWZpbmVkIGluIHRoZSBzY2hlbWEuXG4gICAgICBpZ25vcmVkX2xhYmVsczogW1xuICAgICAgICAnIW5vdGUnLFxuICAgICAgICAnIXdhcm5pbmcnLFxuICAgICAgICAvLyBQcmVzZXJ2ZSBtYXJrZG93bmxpbnQncyBkZWZhdWx0IGlnbm9yZWQgbGFiZWwgc28gR0ZNIHRhc2stbGlzdCBpdGVtcyAoYC0gW3hdYCkgYXJlIG5vdCBmbGFnZ2VkIGFzIHVuZGVmaW5lZCBzaG9ydGN1dCByZWZlcmVuY2VzLlxuICAgICAgICAneCdcbiAgICAgIF0sXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2FtZWxjYXNlIC0tIFRoYXQncyBob3cgaXQgaXMgZGVmaW5lZCBpbiB0aGUgc2NoZW1hLlxuICAgICAgc2hvcnRjdXRfc3ludGF4OiB0cnVlXG4gICAgfSxcbiAgICAncmVsYXRpdmUtbGlua3MnOiB0cnVlXG4gIH0sXG4gIGN1c3RvbVJ1bGVzOiBbXG4gICAgcmVsYXRpdmVMaW5rc1J1bGVcbiAgXSxcbiAgLy8gRXZlcnkgYC5naXRpZ25vcmVgIGluIHRoZSB0cmVlLCBhbmQgdXAgdG8gdGhlIHJlcG9zaXRvcnkgcm9vdCBcdTIwMTQgZ2l0J3Mgb3duIGRlZmF1bHQgYmVoYXZpb3IuIEEgcGF0aCBnaXRcbiAgLy8gSWdub3JlcyBpcyBhIHBhdGggd2UgZG8gbm90IGxpbnQsIHNvIGBub2RlX21vZHVsZXNgIChpbmNsdWRpbmcgdGhlIG5lc3RlZCBvbmVzIHVuZGVyIHRlc3QgZml4dHVyZXMpLFxuICAvLyBgZGlzdGAsIGFuZCBldmVyeSBnZW5lcmF0ZWQgZm9sZGVyIGFyZSBza2lwcGVkIHdpdGhvdXQgYW55b25lIG1haW50YWluaW5nIGEgbGlzdCB0aGF0IGNhbiBkcmlmdC5cbiAgZ2l0aWdub3JlOiB0cnVlLFxuICBnbG9iczogW1xuICAgICcqKi8qLm1kJ1xuICBdLFxuICAvLyBUaGUgcmVzaWR1YWwsIGV4cGxpY2l0IGxpc3QgXHUyMDE0IGV2ZXJ5dGhpbmcgYC5naXRpZ25vcmVgIGNhbm5vdCBleHByZXNzIGZvciB1cy4gR2l0IG5ldmVyIFwiaWdub3Jlc1wiXG4gIC8vIGAuZ2l0YCBpdHNlbGYgKGl0IGlzIHNpbXBseSBvdXRzaWRlIHRoZSB3b3JraW5nIHRyZWUpLCBhbmQgYSByZXBvc2l0b3J5IGNhbiBkZWxpYmVyYXRlbHkgVFJBQ0sgYVxuICAvLyBWZW5kb3JlZCBgbm9kZV9tb2R1bGVzYCB0cmVlLCB3aG9zZSB0aGlyZC1wYXJ0eSBtYXJrZG93biBpcyBub3Qgb3VycyB0byBsaW50LiBTZWVcbiAgLy8gYG1hcmtkb3dubGludC1pZ25vcmVzLnRzYC5cbiAgaWdub3JlczogW1xuICAgICcuZ2l0LyoqJyxcbiAgICBOT0RFX01PRFVMRVNfSUdOT1JFX0dMT0JcbiAgXVxufTtcblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVFBLDhDQUE4QjtBQUk5QixrQ0FBeUM7QUFLbEMsTUFBTSx5QkFBdUQ7QUFBQSxFQUNsRSxRQUFRO0FBQUEsSUFDTixTQUFTO0FBQUEsSUFDVCxTQUFTO0FBQUE7QUFBQSxNQUVQLGVBQWU7QUFBQSxJQUNqQjtBQUFBLElBQ0EsU0FBUztBQUFBO0FBQUEsTUFFUCxnQkFBZ0I7QUFBQSxRQUNkO0FBQUEsUUFDQTtBQUFBO0FBQUEsUUFFQTtBQUFBLE1BQ0Y7QUFBQTtBQUFBLE1BRUEsaUJBQWlCO0FBQUEsSUFDbkI7QUFBQSxJQUNBLGtCQUFrQjtBQUFBLEVBQ3BCO0FBQUEsRUFDQSxhQUFhO0FBQUEsSUFDWCx3Q0FBQUE7QUFBQSxFQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJQSxXQUFXO0FBQUEsRUFDWCxPQUFPO0FBQUEsSUFDTDtBQUFBLEVBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0EsU0FBUztBQUFBLElBQ1A7QUFBQSxJQUNBO0FBQUEsRUFDRjtBQUNGOyIsCiAgIm5hbWVzIjogWyJyZWxhdGl2ZUxpbmtzUnVsZSJdCn0K
187
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9saW50ZXJzL21hcmtkb3dubGludC1jbGkyLWNvbmZpZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIERlZmF1bHQgbWFya2Rvd25saW50LWNsaTIgY29uZmlndXJhdGlvbiBmb3IgdGhlIE9ic2lkaWFuIERldiBVdGlscy5cbiAqL1xuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gRGVjbGFyYXRpdmUgbWFya2Rvd25saW50LWNsaTIgcnVsZS9wbHVnaW4gY29uZmlndXJhdGlvbjsgY29ycmVjdG5lc3MgaXMgdmVyaWZpZWQgYnkgcnVubmluZyBtYXJrZG93bmxpbnQsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQgcmVsYXRpdmVMaW5rc1J1bGUgZnJvbSAnbWFya2Rvd25saW50LXJ1bGUtcmVsYXRpdmUtbGlua3MnO1xuXG5pbXBvcnQgdHlwZSB7IE1hcmtkb3dubGludENsaTJDb25maWd1cmF0aW9uU2NoZW1hIGFzIE1hcmtkb3dubGludENsaTJDb25maWdTY2hlbWEgfSBmcm9tICcuL21hcmtkb3dubGludC10eXBlcy9AdHlwZXMvbWFya2Rvd25saW50LWNsaTItY29uZmlnLXNjaGVtYS5kLnRzJztcblxuaW1wb3J0IHsgTk9ERV9NT0RVTEVTX0lHTk9SRV9HTE9CIH0gZnJvbSAnLi9tYXJrZG93bmxpbnQtaWdub3Jlcy50cyc7XG5cbi8qKlxuICogRGVmYXVsdCBtYXJrZG93bmxpbnQtY2xpMiBjb25maWd1cmF0aW9uIGZvciB0aGUgT2JzaWRpYW4gRGV2IFV0aWxzLlxuICovXG5leHBvcnQgY29uc3Qgb2JzaWRpYW5EZXZVdGlsc0NvbmZpZzogTWFya2Rvd25saW50Q2xpMkNvbmZpZ1NjaGVtYSA9IHtcbiAgY29uZmlnOiB7XG4gICAgJ01EMDEzJzogZmFsc2UsXG4gICAgJ01EMDI0Jzoge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNhbWVsY2FzZSAtLSBUaGF0J3MgaG93IGl0IGlzIGRlZmluZWQgaW4gdGhlIHNjaGVtYS5cbiAgICAgIHNpYmxpbmdzX29ubHk6IHRydWVcbiAgICB9LFxuICAgICdNRDA1Mic6IHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjYW1lbGNhc2UgLS0gVGhhdCdzIGhvdyBpdCBpcyBkZWZpbmVkIGluIHRoZSBzY2hlbWEuXG4gICAgICBpZ25vcmVkX2xhYmVsczogW1xuICAgICAgICAvLyBHaXRIdWIncyBmaXZlIGFsZXJ0IHR5cGVzLCBhbGwgb2Ygd2hpY2ggT2JzaWRpYW4gcmVuZGVycyBhcyBjYWxsb3V0cy4gbWFya2Rvd25saW50IHJlYWRzIHRoZVxuICAgICAgICAvLyBCcmFja2V0ZWQgbWFya2VyIG9wZW5pbmcgb25lIGFzIGEgc2hvcnRjdXQgcmVmZXJlbmNlIGxpbmssIHNvIGVhY2ggaGFzIHRvIGJlIGlnbm9yZWQgZXhwbGljaXRseS5cbiAgICAgICAgJyFjYXV0aW9uJyxcbiAgICAgICAgJyFpbXBvcnRhbnQnLFxuICAgICAgICAnIW5vdGUnLFxuICAgICAgICAnIXRpcCcsXG4gICAgICAgICchd2FybmluZycsXG4gICAgICAgIC8vIFByZXNlcnZlIG1hcmtkb3dubGludCdzIGRlZmF1bHQgaWdub3JlZCBsYWJlbCBzbyBHRk0gdGFzay1saXN0IGl0ZW1zIChgLSBbeF1gKSBhcmUgbm90IGZsYWdnZWQgYXMgdW5kZWZpbmVkIHNob3J0Y3V0IHJlZmVyZW5jZXMuXG4gICAgICAgICd4J1xuICAgICAgXSxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjYW1lbGNhc2UgLS0gVGhhdCdzIGhvdyBpdCBpcyBkZWZpbmVkIGluIHRoZSBzY2hlbWEuXG4gICAgICBzaG9ydGN1dF9zeW50YXg6IHRydWVcbiAgICB9LFxuICAgICdyZWxhdGl2ZS1saW5rcyc6IHRydWVcbiAgfSxcbiAgY3VzdG9tUnVsZXM6IFtcbiAgICByZWxhdGl2ZUxpbmtzUnVsZVxuICBdLFxuICAvLyBFdmVyeSBgLmdpdGlnbm9yZWAgaW4gdGhlIHRyZWUsIGFuZCB1cCB0byB0aGUgcmVwb3NpdG9yeSByb290IFx1MjAxNCBnaXQncyBvd24gZGVmYXVsdCBiZWhhdmlvci4gQSBwYXRoIGdpdFxuICAvLyBJZ25vcmVzIGlzIGEgcGF0aCB3ZSBkbyBub3QgbGludCwgc28gYG5vZGVfbW9kdWxlc2AgKGluY2x1ZGluZyB0aGUgbmVzdGVkIG9uZXMgdW5kZXIgdGVzdCBmaXh0dXJlcyksXG4gIC8vIGBkaXN0YCwgYW5kIGV2ZXJ5IGdlbmVyYXRlZCBmb2xkZXIgYXJlIHNraXBwZWQgd2l0aG91dCBhbnlvbmUgbWFpbnRhaW5pbmcgYSBsaXN0IHRoYXQgY2FuIGRyaWZ0LlxuICBnaXRpZ25vcmU6IHRydWUsXG4gIGdsb2JzOiBbXG4gICAgJyoqLyoubWQnXG4gIF0sXG4gIC8vIFRoZSByZXNpZHVhbCwgZXhwbGljaXQgbGlzdCBcdTIwMTQgZXZlcnl0aGluZyBgLmdpdGlnbm9yZWAgY2Fubm90IGV4cHJlc3MgZm9yIHVzLiBHaXQgbmV2ZXIgXCJpZ25vcmVzXCJcbiAgLy8gYC5naXRgIGl0c2VsZiAoaXQgaXMgc2ltcGx5IG91dHNpZGUgdGhlIHdvcmtpbmcgdHJlZSksIGFuZCBhIHJlcG9zaXRvcnkgY2FuIGRlbGliZXJhdGVseSBUUkFDSyBhXG4gIC8vIFZlbmRvcmVkIGBub2RlX21vZHVsZXNgIHRyZWUsIHdob3NlIHRoaXJkLXBhcnR5IG1hcmtkb3duIGlzIG5vdCBvdXJzIHRvIGxpbnQuIFNlZVxuICAvLyBgbWFya2Rvd25saW50LWlnbm9yZXMudHNgLlxuICBpZ25vcmVzOiBbXG4gICAgJy5naXQvKionLFxuICAgIE5PREVfTU9EVUxFU19JR05PUkVfR0xPQlxuICBdXG59O1xuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBUUEsOENBQThCO0FBSTlCLGtDQUF5QztBQUtsQyxNQUFNLHlCQUF1RDtBQUFBLEVBQ2xFLFFBQVE7QUFBQSxJQUNOLFNBQVM7QUFBQSxJQUNULFNBQVM7QUFBQTtBQUFBLE1BRVAsZUFBZTtBQUFBLElBQ2pCO0FBQUEsSUFDQSxTQUFTO0FBQUE7QUFBQSxNQUVQLGdCQUFnQjtBQUFBO0FBQUE7QUFBQSxRQUdkO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBO0FBQUEsUUFFQTtBQUFBLE1BQ0Y7QUFBQTtBQUFBLE1BRUEsaUJBQWlCO0FBQUEsSUFDbkI7QUFBQSxJQUNBLGtCQUFrQjtBQUFBLEVBQ3BCO0FBQUEsRUFDQSxhQUFhO0FBQUEsSUFDWCx3Q0FBQUE7QUFBQSxFQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJQSxXQUFXO0FBQUEsRUFDWCxPQUFPO0FBQUEsSUFDTDtBQUFBLEVBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0EsU0FBUztBQUFBLElBQ1A7QUFBQSxJQUNBO0FBQUEsRUFDRjtBQUNGOyIsCiAgIm5hbWVzIjogWyJyZWxhdGl2ZUxpbmtzUnVsZSJdCn0K
@@ -21,7 +21,7 @@ if you want to view the source, please visit the github repository of this plugi
21
21
  globalThis.process = browserProcess;
22
22
  })();
23
23
 
24
- const LIBRARY_VERSION = "93.3.0";
24
+ const LIBRARY_VERSION = "94.0.0";
25
25
  const LIBRARY_STYLES = ".obsidian-dev-utils.code-highlighter-component textarea, .obsidian-dev-utils.code-highlighter-component pre, .obsidian-dev-utils.code-highlighter-component code {\n font-family: var(--font-monospace);\n line-height: var(--line-height-normal);\n margin: 0;\n}\n.obsidian-dev-utils.code-highlighter-component textarea, .obsidian-dev-utils.code-highlighter-component code {\n font-size: var(--code-size);\n}\n.obsidian-dev-utils.code-highlighter-component textarea {\n background: transparent;\n color: transparent;\n z-index: 2;\n width: 20em;\n height: 10em;\n}\n.obsidian-dev-utils.code-highlighter-component pre {\n position: absolute;\n pointer-events: none;\n border: var(--input-border-width) solid transparent;\n overflow: auto;\n inset: 0;\n padding: var(--size-4-1) var(--size-4-2);\n z-index: 1;\n}\n.obsidian-dev-utils.code-highlighter-component pre::after {\n content: \"\";\n display: block;\n height: var(--bottom-gap, 0);\n}\n.obsidian-dev-utils.code-highlighter-component pre.is-placeholder {\n opacity: 0.6;\n}\n.obsidian-dev-utils.code-highlighter-component code {\n display: block;\n padding: 0;\n}\n\n.obsidian-dev-utils-lock-indicator {\n display: inline-flex;\n align-items: center;\n color: var(--text-muted);\n}\n.obsidian-dev-utils-lock-indicator .svg-icon {\n width: var(--icon-s);\n height: var(--icon-s);\n}\n\n@keyframes obsidian-dev-utils-lock-indicator-flash {\n 40% {\n color: var(--text-error);\n transform: scale(1.4);\n }\n}\n.obsidian-dev-utils-lock-indicator-flash {\n animation: obsidian-dev-utils-lock-indicator-flash 0.35s ease-in-out;\n}\n\n.obsidian-dev-utils input[type=url] {\n height: var(--input-height);\n}\n.obsidian-dev-utils input[type=month],\n.obsidian-dev-utils input[type=tel],\n.obsidian-dev-utils input[type=time],\n.obsidian-dev-utils input[type=url],\n.obsidian-dev-utils input[type=week] {\n -webkit-app-region: no-drag;\n background: var(--background-modifier-form-field);\n border: var(--input-border-width) solid var(--background-modifier-border);\n color: var(--text-normal);\n font-family: inherit;\n padding: var(--size-4-1) var(--size-4-2);\n font-size: var(--font-ui-small);\n border-radius: var(--input-radius);\n outline: none;\n}\n@media (hover: hover) {\n .obsidian-dev-utils input[type=month]:hover,\n .obsidian-dev-utils input[type=tel]:hover,\n .obsidian-dev-utils input[type=time]:hover,\n .obsidian-dev-utils input[type=url]:hover,\n .obsidian-dev-utils input[type=week]:hover {\n border-color: var(--background-modifier-border-hover);\n transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out;\n }\n}\n.obsidian-dev-utils input[type=month]:active, .obsidian-dev-utils input[type=month]:focus,\n.obsidian-dev-utils input[type=tel]:active,\n.obsidian-dev-utils input[type=tel]:focus,\n.obsidian-dev-utils input[type=time]:active,\n.obsidian-dev-utils input[type=time]:focus,\n.obsidian-dev-utils input[type=url]:active,\n.obsidian-dev-utils input[type=url]:focus,\n.obsidian-dev-utils input[type=week]:active,\n.obsidian-dev-utils input[type=week]:focus {\n border-color: var(--background-modifier-border-focus);\n transition: box-shadow 0.15s ease-in-out, border 0.15s ease-in-out;\n}\n.obsidian-dev-utils input[type=month]:active, .obsidian-dev-utils input[type=month]:focus, .obsidian-dev-utils input[type=month]:focus-visible,\n.obsidian-dev-utils input[type=tel]:active,\n.obsidian-dev-utils input[type=tel]:focus,\n.obsidian-dev-utils input[type=tel]:focus-visible,\n.obsidian-dev-utils input[type=time]:active,\n.obsidian-dev-utils input[type=time]:focus,\n.obsidian-dev-utils input[type=time]:focus-visible,\n.obsidian-dev-utils input[type=url]:active,\n.obsidian-dev-utils input[type=url]:focus,\n.obsidian-dev-utils input[type=url]:focus-visible,\n.obsidian-dev-utils input[type=week]:active,\n.obsidian-dev-utils input[type=week]:focus,\n.obsidian-dev-utils input[type=week]:focus-visible {\n box-shadow: 0 0 0 2px var(--background-modifier-border-focus);\n}\n.obsidian-dev-utils input[type=month]::placeholder,\n.obsidian-dev-utils input[type=tel]::placeholder,\n.obsidian-dev-utils input[type=time]::placeholder,\n.obsidian-dev-utils input[type=url]::placeholder,\n.obsidian-dev-utils input[type=week]::placeholder {\n color: var(--text-faint);\n}\n.mod-rtl input[type=month],\n.mod-rtl input[type=time],\n.mod-rtl input[type=week],\n.is-rtl input[type=month],\n.is-rtl input[type=time],\n.is-rtl input[type=week],\n.rtl input[type=month],\n.rtl input[type=time],\n.rtl input[type=week] {\n direction: rtl;\n}\n.mod-rtl input[type=month]::-webkit-calendar-picker-indicator,\n.mod-rtl input[type=time]::-webkit-calendar-picker-indicator,\n.mod-rtl input[type=week]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=month]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=time]::-webkit-calendar-picker-indicator,\n.is-rtl input[type=week]::-webkit-calendar-picker-indicator,\n.rtl input[type=month]::-webkit-calendar-picker-indicator,\n.rtl input[type=time]::-webkit-calendar-picker-indicator,\n.rtl input[type=week]::-webkit-calendar-picker-indicator {\n right: var(--size-4-1);\n left: auto;\n}\n\n.obsidian-dev-utils input[type=month],\n.obsidian-dev-utils input[type=time],\n.obsidian-dev-utils input[type=week] {\n font-variant-numeric: tabular-nums;\n position: relative;\n}\n.obsidian-dev-utils input[type=month]::-webkit-datetime-edit-text,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-text,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-text {\n color: var(--text-faint);\n padding-inline-end: 0;\n}\n.obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator,\n.obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator {\n position: absolute;\n left: var(--size-4-1);\n right: auto;\n opacity: 0.5;\n}\n.obsidian-dev-utils input[type=month]::-webkit-datetime-edit-month-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-month-field:focus, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-day-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-day-field:focus, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-year-field:active, .obsidian-dev-utils input[type=month]::-webkit-datetime-edit-year-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-month-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-month-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-day-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-day-field:focus,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-year-field:active,\n.obsidian-dev-utils input[type=time]::-webkit-datetime-edit-year-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-month-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-month-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-day-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-day-field:focus,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-year-field:active,\n.obsidian-dev-utils input[type=week]::-webkit-datetime-edit-year-field:focus {\n background-color: var(--text-selection);\n color: var(--text-normal);\n cursor: text;\n}\n.mod-rtl .obsidian-dev-utils input[type=month], .is-rtl .obsidian-dev-utils input[type=month], .rtl .obsidian-dev-utils input[type=month],\n.mod-rtl .obsidian-dev-utils input[type=time],\n.is-rtl .obsidian-dev-utils input[type=time],\n.rtl .obsidian-dev-utils input[type=time],\n.mod-rtl .obsidian-dev-utils input[type=week],\n.is-rtl .obsidian-dev-utils input[type=week],\n.rtl .obsidian-dev-utils input[type=week] {\n direction: rtl;\n}\n.mod-rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator, .is-rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator, .rtl .obsidian-dev-utils input[type=month]::-webkit-calendar-picker-indicator,\n.mod-rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.is-rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.rtl .obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator,\n.mod-rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator,\n.is-rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator,\n.rtl .obsidian-dev-utils input[type=week]::-webkit-calendar-picker-indicator {\n left: auto;\n right: var(--size-4-1);\n}\n\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=month],\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=time],\nbody:not(.is-ios):not(.is-android) .obsidian-dev-utils input[type=week] {\n padding-inline-start: var(--size-4-6);\n}\n\n.obsidian-dev-utils input[type=time]::-webkit-calendar-picker-indicator {\n margin-inline-start: 0;\n}\n\n.obsidian-dev-utilsprogress.loop {\n min-width: 200px;\n}\n\n@keyframes obsidian-dev-utils-minimized-modal-bar-pulse {\n 0%, 100% {\n box-shadow: var(--shadow-s);\n }\n 50% {\n box-shadow: 0 0 0 2px var(--interactive-accent);\n }\n}\n@keyframes obsidian-dev-utils-minimized-modal-bar-attention {\n 0% {\n box-shadow: 0 0 0 0 var(--interactive-accent);\n }\n 40% {\n box-shadow: 0 0 0 4px var(--interactive-accent);\n }\n 100% {\n box-shadow: var(--shadow-s);\n }\n}\n.obsidian-dev-utils.minimizable-modal .minimize-button {\n position: absolute;\n top: var(--size-4-2);\n right: calc(var(--size-4-2) + var(--size-4-9));\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--size-2-2);\n border: none;\n border-radius: var(--radius-s);\n background: transparent;\n color: var(--icon-color);\n cursor: pointer;\n box-shadow: none;\n}\n.obsidian-dev-utils.minimizable-modal .minimize-button:hover {\n background: var(--background-modifier-hover);\n color: var(--icon-color-hover);\n}\n.obsidian-dev-utils.minimized-modal-bar {\n position: fixed;\n right: var(--size-4-4);\n bottom: calc(var(--size-4-4) + var(--size-4-8));\n z-index: var(--layer-modal);\n display: flex;\n align-items: center;\n gap: var(--size-4-2);\n padding: var(--size-4-2) var(--size-4-3);\n border: 1px solid var(--background-modifier-border);\n border-radius: var(--radius-m);\n background: var(--background-secondary);\n box-shadow: var(--shadow-s);\n cursor: pointer;\n animation: obsidian-dev-utils-minimized-modal-bar-pulse 2s ease-in-out infinite;\n}\n.obsidian-dev-utils.minimized-modal-bar:hover {\n background-image: linear-gradient(var(--background-modifier-hover), var(--background-modifier-hover));\n}\n.obsidian-dev-utils.minimized-modal-bar.minimized-modal-bar-attention {\n animation: obsidian-dev-utils-minimized-modal-bar-attention 0.35s ease-out;\n}\n.obsidian-dev-utils.minimized-modal-bar .minimized-modal-bar-title {\n font-weight: var(--font-medium);\n}\n.obsidian-dev-utils.minimized-modal-bar .restore-button,\n.obsidian-dev-utils.minimized-modal-bar .cancel-button {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--size-2-2);\n border: none;\n border-radius: var(--radius-s);\n background: transparent;\n color: var(--icon-color);\n cursor: pointer;\n box-shadow: none;\n}\n.obsidian-dev-utils.minimized-modal-bar .restore-button:hover,\n.obsidian-dev-utils.minimized-modal-bar .cancel-button:hover {\n background: var(--background-modifier-hover);\n color: var(--icon-color-hover);\n}\n\n.obsidian-dev-utils.modal-container .ok-button {\n margin-right: 10px;\n margin-top: 20px;\n}\n\n.obsidian-dev-utils .multiple-dropdown-component select,\n.obsidian-dev-utils .multiple-dropdown-component select:focus,\n.obsidian-dev-utils .multiple-dropdown-component .dropdown {\n height: auto;\n padding-top: 3px;\n}\n.obsidian-dev-utils .multiple-dropdown-component select option:checked,\n.obsidian-dev-utils .multiple-dropdown-component select:focus option:checked,\n.obsidian-dev-utils .multiple-dropdown-component .dropdown option:checked {\n background-color: #1967d2;\n color: #fff;\n}\n\n.obsidian-dev-utils.plugin-notice-name {\n color: var(--text-accent);\n display: inline-block;\n font-weight: var(--font-bold);\n margin-bottom: var(--size-4-2);\n}\n.obsidian-dev-utils.plugin-notice-content {\n padding-right: var(--size-4-5);\n position: relative;\n}\n.obsidian-dev-utils.plugin-notice-content .obsidian-dev-utils.cancel-button {\n display: block;\n margin-top: var(--size-4-2);\n width: fit-content;\n}\n.obsidian-dev-utils.plugin-notice-content .obsidian-dev-utils.plugin-notice-close-button {\n position: absolute;\n right: var(--size-4-3);\n top: var(--size-4-3);\n}\n.obsidian-dev-utils.plugin-notice-requires-explicit-close.notice {\n padding: 0;\n}\n.obsidian-dev-utils.plugin-notice-requires-explicit-close.notice .obsidian-dev-utils.plugin-notice-content {\n padding: var(--size-4-3) var(--size-4-4);\n}\n\n.obsidian-dev-utils.plugin-settings-tab a:focus {\n outline: 2px solid var(--link-color);\n}\n\n.obsidian-dev-utils.popover {\n max-width: min(420px, 90vw);\n min-width: 320px;\n padding: var(--size-4-2) var(--size-4-3);\n position: absolute;\n z-index: var(--layer-menu);\n}\n.obsidian-dev-utils.popover .setting-item {\n align-items: center;\n border-top: none;\n gap: var(--size-4-2);\n padding: var(--size-2-1) 0;\n}\n.obsidian-dev-utils.popover .setting-item-info {\n margin-right: 0;\n}\n.obsidian-dev-utils.popover .setting-item-control {\n flex-grow: 1;\n justify-content: flex-end;\n}\n.obsidian-dev-utils.popover input[type=text] {\n width: 100%;\n}\n\n.obsidian-dev-utils.prompt-modal .text-box {\n width: 100%;\n}\n\nbody button:not(.clickable-icon) {\n color: var(--text-color);\n}\n\n.obsidian-dev-utils.tri-state-checkbox-component input[type=checkbox]:indeterminate {\n appearance: checkbox;\n}\n\n.obsidian-dev-utils :invalid:not(.untouched) {\n box-shadow: 0 0 0 2px var(--text-error);\n}\n.obsidian-dev-utils input.metadata-input-text:active:invalid:not(.untouched), .obsidian-dev-utils input.metadata-input-text:focus-visible:invalid:not(.untouched), .obsidian-dev-utils input.metadata-input-text:focus:invalid:not(.untouched),\n.obsidian-dev-utils input[type=date]:active:invalid:not(.untouched),\n.obsidian-dev-utils input[type=date]:focus-visible:invalid:not(.untouched),\n.obsidian-dev-utils input[type=date]:focus:invalid:not(.untouched),\n.obsidian-dev-utils input[type=datetime-local]:active:invalid:not(.untouched),\n.obsidian-dev-utils input[type=datetime-local]:focus-visible:invalid:not(.untouched),\n.obsidian-dev-utils input[type=datetime-local]:focus:invalid:not(.untouched),\n.obsidian-dev-utils input[type=email]:active:invalid:not(.untouched),\n.obsidian-dev-utils input[type=email]:focus-visible:invalid:not(.untouched),\n.obsidian-dev-utils input[type=email]:focus:invalid:not(.untouched),\n.obsidian-dev-utils input[type=number]:active:invalid:not(.untouched),\n.obsidian-dev-utils input[type=number]:focus-visible:invalid:not(.untouched),\n.obsidian-dev-utils input[type=number]:focus:invalid:not(.untouched),\n.obsidian-dev-utils input[type=password]:active:invalid:not(.untouched),\n.obsidian-dev-utils input[type=password]:focus-visible:invalid:not(.untouched),\n.obsidian-dev-utils input[type=password]:focus:invalid:not(.untouched),\n.obsidian-dev-utils input[type=search]:active:invalid:not(.untouched),\n.obsidian-dev-utils input[type=search]:focus-visible:invalid:not(.untouched),\n.obsidian-dev-utils input[type=search]:focus:invalid:not(.untouched),\n.obsidian-dev-utils input[type=text]:active:invalid:not(.untouched),\n.obsidian-dev-utils input[type=text]:focus-visible:invalid:not(.untouched),\n.obsidian-dev-utils input[type=text]:focus:invalid:not(.untouched),\n.obsidian-dev-utils textarea:active:invalid:not(.untouched),\n.obsidian-dev-utils textarea:focus-visible:invalid:not(.untouched),\n.obsidian-dev-utils textarea:focus:invalid:not(.untouched) {\n box-shadow: 0 0 0 2px var(--text-error);\n}\n.obsidian-dev-utils.setting-component-wrapper {\n position: relative;\n display: inline-flex;\n}\n.obsidian-dev-utils.overlay-validator {\n caret-color: transparent;\n cursor: default;\n position: absolute;\n background-color: transparent;\n border: none;\n outline: none;\n pointer-events: none;\n z-index: 9999;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n}\n.obsidian-dev-utils.tooltip.tooltip-validator {\n position: absolute;\n top: calc(100% + 8px);\n width: max-content;\n}\n\n/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../src/styles/code-highlighter-component.scss%22,%22../src/styles/editor-lock.scss%22,%22../src/styles/input.scss%22,%22../src/styles/input-time.scss%22,%22../src/styles/loop.scss%22,%22../src/styles/minimizable-modal.scss%22,%22../src/styles/modal-container.scss%22,%22../src/styles/multiple-dropdown-component.scss%22,%22../src/styles/plugin-notice.scss%22,%22../src/styles/plugin-settings-tab.scss%22,%22../src/styles/popover.scss%22,%22../src/styles/prompt-modal.scss%22,%22../src/styles/tldraw-button-color-workaround.scss%22,%22../src/styles/tri-state-checkbox-component.scss%22,%22../src/styles/validation.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AAEI;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;;ACvCN;EACE;EACA;EACA;;AAEA;EACE;EACA;;;AAMJ;EACE;IACE;IACA;;;AAIJ;EACE;;;ACvBA;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;EAKE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGE;EACE;AAAA;AAAA;AAAA;AAAA;IACE;IACA,YACE;;;AAMR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA,YACE;;AAIJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAGF;AAAA;AAAA;AAAA;AAAA;EACE;;AASE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AC7DV;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;AAGF;AAAA;AAAA;EACE;EACA;EACA;EACA;;AAMA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;EACA;;AAIK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGP;;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;;;AAKF;AAAA;AAAA;EACE;;;AAMJ;EACE;;;ACjDJ;EACE;;;ACFJ;EACE;IAEE;;EAGF;IACE;;;AAIJ;EACE;IACE;;EAGF;IACE;;EAGF;IACE;;;AAOA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AASN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAOA;EACE;;AAOF;EACE;;AAGF;EACE;;AAGF;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;EACE;EACA;;;ACxGJ;EACE;EACA;;;ACFF;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;;ACTN;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAEA;EACE;EACA;EACA;;AAKF;EACE;EACA;EACA;;AAOJ;EACE;;AAEA;EACE;;;AChCF;EACE;;;ACCJ;EAIE;EACA;EACA;EACA;EACA;;AAGA;EACE;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;;AC9BF;EACE;;;ACON;EACE;;;ACTE;EACE;;;ACKJ;EAPA;;AAuBI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAvBJ;;AA6BA;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA%22,%22file%22:%22styles.css%22,%22sourcesContent%22:%5B%22.obsidian-dev-utils%20%7B%5Cn%20%20&.code-highlighter-component%20%7B%5Cn%20%20%20%20textarea,%20pre,%20code%20%7B%5Cn%20%20%20%20%20%20font-family:%20var(--font-monospace);%5Cn%20%20%20%20%20%20line-height:%20var(--line-height-normal);%5Cn%20%20%20%20%20%20margin:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea,%20code%20%7B%5Cn%20%20%20%20%20%20font-size:%20var(--code-size);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20textarea%20%7B%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20transparent;%5Cn%20%20%20%20%20%20z-index:%202;%5Cn%20%20%20%20%20%20width:%2020em;%5Cn%20%20%20%20%20%20height:%2010em;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20pointer-events:%20none;%5Cn%20%20%20%20%20%20border:%20var(--input-border-width)%20solid%20transparent;%5Cn%20%20%20%20%20%20overflow:%20auto;%5Cn%20%20%20%20%20%20inset:%200;%5Cn%20%20%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20%20%20z-index:%201;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre::after%20%7B%5Cn%20%20%20%20%20%20content:%20%5C%22%5C%22;%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20height:%20var(--bottom-gap,%200);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20pre.is-placeholder%20%7B%5Cn%20%20%20%20%20%20opacity:%200.6;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20code%20%7B%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20padding:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22//%20Lock%20indicators%20shown%20in%20the%20tab%20header%20and%20the%20status%20bar%20while%20a%20note%20is%20locked.%20These%20live%20in%5Cn//%20global%20Obsidian%20DOM%20(tab%20header%20/%20status%20bar),%20so%20they%20are%20styled%20with%20a%20global%20class%20rather%20than%5Cn//%20scoped%20under%20%60.obsidian-dev-utils%60.%5Cn.obsidian-dev-utils-lock-indicator%20%7B%5Cn%20%20display:%20inline-flex;%5Cn%20%20align-items:%20center;%5Cn%20%20color:%20var(--text-muted);%5Cn%5Cn%20%20.svg-icon%20%7B%5Cn%20%20%20%20width:%20var(--icon-s);%5Cn%20%20%20%20height:%20var(--icon-s);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn//%20Flashed%20on%20every%20lock%20indicator%20(tab%20header,%20view%20action,%20status%20bar)%20when%20the%20user%20attempts%20to%5Cn//%20type%20in%20a%20locked%20note,%20to%20make%20clear%20the%20note%20is%20read-only.%20Re-added%20per%20rejected%20keystroke.%5Cn@keyframes%20obsidian-dev-utils-lock-indicator-flash%20%7B%5Cn%20%2040%25%20%7B%5Cn%20%20%20%20color:%20var(--text-error);%5Cn%20%20%20%20transform:%20scale(1.4);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn.obsidian-dev-utils-lock-indicator-flash%20%7B%5Cn%20%20animation:%20obsidian-dev-utils-lock-indicator-flash%200.35s%20ease-in-out;%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20input%5Btype='url'%5D%20%7B%5Cn%20%20%20%20height:%20var(--input-height)%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='tel'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='url'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20-webkit-app-region:%20no-drag;%5Cn%20%20%20%20background:%20var(--background-modifier-form-field);%5Cn%20%20%20%20border:%20var(--input-border-width)%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20font-family:%20inherit;%5Cn%20%20%20%20padding:%20var(--size-4-1)%20var(--size-4-2);%5Cn%20%20%20%20font-size:%20var(--font-ui-small);%5Cn%20%20%20%20border-radius:%20var(--input-radius);%5Cn%20%20%20%20outline:%20none;%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20@media%20(hover:%20hover)%20%7B%5Cn%20%20%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20border-color:%20var(--background-modifier-border-hover);%5Cn%20%20%20%20%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20border-color:%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%20%20transition:%5Cn%20%20%20%20%20%20%20%20box-shadow%200.15s%20ease-in-out,%5Cn%20%20%20%20%20%20%20%20border%200.15s%20ease-in-out;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus,%5Cn%20%20%20%20&:focus-visible%20%7B%5Cn%20%20%20%20%20%20box-shadow:%200%200%200%202px%20var(--background-modifier-border-focus);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::placeholder%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20@at-root%20%7B%5Cn%20%20%20%20.mod-rtl,%5Cn%20%20%20%20.is-rtl,%5Cn%20%20%20%20.rtl%20%7B%5Cn%20%20%20%20%20%20&%20%7B%5Cn%20%20%20%20%20%20%20%20input%5Btype='month'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='time'%5D,%5Cn%20%20%20%20%20%20%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20input%5Btype='month'%5D,%5Cn%20%20input%5Btype='time'%5D,%5Cn%20%20input%5Btype='week'%5D%20%7B%5Cn%20%20%20%20font-variant-numeric:%20tabular-nums;%5Cn%20%20%20%20position:%20relative;%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-text%20%7B%5Cn%20%20%20%20%20%20color:%20var(--text-faint);%5Cn%20%20%20%20%20%20padding-inline-end:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20left:%20var(--size-4-1);%5Cn%20%20%20%20%20%20right:%20auto;%5Cn%20%20%20%20%20%20opacity:%200.5;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20&::-webkit-datetime-edit-month-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-day-field,%5Cn%20%20%20%20&::-webkit-datetime-edit-year-field%20%7B%5Cn%20%20%20%20%20%20&:active,%5Cn%20%20%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20var(--text-selection);%5Cn%20%20%20%20%20%20%20%20color:%20var(--text-normal);%5Cn%20%20%20%20%20%20%20%20cursor:%20text;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20.mod-rtl%20&,%5Cn%20%20%20%20%20%20.is-rtl%20&,%5Cn%20%20%20%20%20%20.rtl%20&%20%7B%5Cn%20%20%20%20%20%20direction:%20rtl;%5Cn%5Cn%20%20%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20%20%20left:%20auto;%5Cn%20%20%20%20%20%20%20%20right:%20var(--size-4-1);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20@at-root%20%7B%5Cn%20%20%20%20%20%20body:not(.is-ios):not(.is-android)%20&%20%7B%5Cn%20%20%20%20%20%20%20%20padding-inline-start:%20var(--size-4-6);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20input%5Btype='time'%5D%20%7B%5Cn%20%20%20%20&::-webkit-calendar-picker-indicator%20%7B%5Cn%20%20%20%20%20%20margin-inline-start:%200;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&progress.loop%20%7B%5Cn%20%20%20%20min-width:%20200px;%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22@keyframes%20obsidian-dev-utils-minimized-modal-bar-pulse%20%7B%5Cn%20%200%25,%5Cn%20%20100%25%20%7B%5Cn%20%20%20%20box-shadow:%20var(--shadow-s);%5Cn%20%20%7D%5Cn%5Cn%20%2050%25%20%7B%5Cn%20%20%20%20box-shadow:%200%200%200%202px%20var(--interactive-accent);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn@keyframes%20obsidian-dev-utils-minimized-modal-bar-attention%20%7B%5Cn%20%200%25%20%7B%5Cn%20%20%20%20box-shadow:%200%200%200%200%20var(--interactive-accent);%5Cn%20%20%7D%5Cn%5Cn%20%2040%25%20%7B%5Cn%20%20%20%20box-shadow:%200%200%200%204px%20var(--interactive-accent);%5Cn%20%20%7D%5Cn%5Cn%20%20100%25%20%7B%5Cn%20%20%20%20box-shadow:%20var(--shadow-s);%5Cn%20%20%7D%5Cn%7D%5Cn%5Cn.obsidian-dev-utils%20%7B%5Cn%20%20//%20The%20minimize%20button%20lives%20inside%20the%20modal%20container,%20left%20of%20Obsidian's%20close%20button.%5Cn%20%20&.minimizable-modal%20%7B%5Cn%20%20%20%20.minimize-button%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20top:%20var(--size-4-2);%5Cn%20%20%20%20%20%20right:%20calc(var(--size-4-2)%20+%20var(--size-4-9));%5Cn%20%20%20%20%20%20display:%20flex;%5Cn%20%20%20%20%20%20align-items:%20center;%5Cn%20%20%20%20%20%20justify-content:%20center;%5Cn%20%20%20%20%20%20padding:%20var(--size-2-2);%5Cn%20%20%20%20%20%20border:%20none;%5Cn%20%20%20%20%20%20border-radius:%20var(--radius-s);%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20var(--icon-color);%5Cn%20%20%20%20%20%20cursor:%20pointer;%5Cn%20%20%20%20%20%20box-shadow:%20none;%5Cn%5Cn%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20background:%20var(--background-modifier-hover);%5Cn%20%20%20%20%20%20%20%20color:%20var(--icon-color-hover);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20//%20The%20minimized%20bar%20is%20appended%20to%20document.body.%20It%20floats%20at%20the%20bottom-right%20while%20minimized,%5Cn%20%20//%20and%20gently%20pulses%20an%20accent%20ring%20so%20the%20user%20does%20not%20forget%20about%20the%20minimized%20operation.%5Cn%20%20//%20It%20floats%20a%20status-bar's%20height%20above%20the%20bottom%20edge%20so%20it%20never%20covers%20the%20bottom-right%5Cn%20%20//%20status-bar%20items%20(e.g.%20the%20editor-lock%20unlock%20indicator,%20which%20lives%20in%20the%20same%20corner).%5Cn%20%20&.minimized-modal-bar%20%7B%5Cn%20%20%20%20position:%20fixed;%5Cn%20%20%20%20right:%20var(--size-4-4);%5Cn%20%20%20%20bottom:%20calc(var(--size-4-4)%20+%20var(--size-4-8));%5Cn%20%20%20%20z-index:%20var(--layer-modal);%5Cn%20%20%20%20display:%20flex;%5Cn%20%20%20%20align-items:%20center;%5Cn%20%20%20%20gap:%20var(--size-4-2);%5Cn%20%20%20%20padding:%20var(--size-4-2)%20var(--size-4-3);%5Cn%20%20%20%20border:%201px%20solid%20var(--background-modifier-border);%5Cn%20%20%20%20border-radius:%20var(--radius-m);%5Cn%20%20%20%20background:%20var(--background-secondary);%5Cn%20%20%20%20box-shadow:%20var(--shadow-s);%5Cn%20%20%20%20cursor:%20pointer;%5Cn%20%20%20%20animation:%20obsidian-dev-utils-minimized-modal-bar-pulse%202s%20ease-in-out%20infinite;%5Cn%5Cn%20%20%20%20//%20Layer%20the%20translucent%20hover%20tint%20over%20the%20opaque%20%60background%60%20(%60--background-secondary%60)%20via%5Cn%20%20%20%20//%20%60background-image%60%20instead%20of%20replacing%20the%20background-color.%20%60--background-modifier-hover%60%20is%5Cn%20%20%20%20//%20translucent,%20so%20setting%20it%20as%20%60background%60%20would%20let%20the%20editor%20content%20behind%20the%20floating%20bar%5Cn%20%20%20%20//%20bleed%20through%20and%20make%20the%20title%20unreadable.%20A%20gradient%20of%20the%20tint%20composited%20over%20the%20opaque%5Cn%20%20%20%20//%20base%20keeps%20the%20bar%20opaque%20while%20preserving%20the%20subtle%20hover%20highlight.%5Cn%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20background-image:%20linear-gradient(var(--background-modifier-hover),%20var(--background-modifier-hover));%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20//%20A%20one-shot,%20more%20pronounced%20flash%20played%20when%20the%20user%20attempts%20a%20blocked%20action%20(a%20keystroke,%5Cn%20%20%20%20//%20right-click,%20or%20opening%20another%20modal)%20while%20this%20modal%20is%20minimized,%20so%20the%20block%20is%20not%5Cn%20%20%20%20//%20silent.%20Its%20higher%20specificity%20overrides%20the%20gentle%20infinite%20idle%20pulse%20while%20it%20plays;%20the%5Cn%20%20%20%20//%20class%20is%20removed%20on%20%60animationend%60,%20restoring%20the%20idle%20pulse.%5Cn%20%20%20%20&.minimized-modal-bar-attention%20%7B%5Cn%20%20%20%20%20%20animation:%20obsidian-dev-utils-minimized-modal-bar-attention%200.35s%20ease-out;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.minimized-modal-bar-title%20%7B%5Cn%20%20%20%20%20%20font-weight:%20var(--font-medium);%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.restore-button,%5Cn%20%20%20%20.cancel-button%20%7B%5Cn%20%20%20%20%20%20display:%20flex;%5Cn%20%20%20%20%20%20align-items:%20center;%5Cn%20%20%20%20%20%20justify-content:%20center;%5Cn%20%20%20%20%20%20padding:%20var(--size-2-2);%5Cn%20%20%20%20%20%20border:%20none;%5Cn%20%20%20%20%20%20border-radius:%20var(--radius-s);%5Cn%20%20%20%20%20%20background:%20transparent;%5Cn%20%20%20%20%20%20color:%20var(--icon-color);%5Cn%20%20%20%20%20%20cursor:%20pointer;%5Cn%20%20%20%20%20%20box-shadow:%20none;%5Cn%5Cn%20%20%20%20%20%20&:hover%20%7B%5Cn%20%20%20%20%20%20%20%20background:%20var(--background-modifier-hover);%5Cn%20%20%20%20%20%20%20%20color:%20var(--icon-color-hover);%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.modal-container%20%7B%5Cn%20%20%20%20.ok-button%20%7B%5Cn%20%20%20%20%20%20margin-right:%2010px;%5Cn%20%20%20%20%20%20margin-top:%2020px;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20.multiple-dropdown-component%20%7B%5Cn%20%20%20%20select,%5Cn%20%20%20%20select:focus,%5Cn%20%20%20%20.dropdown%20%7B%5Cn%20%20%20%20%20%20height:%20auto;%5Cn%20%20%20%20%20%20padding-top:%203px;%5Cn%5Cn%20%20%20%20%20%20option:checked%20%7B%5Cn%20%20%20%20%20%20%20%20background-color:%20%231967d2;%5Cn%20%20%20%20%20%20%20%20color:%20%23fff;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.plugin-notice-name%20%7B%5Cn%20%20%20%20color:%20var(--text-accent);%5Cn%20%20%20%20display:%20inline-block;%5Cn%20%20%20%20font-weight:%20var(--font-bold);%5Cn%20%20%20%20margin-bottom:%20var(--size-4-2);%5Cn%20%20%7D%5Cn%5Cn%20%20&.plugin-notice-content%20%7B%5Cn%20%20%20%20padding-right:%20var(--size-4-5);%5Cn%20%20%20%20position:%20relative;%5Cn%5Cn%20%20%20%20.obsidian-dev-utils.cancel-button%20%7B%5Cn%20%20%20%20%20%20display:%20block;%5Cn%20%20%20%20%20%20margin-top:%20var(--size-4-2);%5Cn%20%20%20%20%20%20width:%20fit-content;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20//%20The%20close%20button%20reuses%20Obsidian's%20%60modal-header-button%60%20+%20%60clickable-icon%60%20classes%20so%20it%20matches%5Cn%20%20%20%20//%20The%20native%20modal%20close%20button%20(box%20+%20hover);%20only%20its%20corner%20position%20is%20set%20here.%5Cn%20%20%20%20.obsidian-dev-utils.plugin-notice-close-button%20%7B%5Cn%20%20%20%20%20%20position:%20absolute;%5Cn%20%20%20%20%20%20right:%20var(--size-4-3);%5Cn%20%20%20%20%20%20top:%20var(--size-4-3);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20//%20Move%20the%20notice's%20own%20padding%20onto%20the%20content%20wrapper%20so%20the%20wrapper%20covers%20the%20whole%20clickable%5Cn%20%20//%20Area%20%E2%80%94%20otherwise%20a%20click%20landing%20on%20the%20notice's%20bare%20padding%20(outside%20the%20wrapper)%20would%20bypass%20the%5Cn%20%20//%20Stop-propagation%20guard%20and%20dismiss%20the%20hard-to-close%20notice.%5Cn%20%20&.plugin-notice-requires-explicit-close.notice%20%7B%5Cn%20%20%20%20padding:%200;%5Cn%5Cn%20%20%20%20.obsidian-dev-utils.plugin-notice-content%20%7B%5Cn%20%20%20%20%20%20padding:%20var(--size-4-3)%20var(--size-4-4);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.plugin-settings-tab%20%7B%5Cn%20%20%20%20a:focus%20%7B%5Cn%20%20%20%20%20%20outline:%202px%20solid%20var(--link-color);%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22//%20A%20popover%20is%20anchored%20at%20a%20point%20and%20appended%20to%20the%20document%20body,%20outside%20any%20plugin-scoped%5Cn//%20container,%20so%20it%20is%20positioned%20absolutely%20at%20the%20top%20level.%20It%20borrows%20Obsidian's%20%60.menu%60%20look,%5Cn//%20which%20already%20carries%20the%20popup%20background,%20border%20and%20shadow%20%E2%80%94%20only%20layout%20is%20set%20here.%5Cn.obsidian-dev-utils%20%7B%5Cn%20%20&.popover%20%7B%5Cn%20%20%20%20//%20Deliberately%20not%20%60calc(100vw%20-%2016px)%60:%20the%20SCSS%20compiler%20strips%20the%20%60calc(%60%20wrapper%20inside%5Cn%20%20%20%20//%20%60min()%60,%20which%20yields%20invalid%20CSS.%20A%20viewport%20percentage%20keeps%20a%20narrow%20window's%20popover%20on%5Cn%20%20%20%20//%20screen.%5Cn%20%20%20%20max-width:%20min(420px,%2090vw);%5Cn%20%20%20%20min-width:%20320px;%5Cn%20%20%20%20padding:%20var(--size-4-2)%20var(--size-4-3);%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20z-index:%20var(--layer-menu);%5Cn%5Cn%20%20%20%20//%20Setting%20rows%20are%20built%20for%20a%20full-width%20settings%20tab;%20compact%20them%20for%20a%20popover.%5Cn%20%20%20%20.setting-item%20%7B%5Cn%20%20%20%20%20%20align-items:%20center;%5Cn%20%20%20%20%20%20border-top:%20none;%5Cn%20%20%20%20%20%20gap:%20var(--size-4-2);%5Cn%20%20%20%20%20%20padding:%20var(--size-2-1)%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.setting-item-info%20%7B%5Cn%20%20%20%20%20%20margin-right:%200;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20.setting-item-control%20%7B%5Cn%20%20%20%20%20%20flex-grow:%201;%5Cn%20%20%20%20%20%20justify-content:%20flex-end;%5Cn%20%20%20%20%7D%5Cn%5Cn%20%20%20%20input%5Btype='text'%5D%20%7B%5Cn%20%20%20%20%20%20width:%20100%25;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cn%20%20&.prompt-modal%20%7B%5Cn%20%20%20%20.text-box%20%7B%5Cn%20%20%20%20%20%20width:%20100%25;%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%7D%5Cn%22,%22//%20The%20tldraw%20Obsidian%20plugin%20(tldraw/obsidian-plugin)%20ships%20an%20unscoped%20global%20rule%5Cn//%20%60button:not(.clickable-icon)%20%7B%20color:%20currentColor%20%7D%60%20that%20overrides%20Obsidian's%20own%5Cn//%20%60button:not(.clickable-icon)%20%7B%20color:%20var(--text-color)%20%7D%60%20app-wide.%20Obsidian%20sets%5Cn//%20%60--text-color%60%20contextually%20per%20button%20variant%20(%60--text-normal%60%20by%20default,%5Cn//%20%60--text-on-accent%60%20for%20%60.mod-cta%60,%20%60--text-error%60%20for%20%60.mod-warning%60),%20so%20tldraw's%5Cn//%20%60currentColor%60%20discards%20that%20and%20breaks%20button%20contrast%20outside%20tldraw%20%E2%80%94%20e.g.%5Cn//%20White-on-white%20action%20buttons%20inside%20a%20Notice.%20Re-assert%20Obsidian's%20own%20value%20with%20a%5Cn//%20%60body%60-prefixed%20selector%20(specificity%200,1,2)%20so%20it%20wins%20over%20tldraw's%20(0,1,1)%20while%5Cn//%20Staying%20correct%20for%20every%20button%20variant%20(it%20reuses%20the%20same%20contextual%20%60--text-color%60).%5Cn//%20Defensive%20workaround%20%E2%80%94%20remove%20once%20the%20upstream%20fix%20ships%20(tldraw/obsidian-plugin%23210).%5Cnbody%20button:not(.clickable-icon)%20%7B%5Cn%20%20color:%20var(--text-color);%5Cn%7D%5Cn%22,%22.obsidian-dev-utils%20%7B%5Cr%5Cn%20%20&.tri-state-checkbox-component%20%7B%5Cr%5Cn%20%20%20%20input%5Btype='checkbox'%5D:indeterminate%20%7B%5Cr%5Cn%20%20%20%20%20%20appearance:%20checkbox;%5Cr%5Cn%20%20%20%20%7D%5Cr%5Cn%20%20%7D%5Cr%5Cn%7D%5Cr%5Cn%22,%22@mixin%20invalid%20%7B%5Cn%20%20box-shadow:%200%200%200%202px%20var(--text-error);%5Cn%7D%5Cn%5Cn//%20An%20input%20the%20user%20has%20not%20interacted%20with%20yet%20carries%20%60.untouched%60%20(set%20by%20%60PromptModal%60),%20so%20a%20modal%20that%5Cn//%20opens%20invalid%20by%20design%20does%20not%20greet%20the%20user%20in%20red.%20Both%20blocks%20below%20must%20be%20gated:%20the%20input%20is%5Cn//%20focused%20on%20open,%20so%20the%20focus%20block%20alone%20would%20keep%20painting%20it.%5Cn.obsidian-dev-utils%20%7B%5Cn%20%20:invalid:not(.untouched)%20%7B%5Cn%20%20%20%20@include%20invalid;%5Cn%20%20%7D%5Cn%5Cn%20%20input.metadata-input-text,%5Cn%20%20input%5Btype='date'%5D,%5Cn%20%20input%5Btype='datetime-local'%5D,%5Cn%20%20input%5Btype='email'%5D,%5Cn%20%20input%5Btype='number'%5D,%5Cn%20%20input%5Btype='password'%5D,%5Cn%20%20input%5Btype='search'%5D,%5Cn%20%20input%5Btype='text'%5D,%5Cn%20%20textarea%20%7B%5Cn%20%20%20%20&:active,%5Cn%20%20%20%20&:focus-visible,%5Cn%20%20%20%20&:focus%20%7B%5Cn%20%20%20%20%20%20&:invalid:not(.untouched)%20%7B%5Cn%20%20%20%20%20%20%20%20@include%20invalid;%5Cn%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%20%20%7D%5Cn%5Cn%20%20&.setting-component-wrapper%20%7B%5Cn%20%20%20%20position:%20relative;%5Cn%20%20%20%20display:%20inline-flex;%5Cn%20%20%7D%5Cn%5Cn%20%20&.overlay-validator%20%7B%5Cn%20%20%20%20caret-color:%20transparent;%5Cn%20%20%20%20cursor:%20default;%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20background-color:%20transparent;%5Cn%20%20%20%20border:%20none;%5Cn%20%20%20%20outline:%20none;%5Cn%20%20%20%20pointer-events:%20none;%5Cn%20%20%20%20z-index:%209999;%5Cn%20%20%20%20left:%200;%5Cn%20%20%20%20top:%200;%5Cn%20%20%20%20width:%20100%25;%5Cn%20%20%20%20height:%20100%25;%5Cn%20%20%7D%5Cn%5Cn%20%20&.tooltip.tooltip-validator%20%7B%5Cn%20%20%20%20position:%20absolute;%5Cn%20%20%20%20top:%20calc(100%25%20+%208px);%5Cn%20%20%20%20width:%20max-content;%5Cn%20%20%7D%5Cn%7D%5Cn%22%5D%7D */\n";
26
26
  export {
27
27
  LIBRARY_STYLES,
@@ -41,6 +41,10 @@ export declare enum ObsidianPluginRepoPaths {
41
41
  */
42
42
  AnyTsx = "*.tsx",
43
43
  /**
44
+ Obsidian application settings file within an Obsidian configuration folder.
45
+ */
46
+ AppJson = "app.json",
47
+ /**
44
48
  Changelog file.
45
49
  */
46
50
  ChangelogMd = "CHANGELOG.md",
@@ -30,6 +30,7 @@ var ObsidianPluginRepoPaths = /* @__PURE__ */ ((ObsidianPluginRepoPaths2) => {
30
30
  ObsidianPluginRepoPaths2["AnyTestTs"] = "*.test.ts";
31
31
  ObsidianPluginRepoPaths2["AnyTs"] = "*.ts";
32
32
  ObsidianPluginRepoPaths2["AnyTsx"] = "*.tsx";
33
+ ObsidianPluginRepoPaths2["AppJson"] = "app.json";
33
34
  ObsidianPluginRepoPaths2["ChangelogMd"] = "CHANGELOG.md";
34
35
  ObsidianPluginRepoPaths2["CommitlintConfigTs"] = "commitlint.config.ts";
35
36
  ObsidianPluginRepoPaths2["CurrentFolder"] = ".";
@@ -79,4 +80,4 @@ var ObsidianPluginRepoPaths = /* @__PURE__ */ ((ObsidianPluginRepoPaths2) => {
79
80
  export {
80
81
  ObsidianPluginRepoPaths
81
82
  };
82
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3BsdWdpbi9vYnNpZGlhbi1wbHVnaW4tcmVwby1wYXRocy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoaXMgZmlsZSBkZWZpbmVzIGFuIGVudW1lcmF0aW9uIGZvciBjb21tb24gZmlsZSBhbmQgZm9sZGVyIHBhdGhzIHVzZWQgaW4gT2JzaWRpYW4gcGx1Z2luIGRldmVsb3BtZW50LlxuICovXG5cbi8qKlxuICogRW51bWVyYXRpb24gb2YgY29tbW9ubHkgdXNlZCBmaWxlIGFuZCBmb2xkZXIgcGF0aHMgaW4gT2JzaWRpYW4gcGx1Z2luIGRldmVsb3BtZW50LlxuICovXG5leHBvcnQgZW51bSBPYnNpZGlhblBsdWdpblJlcG9QYXRocyB7XG4gIC8qKlxuICBDb21tb25KUyBmaWxlLlxuICAgKi9cbiAgQW55Q2pzID0gJyouY2pzJyxcblxuICAvKipcbiAgQW55IGludGVncmF0aW9uLXRlc3QgVHlwZVNjcmlwdCBmaWxlLlxuICAgKi9cbiAgQW55SW50ZWdyYXRpb25UZXN0VHMgPSAnKi5pbnRlZ3JhdGlvbi50ZXN0LnRzJyxcblxuICAvKipcbiAgSmF2YVNjcmlwdCBmaWxlLlxuICAgKi9cbiAgQW55SnMgPSAnKi5qcycsXG5cbiAgLyoqXG4gIEVTTSBKYXZhU2NyaXB0IGZpbGUuXG4gICAqL1xuICBBbnlNanMgPSAnKi5tanMnLFxuXG4gIC8qKlxuICBBbnkgcGF0aCByZWN1cnNpdmVseS5cbiAgICovXG4gIEFueVBhdGggPSAnKionLFxuXG4gIC8qKlxuICBBbnkgdGVzdCBUeXBlU2NyaXB0IGZpbGUuXG4gICAqL1xuICBBbnlUZXN0VHMgPSAnKi50ZXN0LnRzJyxcblxuICAvKipcbiAgVHlwZVNjcmlwdCBmaWxlLlxuICAgKi9cbiAgQW55VHMgPSAnKi50cycsXG5cbiAgLyoqXG4gIFJlYWN0SlMgVHlwZVNjcmlwdCBmaWxlLlxuICAgKi9cbiAgQW55VHN4ID0gJyoudHN4JyxcblxuICAvKipcbiAgQ2hhbmdlbG9nIGZpbGUuXG4gICAqL1xuICBDaGFuZ2Vsb2dNZCA9ICdDSEFOR0VMT0cubWQnLFxuXG4gIC8qKlxuICBDb21taXRsaW50IGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICovXG4gIENvbW1pdGxpbnRDb25maWdUcyA9ICdjb21taXRsaW50LmNvbmZpZy50cycsXG5cbiAgLyoqXG4gIEN1cnJlbnQgZm9sZGVyLlxuICAgKi9cbiAgQ3VycmVudEZvbGRlciA9ICcuJyxcblxuICAvKipcbiAgRGVtbyB2YXVsdCBmb2xkZXIgc2hpcHBlZCBpbiBhIHBsdWdpbiByZXBvIHJvb3QuXG4gICAqL1xuICBEZW1vVmF1bHQgPSAnZGVtby12YXVsdCcsXG5cbiAgLyoqXG4gIERpc3RyaWJ1dGlvbiBmb2xkZXIuXG4gICAqL1xuICBEaXN0ID0gJ2Rpc3QnLFxuXG4gIC8qKlxuICBCdWlsZCBmb2xkZXIgd2l0aGluIHRoZSB7QGxpbmsgRGlzdH0gZm9sZGVyLlxuICAgKi9cbiAgRGlzdEJ1aWxkID0gJ2Rpc3QvYnVpbGQnLFxuXG4gIC8qKlxuICBEZXZlbG9wbWVudCBmb2xkZXIgd2l0aGluIHRoZSB7QGxpbmsgRGlzdH0gZm9sZGVyLlxuICAgKi9cbiAgRGlzdERldiA9ICdkaXN0L2RldicsXG5cbiAgLyoqXG4gIE9ic2lkaWFuIGNvbmZpZ3VyYXRpb24gZm9sZGVyIHdpdGhpbiBhIHZhdWx0LlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9ic2lkaWFubWQvaGFyZGNvZGVkLWNvbmZpZy1wYXRoIC0tIFRoaXMgaXMgdGhlIGRlZmF1bHQgY29uZmlnIGZvbGRlciBuYW1lIGJha2VkIGludG8gYSBzaGlwcGVkIGRlbW8tdmF1bHQgc2tlbGV0b24sIG5vdCBhIGxvb2t1cCBhZ2FpbnN0IGEgbGl2ZSB2YXVsdC5cbiAgRG90T2JzaWRpYW4gPSAnLm9ic2lkaWFuJyxcblxuICAvKipcbiAgQ29tbW9uSlMgRVNMaW50IGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICovXG4gIEVzbGludENvbmZpZ0NqcyA9ICdlc2xpbnQuY29uZmlnLmNqcycsXG5cbiAgLyoqXG4gIENvbW1vbkpTIFR5cGVTY3JpcHQgRVNMaW50IGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICovXG4gIEVzbGludENvbmZpZ0N0cyA9ICdlc2xpbnQuY29uZmlnLmN0cycsXG5cbiAgLyoqXG4gIEphdmFTY3JpcHQgRVNMaW50IGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICovXG4gIEVzbGludENvbmZpZ0pzID0gJ2VzbGludC5jb25maWcuanMnLFxuXG4gIC8qKlxuICBFU00gSmF2YVNjcmlwdCBFU0xpbnQgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgKi9cbiAgRXNsaW50Q29uZmlnTWpzID0gJ2VzbGludC5jb25maWcubWpzJyxcblxuICAvKipcbiAgRVNNIFR5cGVTY3JpcHQgRVNMaW50IGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICovXG4gIEVzbGludENvbmZpZ010cyA9ICdlc2xpbnQuY29uZmlnLm10cycsXG5cbiAgLyoqXG4gIFR5cGVTY3JpcHQgRVNMaW50IGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICovXG4gIEVzbGludENvbmZpZ1RzID0gJ2VzbGludC5jb25maWcudHMnLFxuXG4gIC8qKlxuICBIb3QgcmVsb2FkIGZpbGUuXG4gICAqL1xuICBIb3RSZWxvYWQgPSAnLmhvdHJlbG9hZCcsXG5cbiAgLyoqXG4gIE1haW4gQ1NTIGZpbGUuXG4gICAqL1xuICBNYWluQ3NzID0gJ21haW4uY3NzJyxcblxuICAvKipcbiAgTWFpbiBKYXZhU2NyaXB0IGZpbGUuXG4gICAqL1xuICBNYWluSnMgPSAnbWFpbi5qcycsXG5cbiAgLyoqXG4gIE1haW4gVHlwZVNjcmlwdCBmaWxlLlxuICAgKi9cbiAgTWFpblRzID0gJ21haW4udHMnLFxuXG4gIC8qKlxuICBNYW5pZmVzdCBmaWxlIGZvciBiZXRhIHJlbGVhc2VzLlxuICAgKi9cbiAgTWFuaWZlc3RCZXRhSnNvbiA9ICdtYW5pZmVzdC1iZXRhLmpzb24nLFxuXG4gIC8qKlxuICBNYW5pZmVzdCBmaWxlLlxuICAgKi9cbiAgTWFuaWZlc3RKc29uID0gJ21hbmlmZXN0Lmpzb24nLFxuXG4gIC8qKlxuICBDb21tb25KUyBNYXJrZG93bmxpbnQgQ0xJMiBjb25maWd1cmF0aW9uIGZpbGUuXG4gICAqL1xuICBNYXJrZG93bmxpbnRDbGkyQ29uZmlnQ2pzID0gJy5tYXJrZG93bmxpbnQtY2xpMi5janMnLFxuXG4gIC8qKlxuICBKU09OQyBNYXJrZG93bmxpbnQgQ0xJMiBjb25maWd1cmF0aW9uIGZpbGUuXG4gICAqL1xuICBNYXJrZG93bmxpbnRDbGkyQ29uZmlnSnNvbmMgPSAnLm1hcmtkb3dubGludC1jbGkyLmpzb25jJyxcblxuICAvKipcbiAgRVNNIE1hcmtkb3dubGludCBDTEkyIGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICovXG4gIE1hcmtkb3dubGludENsaTJDb25maWdNanMgPSAnLm1hcmtkb3dubGludC1jbGkyLm1qcycsXG5cbiAgLyoqXG4gIFlBTUwgTWFya2Rvd25saW50IENMSTIgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgKi9cbiAgTWFya2Rvd25saW50Q2xpMkNvbmZpZ1lhbWwgPSAnLm1hcmtkb3dubGludC1jbGkyLnlhbWwnLFxuXG4gIC8qKlxuICBDb21tb25KUyBNYXJrZG93bmxpbnQgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgKi9cbiAgTWFya2Rvd25saW50Q29uZmlnQ2pzID0gJy5tYXJrZG93bmxpbnQuY2pzJyxcblxuICAvKipcbiAgSlNPTiBNYXJrZG93bmxpbnQgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgKi9cbiAgTWFya2Rvd25saW50Q29uZmlnSnNvbiA9ICcubWFya2Rvd25saW50Lmpzb24nLFxuXG4gIC8qKlxuICBKU09OQyBNYXJrZG93bmxpbnQgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgKi9cbiAgTWFya2Rvd25saW50Q29uZmlnSnNvbmMgPSAnLm1hcmtkb3dubGludC5qc29uYycsXG5cbiAgLyoqXG4gIEVTTSBNYXJrZG93bmxpbnQgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgKi9cbiAgTWFya2Rvd25saW50Q29uZmlnTWpzID0gJy5tYXJrZG93bmxpbnQubWpzJyxcblxuICAvKipcbiAgWUFNTCBNYXJrZG93bmxpbnQgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgKi9cbiAgTWFya2Rvd25saW50Q29uZmlnWWFtbCA9ICcubWFya2Rvd25saW50LnlhbWwnLFxuXG4gIC8qKlxuICBZQU1MIE1hcmtkb3dubGludCBjb25maWd1cmF0aW9uIGZpbGUuXG4gICAqL1xuICBNYXJrZG93bmxpbnRDb25maWdZbWwgPSAnLm1hcmtkb3dubGludC55bWwnLFxuXG4gIC8qKlxuICBNb2NrcyBmb2xkZXIuXG4gICAqL1xuICBNb2NrcyA9ICdzcmMvdGVzdC1oZWxwZXJzJyxcblxuICAvKipcbiAgTm9kZSBtb2R1bGVzIGZvbGRlci5cbiAgICovXG4gIE5vZGVNb2R1bGVzID0gJ25vZGVfbW9kdWxlcycsXG5cbiAgLyoqXG4gIE5QTSBzaHJpbmt3cmFwIGZpbGUuXG4gICAqL1xuICBOcG1TaHJpbmt3cmFwSnNvbiA9ICducG0tc2hyaW5rd3JhcC5qc29uJyxcblxuICAvKipcbiAgUGFja2FnZSBKU09OIGZpbGUuXG4gICAqL1xuICBQYWNrYWdlSnNvbiA9ICdwYWNrYWdlLmpzb24nLFxuXG4gIC8qKlxuICBQYWNrYWdlLWxvY2sgSlNPTiBmaWxlLlxuICAgKi9cbiAgUGFja2FnZUxvY2tKc29uID0gJ3BhY2thZ2UtbG9jay5qc29uJyxcblxuICAvKipcbiAgUGx1Z2lucyBmb2xkZXIgd2l0aGluIGFuIE9ic2lkaWFuIGNvbmZpZ3VyYXRpb24gZm9sZGVyLlxuICAgKi9cbiAgUGx1Z2lucyA9ICdwbHVnaW5zJyxcblxuICAvKipcbiAgU2NyaXB0cyBmb2xkZXIuXG4gICAqL1xuICBTY3JpcHRzID0gJ3NjcmlwdHMnLFxuXG4gIC8qKlxuICBTY3JpcHQgdXRpbGl0aWVzIGZvbGRlciAoZGV2LW9ubHkgdG9vbGluZyB0aGF0IHJ1bnMgaW4gdGhlIGNvbnN1bWVyJ3MgTm9kZSBlbnZpcm9ubWVudCwgbm90IHRoZSBPYnNpZGlhbiBydW50aW1lKS5cbiAgICovXG4gIFNjcmlwdFV0aWxzID0gJ3NyYy9zY3JpcHQtdXRpbHMnLFxuXG4gIC8qKlxuICBTb3VyY2UgZm9sZGVyLlxuICAgKi9cbiAgU3JjID0gJ3NyYycsXG5cbiAgLyoqXG4gIFN0eWxlcyBDU1MgZmlsZS5cbiAgICovXG4gIFN0eWxlc0NzcyA9ICdzdHlsZXMuY3NzJyxcblxuICAvKipcbiAgVGVzdHMgZm9sZGVyLlxuICAgKi9cbiAgVGVzdHMgPSAnX190ZXN0c19fJyxcblxuICAvKipcbiAgVHlwZVNjcmlwdCBjb25maWd1cmF0aW9uIGZpbGUuXG4gICAqL1xuICBUc0NvbmZpZ0pzb24gPSAndHNjb25maWcuanNvbicsXG5cbiAgLyoqXG4gIFZlcnNpb25zIEpTT04gZmlsZS5cbiAgICovXG4gIFZlcnNpb25zSnNvbiA9ICd2ZXJzaW9ucy5qc29uJyxcblxuICAvKipcbiAgVml0ZXN0IGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICovXG4gIFZpdGVzdENvbmZpZ1RzID0gJ3ZpdGVzdC5jb25maWcudHMnXG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVNPLElBQUssMEJBQUwsa0JBQUtBLDZCQUFMO0FBSUwsRUFBQUEseUJBQUEsWUFBUztBQUtULEVBQUFBLHlCQUFBLDBCQUF1QjtBQUt2QixFQUFBQSx5QkFBQSxXQUFRO0FBS1IsRUFBQUEseUJBQUEsWUFBUztBQUtULEVBQUFBLHlCQUFBLGFBQVU7QUFLVixFQUFBQSx5QkFBQSxlQUFZO0FBS1osRUFBQUEseUJBQUEsV0FBUTtBQUtSLEVBQUFBLHlCQUFBLFlBQVM7QUFLVCxFQUFBQSx5QkFBQSxpQkFBYztBQUtkLEVBQUFBLHlCQUFBLHdCQUFxQjtBQUtyQixFQUFBQSx5QkFBQSxtQkFBZ0I7QUFLaEIsRUFBQUEseUJBQUEsZUFBWTtBQUtaLEVBQUFBLHlCQUFBLFVBQU87QUFLUCxFQUFBQSx5QkFBQSxlQUFZO0FBS1osRUFBQUEseUJBQUEsYUFBVTtBQU1WLEVBQUFBLHlCQUFBLGlCQUFjO0FBS2QsRUFBQUEseUJBQUEscUJBQWtCO0FBS2xCLEVBQUFBLHlCQUFBLHFCQUFrQjtBQUtsQixFQUFBQSx5QkFBQSxvQkFBaUI7QUFLakIsRUFBQUEseUJBQUEscUJBQWtCO0FBS2xCLEVBQUFBLHlCQUFBLHFCQUFrQjtBQUtsQixFQUFBQSx5QkFBQSxvQkFBaUI7QUFLakIsRUFBQUEseUJBQUEsZUFBWTtBQUtaLEVBQUFBLHlCQUFBLGFBQVU7QUFLVixFQUFBQSx5QkFBQSxZQUFTO0FBS1QsRUFBQUEseUJBQUEsWUFBUztBQUtULEVBQUFBLHlCQUFBLHNCQUFtQjtBQUtuQixFQUFBQSx5QkFBQSxrQkFBZTtBQUtmLEVBQUFBLHlCQUFBLCtCQUE0QjtBQUs1QixFQUFBQSx5QkFBQSxpQ0FBOEI7QUFLOUIsRUFBQUEseUJBQUEsK0JBQTRCO0FBSzVCLEVBQUFBLHlCQUFBLGdDQUE2QjtBQUs3QixFQUFBQSx5QkFBQSwyQkFBd0I7QUFLeEIsRUFBQUEseUJBQUEsNEJBQXlCO0FBS3pCLEVBQUFBLHlCQUFBLDZCQUEwQjtBQUsxQixFQUFBQSx5QkFBQSwyQkFBd0I7QUFLeEIsRUFBQUEseUJBQUEsNEJBQXlCO0FBS3pCLEVBQUFBLHlCQUFBLDJCQUF3QjtBQUt4QixFQUFBQSx5QkFBQSxXQUFRO0FBS1IsRUFBQUEseUJBQUEsaUJBQWM7QUFLZCxFQUFBQSx5QkFBQSx1QkFBb0I7QUFLcEIsRUFBQUEseUJBQUEsaUJBQWM7QUFLZCxFQUFBQSx5QkFBQSxxQkFBa0I7QUFLbEIsRUFBQUEseUJBQUEsYUFBVTtBQUtWLEVBQUFBLHlCQUFBLGFBQVU7QUFLVixFQUFBQSx5QkFBQSxpQkFBYztBQUtkLEVBQUFBLHlCQUFBLFNBQU07QUFLTixFQUFBQSx5QkFBQSxlQUFZO0FBS1osRUFBQUEseUJBQUEsV0FBUTtBQUtSLEVBQUFBLHlCQUFBLGtCQUFlO0FBS2YsRUFBQUEseUJBQUEsa0JBQWU7QUFLZixFQUFBQSx5QkFBQSxvQkFBaUI7QUFwUVAsU0FBQUE7QUFBQSxHQUFBOyIsCiAgIm5hbWVzIjogWyJPYnNpZGlhblBsdWdpblJlcG9QYXRocyJdCn0K
83
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3BsdWdpbi9vYnNpZGlhbi1wbHVnaW4tcmVwby1wYXRocy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoaXMgZmlsZSBkZWZpbmVzIGFuIGVudW1lcmF0aW9uIGZvciBjb21tb24gZmlsZSBhbmQgZm9sZGVyIHBhdGhzIHVzZWQgaW4gT2JzaWRpYW4gcGx1Z2luIGRldmVsb3BtZW50LlxuICovXG5cbi8qKlxuICogRW51bWVyYXRpb24gb2YgY29tbW9ubHkgdXNlZCBmaWxlIGFuZCBmb2xkZXIgcGF0aHMgaW4gT2JzaWRpYW4gcGx1Z2luIGRldmVsb3BtZW50LlxuICovXG5leHBvcnQgZW51bSBPYnNpZGlhblBsdWdpblJlcG9QYXRocyB7XG4gIC8qKlxuICBDb21tb25KUyBmaWxlLlxuICAgKi9cbiAgQW55Q2pzID0gJyouY2pzJyxcblxuICAvKipcbiAgQW55IGludGVncmF0aW9uLXRlc3QgVHlwZVNjcmlwdCBmaWxlLlxuICAgKi9cbiAgQW55SW50ZWdyYXRpb25UZXN0VHMgPSAnKi5pbnRlZ3JhdGlvbi50ZXN0LnRzJyxcblxuICAvKipcbiAgSmF2YVNjcmlwdCBmaWxlLlxuICAgKi9cbiAgQW55SnMgPSAnKi5qcycsXG5cbiAgLyoqXG4gIEVTTSBKYXZhU2NyaXB0IGZpbGUuXG4gICAqL1xuICBBbnlNanMgPSAnKi5tanMnLFxuXG4gIC8qKlxuICBBbnkgcGF0aCByZWN1cnNpdmVseS5cbiAgICovXG4gIEFueVBhdGggPSAnKionLFxuXG4gIC8qKlxuICBBbnkgdGVzdCBUeXBlU2NyaXB0IGZpbGUuXG4gICAqL1xuICBBbnlUZXN0VHMgPSAnKi50ZXN0LnRzJyxcblxuICAvKipcbiAgVHlwZVNjcmlwdCBmaWxlLlxuICAgKi9cbiAgQW55VHMgPSAnKi50cycsXG5cbiAgLyoqXG4gIFJlYWN0SlMgVHlwZVNjcmlwdCBmaWxlLlxuICAgKi9cbiAgQW55VHN4ID0gJyoudHN4JyxcblxuICAvKipcbiAgT2JzaWRpYW4gYXBwbGljYXRpb24gc2V0dGluZ3MgZmlsZSB3aXRoaW4gYW4gT2JzaWRpYW4gY29uZmlndXJhdGlvbiBmb2xkZXIuXG4gICAqL1xuICBBcHBKc29uID0gJ2FwcC5qc29uJyxcblxuICAvKipcbiAgQ2hhbmdlbG9nIGZpbGUuXG4gICAqL1xuICBDaGFuZ2Vsb2dNZCA9ICdDSEFOR0VMT0cubWQnLFxuXG4gIC8qKlxuICBDb21taXRsaW50IGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICovXG4gIENvbW1pdGxpbnRDb25maWdUcyA9ICdjb21taXRsaW50LmNvbmZpZy50cycsXG5cbiAgLyoqXG4gIEN1cnJlbnQgZm9sZGVyLlxuICAgKi9cbiAgQ3VycmVudEZvbGRlciA9ICcuJyxcblxuICAvKipcbiAgRGVtbyB2YXVsdCBmb2xkZXIgc2hpcHBlZCBpbiBhIHBsdWdpbiByZXBvIHJvb3QuXG4gICAqL1xuICBEZW1vVmF1bHQgPSAnZGVtby12YXVsdCcsXG5cbiAgLyoqXG4gIERpc3RyaWJ1dGlvbiBmb2xkZXIuXG4gICAqL1xuICBEaXN0ID0gJ2Rpc3QnLFxuXG4gIC8qKlxuICBCdWlsZCBmb2xkZXIgd2l0aGluIHRoZSB7QGxpbmsgRGlzdH0gZm9sZGVyLlxuICAgKi9cbiAgRGlzdEJ1aWxkID0gJ2Rpc3QvYnVpbGQnLFxuXG4gIC8qKlxuICBEZXZlbG9wbWVudCBmb2xkZXIgd2l0aGluIHRoZSB7QGxpbmsgRGlzdH0gZm9sZGVyLlxuICAgKi9cbiAgRGlzdERldiA9ICdkaXN0L2RldicsXG5cbiAgLyoqXG4gIE9ic2lkaWFuIGNvbmZpZ3VyYXRpb24gZm9sZGVyIHdpdGhpbiBhIHZhdWx0LlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9ic2lkaWFubWQvaGFyZGNvZGVkLWNvbmZpZy1wYXRoIC0tIFRoaXMgaXMgdGhlIGRlZmF1bHQgY29uZmlnIGZvbGRlciBuYW1lIGJha2VkIGludG8gYSBzaGlwcGVkIGRlbW8tdmF1bHQgc2tlbGV0b24sIG5vdCBhIGxvb2t1cCBhZ2FpbnN0IGEgbGl2ZSB2YXVsdC5cbiAgRG90T2JzaWRpYW4gPSAnLm9ic2lkaWFuJyxcblxuICAvKipcbiAgQ29tbW9uSlMgRVNMaW50IGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICovXG4gIEVzbGludENvbmZpZ0NqcyA9ICdlc2xpbnQuY29uZmlnLmNqcycsXG5cbiAgLyoqXG4gIENvbW1vbkpTIFR5cGVTY3JpcHQgRVNMaW50IGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICovXG4gIEVzbGludENvbmZpZ0N0cyA9ICdlc2xpbnQuY29uZmlnLmN0cycsXG5cbiAgLyoqXG4gIEphdmFTY3JpcHQgRVNMaW50IGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICovXG4gIEVzbGludENvbmZpZ0pzID0gJ2VzbGludC5jb25maWcuanMnLFxuXG4gIC8qKlxuICBFU00gSmF2YVNjcmlwdCBFU0xpbnQgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgKi9cbiAgRXNsaW50Q29uZmlnTWpzID0gJ2VzbGludC5jb25maWcubWpzJyxcblxuICAvKipcbiAgRVNNIFR5cGVTY3JpcHQgRVNMaW50IGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICovXG4gIEVzbGludENvbmZpZ010cyA9ICdlc2xpbnQuY29uZmlnLm10cycsXG5cbiAgLyoqXG4gIFR5cGVTY3JpcHQgRVNMaW50IGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICovXG4gIEVzbGludENvbmZpZ1RzID0gJ2VzbGludC5jb25maWcudHMnLFxuXG4gIC8qKlxuICBIb3QgcmVsb2FkIGZpbGUuXG4gICAqL1xuICBIb3RSZWxvYWQgPSAnLmhvdHJlbG9hZCcsXG5cbiAgLyoqXG4gIE1haW4gQ1NTIGZpbGUuXG4gICAqL1xuICBNYWluQ3NzID0gJ21haW4uY3NzJyxcblxuICAvKipcbiAgTWFpbiBKYXZhU2NyaXB0IGZpbGUuXG4gICAqL1xuICBNYWluSnMgPSAnbWFpbi5qcycsXG5cbiAgLyoqXG4gIE1haW4gVHlwZVNjcmlwdCBmaWxlLlxuICAgKi9cbiAgTWFpblRzID0gJ21haW4udHMnLFxuXG4gIC8qKlxuICBNYW5pZmVzdCBmaWxlIGZvciBiZXRhIHJlbGVhc2VzLlxuICAgKi9cbiAgTWFuaWZlc3RCZXRhSnNvbiA9ICdtYW5pZmVzdC1iZXRhLmpzb24nLFxuXG4gIC8qKlxuICBNYW5pZmVzdCBmaWxlLlxuICAgKi9cbiAgTWFuaWZlc3RKc29uID0gJ21hbmlmZXN0Lmpzb24nLFxuXG4gIC8qKlxuICBDb21tb25KUyBNYXJrZG93bmxpbnQgQ0xJMiBjb25maWd1cmF0aW9uIGZpbGUuXG4gICAqL1xuICBNYXJrZG93bmxpbnRDbGkyQ29uZmlnQ2pzID0gJy5tYXJrZG93bmxpbnQtY2xpMi5janMnLFxuXG4gIC8qKlxuICBKU09OQyBNYXJrZG93bmxpbnQgQ0xJMiBjb25maWd1cmF0aW9uIGZpbGUuXG4gICAqL1xuICBNYXJrZG93bmxpbnRDbGkyQ29uZmlnSnNvbmMgPSAnLm1hcmtkb3dubGludC1jbGkyLmpzb25jJyxcblxuICAvKipcbiAgRVNNIE1hcmtkb3dubGludCBDTEkyIGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICovXG4gIE1hcmtkb3dubGludENsaTJDb25maWdNanMgPSAnLm1hcmtkb3dubGludC1jbGkyLm1qcycsXG5cbiAgLyoqXG4gIFlBTUwgTWFya2Rvd25saW50IENMSTIgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgKi9cbiAgTWFya2Rvd25saW50Q2xpMkNvbmZpZ1lhbWwgPSAnLm1hcmtkb3dubGludC1jbGkyLnlhbWwnLFxuXG4gIC8qKlxuICBDb21tb25KUyBNYXJrZG93bmxpbnQgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgKi9cbiAgTWFya2Rvd25saW50Q29uZmlnQ2pzID0gJy5tYXJrZG93bmxpbnQuY2pzJyxcblxuICAvKipcbiAgSlNPTiBNYXJrZG93bmxpbnQgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgKi9cbiAgTWFya2Rvd25saW50Q29uZmlnSnNvbiA9ICcubWFya2Rvd25saW50Lmpzb24nLFxuXG4gIC8qKlxuICBKU09OQyBNYXJrZG93bmxpbnQgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgKi9cbiAgTWFya2Rvd25saW50Q29uZmlnSnNvbmMgPSAnLm1hcmtkb3dubGludC5qc29uYycsXG5cbiAgLyoqXG4gIEVTTSBNYXJrZG93bmxpbnQgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgKi9cbiAgTWFya2Rvd25saW50Q29uZmlnTWpzID0gJy5tYXJrZG93bmxpbnQubWpzJyxcblxuICAvKipcbiAgWUFNTCBNYXJrZG93bmxpbnQgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgKi9cbiAgTWFya2Rvd25saW50Q29uZmlnWWFtbCA9ICcubWFya2Rvd25saW50LnlhbWwnLFxuXG4gIC8qKlxuICBZQU1MIE1hcmtkb3dubGludCBjb25maWd1cmF0aW9uIGZpbGUuXG4gICAqL1xuICBNYXJrZG93bmxpbnRDb25maWdZbWwgPSAnLm1hcmtkb3dubGludC55bWwnLFxuXG4gIC8qKlxuICBNb2NrcyBmb2xkZXIuXG4gICAqL1xuICBNb2NrcyA9ICdzcmMvdGVzdC1oZWxwZXJzJyxcblxuICAvKipcbiAgTm9kZSBtb2R1bGVzIGZvbGRlci5cbiAgICovXG4gIE5vZGVNb2R1bGVzID0gJ25vZGVfbW9kdWxlcycsXG5cbiAgLyoqXG4gIE5QTSBzaHJpbmt3cmFwIGZpbGUuXG4gICAqL1xuICBOcG1TaHJpbmt3cmFwSnNvbiA9ICducG0tc2hyaW5rd3JhcC5qc29uJyxcblxuICAvKipcbiAgUGFja2FnZSBKU09OIGZpbGUuXG4gICAqL1xuICBQYWNrYWdlSnNvbiA9ICdwYWNrYWdlLmpzb24nLFxuXG4gIC8qKlxuICBQYWNrYWdlLWxvY2sgSlNPTiBmaWxlLlxuICAgKi9cbiAgUGFja2FnZUxvY2tKc29uID0gJ3BhY2thZ2UtbG9jay5qc29uJyxcblxuICAvKipcbiAgUGx1Z2lucyBmb2xkZXIgd2l0aGluIGFuIE9ic2lkaWFuIGNvbmZpZ3VyYXRpb24gZm9sZGVyLlxuICAgKi9cbiAgUGx1Z2lucyA9ICdwbHVnaW5zJyxcblxuICAvKipcbiAgU2NyaXB0cyBmb2xkZXIuXG4gICAqL1xuICBTY3JpcHRzID0gJ3NjcmlwdHMnLFxuXG4gIC8qKlxuICBTY3JpcHQgdXRpbGl0aWVzIGZvbGRlciAoZGV2LW9ubHkgdG9vbGluZyB0aGF0IHJ1bnMgaW4gdGhlIGNvbnN1bWVyJ3MgTm9kZSBlbnZpcm9ubWVudCwgbm90IHRoZSBPYnNpZGlhbiBydW50aW1lKS5cbiAgICovXG4gIFNjcmlwdFV0aWxzID0gJ3NyYy9zY3JpcHQtdXRpbHMnLFxuXG4gIC8qKlxuICBTb3VyY2UgZm9sZGVyLlxuICAgKi9cbiAgU3JjID0gJ3NyYycsXG5cbiAgLyoqXG4gIFN0eWxlcyBDU1MgZmlsZS5cbiAgICovXG4gIFN0eWxlc0NzcyA9ICdzdHlsZXMuY3NzJyxcblxuICAvKipcbiAgVGVzdHMgZm9sZGVyLlxuICAgKi9cbiAgVGVzdHMgPSAnX190ZXN0c19fJyxcblxuICAvKipcbiAgVHlwZVNjcmlwdCBjb25maWd1cmF0aW9uIGZpbGUuXG4gICAqL1xuICBUc0NvbmZpZ0pzb24gPSAndHNjb25maWcuanNvbicsXG5cbiAgLyoqXG4gIFZlcnNpb25zIEpTT04gZmlsZS5cbiAgICovXG4gIFZlcnNpb25zSnNvbiA9ICd2ZXJzaW9ucy5qc29uJyxcblxuICAvKipcbiAgVml0ZXN0IGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgICovXG4gIFZpdGVzdENvbmZpZ1RzID0gJ3ZpdGVzdC5jb25maWcudHMnXG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVNPLElBQUssMEJBQUwsa0JBQUtBLDZCQUFMO0FBSUwsRUFBQUEseUJBQUEsWUFBUztBQUtULEVBQUFBLHlCQUFBLDBCQUF1QjtBQUt2QixFQUFBQSx5QkFBQSxXQUFRO0FBS1IsRUFBQUEseUJBQUEsWUFBUztBQUtULEVBQUFBLHlCQUFBLGFBQVU7QUFLVixFQUFBQSx5QkFBQSxlQUFZO0FBS1osRUFBQUEseUJBQUEsV0FBUTtBQUtSLEVBQUFBLHlCQUFBLFlBQVM7QUFLVCxFQUFBQSx5QkFBQSxhQUFVO0FBS1YsRUFBQUEseUJBQUEsaUJBQWM7QUFLZCxFQUFBQSx5QkFBQSx3QkFBcUI7QUFLckIsRUFBQUEseUJBQUEsbUJBQWdCO0FBS2hCLEVBQUFBLHlCQUFBLGVBQVk7QUFLWixFQUFBQSx5QkFBQSxVQUFPO0FBS1AsRUFBQUEseUJBQUEsZUFBWTtBQUtaLEVBQUFBLHlCQUFBLGFBQVU7QUFNVixFQUFBQSx5QkFBQSxpQkFBYztBQUtkLEVBQUFBLHlCQUFBLHFCQUFrQjtBQUtsQixFQUFBQSx5QkFBQSxxQkFBa0I7QUFLbEIsRUFBQUEseUJBQUEsb0JBQWlCO0FBS2pCLEVBQUFBLHlCQUFBLHFCQUFrQjtBQUtsQixFQUFBQSx5QkFBQSxxQkFBa0I7QUFLbEIsRUFBQUEseUJBQUEsb0JBQWlCO0FBS2pCLEVBQUFBLHlCQUFBLGVBQVk7QUFLWixFQUFBQSx5QkFBQSxhQUFVO0FBS1YsRUFBQUEseUJBQUEsWUFBUztBQUtULEVBQUFBLHlCQUFBLFlBQVM7QUFLVCxFQUFBQSx5QkFBQSxzQkFBbUI7QUFLbkIsRUFBQUEseUJBQUEsa0JBQWU7QUFLZixFQUFBQSx5QkFBQSwrQkFBNEI7QUFLNUIsRUFBQUEseUJBQUEsaUNBQThCO0FBSzlCLEVBQUFBLHlCQUFBLCtCQUE0QjtBQUs1QixFQUFBQSx5QkFBQSxnQ0FBNkI7QUFLN0IsRUFBQUEseUJBQUEsMkJBQXdCO0FBS3hCLEVBQUFBLHlCQUFBLDRCQUF5QjtBQUt6QixFQUFBQSx5QkFBQSw2QkFBMEI7QUFLMUIsRUFBQUEseUJBQUEsMkJBQXdCO0FBS3hCLEVBQUFBLHlCQUFBLDRCQUF5QjtBQUt6QixFQUFBQSx5QkFBQSwyQkFBd0I7QUFLeEIsRUFBQUEseUJBQUEsV0FBUTtBQUtSLEVBQUFBLHlCQUFBLGlCQUFjO0FBS2QsRUFBQUEseUJBQUEsdUJBQW9CO0FBS3BCLEVBQUFBLHlCQUFBLGlCQUFjO0FBS2QsRUFBQUEseUJBQUEscUJBQWtCO0FBS2xCLEVBQUFBLHlCQUFBLGFBQVU7QUFLVixFQUFBQSx5QkFBQSxhQUFVO0FBS1YsRUFBQUEseUJBQUEsaUJBQWM7QUFLZCxFQUFBQSx5QkFBQSxTQUFNO0FBS04sRUFBQUEseUJBQUEsZUFBWTtBQUtaLEVBQUFBLHlCQUFBLFdBQVE7QUFLUixFQUFBQSx5QkFBQSxrQkFBZTtBQUtmLEVBQUFBLHlCQUFBLGtCQUFlO0FBS2YsRUFBQUEseUJBQUEsb0JBQWlCO0FBelFQLFNBQUFBO0FBQUEsR0FBQTsiLAogICJuYW1lcyI6IFsiT2JzaWRpYW5QbHVnaW5SZXBvUGF0aHMiXQp9Cg==
@@ -0,0 +1,93 @@
1
+ /// <reference path="../library.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * The `.obsidian/app.json` settings `obsidian-dev-utils` owns in every demo vault.
6
+ *
7
+ * A demo vault is documentation first and an editing surface second, so four Obsidian settings have to be
8
+ * the same in every one of them. They are **not** committed: a vault that wrote them itself would drift
9
+ * (measured 2026-08-13, only 3 of 23 vaults had the first pair and 1 of 23 the second), so this package
10
+ * owns them instead — {@link archivePluginDemoVault} merges them into the `app.json` of the archived copy
11
+ * at release time, and the demo-vault coverage suite fails a vault that commits any of them.
12
+ *
13
+ * - `defaultViewMode: 'preview'` + `livePreview: false` — a note opens as a reader sees it rather than as
14
+ * raw markup. Obsidian-only: GitHub never reads `app.json` and renders every note as HTML regardless.
15
+ * - `useMarkdownLinks: true` + `newLinkFormat: 'relative'` — what Obsidian writes when a link is created
16
+ * inside the vault. Left at Obsidian's defaults (`false` / `'shortest'`) every new link comes out as a
17
+ * shortest-path `[[wikilink]]`, the form the coverage suite rejects and GitHub renders as literal
18
+ * brackets. `relative` rather than `absolute` so notes keep resolving once the vault is extracted to an
19
+ * arbitrary folder.
20
+ *
21
+ * All four are written explicitly, never left to an Obsidian default: a vault leaning on a default changes
22
+ * behavior when that default does.
23
+ *
24
+ * Kept free of both `vitest` and `adm-zip` on purpose — the coverage suite pulls in the former and the
25
+ * archiver the latter, and neither may reach the other's environment.
26
+ */
27
+ /**
28
+ * Parameters for {@link buildArchivedDemoVaultAppJsonContent}.
29
+ */
30
+ export interface BuildArchivedDemoVaultAppJsonContentParams {
31
+ /**
32
+ * The demo vault's committed `app.json`, parsed by {@link parseDemoVaultAppJson}.
33
+ */
34
+ readonly appJson: DemoVaultAppJson;
35
+ }
36
+ /**
37
+ * A parsed `.obsidian/app.json`. Only the settings in {@link DEMO_VAULT_APP_JSON_SETTINGS} are interpreted;
38
+ * every other setting is carried through untouched.
39
+ */
40
+ export type DemoVaultAppJson = Record<string, unknown>;
41
+ /**
42
+ * Parameters for {@link findOwnedDemoVaultAppJsonSettings}.
43
+ */
44
+ export interface FindOwnedDemoVaultAppJsonSettingsParams {
45
+ /**
46
+ * The demo vault's committed `app.json`, parsed by {@link parseDemoVaultAppJson}.
47
+ */
48
+ readonly appJson: DemoVaultAppJson;
49
+ }
50
+ /**
51
+ * Parameters for {@link parseDemoVaultAppJson}.
52
+ */
53
+ export interface ParseDemoVaultAppJsonParams {
54
+ /**
55
+ * The raw file content, or `null` when the vault commits no `app.json` at all — which is the expected
56
+ * state for a vault that has nothing else to configure.
57
+ */
58
+ readonly content: null | string;
59
+ /**
60
+ * The path the content was read from, named in the error when it does not parse.
61
+ */
62
+ readonly path: string;
63
+ }
64
+ /**
65
+ * The `.obsidian/app.json` settings this package writes into every archived demo vault, and that a demo
66
+ * vault must therefore never commit. See the file overview for what each one buys.
67
+ */
68
+ export declare const DEMO_VAULT_APP_JSON_SETTINGS: DemoVaultAppJson;
69
+ /**
70
+ * Builds the `app.json` content for the archived copy of a demo vault: the committed settings with the
71
+ * owned ones merged over them.
72
+ *
73
+ * @param params - The parameters for the build.
74
+ * @returns The JSON text to store as the archive's `.obsidian/app.json`.
75
+ */
76
+ export declare function buildArchivedDemoVaultAppJsonContent(params: BuildArchivedDemoVaultAppJsonContentParams): string;
77
+ /**
78
+ * Finds the owned settings a demo vault has committed. They belong to this package, which injects them at
79
+ * release time, so a committed one is drift waiting to happen rather than a local preference.
80
+ *
81
+ * @param params - The parameters for the lookup.
82
+ * @returns The names of the owned settings present in the committed `app.json`, in the order they are
83
+ * declared in {@link DEMO_VAULT_APP_JSON_SETTINGS}.
84
+ */
85
+ export declare function findOwnedDemoVaultAppJsonSettings(params: FindOwnedDemoVaultAppJsonSettingsParams): string[];
86
+ /**
87
+ * Parses a demo vault's committed `app.json`.
88
+ *
89
+ * @param params - The parameters for the parse.
90
+ * @returns The parsed settings, or an empty object when the vault commits no `app.json`.
91
+ * @throws When the content is not valid JSON, naming the file it came from.
92
+ */
93
+ export declare function parseDemoVaultAppJson(params: ParseDemoVaultAppJsonParams): DemoVaultAppJson;
@@ -0,0 +1,57 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+
6
+ (function initEsm() {
7
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
8
+ if (globalThis.process) {
9
+ return;
10
+ }
11
+
12
+ const browserProcess = {
13
+ browser: true,
14
+ cwd() {
15
+ return '/';
16
+ },
17
+ env: {},
18
+ platform: 'android'
19
+ };
20
+ // eslint-disable-next-line obsidianmd/no-global-this -- Actively use globalThis.
21
+ globalThis.process = browserProcess;
22
+ })();
23
+
24
+ import { toJson } from "../object-utils.mjs";
25
+ const DEMO_VAULT_APP_JSON_SETTINGS = {
26
+ defaultViewMode: "preview",
27
+ livePreview: false,
28
+ newLinkFormat: "relative",
29
+ useMarkdownLinks: true
30
+ };
31
+ function buildArchivedDemoVaultAppJsonContent(params) {
32
+ return `${toJson({
33
+ ...params.appJson,
34
+ ...DEMO_VAULT_APP_JSON_SETTINGS
35
+ })}
36
+ `;
37
+ }
38
+ function findOwnedDemoVaultAppJsonSettings(params) {
39
+ return Object.keys(DEMO_VAULT_APP_JSON_SETTINGS).filter((setting) => Object.hasOwn(params.appJson, setting));
40
+ }
41
+ function parseDemoVaultAppJson(params) {
42
+ if (params.content === null) {
43
+ return {};
44
+ }
45
+ try {
46
+ return JSON.parse(params.content);
47
+ } catch (error) {
48
+ throw new Error(`Could not parse ${params.path}.`, { cause: error });
49
+ }
50
+ }
51
+ export {
52
+ DEMO_VAULT_APP_JSON_SETTINGS,
53
+ buildArchivedDemoVaultAppJsonContent,
54
+ findOwnedDemoVaultAppJsonSettings,
55
+ parseDemoVaultAppJson
56
+ };
57
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3NjcmlwdC11dGlscy9kZW1vLXZhdWx0LWFwcC1qc29uLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIGAub2JzaWRpYW4vYXBwLmpzb25gIHNldHRpbmdzIGBvYnNpZGlhbi1kZXYtdXRpbHNgIG93bnMgaW4gZXZlcnkgZGVtbyB2YXVsdC5cbiAqXG4gKiBBIGRlbW8gdmF1bHQgaXMgZG9jdW1lbnRhdGlvbiBmaXJzdCBhbmQgYW4gZWRpdGluZyBzdXJmYWNlIHNlY29uZCwgc28gZm91ciBPYnNpZGlhbiBzZXR0aW5ncyBoYXZlIHRvIGJlXG4gKiB0aGUgc2FtZSBpbiBldmVyeSBvbmUgb2YgdGhlbS4gVGhleSBhcmUgKipub3QqKiBjb21taXR0ZWQ6IGEgdmF1bHQgdGhhdCB3cm90ZSB0aGVtIGl0c2VsZiB3b3VsZCBkcmlmdFxuICogKG1lYXN1cmVkIDIwMjYtMDgtMTMsIG9ubHkgMyBvZiAyMyB2YXVsdHMgaGFkIHRoZSBmaXJzdCBwYWlyIGFuZCAxIG9mIDIzIHRoZSBzZWNvbmQpLCBzbyB0aGlzIHBhY2thZ2VcbiAqIG93bnMgdGhlbSBpbnN0ZWFkIFx1MjAxNCB7QGxpbmsgYXJjaGl2ZVBsdWdpbkRlbW9WYXVsdH0gbWVyZ2VzIHRoZW0gaW50byB0aGUgYGFwcC5qc29uYCBvZiB0aGUgYXJjaGl2ZWQgY29weVxuICogYXQgcmVsZWFzZSB0aW1lLCBhbmQgdGhlIGRlbW8tdmF1bHQgY292ZXJhZ2Ugc3VpdGUgZmFpbHMgYSB2YXVsdCB0aGF0IGNvbW1pdHMgYW55IG9mIHRoZW0uXG4gKlxuICogLSBgZGVmYXVsdFZpZXdNb2RlOiAncHJldmlldydgICsgYGxpdmVQcmV2aWV3OiBmYWxzZWAgXHUyMDE0IGEgbm90ZSBvcGVucyBhcyBhIHJlYWRlciBzZWVzIGl0IHJhdGhlciB0aGFuIGFzXG4gKiAgIHJhdyBtYXJrdXAuIE9ic2lkaWFuLW9ubHk6IEdpdEh1YiBuZXZlciByZWFkcyBgYXBwLmpzb25gIGFuZCByZW5kZXJzIGV2ZXJ5IG5vdGUgYXMgSFRNTCByZWdhcmRsZXNzLlxuICogLSBgdXNlTWFya2Rvd25MaW5rczogdHJ1ZWAgKyBgbmV3TGlua0Zvcm1hdDogJ3JlbGF0aXZlJ2AgXHUyMDE0IHdoYXQgT2JzaWRpYW4gd3JpdGVzIHdoZW4gYSBsaW5rIGlzIGNyZWF0ZWRcbiAqICAgaW5zaWRlIHRoZSB2YXVsdC4gTGVmdCBhdCBPYnNpZGlhbidzIGRlZmF1bHRzIChgZmFsc2VgIC8gYCdzaG9ydGVzdCdgKSBldmVyeSBuZXcgbGluayBjb21lcyBvdXQgYXMgYVxuICogICBzaG9ydGVzdC1wYXRoIGBbW3dpa2lsaW5rXV1gLCB0aGUgZm9ybSB0aGUgY292ZXJhZ2Ugc3VpdGUgcmVqZWN0cyBhbmQgR2l0SHViIHJlbmRlcnMgYXMgbGl0ZXJhbFxuICogICBicmFja2V0cy4gYHJlbGF0aXZlYCByYXRoZXIgdGhhbiBgYWJzb2x1dGVgIHNvIG5vdGVzIGtlZXAgcmVzb2x2aW5nIG9uY2UgdGhlIHZhdWx0IGlzIGV4dHJhY3RlZCB0byBhblxuICogICBhcmJpdHJhcnkgZm9sZGVyLlxuICpcbiAqIEFsbCBmb3VyIGFyZSB3cml0dGVuIGV4cGxpY2l0bHksIG5ldmVyIGxlZnQgdG8gYW4gT2JzaWRpYW4gZGVmYXVsdDogYSB2YXVsdCBsZWFuaW5nIG9uIGEgZGVmYXVsdCBjaGFuZ2VzXG4gKiBiZWhhdmlvciB3aGVuIHRoYXQgZGVmYXVsdCBkb2VzLlxuICpcbiAqIEtlcHQgZnJlZSBvZiBib3RoIGB2aXRlc3RgIGFuZCBgYWRtLXppcGAgb24gcHVycG9zZSBcdTIwMTQgdGhlIGNvdmVyYWdlIHN1aXRlIHB1bGxzIGluIHRoZSBmb3JtZXIgYW5kIHRoZVxuICogYXJjaGl2ZXIgdGhlIGxhdHRlciwgYW5kIG5laXRoZXIgbWF5IHJlYWNoIHRoZSBvdGhlcidzIGVudmlyb25tZW50LlxuICovXG5cbmltcG9ydCB7IHRvSnNvbiB9IGZyb20gJy4uL29iamVjdC11dGlscy50cyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGJ1aWxkQXJjaGl2ZWREZW1vVmF1bHRBcHBKc29uQ29udGVudH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRBcmNoaXZlZERlbW9WYXVsdEFwcEpzb25Db250ZW50UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBkZW1vIHZhdWx0J3MgY29tbWl0dGVkIGBhcHAuanNvbmAsIHBhcnNlZCBieSB7QGxpbmsgcGFyc2VEZW1vVmF1bHRBcHBKc29ufS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcEpzb246IERlbW9WYXVsdEFwcEpzb247XG59XG5cbi8qKlxuICogQSBwYXJzZWQgYC5vYnNpZGlhbi9hcHAuanNvbmAuIE9ubHkgdGhlIHNldHRpbmdzIGluIHtAbGluayBERU1PX1ZBVUxUX0FQUF9KU09OX1NFVFRJTkdTfSBhcmUgaW50ZXJwcmV0ZWQ7XG4gKiBldmVyeSBvdGhlciBzZXR0aW5nIGlzIGNhcnJpZWQgdGhyb3VnaCB1bnRvdWNoZWQuXG4gKi9cbmV4cG9ydCB0eXBlIERlbW9WYXVsdEFwcEpzb24gPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZmluZE93bmVkRGVtb1ZhdWx0QXBwSnNvblNldHRpbmdzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaW5kT3duZWREZW1vVmF1bHRBcHBKc29uU2V0dGluZ3NQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGRlbW8gdmF1bHQncyBjb21taXR0ZWQgYGFwcC5qc29uYCwgcGFyc2VkIGJ5IHtAbGluayBwYXJzZURlbW9WYXVsdEFwcEpzb259LlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwSnNvbjogRGVtb1ZhdWx0QXBwSnNvbjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcGFyc2VEZW1vVmF1bHRBcHBKc29ufS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJzZURlbW9WYXVsdEFwcEpzb25QYXJhbXMge1xuICAvKipcbiAgICogVGhlIHJhdyBmaWxlIGNvbnRlbnQsIG9yIGBudWxsYCB3aGVuIHRoZSB2YXVsdCBjb21taXRzIG5vIGBhcHAuanNvbmAgYXQgYWxsIFx1MjAxNCB3aGljaCBpcyB0aGUgZXhwZWN0ZWRcbiAgICogc3RhdGUgZm9yIGEgdmF1bHQgdGhhdCBoYXMgbm90aGluZyBlbHNlIHRvIGNvbmZpZ3VyZS5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRlbnQ6IG51bGwgfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIHRoZSBjb250ZW50IHdhcyByZWFkIGZyb20sIG5hbWVkIGluIHRoZSBlcnJvciB3aGVuIGl0IGRvZXMgbm90IHBhcnNlLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBgLm9ic2lkaWFuL2FwcC5qc29uYCBzZXR0aW5ncyB0aGlzIHBhY2thZ2Ugd3JpdGVzIGludG8gZXZlcnkgYXJjaGl2ZWQgZGVtbyB2YXVsdCwgYW5kIHRoYXQgYSBkZW1vXG4gKiB2YXVsdCBtdXN0IHRoZXJlZm9yZSBuZXZlciBjb21taXQuIFNlZSB0aGUgZmlsZSBvdmVydmlldyBmb3Igd2hhdCBlYWNoIG9uZSBidXlzLlxuICovXG5leHBvcnQgY29uc3QgREVNT19WQVVMVF9BUFBfSlNPTl9TRVRUSU5HUzogRGVtb1ZhdWx0QXBwSnNvbiA9IHtcbiAgZGVmYXVsdFZpZXdNb2RlOiAncHJldmlldycsXG4gIGxpdmVQcmV2aWV3OiBmYWxzZSxcbiAgbmV3TGlua0Zvcm1hdDogJ3JlbGF0aXZlJyxcbiAgdXNlTWFya2Rvd25MaW5rczogdHJ1ZVxufTtcblxuLyoqXG4gKiBCdWlsZHMgdGhlIGBhcHAuanNvbmAgY29udGVudCBmb3IgdGhlIGFyY2hpdmVkIGNvcHkgb2YgYSBkZW1vIHZhdWx0OiB0aGUgY29tbWl0dGVkIHNldHRpbmdzIHdpdGggdGhlXG4gKiBvd25lZCBvbmVzIG1lcmdlZCBvdmVyIHRoZW0uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgYnVpbGQuXG4gKiBAcmV0dXJucyBUaGUgSlNPTiB0ZXh0IHRvIHN0b3JlIGFzIHRoZSBhcmNoaXZlJ3MgYC5vYnNpZGlhbi9hcHAuanNvbmAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEFyY2hpdmVkRGVtb1ZhdWx0QXBwSnNvbkNvbnRlbnQocGFyYW1zOiBCdWlsZEFyY2hpdmVkRGVtb1ZhdWx0QXBwSnNvbkNvbnRlbnRQYXJhbXMpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7XG4gICAgdG9Kc29uKHtcbiAgICAgIC4uLnBhcmFtcy5hcHBKc29uLFxuICAgICAgLi4uREVNT19WQVVMVF9BUFBfSlNPTl9TRVRUSU5HU1xuICAgIH0pXG4gIH1cXG5gO1xufVxuXG4vKipcbiAqIEZpbmRzIHRoZSBvd25lZCBzZXR0aW5ncyBhIGRlbW8gdmF1bHQgaGFzIGNvbW1pdHRlZC4gVGhleSBiZWxvbmcgdG8gdGhpcyBwYWNrYWdlLCB3aGljaCBpbmplY3RzIHRoZW0gYXRcbiAqIHJlbGVhc2UgdGltZSwgc28gYSBjb21taXR0ZWQgb25lIGlzIGRyaWZ0IHdhaXRpbmcgdG8gaGFwcGVuIHJhdGhlciB0aGFuIGEgbG9jYWwgcHJlZmVyZW5jZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBsb29rdXAuXG4gKiBAcmV0dXJucyBUaGUgbmFtZXMgb2YgdGhlIG93bmVkIHNldHRpbmdzIHByZXNlbnQgaW4gdGhlIGNvbW1pdHRlZCBgYXBwLmpzb25gLCBpbiB0aGUgb3JkZXIgdGhleSBhcmVcbiAqIGRlY2xhcmVkIGluIHtAbGluayBERU1PX1ZBVUxUX0FQUF9KU09OX1NFVFRJTkdTfS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRPd25lZERlbW9WYXVsdEFwcEpzb25TZXR0aW5ncyhwYXJhbXM6IEZpbmRPd25lZERlbW9WYXVsdEFwcEpzb25TZXR0aW5nc1BhcmFtcyk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKERFTU9fVkFVTFRfQVBQX0pTT05fU0VUVElOR1MpLmZpbHRlcigoc2V0dGluZykgPT4gT2JqZWN0Lmhhc093bihwYXJhbXMuYXBwSnNvbiwgc2V0dGluZykpO1xufVxuXG4vKipcbiAqIFBhcnNlcyBhIGRlbW8gdmF1bHQncyBjb21taXR0ZWQgYGFwcC5qc29uYC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBwYXJzZS5cbiAqIEByZXR1cm5zIFRoZSBwYXJzZWQgc2V0dGluZ3MsIG9yIGFuIGVtcHR5IG9iamVjdCB3aGVuIHRoZSB2YXVsdCBjb21taXRzIG5vIGBhcHAuanNvbmAuXG4gKiBAdGhyb3dzIFdoZW4gdGhlIGNvbnRlbnQgaXMgbm90IHZhbGlkIEpTT04sIG5hbWluZyB0aGUgZmlsZSBpdCBjYW1lIGZyb20uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURlbW9WYXVsdEFwcEpzb24ocGFyYW1zOiBQYXJzZURlbW9WYXVsdEFwcEpzb25QYXJhbXMpOiBEZW1vVmF1bHRBcHBKc29uIHtcbiAgaWYgKHBhcmFtcy5jb250ZW50ID09PSBudWxsKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShwYXJhbXMuY29udGVudCkgYXMgRGVtb1ZhdWx0QXBwSnNvbjtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBwYXJzZSAke3BhcmFtcy5wYXRofS5gLCB7IGNhdXNlOiBlcnJvciB9KTtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUEwQkEsU0FBUyxjQUFjO0FBZ0RoQixNQUFNLCtCQUFpRDtBQUFBLEVBQzVELGlCQUFpQjtBQUFBLEVBQ2pCLGFBQWE7QUFBQSxFQUNiLGVBQWU7QUFBQSxFQUNmLGtCQUFrQjtBQUNwQjtBQVNPLFNBQVMscUNBQXFDLFFBQTREO0FBQy9HLFNBQU8sR0FDTCxPQUFPO0FBQUEsSUFDTCxHQUFHLE9BQU87QUFBQSxJQUNWLEdBQUc7QUFBQSxFQUNMLENBQUMsQ0FDSDtBQUFBO0FBQ0Y7QUFVTyxTQUFTLGtDQUFrQyxRQUEyRDtBQUMzRyxTQUFPLE9BQU8sS0FBSyw0QkFBNEIsRUFBRSxPQUFPLENBQUMsWUFBWSxPQUFPLE9BQU8sT0FBTyxTQUFTLE9BQU8sQ0FBQztBQUM3RztBQVNPLFNBQVMsc0JBQXNCLFFBQXVEO0FBQzNGLE1BQUksT0FBTyxZQUFZLE1BQU07QUFDM0IsV0FBTyxDQUFDO0FBQUEsRUFDVjtBQUVBLE1BQUk7QUFDRixXQUFPLEtBQUssTUFBTSxPQUFPLE9BQU87QUFBQSxFQUNsQyxTQUFTLE9BQU87QUFDZCxVQUFNLElBQUksTUFBTSxtQkFBbUIsT0FBTyxJQUFJLEtBQUssRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUFBLEVBQ3JFO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -10,6 +10,10 @@
10
10
  * The runtime behavior of the plugin is covered by its other integration tests, not by the demo vault; the
11
11
  * vault is a learning resource, and these checks only guard that it stays truthful.
12
12
  *
13
+ * They also guard the vault's own `.obsidian/app.json`: the settings listed in
14
+ * {@link DEMO_VAULT_APP_JSON_SETTINGS} belong to `obsidian-dev-utils`, which writes them into the archived
15
+ * vault at release time, so a vault that commits any of them is keeping a second copy nothing reconciles.
16
+ *
13
17
  * They also enforce the demo-vault AUTHORING convention — every note opens with an `# H1` and a plain
14
18
  * prose paragraph, every note is reachable from the start note, and no note uses a `[[wikilink]]` or a
15
19
  * `[Docs](…)` line. These checks are unconditional: the demo vault is the published documentation, read
@@ -405,6 +409,15 @@ export declare class DemoVaultCoverageChecker {
405
409
  * @returns Every `*.md` note in the demo vault, excluded ones included.
406
410
  */
407
411
  collectNotes(): DemoVaultNote[];
412
+ /**
413
+ * Finds the `.obsidian/app.json` settings the vault commits that `obsidian-dev-utils` owns and writes
414
+ * into the archived vault itself. A committed one is a second copy of a setting nothing reconciles, and
415
+ * it is the copy that goes stale — so the convention is that the vault commits none of them.
416
+ *
417
+ * @returns The names of the owned settings the committed `app.json` sets. A vault that commits no
418
+ * `app.json` at all is fine, and yields none.
419
+ */
420
+ findCommittedAppJsonSettings(): string[];
408
421
  /**
409
422
  * Finds notes carrying a `[Docs](…)` link line. The note IS the documentation, so a line pointing
410
423
  * elsewhere for the real explanation is the shape this convention exists to remove.