obsidian-dev-utils 84.0.0 → 84.1.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 +6 -0
- package/dist/dev/main.js +136 -118
- package/dist/lib/cjs/generated-during-build.cjs +1 -1
- package/dist/lib/cjs/obsidian/editor.cjs +21 -1
- package/dist/lib/cjs/obsidian/editor.d.cts +21 -1
- package/dist/lib/cjs/obsidian/vault-transaction.cjs +3 -1
- package/dist/lib/esm/generated-during-build.mjs +1 -1
- package/dist/lib/esm/obsidian/editor.d.mts +21 -1
- package/dist/lib/esm/obsidian/editor.mjs +20 -1
- package/dist/lib/esm/obsidian/vault-transaction.mjs +3 -1
- package/package.json +1 -1
|
@@ -129,7 +129,7 @@ __export(generated_during_build_exports, {
|
|
|
129
129
|
LIBRARY_VERSION: () => LIBRARY_VERSION
|
|
130
130
|
});
|
|
131
131
|
module.exports = __toCommonJS(generated_during_build_exports);
|
|
132
|
-
const LIBRARY_VERSION = "84.
|
|
132
|
+
const LIBRARY_VERSION = "84.1.0";
|
|
133
133
|
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.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 animation: obsidian-dev-utils-minimized-modal-bar-pulse 2s ease-in-out infinite;\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 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 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 .obsidian-dev-utils.cancel-button {\n display: block;\n margin-top: var(--size-4-2);\n width: fit-content;\n}\n\n.obsidian-dev-utils.plugin-settings-tab a:focus {\n outline: 2px solid var(--link-color);\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 {\n box-shadow: 0 0 0 2px var(--text-error);\n}\n.obsidian-dev-utils input.metadata-input-text:active:invalid, .obsidian-dev-utils input.metadata-input-text:focus-visible:invalid, .obsidian-dev-utils input.metadata-input-text:focus:invalid,\n.obsidian-dev-utils input[type=date]:active:invalid,\n.obsidian-dev-utils input[type=date]:focus-visible:invalid,\n.obsidian-dev-utils input[type=date]:focus:invalid,\n.obsidian-dev-utils input[type=datetime-local]:active:invalid,\n.obsidian-dev-utils input[type=datetime-local]:focus-visible:invalid,\n.obsidian-dev-utils input[type=datetime-local]:focus:invalid,\n.obsidian-dev-utils input[type=email]:active:invalid,\n.obsidian-dev-utils input[type=email]:focus-visible:invalid,\n.obsidian-dev-utils input[type=email]:focus:invalid,\n.obsidian-dev-utils input[type=number]:active:invalid,\n.obsidian-dev-utils input[type=number]:focus-visible:invalid,\n.obsidian-dev-utils input[type=number]:focus:invalid,\n.obsidian-dev-utils input[type=password]:active:invalid,\n.obsidian-dev-utils input[type=password]:focus-visible:invalid,\n.obsidian-dev-utils input[type=password]:focus:invalid,\n.obsidian-dev-utils input[type=search]:active:invalid,\n.obsidian-dev-utils input[type=search]:focus-visible:invalid,\n.obsidian-dev-utils input[type=search]:focus:invalid,\n.obsidian-dev-utils input[type=text]:active:invalid,\n.obsidian-dev-utils input[type=text]:focus-visible:invalid,\n.obsidian-dev-utils input[type=text]:focus:invalid,\n.obsidian-dev-utils textarea:active:invalid,\n.obsidian-dev-utils textarea:focus-visible:invalid,\n.obsidian-dev-utils textarea:focus:invalid {\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/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;;;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;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;;ACvEJ;EACE;EACA;;;ACFF;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;;ACTN;EACE;EACA;EACA;EACA;;AAIA;EACE;EACA;EACA;;;ACVF;EACE;;;ACDF;EACE;;;ACON;EACE;;;ACTE;EACE;;;ACEJ;EAJA;;AAoBI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EApBJ;;AA0BA;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.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%20animation:%20obsidian-dev-utils-minimized-modal-bar-pulse%202s%20ease-in-out%20infinite;%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%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%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%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.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.obsidian-dev-utils%20%7B%5Cn%20%20:invalid%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%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";
|
|
134
134
|
// Annotate the CommonJS export names for ESM import in node:
|
|
135
135
|
0 && (module.exports = {
|
|
@@ -125,12 +125,31 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
125
125
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
126
126
|
var editor_exports = {};
|
|
127
127
|
__export(editor_exports, {
|
|
128
|
+
syncOpenEditorBuffersForPath: () => syncOpenEditorBuffersForPath,
|
|
128
129
|
toggleEditorReadOnly: () => toggleEditorReadOnly
|
|
129
130
|
});
|
|
130
131
|
module.exports = __toCommonJS(editor_exports);
|
|
131
132
|
var import_state = require('@codemirror/state');
|
|
133
|
+
var import_implementations = require('@obsidian-typings/obsidian-public-latest/implementations');
|
|
134
|
+
var import_obsidian = require('obsidian');
|
|
132
135
|
var import_object_utils = require('../object-utils.cjs');
|
|
136
|
+
var import_file_system = require('./file-system.cjs');
|
|
133
137
|
const compartmentByCodeMirror = /* @__PURE__ */ new WeakMap();
|
|
138
|
+
function syncOpenEditorBuffersForPath(app, pathOrFile, content) {
|
|
139
|
+
const path = (0, import_file_system.getPath)(app, pathOrFile);
|
|
140
|
+
for (const leaf of app.workspace.getLeavesOfType(import_implementations.ViewType.Markdown)) {
|
|
141
|
+
const view = leaf.view;
|
|
142
|
+
if (!(view instanceof import_obsidian.MarkdownView)) {
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
if (view.file?.path !== path) {
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
if (view.editor.getValue() !== content) {
|
|
149
|
+
view.editor.setValue(content);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
134
153
|
function toggleEditorReadOnly(editor, isReadOnly) {
|
|
135
154
|
const compartment = ensureCompartment(editor);
|
|
136
155
|
editor.cm.dispatch({
|
|
@@ -152,6 +171,7 @@ function ensureCompartment(editor) {
|
|
|
152
171
|
}
|
|
153
172
|
// Annotate the CommonJS export names for ESM import in node:
|
|
154
173
|
0 && (module.exports = {
|
|
174
|
+
syncOpenEditorBuffersForPath,
|
|
155
175
|
toggleEditorReadOnly
|
|
156
176
|
});
|
|
157
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
177
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2VkaXRvci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHV0aWxpdHkgZnVuY3Rpb25zIGZvciB3b3JraW5nIHdpdGggbWFya2Rvd24gZWRpdG9ycyBpbiBPYnNpZGlhblxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBFZGl0b3Jcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQge1xuICBDb21wYXJ0bWVudCxcbiAgRWRpdG9yU3RhdGUsXG4gIFN0YXRlRWZmZWN0XG59IGZyb20gJ0Bjb2RlbWlycm9yL3N0YXRlJztcbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnQG9ic2lkaWFuLXR5cGluZ3Mvb2JzaWRpYW4tcHVibGljLWxhdGVzdC9pbXBsZW1lbnRhdGlvbnMnO1xuaW1wb3J0IHsgTWFya2Rvd25WaWV3IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IFBhdGhPckZpbGUgfSBmcm9tICcuL2ZpbGUtc3lzdGVtLnRzJztcblxuaW1wb3J0IHsgY2FzdFRvIH0gZnJvbSAnLi4vb2JqZWN0LXV0aWxzLnRzJztcbmltcG9ydCB7IGdldFBhdGggfSBmcm9tICcuL2ZpbGUtc3lzdGVtLnRzJztcblxuY29uc3QgY29tcGFydG1lbnRCeUNvZGVNaXJyb3IgPSBuZXcgV2Vha01hcDxFZGl0b3JbJ2NtJ10sIENvbXBhcnRtZW50PigpO1xuXG4vKipcbiAqIE92ZXJ3cml0ZXMgdGhlIGJ1ZmZlciBvZiBldmVyeSBvcGVuIHtAbGluayBNYXJrZG93blZpZXd9IGN1cnJlbnRseSBzaG93aW5nIHRoZSBnaXZlbiBwYXRoIHNvIHRoYXRcbiAqIGl0IHJlZmxlY3RzIGBjb250ZW50YCwgaW4gYW55IHdpbmRvdyBvciBwb3BvdXQuXG4gKlxuICogVGhpcyBpcyB0aGUgZml4IGZvciBhIHN1YnRsZSBkYXRhLWxvc3Mgd2luZG93OiB3aGVuIGEgbm90ZSBpcyBvcGVuIGluIGFuIGVkaXRvciB3aXRoIGEgKipkaXJ0eVxuICogYnVmZmVyKiogKGEgcGVuZGluZywgbm90LXlldC1zYXZlZCBlZGl0KSBhbmQgaXRzIGZpbGUgY29udGVudCBpcyByZXdyaXR0ZW4gb24gZGlzayBvdXQgZnJvbSB1bmRlclxuICogdGhlIGVkaXRvciwgdGhlIGVkaXRvcidzIG5leHQgYXV0b3NhdmUgcmUtd3JpdGVzIGl0cyBzdGFsZSBidWZmZXIgYW5kIGNsb2JiZXJzIHRoZSBvbi1kaXNrIGNvbnRlbnQuXG4gKiBBIGNhbGxlciB0aGF0IHJlc3RvcmVzIGEgZmlsZSdzIGNvbnRlbnQgb24gZGlzayAoZS5nLiByb2xsaW5nIGJhY2sgYSB0cmFuc2FjdGlvbikgbXVzdCBhbHNvIHJlc2V0XG4gKiB0aGUgb3BlbiBlZGl0b3IncyBidWZmZXIgdG8gdGhlIHNhbWUgY29udGVudCwgc28gaXRzIG5leHQgc2F2ZSBpcyBhIG5vLW9wIGluc3RlYWQgb2YgYSBjbG9iYmVyLlxuICpcbiAqIE9ubHkgdGhlIHZpZXcgd2hvc2Uge0BsaW5rIE1hcmtkb3duVmlldy5maWxlfSBzdGlsbCBtYXRjaGVzIGBwYXRoT3JGaWxlYCBpcyB0b3VjaGVkIFx1MjAxNCBpZiB0aGUgZWRpdG9yXG4gKiBoYXMgc2luY2UgbmF2aWdhdGVkIHRvIGFub3RoZXIgbm90ZSwgaXQgaXMgbGVmdCBhbG9uZS4gVGhlIGJ1ZmZlciBpcyByZXBsYWNlZCBvbmx5IHdoZW4gaXQgYWN0dWFsbHlcbiAqIGRpZmZlcnMgZnJvbSBgY29udGVudGAsIHNvIGEgY2xlYW4gZWRpdG9yIGFscmVhZHkgaW4gc3luYyBpcyBub3QgZGlzdHVyYmVkIChubyBjdXJzb3IgcmVzZXQpLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIHdob3NlIG9wZW4gZWRpdG9ycyBzaG91bGQgYmUgc3luY2hyb25pemVkLlxuICogQHBhcmFtIGNvbnRlbnQgLSBUaGUgY29udGVudCB0byBvdmVyd3JpdGUgZWFjaCBtYXRjaGluZyBlZGl0b3IncyBidWZmZXIgd2l0aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN5bmNPcGVuRWRpdG9yQnVmZmVyc0ZvclBhdGgoYXBwOiBBcHAsIHBhdGhPckZpbGU6IFBhdGhPckZpbGUsIGNvbnRlbnQ6IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCBwYXRoID0gZ2V0UGF0aChhcHAsIHBhdGhPckZpbGUpO1xuICBmb3IgKGNvbnN0IGxlYWYgb2YgYXBwLndvcmtzcGFjZS5nZXRMZWF2ZXNPZlR5cGUoVmlld1R5cGUuTWFya2Rvd24pKSB7XG4gICAgY29uc3QgdmlldyA9IGxlYWYudmlldztcbiAgICBpZiAoISh2aWV3IGluc3RhbmNlb2YgTWFya2Rvd25WaWV3KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmICh2aWV3LmZpbGU/LnBhdGggIT09IHBhdGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAodmlldy5lZGl0b3IuZ2V0VmFsdWUoKSAhPT0gY29udGVudCkge1xuICAgICAgdmlldy5lZGl0b3Iuc2V0VmFsdWUoY29udGVudCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVG9nZ2xlcyB0aGUgcmVhZC1vbmx5IHN0YXRlIG9mIGEgc2luZ2xlIENvZGVNaXJyb3IgaW5zdGFuY2UgXHUyMDE0IHRoZSBsb3ctbGV2ZWwgcHJpbWl0aXZlIGJlaGluZFxuICogZWRpdG9yIGxvY2tpbmcuXG4gKlxuICogV2hlbiByZWFkLW9ubHksIHRoZSBlZGl0b3Igc3RheXMgZm9jdXNhYmxlIGFuZCBpbnRlcmFjdGl2ZSAoc2VsZWN0aW9uLCBjb3B5LCBhbmQgYXBwIGhvdGtleXMgc3VjaFxuICogYXMgdGhlIGNvbW1hbmQgcGFsZXR0ZSBrZWVwIHdvcmtpbmcpIFx1MjAxNCBvbmx5IGRvY3VtZW50IGVkaXRzIGFyZSBwcmV2ZW50ZWQsIHZpYSB0aGUgQ29kZU1pcnJvclxuICogYHJlYWRPbmx5YCBzdGF0ZS5cbiAqXG4gKiBUaGlzIHRvZ2dsZXMgT05FIENvZGVNaXJyb3IgaW5zdGFuY2UsIG5vdCBcImEgZmlsZVwiOiBhbiBPYnNpZGlhbiB7QGxpbmsgRWRpdG9yfSBpcyByZXVzZWQgYXMgaXRzXG4gKiBsZWFmIG5hdmlnYXRlcyBiZXR3ZWVuIG5vdGVzLCBzbyB0aGlzIHByaW1pdGl2ZSBkb2VzIG5vdCBmb2xsb3cgYSBub3RlIGFyb3VuZC4gVG8gbG9jayBhIG5vdGVcbiAqIGFjcm9zcyBldmVyeSBlZGl0b3IgdGhhdCBzaG93cyBpdCAoY3VycmVudCBhbmQgZnV0dXJlLCBpbiBhbnkgd2luZG93KSwgdXNlIGBsb2NrUmVzb3VyY2VGb3JQYXRoYFxuICogZnJvbSBgLi9yZXNvdXJjZS1sb2NrLnRzYC5cbiAqXG4gKiBAcGFyYW0gZWRpdG9yIC0gVGhlIGVkaXRvciB3aG9zZSBDb2RlTWlycm9yIGluc3RhbmNlIHRvIHRvZ2dsZS5cbiAqIEBwYXJhbSBpc1JlYWRPbmx5IC0gYHRydWVgIHRvIG1ha2UgdGhlIGVkaXRvciByZWFkLW9ubHksIGBmYWxzZWAgdG8gbWFrZSBpdCBlZGl0YWJsZSBhZ2Fpbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvZ2dsZUVkaXRvclJlYWRPbmx5KGVkaXRvcjogRWRpdG9yLCBpc1JlYWRPbmx5OiBib29sZWFuKTogdm9pZCB7XG4gIGNvbnN0IGNvbXBhcnRtZW50ID0gZW5zdXJlQ29tcGFydG1lbnQoZWRpdG9yKTtcbiAgZWRpdG9yLmNtLmRpc3BhdGNoKHtcbiAgICBlZmZlY3RzOiBjb21wYXJ0bWVudC5yZWNvbmZpZ3VyZShpc1JlYWRPbmx5ID8gRWRpdG9yU3RhdGUucmVhZE9ubHkub2YodHJ1ZSkgOiBbXSlcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGVuc3VyZUNvbXBhcnRtZW50KGVkaXRvcjogRWRpdG9yKTogQ29tcGFydG1lbnQge1xuICAvLyBLZXkgdGhlIGNhY2hlIGJ5IHRoZSBDb2RlTWlycm9yIGluc3RhbmNlLCBub3QgYnkgdGhlIGBFZGl0b3JgIHdyYXBwZXIuXG4gIC8vIEFuIGBFZGl0b3JgIGtlZXBzIGl0cyBpZGVudGl0eSB3aGlsZSBpdHMgdW5kZXJseWluZyBDb2RlTWlycm9yIHZpZXcgaXMgc3dhcHBlZCBvdXQuXG4gIGNvbnN0IGNvZGVNaXJyb3IgPSBlZGl0b3IuY207XG4gIGNvbnN0IGNhY2hlZENvbXBhcnRtZW50ID0gY29tcGFydG1lbnRCeUNvZGVNaXJyb3IuZ2V0KGNvZGVNaXJyb3IpO1xuICAvLyBSZXVzZSB0aGUgY2FjaGVkIGNvbXBhcnRtZW50IG9ubHkgd2hpbGUgaXQgaXMgc3RpbGwgcGFydCBvZiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLlxuICAvLyBBIHZpZXcgY2FuIHNpbGVudGx5IGRyb3AgYW4gYXBwZW5kZWQgY29tcGFydG1lbnQgd2hlbiBpdCByZWJ1aWxkcyBpdHMgc3RhdGUuXG4gIC8vIE9wZW5pbmcgYSBub3RlIGludG8gYSBmcmVzaGx5IGNyZWF0ZWQgbGVhZiBkb2VzIHRoaXM6IGl0IGluc3RhbGxzIHRoZSBjb21wYXJ0bWVudCBtaWQtb3Blbi5cbiAgLy8gVGhlIHN1YnNlcXVlbnQgbG9hZCB0aGVuIHJlcGxhY2VzIHRoZSB3aG9sZSBzdGF0ZSwgdGFraW5nIHRoZSBjb21wYXJ0bWVudCB3aXRoIGl0LlxuICAvLyBUaGVuIGBDb21wYXJ0bWVudC5nZXRgIHJldHVybnMgYHVuZGVmaW5lZGAsIHNpbmNlIHRoZSBjb21wYXJ0bWVudCBpcyBubyBsb25nZXIgY29uZmlndXJlZC5cbiAgLy8gUmUtaW5zdGFsbCBpdCBpbiB0aGF0IGNhc2UsIG9yIGV2ZXJ5IGxhdGVyIGByZWNvbmZpZ3VyZWAgaXMgc2lsZW50bHkgaWdub3JlZCBhbmQgbm90aGluZyBsb2Nrcy5cbiAgLy8gVGhlIGBjYXN0VG9gIGJyaWRnZXMgdGhlIGR1YWwgQ29tbW9uSlMgYW5kIEVTTSBgRWRpdG9yU3RhdGVgIGRlY2xhcmF0aW9ucyBvZiBgQGNvZGVtaXJyb3Ivc3RhdGVgLlxuICAvLyBUaGV5IGFyZSBzdHJ1Y3R1cmFsbHkgaWRlbnRpY2FsLCBidXQgVHlwZVNjcmlwdCB0cmVhdHMgdGhlbSBhcyBub21pbmFsbHkgaW5jb21wYXRpYmxlLlxuICBpZiAoY2FjaGVkQ29tcGFydG1lbnQ/LmdldChjYXN0VG88RWRpdG9yU3RhdGU+KGNvZGVNaXJyb3Iuc3RhdGUpKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGNhY2hlZENvbXBhcnRtZW50O1xuICB9XG5cbiAgY29uc3QgY29tcGFydG1lbnQgPSBuZXcgQ29tcGFydG1lbnQoKTtcbiAgY29tcGFydG1lbnRCeUNvZGVNaXJyb3Iuc2V0KGNvZGVNaXJyb3IsIGNvbXBhcnRtZW50KTtcbiAgLy8gQSBgQ29tcGFydG1lbnRgIG9ubHkgdGFrZXMgZWZmZWN0IG9uY2UgaXQgaXMgcGFydCBvZiB0aGUgZWRpdG9yJ3MgY29uZmlndXJhdGlvbi5cbiAgLy8gVGhlIGNvbXBhcnRtZW50IGlzIGNyZWF0ZWQgbGF6aWx5IGhlcmUsIHNvIGluc3RhbGwgaXQgKGluaXRpYWxseSBlbXB0eSkgdmlhIGBhcHBlbmRDb25maWdgLlxuICBjb2RlTWlycm9yLmRpc3BhdGNoKHtcbiAgICBlZmZlY3RzOiBTdGF0ZUVmZmVjdC5hcHBlbmRDb25maWcub2YoY29tcGFydG1lbnQub2YoW10pKVxuICB9KTtcbiAgcmV0dXJuIGNvbXBhcnRtZW50O1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFXQSxtQkFJTztBQUNQLDZCQUF5QjtBQUN6QixzQkFBNkI7QUFJN0IsMEJBQXVCO0FBQ3ZCLHlCQUF3QjtBQUV4QixNQUFNLDBCQUEwQixvQkFBSSxRQUFtQztBQW9CaEUsU0FBUyw2QkFBNkIsS0FBVSxZQUF3QixTQUF1QjtBQUNwRyxRQUFNLFdBQU8sNEJBQVEsS0FBSyxVQUFVO0FBQ3BDLGFBQVcsUUFBUSxJQUFJLFVBQVUsZ0JBQWdCLGdDQUFTLFFBQVEsR0FBRztBQUNuRSxVQUFNLE9BQU8sS0FBSztBQUNsQixRQUFJLEVBQUUsZ0JBQWdCLCtCQUFlO0FBQ25DO0FBQUEsSUFDRjtBQUNBLFFBQUksS0FBSyxNQUFNLFNBQVMsTUFBTTtBQUM1QjtBQUFBLElBQ0Y7QUFDQSxRQUFJLEtBQUssT0FBTyxTQUFTLE1BQU0sU0FBUztBQUN0QyxXQUFLLE9BQU8sU0FBUyxPQUFPO0FBQUEsSUFDOUI7QUFBQSxFQUNGO0FBQ0Y7QUFrQk8sU0FBUyxxQkFBcUIsUUFBZ0IsWUFBMkI7QUFDOUUsUUFBTSxjQUFjLGtCQUFrQixNQUFNO0FBQzVDLFNBQU8sR0FBRyxTQUFTO0FBQUEsSUFDakIsU0FBUyxZQUFZLFlBQVksYUFBYSx5QkFBWSxTQUFTLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUFBLEVBQ2xGLENBQUM7QUFDSDtBQUVBLFNBQVMsa0JBQWtCLFFBQTZCO0FBR3RELFFBQU0sYUFBYSxPQUFPO0FBQzFCLFFBQU0sb0JBQW9CLHdCQUF3QixJQUFJLFVBQVU7QUFTaEUsTUFBSSxtQkFBbUIsUUFBSSw0QkFBb0IsV0FBVyxLQUFLLENBQUMsTUFBTSxRQUFXO0FBQy9FLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxjQUFjLElBQUkseUJBQVk7QUFDcEMsMEJBQXdCLElBQUksWUFBWSxXQUFXO0FBR25ELGFBQVcsU0FBUztBQUFBLElBQ2xCLFNBQVMseUJBQVksYUFBYSxHQUFHLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQztBQUFBLEVBQ3pELENBQUM7QUFDRCxTQUFPO0FBQ1Q7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -4,7 +4,27 @@
|
|
|
4
4
|
*
|
|
5
5
|
* This module provides utility functions for working with markdown editors in Obsidian
|
|
6
6
|
*/
|
|
7
|
-
import type { Editor } from 'obsidian' with { 'resolution-mode': 'import' };
|
|
7
|
+
import type { App, Editor } from 'obsidian' with { 'resolution-mode': 'import' };
|
|
8
|
+
import type { PathOrFile } from './file-system.cjs';
|
|
9
|
+
/**
|
|
10
|
+
* Overwrites the buffer of every open {@link MarkdownView} currently showing the given path so that
|
|
11
|
+
* it reflects `content`, in any window or popout.
|
|
12
|
+
*
|
|
13
|
+
* This is the fix for a subtle data-loss window: when a note is open in an editor with a **dirty
|
|
14
|
+
* buffer** (a pending, not-yet-saved edit) and its file content is rewritten on disk out from under
|
|
15
|
+
* the editor, the editor's next autosave re-writes its stale buffer and clobbers the on-disk content.
|
|
16
|
+
* A caller that restores a file's content on disk (e.g. rolling back a transaction) must also reset
|
|
17
|
+
* the open editor's buffer to the same content, so its next save is a no-op instead of a clobber.
|
|
18
|
+
*
|
|
19
|
+
* Only the view whose {@link MarkdownView.file} still matches `pathOrFile` is touched — if the editor
|
|
20
|
+
* has since navigated to another note, it is left alone. The buffer is replaced only when it actually
|
|
21
|
+
* differs from `content`, so a clean editor already in sync is not disturbed (no cursor reset).
|
|
22
|
+
*
|
|
23
|
+
* @param app - The Obsidian app instance.
|
|
24
|
+
* @param pathOrFile - The path or file whose open editors should be synchronized.
|
|
25
|
+
* @param content - The content to overwrite each matching editor's buffer with.
|
|
26
|
+
*/
|
|
27
|
+
export declare function syncOpenEditorBuffersForPath(app: App, pathOrFile: PathOrFile, content: string): void;
|
|
8
28
|
/**
|
|
9
29
|
* Toggles the read-only state of a single CodeMirror instance — the low-level primitive behind
|
|
10
30
|
* editor locking.
|
|
@@ -129,6 +129,7 @@ __export(vault_transaction_exports, {
|
|
|
129
129
|
});
|
|
130
130
|
module.exports = __toCommonJS(vault_transaction_exports);
|
|
131
131
|
var import_type_guards = require('../type-guards.cjs');
|
|
132
|
+
var import_editor = require('./editor.cjs');
|
|
132
133
|
var import_file_system = require('./file-system.cjs');
|
|
133
134
|
var import_vault = require('./vault.cjs');
|
|
134
135
|
const DEFAULT_STAGING_FOLDER_PATH = ".obsidian-dev-utils-temp";
|
|
@@ -236,6 +237,7 @@ class VaultTransaction {
|
|
|
236
237
|
pathOrFile: path,
|
|
237
238
|
resourceLockComponent: null
|
|
238
239
|
});
|
|
240
|
+
(0, import_editor.syncOpenEditorBuffersForPath)(this.app, path, oldContent);
|
|
239
241
|
});
|
|
240
242
|
}
|
|
241
243
|
/**
|
|
@@ -368,4 +370,4 @@ class VaultTransaction {
|
|
|
368
370
|
0 && (module.exports = {
|
|
369
371
|
VaultTransaction
|
|
370
372
|
});
|
|
371
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3ZhdWx0LXRyYW5zYWN0aW9uLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQSByZXZlcnNpYmxlLCB0cmFuc2FjdGlvbmFsIGxvZyBvZiB2YXVsdCBtdXRhdGlvbnMuIEVhY2ggbXV0YXRpb24gcmVjb3JkcyBob3cgdG8gdW5kbyBpdHNlbGY7XG4gKiB7QGxpbmsgVmF1bHRUcmFuc2FjdGlvbi5yb2xsYmFja30gcmV2ZXJzZXMgdGhlIGNvbXBsZXRlZCBzdGVwcyBpbiByZXZlcnNlIG9yZGVyIGFuZFxuICoge0BsaW5rIFZhdWx0VHJhbnNhY3Rpb24uY29tbWl0fSBmaW5hbGl6ZXMgdGhlbS4gSXQgaXMgYnVpbHQgb24gdGhlIGAqU2FmZWAgdmF1bHQgd3JhcHBlcnMgc28gaXRcbiAqIGluaGVyaXRzIHRoZWlyIGNhc2UtaW5zZW5zaXRpdmUgLyByZXRyeSAvIG1pc3NpbmctZmlsZSBoYW5kbGluZy5cbiAqXG4gKiBBIGRlbGV0aW9uIGlzIHBlcmZvcm1lZCBhcyBhICoqc29mdC1kZWxldGUqKjogdGhlIHJlc291cmNlIGlzIG1vdmVkIGFzaWRlIGludG8gYSBkb3QtcHJlZml4ZWRcbiAqIHN0YWdpbmcgZm9sZGVyIChhIGZvbGRlciBtb3ZlcyBpdHMgd2hvbGUgc3VidHJlZSBpbiBhIHNpbmdsZSByZW5hbWUsIHNvIHN1YnRyZWUgcm9sbGJhY2sgaXMgY2hlYXBcbiAqIGFuZCBmYWl0aGZ1bCkuIEJlY2F1c2UgT2JzaWRpYW4ncyB2YXVsdCBmaWxlLXRyZWUgYW5kIGZpbGUgd2F0Y2hlciBpZ25vcmUgYW55IGAuYC1wcmVmaXhlZCBwYXRoLFxuICogc3RhZ2VkIHJlc291cmNlcyBhcmUgKip1bnRyYWNrZWQqKiBcdTIwMTQgdGhleSBkbyBub3QgY2h1cm4gdGhlIG1ldGFkYXRhIGNhY2hlLCBmbGFzaCBpbiB0aGUgZmlsZVxuICogZXhwbG9yZXIsIG9yIGdldCBwcm9wYWdhdGVkIGJ5IHN5bmMgd2hpbGUgdGhlIHRyYW5zYWN0aW9uIGlzIGluIGZsaWdodC4gVGhlIGZsaXAgc2lkZSBpcyB0aGF0XG4gKiBgdmF1bHQuKmAgbWV0aG9kcyBjYW5ub3Qgc2VlIHRoZSBzdGFnaW5nIGFyZWEsIHNvIEFMTCBzdGFnaW5nIEkvTyBnb2VzIHRocm91Z2hcbiAqIHtAbGluayBBcHAudmF1bHQuYWRhcHRlcn0gKGBta2RpcmAvYHJlbmFtZWAvYGV4aXN0c2AvYHRyYXNoU3lzdGVtYC9gcm1kaXJgKS5cbiAqIHtAbGluayBWYXVsdFRyYW5zYWN0aW9uLmNvbW1pdH0gdGhlbiB0cmFzaGVzIHRoZSBzdGFnZWQgcmVzb3VyY2VzIGZvciByZWFsOyB7QGxpbmsgVmF1bHRUcmFuc2FjdGlvbi5yb2xsYmFja31cbiAqIG1vdmVzIHRoZW0gYmFjay5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgVEZpbGVcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IFBhdGhPckFic3RyYWN0RmlsZSB9IGZyb20gJy4vZmlsZS1zeXN0ZW0udHMnO1xuXG5pbXBvcnQgeyBhc3NlcnROb25OdWxsYWJsZSB9IGZyb20gJy4uL3R5cGUtZ3VhcmRzLnRzJztcbmltcG9ydCB7XG4gIGdldEFic3RyYWN0RmlsZU9yTnVsbCxcbiAgZ2V0UGF0aFxufSBmcm9tICcuL2ZpbGUtc3lzdGVtLnRzJztcbmltcG9ydCB7XG4gIGNyZWF0ZUZvbGRlclNhZmUsXG4gIHByb2Nlc3MsXG4gIHJlYWRTYWZlLFxuICByZW5hbWVTYWZlXG59IGZyb20gJy4vdmF1bHQudHMnO1xuXG5jb25zdCBERUZBVUxUX1NUQUdJTkdfRk9MREVSX1BBVEggPSAnLm9ic2lkaWFuLWRldi11dGlscy10ZW1wJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB0aGUge0BsaW5rIFZhdWx0VHJhbnNhY3Rpb259IGNvbnN0cnVjdG9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZhdWx0VHJhbnNhY3Rpb25Db25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogT3BlbnMgYW4gYW1iaWVudCBtdXRhdGlvbi1ieXBhc3Mgc2NvcGUgY292ZXJpbmcgdGhlIHBhdGhzIHRoaXMgdHJhbnNhY3Rpb24gdG91Y2hlcywgc28gdGhlXG4gICAqIHRyYW5zYWN0aW9uJ3Mgb3duIHdyaXRlcyBwYXNzIGEgYHNob3VsZEJsb2NrTXV0YXRpb25zYCBsb2NrIHRoYXQgdGhlIG93bmluZyBvcGVyYXRpb24gaG9sZHMuIEl0IGlzXG4gICAqIGNhbGxlZCBvbmNlIHdoZW4gdGhlIHRyYW5zYWN0aW9uIGlzIGNvbnN0cnVjdGVkLCBhbmQgdGhlIHJldHVybmVkIHtAbGluayBEaXNwb3NhYmxlfSBpcyBkaXNwb3NlZFxuICAgKiB3aGVuIHRoZSB0cmFuc2FjdGlvbiBzZXR0bGVzIChvbiBgY29tbWl0YCwgYHJvbGxiYWNrYCwgb3IgYGF3YWl0IHVzaW5nYCBkaXNwb3NhbCkgXHUyMDE0IHNvIHRoZSBieXBhc3NcbiAgICogc3RheXMgYWN0aXZlIHRocm91Z2ggcm9sbGJhY2ssIGluY2x1ZGluZyBhdXRvLXJvbGxiYWNrLCB3aGljaCBhIGNhbGxlciBtYW5hZ2luZyB0aGUgc2NvcGUgaXRzZWxmXG4gICAqIGNvdWxkIGVhc2lseSBnZXQgd3JvbmcuIFR5cGljYWxseVxuICAgKiBgKCkgPT4gcmVzb3VyY2VMb2NrQ29tcG9uZW50LmJ5cGFzc0Jsb2NrZWRNdXRhdGlvbnMobG9ja2VkUGF0aHNPckZpbGVzKWAuIE9taXQgaXQgZm9yIHRoZSBjb21tb25cbiAgICogc3RhbmRhbG9uZSBjYXNlIHdoZXJlIHRoZSB0cmFuc2FjdGlvbiBvcGVyYXRlcyBvbiB1bmxvY2tlZCBwYXRocy5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgRGlzcG9zYWJsZX0gdGhhdCBlbmRzIHRoZSBieXBhc3Mgc2NvcGUuXG4gICAqL1xuICBvcGVuTXV0YXRpb25CeXBhc3M/KHRoaXM6IHZvaWQpOiBEaXNwb3NhYmxlO1xuXG4gIC8qKlxuICAgKiBUaGUgZG90LXByZWZpeGVkIGZvbGRlciB0aGF0IHNvZnQtZGVsZXRlZCByZXNvdXJjZXMgYXJlIG1vdmVkIGludG8gdW50aWwgdGhlIHRyYW5zYWN0aW9uIGlzXG4gICAqIGNvbW1pdHRlZCBvciByb2xsZWQgYmFjay4gSXQgbXVzdCBzdGF5IGAuYC1wcmVmaXhlZCBzbyBPYnNpZGlhbiBsZWF2ZXMgdGhlIHN0YWdlZCByZXNvdXJjZXNcbiAgICogdW50cmFja2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJy5vYnNpZGlhbi1kZXYtdXRpbHMtdGVtcCdgXG4gICAqL1xuICByZWFkb25seSBzdGFnaW5nRm9sZGVyUGF0aD86IHN0cmluZztcbn1cblxudHlwZSBUcmFuc2FjdGlvblN0YXRlID0gJ2NvbW1pdHRlZCcgfCAnb3BlbicgfCAncm9sbGVkQmFjayc7XG5cbmludGVyZmFjZSBVbmRvU3RlcCB7XG4gIHVuZG8odGhpczogdm9pZCk6IFByb21pc2U8dm9pZD47XG59XG5cbi8qKlxuICogQSByZXZlcnNpYmxlIGxvZyBvZiB2YXVsdCBtdXRhdGlvbnMuIFBlcmZvcm0gbXV0YXRpb25zIHRocm91Z2ggaXRzIG1ldGhvZHMsIHRoZW4gY2FsbFxuICoge0BsaW5rIFZhdWx0VHJhbnNhY3Rpb24uY29tbWl0fSBvbiBzdWNjZXNzIG9yIHtAbGluayBWYXVsdFRyYW5zYWN0aW9uLnJvbGxiYWNrfSBvbiBmYWlsdXJlLiBJdCBpc1xuICogYGF3YWl0IHVzaW5nYC1mcmllbmRseTogaWYgbmVpdGhlciBpcyBjYWxsZWQsIGRpc3Bvc2FsIHJvbGxzIGJhY2suXG4gKi9cbmV4cG9ydCBjbGFzcyBWYXVsdFRyYW5zYWN0aW9uIHtcbiAgcHJpdmF0ZSByZWFkb25seSBhcHA6IEFwcDtcbiAgcHJpdmF0ZSBoYXNTdGFnaW5nRm9sZGVyID0gZmFsc2U7XG4gIHByaXZhdGUgbXV0YXRpb25CeXBhc3M6IERpc3Bvc2FibGUgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBzdGFnZWRUcmFzaFBhdGhzOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IHN0YWdpbmdGb2xkZXJQYXRoOiBzdHJpbmc7XG4gIHByaXZhdGUgc3RhdGU6IFRyYW5zYWN0aW9uU3RhdGUgPSAnb3Blbic7XG4gIHByaXZhdGUgcmVhZG9ubHkgdW5kb1N0ZXBzOiBVbmRvU3RlcFtdID0gW107XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgdmF1bHQgdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IFZhdWx0VHJhbnNhY3Rpb25Db25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHRoaXMuYXBwID0gcGFyYW1zLmFwcDtcbiAgICB0aGlzLnN0YWdpbmdGb2xkZXJQYXRoID0gcGFyYW1zLnN0YWdpbmdGb2xkZXJQYXRoID8/IERFRkFVTFRfU1RBR0lOR19GT0xERVJfUEFUSDtcbiAgICB0aGlzLm11dGF0aW9uQnlwYXNzID0gcGFyYW1zLm9wZW5NdXRhdGlvbkJ5cGFzcz8uKCkgPz8gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21taXRzIHRoZSB0cmFuc2FjdGlvbjogZmluYWxpemVzIHNvZnQtZGVsZXRlcyBieSB0cmFzaGluZyB0aGUgc3RhZ2VkIHJlc291cmNlcyBmb3IgcmVhbCBhbmRcbiAgICogcmVtb3ZlcyB0aGUgc3RhZ2luZyBmb2xkZXIuIEFmdGVyIHRoaXMgdGhlIHRyYW5zYWN0aW9uIGNhbiBubyBsb25nZXIgYmUgbXV0YXRlZCBvciByb2xsZWQgYmFjay5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjb21taXQgY29tcGxldGVzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGNvbW1pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmFzc2VydE9wZW4oKTtcbiAgICB0aGlzLnN0YXRlID0gJ2NvbW1pdHRlZCc7XG4gICAgY29uc3QgYWRhcHRlciA9IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXI7XG4gICAgZm9yIChjb25zdCBzdGFnZWRQYXRoIG9mIHRoaXMuc3RhZ2VkVHJhc2hQYXRocykge1xuICAgICAgY29uc3Qgd2FzVHJhc2hlZFRvU3lzdGVtID0gYXdhaXQgYWRhcHRlci50cmFzaFN5c3RlbShzdGFnZWRQYXRoKTtcbiAgICAgIGlmICghd2FzVHJhc2hlZFRvU3lzdGVtKSB7XG4gICAgICAgIGF3YWl0IGFkYXB0ZXIudHJhc2hMb2NhbChzdGFnZWRQYXRoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgYXdhaXQgdGhpcy5yZW1vdmVTdGFnaW5nRm9sZGVyKCk7XG4gICAgdGhpcy5kaXNwb3NlTXV0YXRpb25CeXBhc3MoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZmlsZSB3aXRoIHRoZSBnaXZlbiBjb250ZW50LCByZWNvcmRpbmcgaXRzIHJlbW92YWwgYXMgdGhlIGludmVyc2UuXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggb2YgdGhlIGZpbGUgdG8gY3JlYXRlLlxuICAgKiBAcGFyYW0gZGF0YSAtIFRoZSBjb250ZW50IG9mIHRoZSBmaWxlLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSByZXNvbHZpbmcgdG8gdGhlIGNyZWF0ZWQge0BsaW5rIFRGaWxlfS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBjcmVhdGUocGF0aDogc3RyaW5nLCBkYXRhOiBzdHJpbmcpOiBQcm9taXNlPFRGaWxlPiB7XG4gICAgdGhpcy5hc3NlcnRPcGVuKCk7XG4gICAgY29uc3QgZmlsZSA9IGF3YWl0IHRoaXMuYXBwLnZhdWx0LmNyZWF0ZShwYXRoLCBkYXRhKTtcbiAgICBjb25zdCBjcmVhdGVkUGF0aCA9IGZpbGUucGF0aDtcbiAgICB0aGlzLnB1c2hVbmRvKGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHRoaXMuaGFyZERlbGV0ZShjcmVhdGVkUGF0aCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGZpbGU7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGZvbGRlciAoaW5jbHVkaW5nIG1pc3NpbmcgYW5jZXN0b3JzKSwgcmVjb3JkaW5nIGl0cyByZW1vdmFsIGFzIHRoZSBpbnZlcnNlLiBBIG5vLW9wIGlmXG4gICAqIHRoZSBmb2xkZXIgYWxyZWFkeSBleGlzdHMuXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggb2YgdGhlIGZvbGRlciB0byBjcmVhdGUuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZm9sZGVyIGV4aXN0cy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBjcmVhdGVGb2xkZXIocGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5hc3NlcnRPcGVuKCk7XG4gICAgY29uc3Qgd2FzQ3JlYXRlZCA9IGF3YWl0IGNyZWF0ZUZvbGRlclNhZmUodGhpcy5hcHAsIHBhdGgpO1xuICAgIGlmICh3YXNDcmVhdGVkKSB7XG4gICAgICB0aGlzLnB1c2hVbmRvKGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5oYXJkRGVsZXRlKHBhdGgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2VzIHRoZSBjb250ZW50IG9mIGEgZmlsZSwgY2FwdHVyaW5nIHRoZSBvbGQgY29udGVudCBzbyBpdCBjYW4gYmUgcmVzdG9yZWQgb24gcm9sbGJhY2suXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSB0byBtb2RpZnkuXG4gICAqIEBwYXJhbSBuZXdDb250ZW50IC0gVGhlIG5ldyBjb250ZW50LlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZpbGUgaXMgbW9kaWZpZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbW9kaWZ5KHBhdGhPckZpbGU6IFBhdGhPckFic3RyYWN0RmlsZSwgbmV3Q29udGVudDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5wcm9jZXNzKHBhdGhPckZpbGUsICgpID0+IG5ld0NvbnRlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybXMgdGhlIGNvbnRlbnQgb2YgYSBmaWxlLCBjYXB0dXJpbmcgdGhlIG9sZCBjb250ZW50IHNvIGl0IGNhbiBiZSByZXN0b3JlZCBvbiByb2xsYmFjay5cbiAgICpcbiAgICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIHRvIHByb2Nlc3MuXG4gICAqIEBwYXJhbSBuZXdDb250ZW50UHJvdmlkZXIgLSBNYXBzIHRoZSBjdXJyZW50IGNvbnRlbnQgdG8gdGhlIG5ldyBjb250ZW50LlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZpbGUgaXMgcHJvY2Vzc2VkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHByb2Nlc3MocGF0aE9yRmlsZTogUGF0aE9yQWJzdHJhY3RGaWxlLCBuZXdDb250ZW50UHJvdmlkZXI6IChjb250ZW50OiBzdHJpbmcpID0+IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuYXNzZXJ0T3BlbigpO1xuICAgIGNvbnN0IHBhdGggPSBnZXRQYXRoKHRoaXMuYXBwLCBwYXRoT3JGaWxlKTtcbiAgICBjb25zdCBvbGRDb250ZW50ID0gYXdhaXQgcmVhZFNhZmUodGhpcy5hcHAsIHBhdGgpO1xuICAgIGF3YWl0IHByb2Nlc3Moe1xuICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgIG5ld0NvbnRlbnRQcm92aWRlcjogKHsgY29udGVudCB9KSA9PiBuZXdDb250ZW50UHJvdmlkZXIoY29udGVudCksXG4gICAgICBwYXRoT3JGaWxlOiBwYXRoLFxuICAgICAgcmVzb3VyY2VMb2NrQ29tcG9uZW50OiBudWxsXG4gICAgfSk7XG4gICAgLy8gUmVhY2hpbmcgdGhpcyBsaW5lIG1lYW5zIGBwcm9jZXNzYCBzdWNjZWVkZWQuIEEgbWlzc2luZyBmaWxlIHdvdWxkIGhhdmUgdGhyb3duIGFib3ZlIChpdHNcbiAgICAvLyBgc2hvdWxkRmFpbE9uTWlzc2luZ0ZpbGVgIGRlZmF1bHQpLCBzbyB0aGUgcHJlLWltYWdlIHdhcyBjYXB0dXJlZCBhbmQgY2FuIGJlIHJlc3RvcmVkIG9uIHJvbGxiYWNrLlxuICAgIGFzc2VydE5vbk51bGxhYmxlKG9sZENvbnRlbnQpO1xuICAgIHRoaXMucHVzaFVuZG8oYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgcHJvY2Vzcyh7XG4gICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgIG5ld0NvbnRlbnRQcm92aWRlcjogb2xkQ29udGVudCxcbiAgICAgICAgcGF0aE9yRmlsZTogcGF0aCxcbiAgICAgICAgcmVzb3VyY2VMb2NrQ29tcG9uZW50OiBudWxsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5hbWVzIG9yIG1vdmVzIGEgcmVzb3VyY2UsIHJlY29yZGluZyB0aGUgcmV2ZXJzZSByZW5hbWUgYXMgdGhlIGludmVyc2UuXG4gICAqXG4gICAqIEBwYXJhbSBvbGRQYXRoT3JGaWxlIC0gVGhlIHJlc291cmNlIHRvIHJlbmFtZS5cbiAgICogQHBhcmFtIG5ld1BhdGggLSBUaGUgZGVzaXJlZCBuZXcgcGF0aCAoYW4gYXZhaWxhYmxlIHBhdGggaXMgY2hvc2VuIGlmIGl0IGlzIHRha2VuKS5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gcmVzb2x2aW5nIHRvIHRoZSBhY3R1YWwgbmV3IHBhdGguXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVuYW1lKG9sZFBhdGhPckZpbGU6IFBhdGhPckFic3RyYWN0RmlsZSwgbmV3UGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICB0aGlzLmFzc2VydE9wZW4oKTtcbiAgICBjb25zdCBvbGRQYXRoID0gZ2V0UGF0aCh0aGlzLmFwcCwgb2xkUGF0aE9yRmlsZSk7XG4gICAgY29uc3QgYWN0dWFsTmV3UGF0aCA9IGF3YWl0IHJlbmFtZVNhZmUoeyBhcHA6IHRoaXMuYXBwLCBuZXdQYXRoLCBvbGRQYXRoT3JBYnN0cmFjdEZpbGU6IG9sZFBhdGhPckZpbGUgfSk7XG4gICAgdGhpcy5wdXNoVW5kbyhhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCByZW5hbWVTYWZlKHsgYXBwOiB0aGlzLmFwcCwgbmV3UGF0aDogb2xkUGF0aCwgb2xkUGF0aE9yQWJzdHJhY3RGaWxlOiBhY3R1YWxOZXdQYXRoIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBhY3R1YWxOZXdQYXRoO1xuICB9XG5cbiAgLyoqXG4gICAqIFJvbGxzIGJhY2sgdGhlIHRyYW5zYWN0aW9uOiB1bmRvZXMgdGhlIGNvbXBsZXRlZCBzdGVwcyBpbiByZXZlcnNlIG9yZGVyIGFuZCByZW1vdmVzIHRoZSBzdGFnaW5nXG4gICAqIGZvbGRlci4gSWRlbXBvdGVudC5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSByb2xsYmFjayBjb21wbGV0ZXMuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcm9sbGJhY2soKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09ICdyb2xsZWRCYWNrJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmFzc2VydE5vdENvbW1pdHRlZCgpO1xuICAgIHRoaXMuc3RhdGUgPSAncm9sbGVkQmFjayc7XG4gICAgZm9yIChjb25zdCBzdGVwIG9mIFsuLi50aGlzLnVuZG9TdGVwc10ucmV2ZXJzZSgpKSB7XG4gICAgICBhd2FpdCBzdGVwLnVuZG8oKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5yZW1vdmVTdGFnaW5nRm9sZGVyKCk7XG4gICAgdGhpcy5kaXNwb3NlTXV0YXRpb25CeXBhc3MoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSb2xscyBiYWNrIHRoZSB0cmFuc2FjdGlvbiBvbiBkaXNwb3NhbCB1bmxlc3MgaXQgd2FzIGFscmVhZHkgY29tbWl0dGVkIG9yIHJvbGxlZCBiYWNrLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gJ29wZW4nKSB7XG4gICAgICBhd2FpdCB0aGlzLnJvbGxiYWNrKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNvZnQtZGVsZXRlcyBhIHJlc291cmNlIGJ5IG1vdmluZyBpdCBpbnRvIHRoZSBzdGFnaW5nIGZvbGRlciwgcmVjb3JkaW5nIHRoZSBtb3ZlLWJhY2sgYXMgdGhlXG4gICAqIGludmVyc2UuIFRoZSByZWFsIHRyYXNoIGhhcHBlbnMgb24ge0BsaW5rIFZhdWx0VHJhbnNhY3Rpb24uY29tbWl0fS4gQSBuby1vcCBpZiB0aGUgcmVzb3VyY2UgZG9lc1xuICAgKiBub3QgZXhpc3QuXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgcmVzb3VyY2UgdG8gdHJhc2guXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgcmVzb3VyY2UgaGFzIGJlZW4gc3RhZ2VkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHRyYXNoKHBhdGhPckZpbGU6IFBhdGhPckFic3RyYWN0RmlsZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuYXNzZXJ0T3BlbigpO1xuICAgIGNvbnN0IGZpbGUgPSBnZXRBYnN0cmFjdEZpbGVPck51bGwoeyBhcHA6IHRoaXMuYXBwLCBwYXRoT3JGaWxlIH0pO1xuICAgIGlmICghZmlsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvcmlnaW5hbFBhdGggPSBmaWxlLnBhdGg7XG4gICAgYXdhaXQgdGhpcy5lbnN1cmVTdGFnaW5nRm9sZGVyKCk7XG4gICAgY29uc3Qgc3RhZ2VkUGF0aCA9IGF3YWl0IHRoaXMuZ2V0QXZhaWxhYmxlU3RhZ2VkUGF0aChmaWxlLm5hbWUpO1xuICAgIGNvbnN0IGFkYXB0ZXIgPSB0aGlzLmFwcC52YXVsdC5hZGFwdGVyO1xuICAgIC8vIE1vdmUgdGhyb3VnaCB0aGUgYWRhcHRlciwgbm90IGB2YXVsdC5yZW5hbWVgOiB0aGUgc3RhZ2luZyBmb2xkZXIgaXMgZG90LXByZWZpeGVkIGFuZCB0aGVyZWZvcmVcbiAgICAvLyBVbnRyYWNrZWQsIHNvIGEgYHZhdWx0LipgIG1vdmUgY2Fubm90IHRhcmdldCBpdCAobm9yIHNob3VsZCBpdCByZXdyaXRlIGxpbmtzIHRvIGEgc29mdC1kZWxldGUpLlxuICAgIGF3YWl0IGFkYXB0ZXIucmVuYW1lKG9yaWdpbmFsUGF0aCwgc3RhZ2VkUGF0aCk7XG4gICAgdGhpcy5zdGFnZWRUcmFzaFBhdGhzLnB1c2goc3RhZ2VkUGF0aCk7XG4gICAgdGhpcy5wdXNoVW5kbyhhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoYXdhaXQgYWRhcHRlci5leGlzdHMoc3RhZ2VkUGF0aCkpIHtcbiAgICAgICAgYXdhaXQgYWRhcHRlci5yZW5hbWUoc3RhZ2VkUGF0aCwgb3JpZ2luYWxQYXRoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXNzZXJ0Tm90Q29tbWl0dGVkKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN0YXRlID09PSAnY29tbWl0dGVkJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3Qgcm9sbCBiYWNrIGEgY29tbWl0dGVkIHRyYW5zYWN0aW9uLicpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXNzZXJ0T3BlbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gJ29wZW4nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBtdXRhdGUgYSAke3RoaXMuc3RhdGV9IHRyYW5zYWN0aW9uLmApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGlzcG9zZU11dGF0aW9uQnlwYXNzKCk6IHZvaWQge1xuICAgIHRoaXMubXV0YXRpb25CeXBhc3M/LltTeW1ib2wuZGlzcG9zZV0oKTtcbiAgICB0aGlzLm11dGF0aW9uQnlwYXNzID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZW5zdXJlU3RhZ2luZ0ZvbGRlcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5oYXNTdGFnaW5nRm9sZGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGFkYXB0ZXIgPSB0aGlzLmFwcC52YXVsdC5hZGFwdGVyO1xuICAgIGlmICghYXdhaXQgYWRhcHRlci5leGlzdHModGhpcy5zdGFnaW5nRm9sZGVyUGF0aCkpIHtcbiAgICAgIGF3YWl0IGFkYXB0ZXIubWtkaXIodGhpcy5zdGFnaW5nRm9sZGVyUGF0aCk7XG4gICAgfVxuICAgIHRoaXMuaGFzU3RhZ2luZ0ZvbGRlciA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldEF2YWlsYWJsZVN0YWdlZFBhdGgobmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBhZGFwdGVyID0gdGhpcy5hcHAudmF1bHQuYWRhcHRlcjtcbiAgICBjb25zdCBkb3RJbmRleCA9IG5hbWUubGFzdEluZGV4T2YoJy4nKTtcbiAgICBjb25zdCBoYXNFeHRlbnNpb24gPSBkb3RJbmRleCA+IDA7XG4gICAgY29uc3QgYmFzZU5hbWUgPSBoYXNFeHRlbnNpb24gPyBuYW1lLnNsaWNlKDAsIGRvdEluZGV4KSA6IG5hbWU7XG4gICAgY29uc3QgZXh0ZW5zaW9uID0gaGFzRXh0ZW5zaW9uID8gbmFtZS5zbGljZShkb3RJbmRleCkgOiAnJztcbiAgICBsZXQgY2FuZGlkYXRlID0gYCR7dGhpcy5zdGFnaW5nRm9sZGVyUGF0aH0vJHtuYW1lfWA7XG4gICAgbGV0IGNvdW50ZXIgPSAxO1xuICAgIHdoaWxlIChhd2FpdCBhZGFwdGVyLmV4aXN0cyhjYW5kaWRhdGUpKSB7XG4gICAgICBjYW5kaWRhdGUgPSBgJHt0aGlzLnN0YWdpbmdGb2xkZXJQYXRofS8ke2Jhc2VOYW1lfSAke2NvdW50ZXIudG9TdHJpbmcoKX0ke2V4dGVuc2lvbn1gO1xuICAgICAgY291bnRlcisrO1xuICAgIH1cbiAgICByZXR1cm4gY2FuZGlkYXRlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYXJkRGVsZXRlKHBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZpbGUgPSBnZXRBYnN0cmFjdEZpbGVPck51bGwoeyBhcHA6IHRoaXMuYXBwLCBwYXRoT3JGaWxlOiBwYXRoIH0pO1xuICAgIGlmIChmaWxlKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgb2JzaWRpYW5tZC9wcmVmZXItZmlsZS1tYW5hZ2VyLXRyYXNoLWZpbGUgLS0gVW5kb2luZyBhIHRyYW5zYWN0aW9uLWxvY2FsIGNyZWF0ZSBtdXN0IHZhbmlzaCBpdCBlbnRpcmVseSwgbm90IGxhbmQgaXQgaW4gdGhlIHVzZXIncyB0cmFzaC5cbiAgICAgIGF3YWl0IHRoaXMuYXBwLnZhdWx0LmRlbGV0ZShmaWxlLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHB1c2hVbmRvKHVuZG86ICgpID0+IFByb21pc2U8dm9pZD4pOiB2b2lkIHtcbiAgICB0aGlzLnVuZG9TdGVwcy5wdXNoKHsgdW5kbyB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVtb3ZlU3RhZ2luZ0ZvbGRlcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuaGFzU3RhZ2luZ0ZvbGRlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmhhc1N0YWdpbmdGb2xkZXIgPSBmYWxzZTtcbiAgICBjb25zdCBhZGFwdGVyID0gdGhpcy5hcHAudmF1bHQuYWRhcHRlcjtcbiAgICBpZiAoYXdhaXQgYWRhcHRlci5leGlzdHModGhpcy5zdGFnaW5nRm9sZGVyUGF0aCkpIHtcbiAgICAgIGF3YWl0IGFkYXB0ZXIucm1kaXIodGhpcy5zdGFnaW5nRm9sZGVyUGF0aCwgdHJ1ZSk7XG4gICAgfVxuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUEwQkEseUJBQWtDO0FBQ2xDLHlCQUdPO0FBQ1AsbUJBS087QUFFUCxNQUFNLDhCQUE4QjtBQThDN0IsTUFBTSxpQkFBaUI7QUFBQSxFQUNYO0FBQUEsRUFDVCxtQkFBbUI7QUFBQSxFQUNuQixpQkFBb0M7QUFBQSxFQUMzQixtQkFBNkIsQ0FBQztBQUFBLEVBQzlCO0FBQUEsRUFDVCxRQUEwQjtBQUFBLEVBQ2pCLFlBQXdCLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPbkMsWUFBWSxRQUEyQztBQUM1RCxTQUFLLE1BQU0sT0FBTztBQUNsQixTQUFLLG9CQUFvQixPQUFPLHFCQUFxQjtBQUNyRCxTQUFLLGlCQUFpQixPQUFPLHFCQUFxQixLQUFLO0FBQUEsRUFDekQ7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFBLE1BQWEsU0FBd0I7QUFDbkMsU0FBSyxXQUFXO0FBQ2hCLFNBQUssUUFBUTtBQUNiLFVBQU0sVUFBVSxLQUFLLElBQUksTUFBTTtBQUMvQixlQUFXLGNBQWMsS0FBSyxrQkFBa0I7QUFDOUMsWUFBTSxxQkFBcUIsTUFBTSxRQUFRLFlBQVksVUFBVTtBQUMvRCxVQUFJLENBQUMsb0JBQW9CO0FBQ3ZCLGNBQU0sUUFBUSxXQUFXLFVBQVU7QUFBQSxNQUNyQztBQUFBLElBQ0Y7QUFDQSxVQUFNLEtBQUssb0JBQW9CO0FBQy9CLFNB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
|
|
373
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL3ZhdWx0LXRyYW5zYWN0aW9uLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQSByZXZlcnNpYmxlLCB0cmFuc2FjdGlvbmFsIGxvZyBvZiB2YXVsdCBtdXRhdGlvbnMuIEVhY2ggbXV0YXRpb24gcmVjb3JkcyBob3cgdG8gdW5kbyBpdHNlbGY7XG4gKiB7QGxpbmsgVmF1bHRUcmFuc2FjdGlvbi5yb2xsYmFja30gcmV2ZXJzZXMgdGhlIGNvbXBsZXRlZCBzdGVwcyBpbiByZXZlcnNlIG9yZGVyIGFuZFxuICoge0BsaW5rIFZhdWx0VHJhbnNhY3Rpb24uY29tbWl0fSBmaW5hbGl6ZXMgdGhlbS4gSXQgaXMgYnVpbHQgb24gdGhlIGAqU2FmZWAgdmF1bHQgd3JhcHBlcnMgc28gaXRcbiAqIGluaGVyaXRzIHRoZWlyIGNhc2UtaW5zZW5zaXRpdmUgLyByZXRyeSAvIG1pc3NpbmctZmlsZSBoYW5kbGluZy5cbiAqXG4gKiBBIGRlbGV0aW9uIGlzIHBlcmZvcm1lZCBhcyBhICoqc29mdC1kZWxldGUqKjogdGhlIHJlc291cmNlIGlzIG1vdmVkIGFzaWRlIGludG8gYSBkb3QtcHJlZml4ZWRcbiAqIHN0YWdpbmcgZm9sZGVyIChhIGZvbGRlciBtb3ZlcyBpdHMgd2hvbGUgc3VidHJlZSBpbiBhIHNpbmdsZSByZW5hbWUsIHNvIHN1YnRyZWUgcm9sbGJhY2sgaXMgY2hlYXBcbiAqIGFuZCBmYWl0aGZ1bCkuIEJlY2F1c2UgT2JzaWRpYW4ncyB2YXVsdCBmaWxlLXRyZWUgYW5kIGZpbGUgd2F0Y2hlciBpZ25vcmUgYW55IGAuYC1wcmVmaXhlZCBwYXRoLFxuICogc3RhZ2VkIHJlc291cmNlcyBhcmUgKip1bnRyYWNrZWQqKiBcdTIwMTQgdGhleSBkbyBub3QgY2h1cm4gdGhlIG1ldGFkYXRhIGNhY2hlLCBmbGFzaCBpbiB0aGUgZmlsZVxuICogZXhwbG9yZXIsIG9yIGdldCBwcm9wYWdhdGVkIGJ5IHN5bmMgd2hpbGUgdGhlIHRyYW5zYWN0aW9uIGlzIGluIGZsaWdodC4gVGhlIGZsaXAgc2lkZSBpcyB0aGF0XG4gKiBgdmF1bHQuKmAgbWV0aG9kcyBjYW5ub3Qgc2VlIHRoZSBzdGFnaW5nIGFyZWEsIHNvIEFMTCBzdGFnaW5nIEkvTyBnb2VzIHRocm91Z2hcbiAqIHtAbGluayBBcHAudmF1bHQuYWRhcHRlcn0gKGBta2RpcmAvYHJlbmFtZWAvYGV4aXN0c2AvYHRyYXNoU3lzdGVtYC9gcm1kaXJgKS5cbiAqIHtAbGluayBWYXVsdFRyYW5zYWN0aW9uLmNvbW1pdH0gdGhlbiB0cmFzaGVzIHRoZSBzdGFnZWQgcmVzb3VyY2VzIGZvciByZWFsOyB7QGxpbmsgVmF1bHRUcmFuc2FjdGlvbi5yb2xsYmFja31cbiAqIG1vdmVzIHRoZW0gYmFjay5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgVEZpbGVcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IFBhdGhPckFic3RyYWN0RmlsZSB9IGZyb20gJy4vZmlsZS1zeXN0ZW0udHMnO1xuXG5pbXBvcnQgeyBhc3NlcnROb25OdWxsYWJsZSB9IGZyb20gJy4uL3R5cGUtZ3VhcmRzLnRzJztcbmltcG9ydCB7IHN5bmNPcGVuRWRpdG9yQnVmZmVyc0ZvclBhdGggfSBmcm9tICcuL2VkaXRvci50cyc7XG5pbXBvcnQge1xuICBnZXRBYnN0cmFjdEZpbGVPck51bGwsXG4gIGdldFBhdGhcbn0gZnJvbSAnLi9maWxlLXN5c3RlbS50cyc7XG5pbXBvcnQge1xuICBjcmVhdGVGb2xkZXJTYWZlLFxuICBwcm9jZXNzLFxuICByZWFkU2FmZSxcbiAgcmVuYW1lU2FmZVxufSBmcm9tICcuL3ZhdWx0LnRzJztcblxuY29uc3QgREVGQVVMVF9TVEFHSU5HX0ZPTERFUl9QQVRIID0gJy5vYnNpZGlhbi1kZXYtdXRpbHMtdGVtcCc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgdGhlIHtAbGluayBWYXVsdFRyYW5zYWN0aW9ufSBjb25zdHJ1Y3Rvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWYXVsdFRyYW5zYWN0aW9uQ29uc3RydWN0b3JQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIE9wZW5zIGFuIGFtYmllbnQgbXV0YXRpb24tYnlwYXNzIHNjb3BlIGNvdmVyaW5nIHRoZSBwYXRocyB0aGlzIHRyYW5zYWN0aW9uIHRvdWNoZXMsIHNvIHRoZVxuICAgKiB0cmFuc2FjdGlvbidzIG93biB3cml0ZXMgcGFzcyBhIGBzaG91bGRCbG9ja011dGF0aW9uc2AgbG9jayB0aGF0IHRoZSBvd25pbmcgb3BlcmF0aW9uIGhvbGRzLiBJdCBpc1xuICAgKiBjYWxsZWQgb25jZSB3aGVuIHRoZSB0cmFuc2FjdGlvbiBpcyBjb25zdHJ1Y3RlZCwgYW5kIHRoZSByZXR1cm5lZCB7QGxpbmsgRGlzcG9zYWJsZX0gaXMgZGlzcG9zZWRcbiAgICogd2hlbiB0aGUgdHJhbnNhY3Rpb24gc2V0dGxlcyAob24gYGNvbW1pdGAsIGByb2xsYmFja2AsIG9yIGBhd2FpdCB1c2luZ2AgZGlzcG9zYWwpIFx1MjAxNCBzbyB0aGUgYnlwYXNzXG4gICAqIHN0YXlzIGFjdGl2ZSB0aHJvdWdoIHJvbGxiYWNrLCBpbmNsdWRpbmcgYXV0by1yb2xsYmFjaywgd2hpY2ggYSBjYWxsZXIgbWFuYWdpbmcgdGhlIHNjb3BlIGl0c2VsZlxuICAgKiBjb3VsZCBlYXNpbHkgZ2V0IHdyb25nLiBUeXBpY2FsbHlcbiAgICogYCgpID0+IHJlc291cmNlTG9ja0NvbXBvbmVudC5ieXBhc3NCbG9ja2VkTXV0YXRpb25zKGxvY2tlZFBhdGhzT3JGaWxlcylgLiBPbWl0IGl0IGZvciB0aGUgY29tbW9uXG4gICAqIHN0YW5kYWxvbmUgY2FzZSB3aGVyZSB0aGUgdHJhbnNhY3Rpb24gb3BlcmF0ZXMgb24gdW5sb2NrZWQgcGF0aHMuXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIERpc3Bvc2FibGV9IHRoYXQgZW5kcyB0aGUgYnlwYXNzIHNjb3BlLlxuICAgKi9cbiAgb3Blbk11dGF0aW9uQnlwYXNzPyh0aGlzOiB2b2lkKTogRGlzcG9zYWJsZTtcblxuICAvKipcbiAgICogVGhlIGRvdC1wcmVmaXhlZCBmb2xkZXIgdGhhdCBzb2Z0LWRlbGV0ZWQgcmVzb3VyY2VzIGFyZSBtb3ZlZCBpbnRvIHVudGlsIHRoZSB0cmFuc2FjdGlvbiBpc1xuICAgKiBjb21taXR0ZWQgb3Igcm9sbGVkIGJhY2suIEl0IG11c3Qgc3RheSBgLmAtcHJlZml4ZWQgc28gT2JzaWRpYW4gbGVhdmVzIHRoZSBzdGFnZWQgcmVzb3VyY2VzXG4gICAqIHVudHJhY2tlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYCcub2JzaWRpYW4tZGV2LXV0aWxzLXRlbXAnYFxuICAgKi9cbiAgcmVhZG9ubHkgc3RhZ2luZ0ZvbGRlclBhdGg/OiBzdHJpbmc7XG59XG5cbnR5cGUgVHJhbnNhY3Rpb25TdGF0ZSA9ICdjb21taXR0ZWQnIHwgJ29wZW4nIHwgJ3JvbGxlZEJhY2snO1xuXG5pbnRlcmZhY2UgVW5kb1N0ZXAge1xuICB1bmRvKHRoaXM6IHZvaWQpOiBQcm9taXNlPHZvaWQ+O1xufVxuXG4vKipcbiAqIEEgcmV2ZXJzaWJsZSBsb2cgb2YgdmF1bHQgbXV0YXRpb25zLiBQZXJmb3JtIG11dGF0aW9ucyB0aHJvdWdoIGl0cyBtZXRob2RzLCB0aGVuIGNhbGxcbiAqIHtAbGluayBWYXVsdFRyYW5zYWN0aW9uLmNvbW1pdH0gb24gc3VjY2VzcyBvciB7QGxpbmsgVmF1bHRUcmFuc2FjdGlvbi5yb2xsYmFja30gb24gZmFpbHVyZS4gSXQgaXNcbiAqIGBhd2FpdCB1c2luZ2AtZnJpZW5kbHk6IGlmIG5laXRoZXIgaXMgY2FsbGVkLCBkaXNwb3NhbCByb2xscyBiYWNrLlxuICovXG5leHBvcnQgY2xhc3MgVmF1bHRUcmFuc2FjdGlvbiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBwOiBBcHA7XG4gIHByaXZhdGUgaGFzU3RhZ2luZ0ZvbGRlciA9IGZhbHNlO1xuICBwcml2YXRlIG11dGF0aW9uQnlwYXNzOiBEaXNwb3NhYmxlIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhZ2VkVHJhc2hQYXRoczogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBzdGFnaW5nRm9sZGVyUGF0aDogc3RyaW5nO1xuICBwcml2YXRlIHN0YXRlOiBUcmFuc2FjdGlvblN0YXRlID0gJ29wZW4nO1xuICBwcml2YXRlIHJlYWRvbmx5IHVuZG9TdGVwczogVW5kb1N0ZXBbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IHZhdWx0IHRyYW5zYWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBWYXVsdFRyYW5zYWN0aW9uQ29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICB0aGlzLmFwcCA9IHBhcmFtcy5hcHA7XG4gICAgdGhpcy5zdGFnaW5nRm9sZGVyUGF0aCA9IHBhcmFtcy5zdGFnaW5nRm9sZGVyUGF0aCA/PyBERUZBVUxUX1NUQUdJTkdfRk9MREVSX1BBVEg7XG4gICAgdGhpcy5tdXRhdGlvbkJ5cGFzcyA9IHBhcmFtcy5vcGVuTXV0YXRpb25CeXBhc3M/LigpID8/IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQ29tbWl0cyB0aGUgdHJhbnNhY3Rpb246IGZpbmFsaXplcyBzb2Z0LWRlbGV0ZXMgYnkgdHJhc2hpbmcgdGhlIHN0YWdlZCByZXNvdXJjZXMgZm9yIHJlYWwgYW5kXG4gICAqIHJlbW92ZXMgdGhlIHN0YWdpbmcgZm9sZGVyLiBBZnRlciB0aGlzIHRoZSB0cmFuc2FjdGlvbiBjYW4gbm8gbG9uZ2VyIGJlIG11dGF0ZWQgb3Igcm9sbGVkIGJhY2suXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgY29tbWl0IGNvbXBsZXRlcy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBjb21taXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5hc3NlcnRPcGVuKCk7XG4gICAgdGhpcy5zdGF0ZSA9ICdjb21taXR0ZWQnO1xuICAgIGNvbnN0IGFkYXB0ZXIgPSB0aGlzLmFwcC52YXVsdC5hZGFwdGVyO1xuICAgIGZvciAoY29uc3Qgc3RhZ2VkUGF0aCBvZiB0aGlzLnN0YWdlZFRyYXNoUGF0aHMpIHtcbiAgICAgIGNvbnN0IHdhc1RyYXNoZWRUb1N5c3RlbSA9IGF3YWl0IGFkYXB0ZXIudHJhc2hTeXN0ZW0oc3RhZ2VkUGF0aCk7XG4gICAgICBpZiAoIXdhc1RyYXNoZWRUb1N5c3RlbSkge1xuICAgICAgICBhd2FpdCBhZGFwdGVyLnRyYXNoTG9jYWwoc3RhZ2VkUGF0aCk7XG4gICAgICB9XG4gICAgfVxuICAgIGF3YWl0IHRoaXMucmVtb3ZlU3RhZ2luZ0ZvbGRlcigpO1xuICAgIHRoaXMuZGlzcG9zZU11dGF0aW9uQnlwYXNzKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGZpbGUgd2l0aCB0aGUgZ2l2ZW4gY29udGVudCwgcmVjb3JkaW5nIGl0cyByZW1vdmFsIGFzIHRoZSBpbnZlcnNlLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIG9mIHRoZSBmaWxlIHRvIGNyZWF0ZS5cbiAgICogQHBhcmFtIGRhdGEgLSBUaGUgY29udGVudCBvZiB0aGUgZmlsZS5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gcmVzb2x2aW5nIHRvIHRoZSBjcmVhdGVkIHtAbGluayBURmlsZX0uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY3JlYXRlKHBhdGg6IHN0cmluZywgZGF0YTogc3RyaW5nKTogUHJvbWlzZTxURmlsZT4ge1xuICAgIHRoaXMuYXNzZXJ0T3BlbigpO1xuICAgIGNvbnN0IGZpbGUgPSBhd2FpdCB0aGlzLmFwcC52YXVsdC5jcmVhdGUocGF0aCwgZGF0YSk7XG4gICAgY29uc3QgY3JlYXRlZFBhdGggPSBmaWxlLnBhdGg7XG4gICAgdGhpcy5wdXNoVW5kbyhhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCB0aGlzLmhhcmREZWxldGUoY3JlYXRlZFBhdGgpO1xuICAgIH0pO1xuICAgIHJldHVybiBmaWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBmb2xkZXIgKGluY2x1ZGluZyBtaXNzaW5nIGFuY2VzdG9ycyksIHJlY29yZGluZyBpdHMgcmVtb3ZhbCBhcyB0aGUgaW52ZXJzZS4gQSBuby1vcCBpZlxuICAgKiB0aGUgZm9sZGVyIGFscmVhZHkgZXhpc3RzLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIG9mIHRoZSBmb2xkZXIgdG8gY3JlYXRlLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZvbGRlciBleGlzdHMuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY3JlYXRlRm9sZGVyKHBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuYXNzZXJ0T3BlbigpO1xuICAgIGNvbnN0IHdhc0NyZWF0ZWQgPSBhd2FpdCBjcmVhdGVGb2xkZXJTYWZlKHRoaXMuYXBwLCBwYXRoKTtcbiAgICBpZiAod2FzQ3JlYXRlZCkge1xuICAgICAgdGhpcy5wdXNoVW5kbyhhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaGFyZERlbGV0ZShwYXRoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlcyB0aGUgY29udGVudCBvZiBhIGZpbGUsIGNhcHR1cmluZyB0aGUgb2xkIGNvbnRlbnQgc28gaXQgY2FuIGJlIHJlc3RvcmVkIG9uIHJvbGxiYWNrLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgdG8gbW9kaWZ5LlxuICAgKiBAcGFyYW0gbmV3Q29udGVudCAtIFRoZSBuZXcgY29udGVudC5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmaWxlIGlzIG1vZGlmaWVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIG1vZGlmeShwYXRoT3JGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGUsIG5ld0NvbnRlbnQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMucHJvY2VzcyhwYXRoT3JGaWxlLCAoKSA9PiBuZXdDb250ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2Zvcm1zIHRoZSBjb250ZW50IG9mIGEgZmlsZSwgY2FwdHVyaW5nIHRoZSBvbGQgY29udGVudCBzbyBpdCBjYW4gYmUgcmVzdG9yZWQgb24gcm9sbGJhY2suXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSB0byBwcm9jZXNzLlxuICAgKiBAcGFyYW0gbmV3Q29udGVudFByb3ZpZGVyIC0gTWFwcyB0aGUgY3VycmVudCBjb250ZW50IHRvIHRoZSBuZXcgY29udGVudC5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmaWxlIGlzIHByb2Nlc3NlZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBwcm9jZXNzKHBhdGhPckZpbGU6IFBhdGhPckFic3RyYWN0RmlsZSwgbmV3Q29udGVudFByb3ZpZGVyOiAoY29udGVudDogc3RyaW5nKSA9PiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmFzc2VydE9wZW4oKTtcbiAgICBjb25zdCBwYXRoID0gZ2V0UGF0aCh0aGlzLmFwcCwgcGF0aE9yRmlsZSk7XG4gICAgY29uc3Qgb2xkQ29udGVudCA9IGF3YWl0IHJlYWRTYWZlKHRoaXMuYXBwLCBwYXRoKTtcbiAgICBhd2FpdCBwcm9jZXNzKHtcbiAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICBuZXdDb250ZW50UHJvdmlkZXI6ICh7IGNvbnRlbnQgfSkgPT4gbmV3Q29udGVudFByb3ZpZGVyKGNvbnRlbnQpLFxuICAgICAgcGF0aE9yRmlsZTogcGF0aCxcbiAgICAgIHJlc291cmNlTG9ja0NvbXBvbmVudDogbnVsbFxuICAgIH0pO1xuICAgIC8vIFJlYWNoaW5nIHRoaXMgbGluZSBtZWFucyBgcHJvY2Vzc2Agc3VjY2VlZGVkLiBBIG1pc3NpbmcgZmlsZSB3b3VsZCBoYXZlIHRocm93biBhYm92ZSAoaXRzXG4gICAgLy8gYHNob3VsZEZhaWxPbk1pc3NpbmdGaWxlYCBkZWZhdWx0KSwgc28gdGhlIHByZS1pbWFnZSB3YXMgY2FwdHVyZWQgYW5kIGNhbiBiZSByZXN0b3JlZCBvbiByb2xsYmFjay5cbiAgICBhc3NlcnROb25OdWxsYWJsZShvbGRDb250ZW50KTtcbiAgICB0aGlzLnB1c2hVbmRvKGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHByb2Nlc3Moe1xuICAgICAgICBhcHA6IHRoaXMuYXBwLFxuICAgICAgICBuZXdDb250ZW50UHJvdmlkZXI6IG9sZENvbnRlbnQsXG4gICAgICAgIHBhdGhPckZpbGU6IHBhdGgsXG4gICAgICAgIHJlc291cmNlTG9ja0NvbXBvbmVudDogbnVsbFxuICAgICAgfSk7XG4gICAgICAvLyBBIGNvbnN1bWVyIG1heSBoYXZlIGVkaXRlZCB0aGlzIG5vdGUgdGhyb3VnaCB0aGUgZWRpdG9yLCBsZWF2aW5nIGEgZGlydHkgYnVmZmVyLlxuICAgICAgLy8gSXRzIHBlbmRpbmcgYXV0b3NhdmUgY291bGQgcmUtd3JpdGUgdGhhdCBzdGFsZSBidWZmZXIgb3ZlciB0aGUgZGlzayByZXN0b3JlIGFib3ZlIGFuZCBjbG9iYmVyIGl0LlxuICAgICAgLy8gUmVzZXR0aW5nIHRoZSBvcGVuIGVkaXRvcidzIGJ1ZmZlciB0byB0aGUgcmVzdG9yZWQgY29udGVudCBrZWVwcyBpdHMgbmV4dCBzYXZlIGEgbm8tb3AuXG4gICAgICAvLyBPbmx5IHRoZSB2aWV3IHN0aWxsIHNob3dpbmcgdGhpcyBwYXRoIGlzIHRvdWNoZWQuXG4gICAgICAvLyBWYXVsdFRyYW5zYWN0aW9uIGFscmVhZHkgZmx1c2hlcyB2aWEgYHNhdmVOb3RlYCwgc28gdGhpcyByZXNldCBpcyBiZWx0LWFuZC1zdXNwZW5kZXJzLlxuICAgICAgc3luY09wZW5FZGl0b3JCdWZmZXJzRm9yUGF0aCh0aGlzLmFwcCwgcGF0aCwgb2xkQ29udGVudCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVuYW1lcyBvciBtb3ZlcyBhIHJlc291cmNlLCByZWNvcmRpbmcgdGhlIHJldmVyc2UgcmVuYW1lIGFzIHRoZSBpbnZlcnNlLlxuICAgKlxuICAgKiBAcGFyYW0gb2xkUGF0aE9yRmlsZSAtIFRoZSByZXNvdXJjZSB0byByZW5hbWUuXG4gICAqIEBwYXJhbSBuZXdQYXRoIC0gVGhlIGRlc2lyZWQgbmV3IHBhdGggKGFuIGF2YWlsYWJsZSBwYXRoIGlzIGNob3NlbiBpZiBpdCBpcyB0YWtlbikuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHJlc29sdmluZyB0byB0aGUgYWN0dWFsIG5ldyBwYXRoLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlbmFtZShvbGRQYXRoT3JGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGUsIG5ld1BhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgdGhpcy5hc3NlcnRPcGVuKCk7XG4gICAgY29uc3Qgb2xkUGF0aCA9IGdldFBhdGgodGhpcy5hcHAsIG9sZFBhdGhPckZpbGUpO1xuICAgIGNvbnN0IGFjdHVhbE5ld1BhdGggPSBhd2FpdCByZW5hbWVTYWZlKHsgYXBwOiB0aGlzLmFwcCwgbmV3UGF0aCwgb2xkUGF0aE9yQWJzdHJhY3RGaWxlOiBvbGRQYXRoT3JGaWxlIH0pO1xuICAgIHRoaXMucHVzaFVuZG8oYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgcmVuYW1lU2FmZSh7IGFwcDogdGhpcy5hcHAsIG5ld1BhdGg6IG9sZFBhdGgsIG9sZFBhdGhPckFic3RyYWN0RmlsZTogYWN0dWFsTmV3UGF0aCB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gYWN0dWFsTmV3UGF0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSb2xscyBiYWNrIHRoZSB0cmFuc2FjdGlvbjogdW5kb2VzIHRoZSBjb21wbGV0ZWQgc3RlcHMgaW4gcmV2ZXJzZSBvcmRlciBhbmQgcmVtb3ZlcyB0aGUgc3RhZ2luZ1xuICAgKiBmb2xkZXIuIElkZW1wb3RlbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgcm9sbGJhY2sgY29tcGxldGVzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJvbGxiYWNrKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnN0YXRlID09PSAncm9sbGVkQmFjaycpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5hc3NlcnROb3RDb21taXR0ZWQoKTtcbiAgICB0aGlzLnN0YXRlID0gJ3JvbGxlZEJhY2snO1xuICAgIGZvciAoY29uc3Qgc3RlcCBvZiBbLi4udGhpcy51bmRvU3RlcHNdLnJldmVyc2UoKSkge1xuICAgICAgYXdhaXQgc3RlcC51bmRvKCk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMucmVtb3ZlU3RhZ2luZ0ZvbGRlcigpO1xuICAgIHRoaXMuZGlzcG9zZU11dGF0aW9uQnlwYXNzKCk7XG4gIH1cblxuICAvKipcbiAgICogUm9sbHMgYmFjayB0aGUgdHJhbnNhY3Rpb24gb24gZGlzcG9zYWwgdW5sZXNzIGl0IHdhcyBhbHJlYWR5IGNvbW1pdHRlZCBvciByb2xsZWQgYmFjay5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09ICdvcGVuJykge1xuICAgICAgYXdhaXQgdGhpcy5yb2xsYmFjaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTb2Z0LWRlbGV0ZXMgYSByZXNvdXJjZSBieSBtb3ZpbmcgaXQgaW50byB0aGUgc3RhZ2luZyBmb2xkZXIsIHJlY29yZGluZyB0aGUgbW92ZS1iYWNrIGFzIHRoZVxuICAgKiBpbnZlcnNlLiBUaGUgcmVhbCB0cmFzaCBoYXBwZW5zIG9uIHtAbGluayBWYXVsdFRyYW5zYWN0aW9uLmNvbW1pdH0uIEEgbm8tb3AgaWYgdGhlIHJlc291cmNlIGRvZXNcbiAgICogbm90IGV4aXN0LlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIHJlc291cmNlIHRvIHRyYXNoLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHJlc291cmNlIGhhcyBiZWVuIHN0YWdlZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyB0cmFzaChwYXRoT3JGaWxlOiBQYXRoT3JBYnN0cmFjdEZpbGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmFzc2VydE9wZW4oKTtcbiAgICBjb25zdCBmaWxlID0gZ2V0QWJzdHJhY3RGaWxlT3JOdWxsKHsgYXBwOiB0aGlzLmFwcCwgcGF0aE9yRmlsZSB9KTtcbiAgICBpZiAoIWZpbGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgb3JpZ2luYWxQYXRoID0gZmlsZS5wYXRoO1xuICAgIGF3YWl0IHRoaXMuZW5zdXJlU3RhZ2luZ0ZvbGRlcigpO1xuICAgIGNvbnN0IHN0YWdlZFBhdGggPSBhd2FpdCB0aGlzLmdldEF2YWlsYWJsZVN0YWdlZFBhdGgoZmlsZS5uYW1lKTtcbiAgICBjb25zdCBhZGFwdGVyID0gdGhpcy5hcHAudmF1bHQuYWRhcHRlcjtcbiAgICAvLyBNb3ZlIHRocm91Z2ggdGhlIGFkYXB0ZXIsIG5vdCBgdmF1bHQucmVuYW1lYDogdGhlIHN0YWdpbmcgZm9sZGVyIGlzIGRvdC1wcmVmaXhlZCBhbmQgdGhlcmVmb3JlXG4gICAgLy8gVW50cmFja2VkLCBzbyBhIGB2YXVsdC4qYCBtb3ZlIGNhbm5vdCB0YXJnZXQgaXQgKG5vciBzaG91bGQgaXQgcmV3cml0ZSBsaW5rcyB0byBhIHNvZnQtZGVsZXRlKS5cbiAgICBhd2FpdCBhZGFwdGVyLnJlbmFtZShvcmlnaW5hbFBhdGgsIHN0YWdlZFBhdGgpO1xuICAgIHRoaXMuc3RhZ2VkVHJhc2hQYXRocy5wdXNoKHN0YWdlZFBhdGgpO1xuICAgIHRoaXMucHVzaFVuZG8oYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKGF3YWl0IGFkYXB0ZXIuZXhpc3RzKHN0YWdlZFBhdGgpKSB7XG4gICAgICAgIGF3YWl0IGFkYXB0ZXIucmVuYW1lKHN0YWdlZFBhdGgsIG9yaWdpbmFsUGF0aCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzc2VydE5vdENvbW1pdHRlZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gJ2NvbW1pdHRlZCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHJvbGwgYmFjayBhIGNvbW1pdHRlZCB0cmFuc2FjdGlvbi4nKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzc2VydE9wZW4oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09ICdvcGVuJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgbXV0YXRlIGEgJHt0aGlzLnN0YXRlfSB0cmFuc2FjdGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRpc3Bvc2VNdXRhdGlvbkJ5cGFzcygpOiB2b2lkIHtcbiAgICB0aGlzLm11dGF0aW9uQnlwYXNzPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgdGhpcy5tdXRhdGlvbkJ5cGFzcyA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGVuc3VyZVN0YWdpbmdGb2xkZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuaGFzU3RhZ2luZ0ZvbGRlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhZGFwdGVyID0gdGhpcy5hcHAudmF1bHQuYWRhcHRlcjtcbiAgICBpZiAoIWF3YWl0IGFkYXB0ZXIuZXhpc3RzKHRoaXMuc3RhZ2luZ0ZvbGRlclBhdGgpKSB7XG4gICAgICBhd2FpdCBhZGFwdGVyLm1rZGlyKHRoaXMuc3RhZ2luZ0ZvbGRlclBhdGgpO1xuICAgIH1cbiAgICB0aGlzLmhhc1N0YWdpbmdGb2xkZXIgPSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRBdmFpbGFibGVTdGFnZWRQYXRoKG5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgYWRhcHRlciA9IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXI7XG4gICAgY29uc3QgZG90SW5kZXggPSBuYW1lLmxhc3RJbmRleE9mKCcuJyk7XG4gICAgY29uc3QgaGFzRXh0ZW5zaW9uID0gZG90SW5kZXggPiAwO1xuICAgIGNvbnN0IGJhc2VOYW1lID0gaGFzRXh0ZW5zaW9uID8gbmFtZS5zbGljZSgwLCBkb3RJbmRleCkgOiBuYW1lO1xuICAgIGNvbnN0IGV4dGVuc2lvbiA9IGhhc0V4dGVuc2lvbiA/IG5hbWUuc2xpY2UoZG90SW5kZXgpIDogJyc7XG4gICAgbGV0IGNhbmRpZGF0ZSA9IGAke3RoaXMuc3RhZ2luZ0ZvbGRlclBhdGh9LyR7bmFtZX1gO1xuICAgIGxldCBjb3VudGVyID0gMTtcbiAgICB3aGlsZSAoYXdhaXQgYWRhcHRlci5leGlzdHMoY2FuZGlkYXRlKSkge1xuICAgICAgY2FuZGlkYXRlID0gYCR7dGhpcy5zdGFnaW5nRm9sZGVyUGF0aH0vJHtiYXNlTmFtZX0gJHtjb3VudGVyLnRvU3RyaW5nKCl9JHtleHRlbnNpb259YDtcbiAgICAgIGNvdW50ZXIrKztcbiAgICB9XG4gICAgcmV0dXJuIGNhbmRpZGF0ZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFyZERlbGV0ZShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmaWxlID0gZ2V0QWJzdHJhY3RGaWxlT3JOdWxsKHsgYXBwOiB0aGlzLmFwcCwgcGF0aE9yRmlsZTogcGF0aCB9KTtcbiAgICBpZiAoZmlsZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9ic2lkaWFubWQvcHJlZmVyLWZpbGUtbWFuYWdlci10cmFzaC1maWxlIC0tIFVuZG9pbmcgYSB0cmFuc2FjdGlvbi1sb2NhbCBjcmVhdGUgbXVzdCB2YW5pc2ggaXQgZW50aXJlbHksIG5vdCBsYW5kIGl0IGluIHRoZSB1c2VyJ3MgdHJhc2guXG4gICAgICBhd2FpdCB0aGlzLmFwcC52YXVsdC5kZWxldGUoZmlsZSwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwdXNoVW5kbyh1bmRvOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogdm9pZCB7XG4gICAgdGhpcy51bmRvU3RlcHMucHVzaCh7IHVuZG8gfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlbW92ZVN0YWdpbmdGb2xkZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmhhc1N0YWdpbmdGb2xkZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5oYXNTdGFnaW5nRm9sZGVyID0gZmFsc2U7XG4gICAgY29uc3QgYWRhcHRlciA9IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXI7XG4gICAgaWYgKGF3YWl0IGFkYXB0ZXIuZXhpc3RzKHRoaXMuc3RhZ2luZ0ZvbGRlclBhdGgpKSB7XG4gICAgICBhd2FpdCBhZGFwdGVyLnJtZGlyKHRoaXMuc3RhZ2luZ0ZvbGRlclBhdGgsIHRydWUpO1xuICAgIH1cbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBMEJBLHlCQUFrQztBQUNsQyxvQkFBNkM7QUFDN0Ms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
|
|
@@ -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 = "84.
|
|
24
|
+
const LIBRARY_VERSION = "84.1.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.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 animation: obsidian-dev-utils-minimized-modal-bar-pulse 2s ease-in-out infinite;\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 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 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 .obsidian-dev-utils.cancel-button {\n display: block;\n margin-top: var(--size-4-2);\n width: fit-content;\n}\n\n.obsidian-dev-utils.plugin-settings-tab a:focus {\n outline: 2px solid var(--link-color);\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 {\n box-shadow: 0 0 0 2px var(--text-error);\n}\n.obsidian-dev-utils input.metadata-input-text:active:invalid, .obsidian-dev-utils input.metadata-input-text:focus-visible:invalid, .obsidian-dev-utils input.metadata-input-text:focus:invalid,\n.obsidian-dev-utils input[type=date]:active:invalid,\n.obsidian-dev-utils input[type=date]:focus-visible:invalid,\n.obsidian-dev-utils input[type=date]:focus:invalid,\n.obsidian-dev-utils input[type=datetime-local]:active:invalid,\n.obsidian-dev-utils input[type=datetime-local]:focus-visible:invalid,\n.obsidian-dev-utils input[type=datetime-local]:focus:invalid,\n.obsidian-dev-utils input[type=email]:active:invalid,\n.obsidian-dev-utils input[type=email]:focus-visible:invalid,\n.obsidian-dev-utils input[type=email]:focus:invalid,\n.obsidian-dev-utils input[type=number]:active:invalid,\n.obsidian-dev-utils input[type=number]:focus-visible:invalid,\n.obsidian-dev-utils input[type=number]:focus:invalid,\n.obsidian-dev-utils input[type=password]:active:invalid,\n.obsidian-dev-utils input[type=password]:focus-visible:invalid,\n.obsidian-dev-utils input[type=password]:focus:invalid,\n.obsidian-dev-utils input[type=search]:active:invalid,\n.obsidian-dev-utils input[type=search]:focus-visible:invalid,\n.obsidian-dev-utils input[type=search]:focus:invalid,\n.obsidian-dev-utils input[type=text]:active:invalid,\n.obsidian-dev-utils input[type=text]:focus-visible:invalid,\n.obsidian-dev-utils input[type=text]:focus:invalid,\n.obsidian-dev-utils textarea:active:invalid,\n.obsidian-dev-utils textarea:focus-visible:invalid,\n.obsidian-dev-utils textarea:focus:invalid {\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/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;;;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;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;;ACvEJ;EACE;EACA;;;ACFF;AAAA;AAAA;EAGE;EACA;;AAEA;AAAA;AAAA;EACE;EACA;;;ACTN;EACE;EACA;EACA;EACA;;AAIA;EACE;EACA;EACA;;;ACVF;EACE;;;ACDF;EACE;;;ACON;EACE;;;ACTE;EACE;;;ACEJ;EAJA;;AAoBI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EApBJ;;AA0BA;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.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%20animation:%20obsidian-dev-utils-minimized-modal-bar-pulse%202s%20ease-in-out%20infinite;%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%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%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%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.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.obsidian-dev-utils%20%7B%5Cn%20%20:invalid%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%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,
|
|
@@ -4,7 +4,27 @@
|
|
|
4
4
|
*
|
|
5
5
|
* This module provides utility functions for working with markdown editors in Obsidian
|
|
6
6
|
*/
|
|
7
|
-
import type { Editor } from 'obsidian';
|
|
7
|
+
import type { App, Editor } from 'obsidian';
|
|
8
|
+
import type { PathOrFile } from './file-system.mjs';
|
|
9
|
+
/**
|
|
10
|
+
* Overwrites the buffer of every open {@link MarkdownView} currently showing the given path so that
|
|
11
|
+
* it reflects `content`, in any window or popout.
|
|
12
|
+
*
|
|
13
|
+
* This is the fix for a subtle data-loss window: when a note is open in an editor with a **dirty
|
|
14
|
+
* buffer** (a pending, not-yet-saved edit) and its file content is rewritten on disk out from under
|
|
15
|
+
* the editor, the editor's next autosave re-writes its stale buffer and clobbers the on-disk content.
|
|
16
|
+
* A caller that restores a file's content on disk (e.g. rolling back a transaction) must also reset
|
|
17
|
+
* the open editor's buffer to the same content, so its next save is a no-op instead of a clobber.
|
|
18
|
+
*
|
|
19
|
+
* Only the view whose {@link MarkdownView.file} still matches `pathOrFile` is touched — if the editor
|
|
20
|
+
* has since navigated to another note, it is left alone. The buffer is replaced only when it actually
|
|
21
|
+
* differs from `content`, so a clean editor already in sync is not disturbed (no cursor reset).
|
|
22
|
+
*
|
|
23
|
+
* @param app - The Obsidian app instance.
|
|
24
|
+
* @param pathOrFile - The path or file whose open editors should be synchronized.
|
|
25
|
+
* @param content - The content to overwrite each matching editor's buffer with.
|
|
26
|
+
*/
|
|
27
|
+
export declare function syncOpenEditorBuffersForPath(app: App, pathOrFile: PathOrFile, content: string): void;
|
|
8
28
|
/**
|
|
9
29
|
* Toggles the read-only state of a single CodeMirror instance — the low-level primitive behind
|
|
10
30
|
* editor locking.
|
|
@@ -26,8 +26,26 @@ import {
|
|
|
26
26
|
EditorState,
|
|
27
27
|
StateEffect
|
|
28
28
|
} from "@codemirror/state";
|
|
29
|
+
import { ViewType } from "@obsidian-typings/obsidian-public-latest/implementations";
|
|
30
|
+
import { MarkdownView } from "obsidian";
|
|
29
31
|
import { castTo } from "../object-utils.mjs";
|
|
32
|
+
import { getPath } from "./file-system.mjs";
|
|
30
33
|
const compartmentByCodeMirror = /* @__PURE__ */ new WeakMap();
|
|
34
|
+
function syncOpenEditorBuffersForPath(app, pathOrFile, content) {
|
|
35
|
+
const path = getPath(app, pathOrFile);
|
|
36
|
+
for (const leaf of app.workspace.getLeavesOfType(ViewType.Markdown)) {
|
|
37
|
+
const view = leaf.view;
|
|
38
|
+
if (!(view instanceof MarkdownView)) {
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
if (view.file?.path !== path) {
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
if (view.editor.getValue() !== content) {
|
|
45
|
+
view.editor.setValue(content);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
31
49
|
function toggleEditorReadOnly(editor, isReadOnly) {
|
|
32
50
|
const compartment = ensureCompartment(editor);
|
|
33
51
|
editor.cm.dispatch({
|
|
@@ -48,6 +66,7 @@ function ensureCompartment(editor) {
|
|
|
48
66
|
return compartment;
|
|
49
67
|
}
|
|
50
68
|
export {
|
|
69
|
+
syncOpenEditorBuffersForPath,
|
|
51
70
|
toggleEditorReadOnly
|
|
52
71
|
};
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2VkaXRvci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHV0aWxpdHkgZnVuY3Rpb25zIGZvciB3b3JraW5nIHdpdGggbWFya2Rvd24gZWRpdG9ycyBpbiBPYnNpZGlhblxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBFZGl0b3Jcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQge1xuICBDb21wYXJ0bWVudCxcbiAgRWRpdG9yU3RhdGUsXG4gIFN0YXRlRWZmZWN0XG59IGZyb20gJ0Bjb2RlbWlycm9yL3N0YXRlJztcbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnQG9ic2lkaWFuLXR5cGluZ3Mvb2JzaWRpYW4tcHVibGljLWxhdGVzdC9pbXBsZW1lbnRhdGlvbnMnO1xuaW1wb3J0IHsgTWFya2Rvd25WaWV3IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IFBhdGhPckZpbGUgfSBmcm9tICcuL2ZpbGUtc3lzdGVtLnRzJztcblxuaW1wb3J0IHsgY2FzdFRvIH0gZnJvbSAnLi4vb2JqZWN0LXV0aWxzLnRzJztcbmltcG9ydCB7IGdldFBhdGggfSBmcm9tICcuL2ZpbGUtc3lzdGVtLnRzJztcblxuY29uc3QgY29tcGFydG1lbnRCeUNvZGVNaXJyb3IgPSBuZXcgV2Vha01hcDxFZGl0b3JbJ2NtJ10sIENvbXBhcnRtZW50PigpO1xuXG4vKipcbiAqIE92ZXJ3cml0ZXMgdGhlIGJ1ZmZlciBvZiBldmVyeSBvcGVuIHtAbGluayBNYXJrZG93blZpZXd9IGN1cnJlbnRseSBzaG93aW5nIHRoZSBnaXZlbiBwYXRoIHNvIHRoYXRcbiAqIGl0IHJlZmxlY3RzIGBjb250ZW50YCwgaW4gYW55IHdpbmRvdyBvciBwb3BvdXQuXG4gKlxuICogVGhpcyBpcyB0aGUgZml4IGZvciBhIHN1YnRsZSBkYXRhLWxvc3Mgd2luZG93OiB3aGVuIGEgbm90ZSBpcyBvcGVuIGluIGFuIGVkaXRvciB3aXRoIGEgKipkaXJ0eVxuICogYnVmZmVyKiogKGEgcGVuZGluZywgbm90LXlldC1zYXZlZCBlZGl0KSBhbmQgaXRzIGZpbGUgY29udGVudCBpcyByZXdyaXR0ZW4gb24gZGlzayBvdXQgZnJvbSB1bmRlclxuICogdGhlIGVkaXRvciwgdGhlIGVkaXRvcidzIG5leHQgYXV0b3NhdmUgcmUtd3JpdGVzIGl0cyBzdGFsZSBidWZmZXIgYW5kIGNsb2JiZXJzIHRoZSBvbi1kaXNrIGNvbnRlbnQuXG4gKiBBIGNhbGxlciB0aGF0IHJlc3RvcmVzIGEgZmlsZSdzIGNvbnRlbnQgb24gZGlzayAoZS5nLiByb2xsaW5nIGJhY2sgYSB0cmFuc2FjdGlvbikgbXVzdCBhbHNvIHJlc2V0XG4gKiB0aGUgb3BlbiBlZGl0b3IncyBidWZmZXIgdG8gdGhlIHNhbWUgY29udGVudCwgc28gaXRzIG5leHQgc2F2ZSBpcyBhIG5vLW9wIGluc3RlYWQgb2YgYSBjbG9iYmVyLlxuICpcbiAqIE9ubHkgdGhlIHZpZXcgd2hvc2Uge0BsaW5rIE1hcmtkb3duVmlldy5maWxlfSBzdGlsbCBtYXRjaGVzIGBwYXRoT3JGaWxlYCBpcyB0b3VjaGVkIFx1MjAxNCBpZiB0aGUgZWRpdG9yXG4gKiBoYXMgc2luY2UgbmF2aWdhdGVkIHRvIGFub3RoZXIgbm90ZSwgaXQgaXMgbGVmdCBhbG9uZS4gVGhlIGJ1ZmZlciBpcyByZXBsYWNlZCBvbmx5IHdoZW4gaXQgYWN0dWFsbHlcbiAqIGRpZmZlcnMgZnJvbSBgY29udGVudGAsIHNvIGEgY2xlYW4gZWRpdG9yIGFscmVhZHkgaW4gc3luYyBpcyBub3QgZGlzdHVyYmVkIChubyBjdXJzb3IgcmVzZXQpLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIHdob3NlIG9wZW4gZWRpdG9ycyBzaG91bGQgYmUgc3luY2hyb25pemVkLlxuICogQHBhcmFtIGNvbnRlbnQgLSBUaGUgY29udGVudCB0byBvdmVyd3JpdGUgZWFjaCBtYXRjaGluZyBlZGl0b3IncyBidWZmZXIgd2l0aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN5bmNPcGVuRWRpdG9yQnVmZmVyc0ZvclBhdGgoYXBwOiBBcHAsIHBhdGhPckZpbGU6IFBhdGhPckZpbGUsIGNvbnRlbnQ6IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCBwYXRoID0gZ2V0UGF0aChhcHAsIHBhdGhPckZpbGUpO1xuICBmb3IgKGNvbnN0IGxlYWYgb2YgYXBwLndvcmtzcGFjZS5nZXRMZWF2ZXNPZlR5cGUoVmlld1R5cGUuTWFya2Rvd24pKSB7XG4gICAgY29uc3QgdmlldyA9IGxlYWYudmlldztcbiAgICBpZiAoISh2aWV3IGluc3RhbmNlb2YgTWFya2Rvd25WaWV3KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmICh2aWV3LmZpbGU/LnBhdGggIT09IHBhdGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAodmlldy5lZGl0b3IuZ2V0VmFsdWUoKSAhPT0gY29udGVudCkge1xuICAgICAgdmlldy5lZGl0b3Iuc2V0VmFsdWUoY29udGVudCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVG9nZ2xlcyB0aGUgcmVhZC1vbmx5IHN0YXRlIG9mIGEgc2luZ2xlIENvZGVNaXJyb3IgaW5zdGFuY2UgXHUyMDE0IHRoZSBsb3ctbGV2ZWwgcHJpbWl0aXZlIGJlaGluZFxuICogZWRpdG9yIGxvY2tpbmcuXG4gKlxuICogV2hlbiByZWFkLW9ubHksIHRoZSBlZGl0b3Igc3RheXMgZm9jdXNhYmxlIGFuZCBpbnRlcmFjdGl2ZSAoc2VsZWN0aW9uLCBjb3B5LCBhbmQgYXBwIGhvdGtleXMgc3VjaFxuICogYXMgdGhlIGNvbW1hbmQgcGFsZXR0ZSBrZWVwIHdvcmtpbmcpIFx1MjAxNCBvbmx5IGRvY3VtZW50IGVkaXRzIGFyZSBwcmV2ZW50ZWQsIHZpYSB0aGUgQ29kZU1pcnJvclxuICogYHJlYWRPbmx5YCBzdGF0ZS5cbiAqXG4gKiBUaGlzIHRvZ2dsZXMgT05FIENvZGVNaXJyb3IgaW5zdGFuY2UsIG5vdCBcImEgZmlsZVwiOiBhbiBPYnNpZGlhbiB7QGxpbmsgRWRpdG9yfSBpcyByZXVzZWQgYXMgaXRzXG4gKiBsZWFmIG5hdmlnYXRlcyBiZXR3ZWVuIG5vdGVzLCBzbyB0aGlzIHByaW1pdGl2ZSBkb2VzIG5vdCBmb2xsb3cgYSBub3RlIGFyb3VuZC4gVG8gbG9jayBhIG5vdGVcbiAqIGFjcm9zcyBldmVyeSBlZGl0b3IgdGhhdCBzaG93cyBpdCAoY3VycmVudCBhbmQgZnV0dXJlLCBpbiBhbnkgd2luZG93KSwgdXNlIGBsb2NrUmVzb3VyY2VGb3JQYXRoYFxuICogZnJvbSBgLi9yZXNvdXJjZS1sb2NrLnRzYC5cbiAqXG4gKiBAcGFyYW0gZWRpdG9yIC0gVGhlIGVkaXRvciB3aG9zZSBDb2RlTWlycm9yIGluc3RhbmNlIHRvIHRvZ2dsZS5cbiAqIEBwYXJhbSBpc1JlYWRPbmx5IC0gYHRydWVgIHRvIG1ha2UgdGhlIGVkaXRvciByZWFkLW9ubHksIGBmYWxzZWAgdG8gbWFrZSBpdCBlZGl0YWJsZSBhZ2Fpbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvZ2dsZUVkaXRvclJlYWRPbmx5KGVkaXRvcjogRWRpdG9yLCBpc1JlYWRPbmx5OiBib29sZWFuKTogdm9pZCB7XG4gIGNvbnN0IGNvbXBhcnRtZW50ID0gZW5zdXJlQ29tcGFydG1lbnQoZWRpdG9yKTtcbiAgZWRpdG9yLmNtLmRpc3BhdGNoKHtcbiAgICBlZmZlY3RzOiBjb21wYXJ0bWVudC5yZWNvbmZpZ3VyZShpc1JlYWRPbmx5ID8gRWRpdG9yU3RhdGUucmVhZE9ubHkub2YodHJ1ZSkgOiBbXSlcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGVuc3VyZUNvbXBhcnRtZW50KGVkaXRvcjogRWRpdG9yKTogQ29tcGFydG1lbnQge1xuICAvLyBLZXkgdGhlIGNhY2hlIGJ5IHRoZSBDb2RlTWlycm9yIGluc3RhbmNlLCBub3QgYnkgdGhlIGBFZGl0b3JgIHdyYXBwZXIuXG4gIC8vIEFuIGBFZGl0b3JgIGtlZXBzIGl0cyBpZGVudGl0eSB3aGlsZSBpdHMgdW5kZXJseWluZyBDb2RlTWlycm9yIHZpZXcgaXMgc3dhcHBlZCBvdXQuXG4gIGNvbnN0IGNvZGVNaXJyb3IgPSBlZGl0b3IuY207XG4gIGNvbnN0IGNhY2hlZENvbXBhcnRtZW50ID0gY29tcGFydG1lbnRCeUNvZGVNaXJyb3IuZ2V0KGNvZGVNaXJyb3IpO1xuICAvLyBSZXVzZSB0aGUgY2FjaGVkIGNvbXBhcnRtZW50IG9ubHkgd2hpbGUgaXQgaXMgc3RpbGwgcGFydCBvZiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLlxuICAvLyBBIHZpZXcgY2FuIHNpbGVudGx5IGRyb3AgYW4gYXBwZW5kZWQgY29tcGFydG1lbnQgd2hlbiBpdCByZWJ1aWxkcyBpdHMgc3RhdGUuXG4gIC8vIE9wZW5pbmcgYSBub3RlIGludG8gYSBmcmVzaGx5IGNyZWF0ZWQgbGVhZiBkb2VzIHRoaXM6IGl0IGluc3RhbGxzIHRoZSBjb21wYXJ0bWVudCBtaWQtb3Blbi5cbiAgLy8gVGhlIHN1YnNlcXVlbnQgbG9hZCB0aGVuIHJlcGxhY2VzIHRoZSB3aG9sZSBzdGF0ZSwgdGFraW5nIHRoZSBjb21wYXJ0bWVudCB3aXRoIGl0LlxuICAvLyBUaGVuIGBDb21wYXJ0bWVudC5nZXRgIHJldHVybnMgYHVuZGVmaW5lZGAsIHNpbmNlIHRoZSBjb21wYXJ0bWVudCBpcyBubyBsb25nZXIgY29uZmlndXJlZC5cbiAgLy8gUmUtaW5zdGFsbCBpdCBpbiB0aGF0IGNhc2UsIG9yIGV2ZXJ5IGxhdGVyIGByZWNvbmZpZ3VyZWAgaXMgc2lsZW50bHkgaWdub3JlZCBhbmQgbm90aGluZyBsb2Nrcy5cbiAgLy8gVGhlIGBjYXN0VG9gIGJyaWRnZXMgdGhlIGR1YWwgQ29tbW9uSlMgYW5kIEVTTSBgRWRpdG9yU3RhdGVgIGRlY2xhcmF0aW9ucyBvZiBgQGNvZGVtaXJyb3Ivc3RhdGVgLlxuICAvLyBUaGV5IGFyZSBzdHJ1Y3R1cmFsbHkgaWRlbnRpY2FsLCBidXQgVHlwZVNjcmlwdCB0cmVhdHMgdGhlbSBhcyBub21pbmFsbHkgaW5jb21wYXRpYmxlLlxuICBpZiAoY2FjaGVkQ29tcGFydG1lbnQ/LmdldChjYXN0VG88RWRpdG9yU3RhdGU+KGNvZGVNaXJyb3Iuc3RhdGUpKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGNhY2hlZENvbXBhcnRtZW50O1xuICB9XG5cbiAgY29uc3QgY29tcGFydG1lbnQgPSBuZXcgQ29tcGFydG1lbnQoKTtcbiAgY29tcGFydG1lbnRCeUNvZGVNaXJyb3Iuc2V0KGNvZGVNaXJyb3IsIGNvbXBhcnRtZW50KTtcbiAgLy8gQSBgQ29tcGFydG1lbnRgIG9ubHkgdGFrZXMgZWZmZWN0IG9uY2UgaXQgaXMgcGFydCBvZiB0aGUgZWRpdG9yJ3MgY29uZmlndXJhdGlvbi5cbiAgLy8gVGhlIGNvbXBhcnRtZW50IGlzIGNyZWF0ZWQgbGF6aWx5IGhlcmUsIHNvIGluc3RhbGwgaXQgKGluaXRpYWxseSBlbXB0eSkgdmlhIGBhcHBlbmRDb25maWdgLlxuICBjb2RlTWlycm9yLmRpc3BhdGNoKHtcbiAgICBlZmZlY3RzOiBTdGF0ZUVmZmVjdC5hcHBlbmRDb25maWcub2YoY29tcGFydG1lbnQub2YoW10pKVxuICB9KTtcbiAgcmV0dXJuIGNvbXBhcnRtZW50O1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFXQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLGdCQUFnQjtBQUN6QixTQUFTLG9CQUFvQjtBQUk3QixTQUFTLGNBQWM7QUFDdkIsU0FBUyxlQUFlO0FBRXhCLE1BQU0sMEJBQTBCLG9CQUFJLFFBQW1DO0FBb0JoRSxTQUFTLDZCQUE2QixLQUFVLFlBQXdCLFNBQXVCO0FBQ3BHLFFBQU0sT0FBTyxRQUFRLEtBQUssVUFBVTtBQUNwQyxhQUFXLFFBQVEsSUFBSSxVQUFVLGdCQUFnQixTQUFTLFFBQVEsR0FBRztBQUNuRSxVQUFNLE9BQU8sS0FBSztBQUNsQixRQUFJLEVBQUUsZ0JBQWdCLGVBQWU7QUFDbkM7QUFBQSxJQUNGO0FBQ0EsUUFBSSxLQUFLLE1BQU0sU0FBUyxNQUFNO0FBQzVCO0FBQUEsSUFDRjtBQUNBLFFBQUksS0FBSyxPQUFPLFNBQVMsTUFBTSxTQUFTO0FBQ3RDLFdBQUssT0FBTyxTQUFTLE9BQU87QUFBQSxJQUM5QjtBQUFBLEVBQ0Y7QUFDRjtBQWtCTyxTQUFTLHFCQUFxQixRQUFnQixZQUEyQjtBQUM5RSxRQUFNLGNBQWMsa0JBQWtCLE1BQU07QUFDNUMsU0FBTyxHQUFHLFNBQVM7QUFBQSxJQUNqQixTQUFTLFlBQVksWUFBWSxhQUFhLFlBQVksU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7QUFBQSxFQUNsRixDQUFDO0FBQ0g7QUFFQSxTQUFTLGtCQUFrQixRQUE2QjtBQUd0RCxRQUFNLGFBQWEsT0FBTztBQUMxQixRQUFNLG9CQUFvQix3QkFBd0IsSUFBSSxVQUFVO0FBU2hFLE1BQUksbUJBQW1CLElBQUksT0FBb0IsV0FBVyxLQUFLLENBQUMsTUFBTSxRQUFXO0FBQy9FLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxjQUFjLElBQUksWUFBWTtBQUNwQywwQkFBd0IsSUFBSSxZQUFZLFdBQVc7QUFHbkQsYUFBVyxTQUFTO0FBQUEsSUFDbEIsU0FBUyxZQUFZLGFBQWEsR0FBRyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFBQSxFQUN6RCxDQUFDO0FBQ0QsU0FBTztBQUNUOyIsCiAgIm5hbWVzIjogW10KfQo=
|