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.
- package/CHANGELOG.md +8 -0
- package/dist/integration-test-plugin/main.js +1 -0
- package/dist/lib/cjs/generated-during-build.cjs +1 -1
- package/dist/lib/cjs/obsidian/plugin/obsidian-plugin-repo-paths.cjs +2 -1
- package/dist/lib/cjs/obsidian/plugin/obsidian-plugin-repo-paths.d.cts +4 -0
- package/dist/lib/cjs/script-utils/demo-vault-app-json.cjs +164 -0
- package/dist/lib/cjs/script-utils/demo-vault-app-json.d.cts +93 -0
- package/dist/lib/cjs/script-utils/demo-vault-coverage.cjs +18 -1
- package/dist/lib/cjs/script-utils/demo-vault-coverage.d.cts +13 -0
- package/dist/lib/cjs/script-utils/demo-vault.cjs +27 -1
- package/dist/lib/cjs/script-utils/demo-vault.d.cts +5 -0
- package/dist/lib/cjs/script-utils/index.cjs +4 -1
- package/dist/lib/cjs/script-utils/index.d.cts +1 -0
- package/dist/lib/cjs/script-utils/linters/markdownlint-cli2-config.cjs +6 -1
- package/dist/lib/esm/generated-during-build.mjs +1 -1
- package/dist/lib/esm/obsidian/plugin/obsidian-plugin-repo-paths.d.mts +4 -0
- package/dist/lib/esm/obsidian/plugin/obsidian-plugin-repo-paths.mjs +2 -1
- package/dist/lib/esm/script-utils/demo-vault-app-json.d.mts +93 -0
- package/dist/lib/esm/script-utils/demo-vault-app-json.mjs +57 -0
- package/dist/lib/esm/script-utils/demo-vault-coverage.d.mts +13 -0
- package/dist/lib/esm/script-utils/demo-vault-coverage.mjs +22 -1
- package/dist/lib/esm/script-utils/demo-vault.d.mts +5 -0
- package/dist/lib/esm/script-utils/demo-vault.mjs +31 -1
- package/dist/lib/esm/script-utils/index.d.mts +1 -0
- package/dist/lib/esm/script-utils/index.mjs +3 -1
- package/dist/lib/esm/script-utils/linters/markdownlint-cli2-config.mjs +6 -1
- package/package.json +1 -1
- 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,
|
|
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 = "
|
|
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,
|
|
@@ -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,
|
|
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.
|