obsidian-dev-utils 86.1.3 → 87.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -0
- package/dist/lib/cjs/__merged.cjs +34 -3
- package/dist/lib/cjs/__merged.d.cts +5 -4
- package/dist/lib/cjs/async-events.cjs +32 -3
- package/dist/lib/cjs/async-events.d.cts +63 -0
- package/dist/lib/cjs/disposable.cjs +103 -115
- package/dist/lib/cjs/disposable.d.cts +81 -57
- package/dist/lib/cjs/generated-during-build.cjs +2 -2
- package/dist/lib/cjs/obsidian/command-handlers/command-handler-component.cjs +48 -21
- package/dist/lib/cjs/obsidian/command-handlers/command-handler-component.d.cts +11 -8
- package/dist/lib/cjs/obsidian/command-handlers/open-demo-vault-command-handler.cjs +1 -1
- package/dist/lib/cjs/obsidian/community-plugins.cjs +109 -9
- package/dist/lib/cjs/obsidian/community-plugins.d.cts +175 -3
- package/dist/lib/cjs/obsidian/components/component-ex.cjs +18 -1
- package/dist/lib/cjs/obsidian/components/component-ex.d.cts +12 -0
- package/dist/lib/cjs/obsidian/components/menu-event-registrar-component.cjs +8 -4
- package/dist/lib/cjs/obsidian/components/menu-event-registrar-component.d.cts +7 -3
- package/dist/lib/cjs/obsidian/components/plugin-notice-component.cjs +80 -38
- package/dist/lib/cjs/obsidian/components/plugin-notice-component.d.cts +81 -19
- package/dist/lib/cjs/obsidian/css-class.cjs +4 -2
- package/dist/lib/cjs/obsidian/css-class.d.cts +12 -3
- package/dist/lib/cjs/obsidian/desktop-demo-vault-opener.cjs +2 -7
- package/dist/lib/cjs/obsidian/events.cjs +165 -0
- package/dist/lib/cjs/obsidian/events.d.cts +98 -0
- package/dist/lib/cjs/obsidian/i18n/locales/en.cjs +1 -2
- package/dist/lib/cjs/obsidian/i18n/locales/en.d.cts +0 -1
- package/dist/lib/cjs/obsidian/i18n/locales/translations-map.d.cts +0 -1
- package/dist/lib/cjs/obsidian/index.cjs +4 -1
- package/dist/lib/cjs/obsidian/index.d.cts +1 -0
- package/dist/lib/cjs/obsidian/menu-event-registrar.cjs +1 -1
- package/dist/lib/cjs/obsidian/menu-event-registrar.d.cts +7 -3
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/change-extension-plugin.cjs +31 -33
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/change-extension-plugin.d.cts +11 -0
- package/dist/lib/cjs/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.cjs +39 -52
- package/dist/lib/cjs/script-utils/linters/eslint-no-restricted-syntax.cjs +1 -5
- package/dist/lib/cjs/type.cjs +31 -12
- package/dist/lib/cjs/type.d.cts +56 -36
- package/dist/lib/esm/__merged.d.mts +5 -4
- package/dist/lib/esm/__merged.mjs +39 -5
- package/dist/lib/esm/async-events.d.mts +63 -0
- package/dist/lib/esm/async-events.mjs +29 -2
- package/dist/lib/esm/disposable.d.mts +81 -57
- package/dist/lib/esm/disposable.mjs +101 -115
- package/dist/lib/esm/generated-during-build.mjs +2 -2
- package/dist/lib/esm/obsidian/command-handlers/command-handler-component.d.mts +11 -8
- package/dist/lib/esm/obsidian/command-handlers/command-handler-component.mjs +49 -22
- package/dist/lib/esm/obsidian/command-handlers/open-demo-vault-command-handler.mjs +1 -1
- package/dist/lib/esm/obsidian/community-plugins.d.mts +175 -3
- package/dist/lib/esm/obsidian/community-plugins.mjs +100 -8
- package/dist/lib/esm/obsidian/components/component-ex.d.mts +12 -0
- package/dist/lib/esm/obsidian/components/component-ex.mjs +18 -1
- package/dist/lib/esm/obsidian/components/menu-event-registrar-component.d.mts +7 -3
- package/dist/lib/esm/obsidian/components/menu-event-registrar-component.mjs +8 -4
- package/dist/lib/esm/obsidian/components/plugin-notice-component.d.mts +81 -19
- package/dist/lib/esm/obsidian/components/plugin-notice-component.mjs +80 -38
- package/dist/lib/esm/obsidian/css-class.d.mts +12 -3
- package/dist/lib/esm/obsidian/css-class.mjs +4 -2
- package/dist/lib/esm/obsidian/desktop-demo-vault-opener.mjs +5 -7
- package/dist/lib/esm/obsidian/events.d.mts +98 -0
- package/dist/lib/esm/obsidian/events.mjs +55 -0
- package/dist/lib/esm/obsidian/i18n/locales/en.d.mts +0 -1
- package/dist/lib/esm/obsidian/i18n/locales/en.mjs +1 -2
- package/dist/lib/esm/obsidian/i18n/locales/translations-map.d.mts +0 -1
- package/dist/lib/esm/obsidian/index.d.mts +1 -0
- package/dist/lib/esm/obsidian/index.mjs +3 -1
- package/dist/lib/esm/obsidian/menu-event-registrar.d.mts +7 -3
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/change-extension-plugin.d.mts +11 -0
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/change-extension-plugin.mjs +29 -32
- package/dist/lib/esm/script-utils/bundlers/esbuild-impl/copy-to-obsidian-plugins-folder-plugin.mjs +40 -55
- package/dist/lib/esm/script-utils/linters/eslint-no-restricted-syntax.mjs +1 -5
- package/dist/lib/esm/type.d.mts +56 -36
- package/dist/lib/esm/type.mjs +30 -11
- package/dist/styles.css +5 -18
- package/obsidian/events/package.json +6 -0
- package/package.json +18 -15
|
@@ -107,6 +107,23 @@ class ComponentEx extends Component {
|
|
|
107
107
|
onloadAsync() {
|
|
108
108
|
return noopAsyncSingletonPromise;
|
|
109
109
|
}
|
|
110
|
+
/**
|
|
111
|
+
* Registers a {@link Disposable} so it is disposed when this component unloads, and returns it unchanged.
|
|
112
|
+
*
|
|
113
|
+
* The recurring "tie a disposable to the component's lifecycle, then keep using it" idiom: the disposable is
|
|
114
|
+
* disposed on {@link Component.unload} (or earlier, if the caller disposes it directly — dispose is expected to
|
|
115
|
+
* be idempotent). Guard with {@link ensureLoaded} at the call site when registering before load would be unsafe.
|
|
116
|
+
*
|
|
117
|
+
* @typeParam TDisposable - The type of the disposable.
|
|
118
|
+
* @param disposable - The disposable to register.
|
|
119
|
+
* @returns The same disposable, for chaining.
|
|
120
|
+
*/
|
|
121
|
+
registerDisposable(disposable) {
|
|
122
|
+
this.register(() => {
|
|
123
|
+
disposable[Symbol.dispose]();
|
|
124
|
+
});
|
|
125
|
+
return disposable;
|
|
126
|
+
}
|
|
110
127
|
/**
|
|
111
128
|
* Removes a child component.
|
|
112
129
|
*
|
|
@@ -250,4 +267,4 @@ class ComponentEx extends Component {
|
|
|
250
267
|
export {
|
|
251
268
|
ComponentEx
|
|
252
269
|
};
|
|
253
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbXBvbmVudHMvY29tcG9uZW50LWV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRXh0ZW5kZWQgQ29tcG9uZW50XG4gKi9cblxuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBFcnJvcldyYXBwZXIgfSBmcm9tICcuLi8uLi9lcnJvci50cyc7XG5pbXBvcnQge1xuICBub29wLFxuICBub29wQXN5bmNTaW5nbGV0b25Qcm9taXNlXG59IGZyb20gJy4uLy4uL2Z1bmN0aW9uLnRzJztcblxuLyoqXG4gKiBFeHRlbmRlZCBDb21wb25lbnRcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9ic2lkaWFuLWRldi11dGlscy9yZXF1aXJlLWNvbXBvbmVudC1zdWZmaXggLS0gRXh0ZW5kZWQgYmFzZSBjbGFzcy5cbmV4cG9ydCBjbGFzcyBDb21wb25lbnRFeCBleHRlbmRzIENvbXBvbmVudCBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IGNoaWxkcmVuU2V0ID0gbmV3IFNldDxDb21wb25lbnQ+KCk7XG4gIHByaXZhdGUgbG9hZEVycm9yczogRXJyb3JbXSA9IFtdO1xuICBwcml2YXRlIGxvYWRQcm9taXNlOiBudWxsIHwgUHJvbWlzZTx2b2lkPiA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBjaGlsZCBjb21wb25lbnQuXG4gICAqXG4gICAqIE1pcnJvcnMgdGhlIG5hdGl2ZSBgQ29tcG9uZW50LmFkZENoaWxkYCBjb250cmFjdDogaWYgdGhpcyBjb21wb25lbnQgaXMgYWxyZWFkeSBsb2FkZWQsIHRoZSBjaGlsZCBpcyBsb2FkZWRcbiAgICogaW1tZWRpYXRlbHksIHNvIGBjaGlsZC5fbG9hZGVkYCBpcyBzZXQgYmVmb3JlIHRoaXMgbWV0aG9kIHJldHVybnMgZXZlbiB3aGVuIHRoaXMgY29tcG9uZW50IGhhcyBhc3luYyBsb2FkIGxvZ2ljLlxuICAgKiBUaGUgY2hpbGQncyBhc3luYyB0YWlsIChpZiBhbnkpIGlzIHNlcXVlbmNlZCBpbnRvIHRoZSBsb2FkIHByb21pc2Ugc28gYSBsYXRlciB7QGxpbmsgbG9hZFdpdGhQcm9taXNlc30gY2FsbCBhd2FpdHMgaXQuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gVENvbXBvbmVudCAtIFRoZSB0eXBlIG9mIGNvbXBvbmVudCB0byBhZGQuXG4gICAqIEBwYXJhbSBjb21wb25lbnQgLSBUaGUgY29tcG9uZW50IGluc3RhbmNlIHRvIGFkZC5cbiAgICogQHJldHVybnMgVGhlIGFkZGVkIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBhZGRDaGlsZDxUQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50Pihjb21wb25lbnQ6IFRDb21wb25lbnQpOiBUQ29tcG9uZW50IHtcbiAgICB0aGlzLl9jaGlsZHJlbi5wdXNoKGNvbXBvbmVudCk7XG4gICAgdGhpcy5jaGlsZHJlblNldC5hZGQoY29tcG9uZW50KTtcblxuICAgIGlmICh0aGlzLl9sb2FkZWQpIHtcbiAgICAgIHRoaXMuYXBwZW5kRWFnZXJMb2FkU3RlcCh0aGlzLmV4dHJhY3RMb2FkUHJvbWlzYWJsZShjb21wb25lbnQpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29tcG9uZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIHRoZSBjb21wb25lbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIERlc3BpdGUgdGhlIGRlY2xhcmVkIGB2b2lkYCByZXR1cm4gdHlwZSwgdGhpcyBtZXRob2QgcmV0dXJucyBhIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBsb2FkZWQgb3IgYG51bGxgIGlmIHRoZSBjb21wb25lbnQgaXMgZnVsbHkgc3luY2hyb25vdXMuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgbG9hZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fbG9hZGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbG9hZGVkID0gdHJ1ZTtcbiAgICB0aGlzLnJlc2V0TG9hZFN0YXRlKCk7XG5cbiAgICB0aGlzLm9ubG9hZCgpO1xuXG4gICAgY29uc3Qgb25sb2FkQXN5bmNQcm9taXNlID0gdGhpcy5vbmxvYWRBc3luYygpO1xuICAgIGlmIChvbmxvYWRBc3luY1Byb21pc2UgIT09IG5vb3BBc3luY1NpbmdsZXRvblByb21pc2UpIHtcbiAgICAgIHRoaXMuYXBwZW5kRWFnZXJMb2FkU3RlcChvbmxvYWRBc3luY1Byb21pc2UpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy5fY2hpbGRyZW4uc2xpY2UoKSkge1xuICAgICAgdGhpcy5hcHBlbmRTZXF1ZW50aWFsTG9hZFN0ZXAoKCkgPT4gdGhpcy5leHRyYWN0TG9hZFByb21pc2FibGUoY2hpbGQpKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sb2FkUHJvbWlzZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1pbnZhbGlkLXZvaWQtdHlwZSwgbm8tcmVzdHJpY3RlZC1zeW50YXggLS0gV2UgbmVlZCB0byBieXBhc3MgdHlwZSBzeXN0ZW0gdG8gcmV0dXJuIGBQcm9taXNlPHZvaWQ+YC5cbiAgICAgIHJldHVybiB0aGlzLmxvYWRQcm9taXNlIGFzIHVua25vd24gYXMgdm9pZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgdGhlIGNvbXBvbmVudCB3aXRoIHByb21pc2VzLlxuICAgKlxuICAgKiBVbmxpa2Uge0BsaW5rIGxvYWR9LCB0aGlzIG1ldGhvZCBuZXZlciByZWplY3RzIHdpdGggYW4gaW5kaXZpZHVhbCBlcnJvcjogZXZlcnkgZmFpbHVyZSByYWlzZWQgYnkge0BsaW5rIG9ubG9hZEFzeW5jfVxuICAgKiBvciBhIGNoaWxkJ3MgbG9hZCBpcyBjb2xsZWN0ZWQsIGFuZCBvbmNlIGV2ZXJ5dGhpbmcgc2V0dGxlcyB0aGUgcmV0dXJuZWQge0BsaW5rIFByb21pc2V9IHJlamVjdHMgd2l0aCBhIHNpbmdsZVxuICAgKiB7QGxpbmsgQWdncmVnYXRlRXJyb3J9IGhvbGRpbmcgYWxsIG9mIHRoZW0uIE5vbi1gRXJyb3JgIHRocm93YWJsZXMgYXJlIG5vcm1hbGl6ZWQgdmlhIHtAbGluayBFcnJvcldyYXBwZXIuY3JlYXRlfS5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjb21wb25lbnQgYW5kIGl0cyBjaGlsZHJlbiBmaW5pc2ggbG9hZGluZywgcmVqZWN0cyB3aXRoIGFuIHtAbGluayBBZ2dyZWdhdGVFcnJvcn0gaWYgYW55IGxvYWQgc3RlcCBmYWlsZWQsIG9yIGBudWxsYCBpZiB0aGUgY29tcG9uZW50IGFuZCBpdHMgY2hpbGRyZW4gZG9uJ3QgdXNlIGBhc3luY2AgbG9naWMgYW5kIG5vbmUgZmFpbGVkIHN5bmNocm9ub3VzbHkuXG4gICAqL1xuICBwdWJsaWMgbG9hZFdpdGhQcm9taXNlcygpOiBudWxsIHwgUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2FkKCk7XG5cbiAgICBjb25zdCBsb2FkUHJvbWlzZSA9IHRoaXMubG9hZFByb21pc2U7XG4gICAgaWYgKCFsb2FkUHJvbWlzZSkge1xuICAgICAgaWYgKHRoaXMubG9hZEVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgQWdncmVnYXRlRXJyb3IodGhpcy5sb2FkRXJyb3JzKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gbG9hZFByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICBpZiAodGhpcy5sb2FkRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEFnZ3JlZ2F0ZUVycm9yKHRoaXMubG9hZEVycm9ycyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQXN5bmNocm9ub3VzbHkgbG9hZHMgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogT3ZlcnJpZGUgdG8gYWRkIGFzeW5jIGxvYWQgbG9naWMsIHdoaWNoIGlzIGV4ZWN1dGVkIGFmdGVyIHtAbGluayBDb21wb25lbnQub25sb2FkfS5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjb21wb25lbnQgaXMgbG9hZGVkLlxuICAgKi9cbiAgcHVibGljIG9ubG9hZEFzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBub29wQXN5bmNTaW5nbGV0b25Qcm9taXNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBjaGlsZCBjb21wb25lbnQuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gVENvbXBvbmVudCAtIFRoZSB0eXBlIG9mIGNvbXBvbmVudCB0byByZW1vdmUuXG4gICAqIEBwYXJhbSBjb21wb25lbnQgLSBUaGUgY29tcG9uZW50IGluc3RhbmNlIHRvIHJlbW92ZS5cbiAgICogQHJldHVybnMgVGhlIHJlbW92ZWQgY29tcG9uZW50LlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIHJlbW92ZUNoaWxkPFRDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnQ+KGNvbXBvbmVudDogVENvbXBvbmVudCk6IFRDb21wb25lbnQge1xuICAgIHN1cGVyLnJlbW92ZUNoaWxkKGNvbXBvbmVudCk7XG4gICAgdGhpcy5jaGlsZHJlblNldC5kZWxldGUoY29tcG9uZW50KTtcbiAgICByZXR1cm4gY29tcG9uZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3Bvc2VzIG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBwdWJsaWMgW1N5bWJvbC5kaXNwb3NlXSgpOiB2b2lkIHtcbiAgICB0aGlzLnVubG9hZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuc3VyZXMgdGhlIGNvbXBvbmVudCBpcyBsb2FkZWQsIHRocm93aW5nIGlmIGl0IGlzIG5vdC5cbiAgICpcbiAgICogVXNlIHRoaXMgdG8gZ3VhcmQgcHVibGljIG1ldGhvZHMgdGhhdCByZWdpc3RlciB0ZWFyZG93bi1iZWFyaW5nIHJlc291cmNlcyAodmlhIHtAbGluayBDb21wb25lbnQucmVnaXN0ZXJ9LFxuICAgKiB7QGxpbmsgQ29tcG9uZW50LnJlZ2lzdGVyRXZlbnR9LCB7QGxpbmsgQ29tcG9uZW50LnJlZ2lzdGVyRG9tRXZlbnR9LCBldGMuKS4gUmVnaXN0ZXJpbmcgYmVmb3JlIGxvYWQgaXMgdW5zYWZlOlxuICAgKiB7QGxpbmsgQ29tcG9uZW50LnVubG9hZH0gaXMgYSBuby1vcCB3aGlsZSB0aGUgY29tcG9uZW50IGlzIG5vdCBsb2FkZWQsIHNvIGFueSB0ZWFyZG93biByZWdpc3RlcmVkIGJlZm9yZWhhbmQgd291bGRcbiAgICogbmV2ZXIgcnVuIGlmIHRoZSBjb21wb25lbnQgaXMgdW5sb2FkZWQgd2l0aG91dCBmaXJzdCBiZWluZyBsb2FkZWQuXG4gICAqXG4gICAqIEB0aHJvd3MgQW4ge0BsaW5rIEVycm9yfSBpZiB0aGUgY29tcG9uZW50IGlzIG5vdCBsb2FkZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZW5zdXJlTG9hZGVkKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fbG9hZGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbXBvbmVudCBpcyBub3QgbG9hZGVkJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNlcXVlbmNlcyBhbiBhbHJlYWR5LXN0YXJ0ZWQgbG9hZCBzdGVwIGludG8gdGhlIGxvYWQgcHJvbWlzZS5cbiAgICpcbiAgICogVGhlIHN0ZXAgaXMgcHJlc3VtZWQgdG8gaGF2ZSBzdGFydGVkIHN5bmNocm9ub3VzbHkgKHNvIGFueSBgX2xvYWRlZGAgZmxhZyBpdCBzZXRzIGlzIGFscmVhZHkgdmlzaWJsZSk7IG9ubHkgdGhlXG4gICAqIGF3YWl0aW5nIG9mIGl0cyBhc3luYyB0YWlsIGlzIHNlcXVlbmNlZCBoZXJlLlxuICAgKlxuICAgKiBAcGFyYW0gbG9hZFByb21pc2FibGUgLSBUaGUgcmVzdWx0IG9mIGFuIGFscmVhZHktc3RhcnRlZCBsb2FkIHN0ZXAuXG4gICAqL1xuICBwcml2YXRlIGFwcGVuZEVhZ2VyTG9hZFN0ZXAobG9hZFByb21pc2FibGU6IG51bGwgfCBQcm9taXNhYmxlPHZvaWQ+KTogdm9pZCB7XG4gICAgY29uc3QgY2FwdHVyZWQgPSB0aGlzLmNhcHR1cmVTZXR0bGVkKGxvYWRQcm9taXNhYmxlKTtcbiAgICBpZiAoIWNhcHR1cmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcHJldmlvdXMgPSB0aGlzLmxvYWRQcm9taXNlO1xuICAgIHRoaXMuc2V0TG9hZFByb21pc2UocHJldmlvdXMgPyBwcmV2aW91cy50aGVuKCgpID0+IGNhcHR1cmVkKSA6IGNhcHR1cmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXF1ZW5jZXMgYSBkZWZlcnJlZCBsb2FkIHN0ZXAgaW50byB0aGUgbG9hZCBwcm9taXNlLCBydW5uaW5nIGl0IG9ubHkgYWZ0ZXIgcHJldmlvdXNseS1hcHBlbmRlZCBzdGVwcyBzZXR0bGUuXG4gICAqXG4gICAqIEBwYXJhbSBsb2FkUHJvbWlzYWJsZUZuIC0gQSBmdW5jdGlvbiB0aGF0IHN0YXJ0cyB0aGUgbG9hZCBzdGVwIGFuZCByZXR1cm5zIGl0cyByZXN1bHQuXG4gICAqL1xuICBwcml2YXRlIGFwcGVuZFNlcXVlbnRpYWxMb2FkU3RlcChsb2FkUHJvbWlzYWJsZUZuOiAoKSA9PiBudWxsIHwgUHJvbWlzYWJsZTx2b2lkPik6IHZvaWQge1xuICAgIGNvbnN0IHByZXZpb3VzID0gdGhpcy5sb2FkUHJvbWlzZTtcbiAgICBpZiAocHJldmlvdXMpIHtcbiAgICAgIHRoaXMuc2V0TG9hZFByb21pc2UocHJldmlvdXMudGhlbigoKSA9PiB0aGlzLnJ1bkFuZENhcHR1cmUobG9hZFByb21pc2FibGVGbikpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjYXB0dXJlZCA9IHRoaXMuY2FwdHVyZVN5bmMobG9hZFByb21pc2FibGVGbik7XG4gICAgaWYgKGNhcHR1cmVkKSB7XG4gICAgICB0aGlzLnNldExvYWRQcm9taXNlKGNhcHR1cmVkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVjb3JkcyBhIGxvYWQgZmFpbHVyZS5cbiAgICpcbiAgICogQSBmYWlsdXJlIHJhaXNlZCBieSBhIGNoaWxkIHtAbGluayBDb21wb25lbnRFeH0gaXMgaXRzZWxmIGFuIHtAbGluayBBZ2dyZWdhdGVFcnJvcn07IGl0IGlzIHJlY29yZGVkIGFzLWlzIHNvIHRoZVxuICAgKiBncm91cGluZyBieSBjaGlsZCBjb21wb25lbnQgaXMgcHJlc2VydmVkIChvd24gZmFpbHVyZXMgc3RheSBmbGF0LCBjaGlsZC1zdWJ0cmVlIGZhaWx1cmVzIHN0YXkgbmVzdGVkKS5cbiAgICpcbiAgICogQHBhcmFtIGVycm9yIC0gVGhlIHRocm93biB2YWx1ZSB0byByZWNvcmQuXG4gICAqL1xuICBwcml2YXRlIGNhcHR1cmVFcnJvcihlcnJvcjogdW5rbm93bik6IHZvaWQge1xuICAgIHRoaXMubG9hZEVycm9ycy5wdXNoKEVycm9yV3JhcHBlci5jcmVhdGUoZXJyb3IpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcmFwcyBhbiBhbHJlYWR5LXN0YXJ0ZWQgbG9hZCByZXN1bHQgc28gaXQgbmV2ZXIgcmVqZWN0czogYW55IGZhaWx1cmUgaXMgcmVjb3JkZWQgaW50byBgbG9hZEVycm9yc2AuXG4gICAqXG4gICAqIEBwYXJhbSBsb2FkUHJvbWlzYWJsZSAtIFRoZSBsb2FkIHJlc3VsdCB0byBvYnNlcnZlLlxuICAgKiBAcmV0dXJucyBBIG5ldmVyLXJlamVjdGluZyB7QGxpbmsgUHJvbWlzZX0sIG9yIGBudWxsYCBpZiB0aGUgcmVzdWx0IGlzIGZ1bGx5IHN5bmNocm9ub3VzLlxuICAgKi9cbiAgcHJpdmF0ZSBjYXB0dXJlU2V0dGxlZChsb2FkUHJvbWlzYWJsZTogbnVsbCB8IFByb21pc2FibGU8dm9pZD4pOiBudWxsIHwgUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGxvYWRQcm9taXNhYmxlID09PSBudWxsIHx8IGxvYWRQcm9taXNhYmxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobG9hZFByb21pc2FibGUpLnRoZW4obm9vcCwgKGVycm9yOiB1bmtub3duKSA9PiB7XG4gICAgICB0aGlzLmNhcHR1cmVFcnJvcihlcnJvcik7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUnVucyBhIGxvYWQgc3RlcCBzeW5jaHJvbm91c2x5LCByZWNvcmRpbmcgYSBzeW5jaHJvbm91cyB0aHJvdywgYW5kIHdyYXBzIGFueSBhc3luYyB0YWlsIHNvIGl0IG5ldmVyIHJlamVjdHMuXG4gICAqXG4gICAqIEBwYXJhbSBsb2FkUHJvbWlzYWJsZUZuIC0gQSBmdW5jdGlvbiB0aGF0IHN0YXJ0cyB0aGUgbG9hZCBzdGVwIGFuZCByZXR1cm5zIGl0cyByZXN1bHQuXG4gICAqIEByZXR1cm5zIEEgbmV2ZXItcmVqZWN0aW5nIHtAbGluayBQcm9taXNlfSwgb3IgYG51bGxgIGlmIHRoZSBzdGVwIGlzIGZ1bGx5IHN5bmNocm9ub3VzLlxuICAgKi9cbiAgcHJpdmF0ZSBjYXB0dXJlU3luYyhsb2FkUHJvbWlzYWJsZUZuOiAoKSA9PiBudWxsIHwgUHJvbWlzYWJsZTx2b2lkPik6IG51bGwgfCBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgbG9hZFByb21pc2FibGU6IG51bGwgfCBQcm9taXNhYmxlPHZvaWQ+O1xuICAgIHRyeSB7XG4gICAgICBsb2FkUHJvbWlzYWJsZSA9IGxvYWRQcm9taXNhYmxlRm4oKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5jYXB0dXJlRXJyb3IoZXJyb3IpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY2FwdHVyZVNldHRsZWQobG9hZFByb21pc2FibGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0TG9hZFByb21pc2FibGUoY29tcG9uZW50OiBDb21wb25lbnQpOiBudWxsIHwgUHJvbWlzYWJsZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmNoaWxkcmVuU2V0Lmhhcyhjb21wb25lbnQpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKGNvbXBvbmVudCBpbnN0YW5jZW9mIENvbXBvbmVudEV4KSB7XG4gICAgICByZXR1cm4gY29tcG9uZW50LmxvYWRXaXRoUHJvbWlzZXMoKTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1jb25mdXNpbmctdm9pZC1leHByZXNzaW9uLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktdHlwZS1hc3NlcnRpb24gLS0gSXQgY2FuIGJlIGBQcm9taXNlPHZvaWQ+YCBpbiBydW50aW1lLiBXYW50IGV4cGxpY2l0bHkgY2FzdCB0byBzaG93IHdlIGtub3cgaXQgbWF5IGJlIHByb21pc2UsIGRlc3BpdGUgdGhlIGRlY2xhcmVkIHR5cGUgYHZvaWRgLlxuICAgIHJldHVybiBjb21wb25lbnQubG9hZCgpIGFzIFByb21pc2FibGU8dm9pZD47XG4gIH1cblxuICBwcml2YXRlIHJlc2V0TG9hZFN0YXRlKCk6IHZvaWQge1xuICAgIHRoaXMubG9hZEVycm9ycyA9IFtdO1xuICAgIHRoaXMubG9hZFByb21pc2UgPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgYSBkZWZlcnJlZCBsb2FkIHN0ZXAsIHJlY29yZGluZyBhIHN5bmNocm9ub3VzIHRocm93IG9yIGFuIGFzeW5jIHJlamVjdGlvbiB3aXRob3V0IGV2ZXIgcmUtdGhyb3dpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBsb2FkUHJvbWlzYWJsZUZuIC0gQSBmdW5jdGlvbiB0aGF0IHN0YXJ0cyB0aGUgbG9hZCBzdGVwIGFuZCByZXR1cm5zIGl0cyByZXN1bHQuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJ1bkFuZENhcHR1cmUobG9hZFByb21pc2FibGVGbjogKCkgPT4gbnVsbCB8IFByb21pc2FibGU8dm9pZD4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgKGxvYWRQcm9taXNhYmxlRm4oKSA/PyB1bmRlZmluZWQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmNhcHR1cmVFcnJvcihlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRMb2FkUHJvbWlzZShsb2FkUHJvbWlzZTogUHJvbWlzZTx2b2lkPik6IHZvaWQge1xuICAgIGNvbnN0IGxvYWRQcm9taXNlV2l0aFJlc2V0OiBQcm9taXNlPHZvaWQ+ID0gbG9hZFByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICBpZiAodGhpcy5sb2FkUHJvbWlzZSA9PT0gbG9hZFByb21pc2VXaXRoUmVzZXQpIHtcbiAgICAgICAgdGhpcy5sb2FkUHJvbWlzZSA9IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5sb2FkUHJvbWlzZSA9IGxvYWRQcm9taXNlV2l0aFJlc2V0O1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVFBLFNBQVMsaUJBQWlCO0FBRTFCLFNBQVMsb0JBQW9CO0FBQzdCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBTUEsTUFBTSxvQkFBb0IsVUFBZ0M7QUFBQSxFQUM5QyxjQUFjLG9CQUFJLElBQWU7QUFBQSxFQUMxQyxhQUFzQixDQUFDO0FBQUEsRUFDdkIsY0FBb0M7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFh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
|
|
270
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbXBvbmVudHMvY29tcG9uZW50LWV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogRXh0ZW5kZWQgQ29tcG9uZW50XG4gKi9cblxuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBFcnJvcldyYXBwZXIgfSBmcm9tICcuLi8uLi9lcnJvci50cyc7XG5pbXBvcnQge1xuICBub29wLFxuICBub29wQXN5bmNTaW5nbGV0b25Qcm9taXNlXG59IGZyb20gJy4uLy4uL2Z1bmN0aW9uLnRzJztcblxuLyoqXG4gKiBFeHRlbmRlZCBDb21wb25lbnRcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9ic2lkaWFuLWRldi11dGlscy9yZXF1aXJlLWNvbXBvbmVudC1zdWZmaXggLS0gRXh0ZW5kZWQgYmFzZSBjbGFzcy5cbmV4cG9ydCBjbGFzcyBDb21wb25lbnRFeCBleHRlbmRzIENvbXBvbmVudCBpbXBsZW1lbnRzIERpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IGNoaWxkcmVuU2V0ID0gbmV3IFNldDxDb21wb25lbnQ+KCk7XG4gIHByaXZhdGUgbG9hZEVycm9yczogRXJyb3JbXSA9IFtdO1xuICBwcml2YXRlIGxvYWRQcm9taXNlOiBudWxsIHwgUHJvbWlzZTx2b2lkPiA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBjaGlsZCBjb21wb25lbnQuXG4gICAqXG4gICAqIE1pcnJvcnMgdGhlIG5hdGl2ZSBgQ29tcG9uZW50LmFkZENoaWxkYCBjb250cmFjdDogaWYgdGhpcyBjb21wb25lbnQgaXMgYWxyZWFkeSBsb2FkZWQsIHRoZSBjaGlsZCBpcyBsb2FkZWRcbiAgICogaW1tZWRpYXRlbHksIHNvIGBjaGlsZC5fbG9hZGVkYCBpcyBzZXQgYmVmb3JlIHRoaXMgbWV0aG9kIHJldHVybnMgZXZlbiB3aGVuIHRoaXMgY29tcG9uZW50IGhhcyBhc3luYyBsb2FkIGxvZ2ljLlxuICAgKiBUaGUgY2hpbGQncyBhc3luYyB0YWlsIChpZiBhbnkpIGlzIHNlcXVlbmNlZCBpbnRvIHRoZSBsb2FkIHByb21pc2Ugc28gYSBsYXRlciB7QGxpbmsgbG9hZFdpdGhQcm9taXNlc30gY2FsbCBhd2FpdHMgaXQuXG4gICAqXG4gICAqIEB0eXBlUGFyYW0gVENvbXBvbmVudCAtIFRoZSB0eXBlIG9mIGNvbXBvbmVudCB0byBhZGQuXG4gICAqIEBwYXJhbSBjb21wb25lbnQgLSBUaGUgY29tcG9uZW50IGluc3RhbmNlIHRvIGFkZC5cbiAgICogQHJldHVybnMgVGhlIGFkZGVkIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBhZGRDaGlsZDxUQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50Pihjb21wb25lbnQ6IFRDb21wb25lbnQpOiBUQ29tcG9uZW50IHtcbiAgICB0aGlzLl9jaGlsZHJlbi5wdXNoKGNvbXBvbmVudCk7XG4gICAgdGhpcy5jaGlsZHJlblNldC5hZGQoY29tcG9uZW50KTtcblxuICAgIGlmICh0aGlzLl9sb2FkZWQpIHtcbiAgICAgIHRoaXMuYXBwZW5kRWFnZXJMb2FkU3RlcCh0aGlzLmV4dHJhY3RMb2FkUHJvbWlzYWJsZShjb21wb25lbnQpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29tcG9uZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIHRoZSBjb21wb25lbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIERlc3BpdGUgdGhlIGRlY2xhcmVkIGB2b2lkYCByZXR1cm4gdHlwZSwgdGhpcyBtZXRob2QgcmV0dXJucyBhIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBsb2FkZWQgb3IgYG51bGxgIGlmIHRoZSBjb21wb25lbnQgaXMgZnVsbHkgc3luY2hyb25vdXMuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgbG9hZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fbG9hZGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbG9hZGVkID0gdHJ1ZTtcbiAgICB0aGlzLnJlc2V0TG9hZFN0YXRlKCk7XG5cbiAgICB0aGlzLm9ubG9hZCgpO1xuXG4gICAgY29uc3Qgb25sb2FkQXN5bmNQcm9taXNlID0gdGhpcy5vbmxvYWRBc3luYygpO1xuICAgIGlmIChvbmxvYWRBc3luY1Byb21pc2UgIT09IG5vb3BBc3luY1NpbmdsZXRvblByb21pc2UpIHtcbiAgICAgIHRoaXMuYXBwZW5kRWFnZXJMb2FkU3RlcChvbmxvYWRBc3luY1Byb21pc2UpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy5fY2hpbGRyZW4uc2xpY2UoKSkge1xuICAgICAgdGhpcy5hcHBlbmRTZXF1ZW50aWFsTG9hZFN0ZXAoKCkgPT4gdGhpcy5leHRyYWN0TG9hZFByb21pc2FibGUoY2hpbGQpKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sb2FkUHJvbWlzZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1pbnZhbGlkLXZvaWQtdHlwZSwgbm8tcmVzdHJpY3RlZC1zeW50YXggLS0gV2UgbmVlZCB0byBieXBhc3MgdHlwZSBzeXN0ZW0gdG8gcmV0dXJuIGBQcm9taXNlPHZvaWQ+YC5cbiAgICAgIHJldHVybiB0aGlzLmxvYWRQcm9taXNlIGFzIHVua25vd24gYXMgdm9pZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgdGhlIGNvbXBvbmVudCB3aXRoIHByb21pc2VzLlxuICAgKlxuICAgKiBVbmxpa2Uge0BsaW5rIGxvYWR9LCB0aGlzIG1ldGhvZCBuZXZlciByZWplY3RzIHdpdGggYW4gaW5kaXZpZHVhbCBlcnJvcjogZXZlcnkgZmFpbHVyZSByYWlzZWQgYnkge0BsaW5rIG9ubG9hZEFzeW5jfVxuICAgKiBvciBhIGNoaWxkJ3MgbG9hZCBpcyBjb2xsZWN0ZWQsIGFuZCBvbmNlIGV2ZXJ5dGhpbmcgc2V0dGxlcyB0aGUgcmV0dXJuZWQge0BsaW5rIFByb21pc2V9IHJlamVjdHMgd2l0aCBhIHNpbmdsZVxuICAgKiB7QGxpbmsgQWdncmVnYXRlRXJyb3J9IGhvbGRpbmcgYWxsIG9mIHRoZW0uIE5vbi1gRXJyb3JgIHRocm93YWJsZXMgYXJlIG5vcm1hbGl6ZWQgdmlhIHtAbGluayBFcnJvcldyYXBwZXIuY3JlYXRlfS5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjb21wb25lbnQgYW5kIGl0cyBjaGlsZHJlbiBmaW5pc2ggbG9hZGluZywgcmVqZWN0cyB3aXRoIGFuIHtAbGluayBBZ2dyZWdhdGVFcnJvcn0gaWYgYW55IGxvYWQgc3RlcCBmYWlsZWQsIG9yIGBudWxsYCBpZiB0aGUgY29tcG9uZW50IGFuZCBpdHMgY2hpbGRyZW4gZG9uJ3QgdXNlIGBhc3luY2AgbG9naWMgYW5kIG5vbmUgZmFpbGVkIHN5bmNocm9ub3VzbHkuXG4gICAqL1xuICBwdWJsaWMgbG9hZFdpdGhQcm9taXNlcygpOiBudWxsIHwgUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5sb2FkKCk7XG5cbiAgICBjb25zdCBsb2FkUHJvbWlzZSA9IHRoaXMubG9hZFByb21pc2U7XG4gICAgaWYgKCFsb2FkUHJvbWlzZSkge1xuICAgICAgaWYgKHRoaXMubG9hZEVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgQWdncmVnYXRlRXJyb3IodGhpcy5sb2FkRXJyb3JzKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gbG9hZFByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICBpZiAodGhpcy5sb2FkRXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEFnZ3JlZ2F0ZUVycm9yKHRoaXMubG9hZEVycm9ycyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQXN5bmNocm9ub3VzbHkgbG9hZHMgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogT3ZlcnJpZGUgdG8gYWRkIGFzeW5jIGxvYWQgbG9naWMsIHdoaWNoIGlzIGV4ZWN1dGVkIGFmdGVyIHtAbGluayBDb21wb25lbnQub25sb2FkfS5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBjb21wb25lbnQgaXMgbG9hZGVkLlxuICAgKi9cbiAgcHVibGljIG9ubG9hZEFzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBub29wQXN5bmNTaW5nbGV0b25Qcm9taXNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIHtAbGluayBEaXNwb3NhYmxlfSBzbyBpdCBpcyBkaXNwb3NlZCB3aGVuIHRoaXMgY29tcG9uZW50IHVubG9hZHMsIGFuZCByZXR1cm5zIGl0IHVuY2hhbmdlZC5cbiAgICpcbiAgICogVGhlIHJlY3VycmluZyBcInRpZSBhIGRpc3Bvc2FibGUgdG8gdGhlIGNvbXBvbmVudCdzIGxpZmVjeWNsZSwgdGhlbiBrZWVwIHVzaW5nIGl0XCIgaWRpb206IHRoZSBkaXNwb3NhYmxlIGlzXG4gICAqIGRpc3Bvc2VkIG9uIHtAbGluayBDb21wb25lbnQudW5sb2FkfSAob3IgZWFybGllciwgaWYgdGhlIGNhbGxlciBkaXNwb3NlcyBpdCBkaXJlY3RseSBcdTIwMTQgZGlzcG9zZSBpcyBleHBlY3RlZCB0b1xuICAgKiBiZSBpZGVtcG90ZW50KS4gR3VhcmQgd2l0aCB7QGxpbmsgZW5zdXJlTG9hZGVkfSBhdCB0aGUgY2FsbCBzaXRlIHdoZW4gcmVnaXN0ZXJpbmcgYmVmb3JlIGxvYWQgd291bGQgYmUgdW5zYWZlLlxuICAgKlxuICAgKiBAdHlwZVBhcmFtIFREaXNwb3NhYmxlIC0gVGhlIHR5cGUgb2YgdGhlIGRpc3Bvc2FibGUuXG4gICAqIEBwYXJhbSBkaXNwb3NhYmxlIC0gVGhlIGRpc3Bvc2FibGUgdG8gcmVnaXN0ZXIuXG4gICAqIEByZXR1cm5zIFRoZSBzYW1lIGRpc3Bvc2FibGUsIGZvciBjaGFpbmluZy5cbiAgICovXG4gIHB1YmxpYyByZWdpc3RlckRpc3Bvc2FibGU8VERpc3Bvc2FibGUgZXh0ZW5kcyBEaXNwb3NhYmxlPihkaXNwb3NhYmxlOiBURGlzcG9zYWJsZSk6IFREaXNwb3NhYmxlIHtcbiAgICB0aGlzLnJlZ2lzdGVyKCgpID0+IHtcbiAgICAgIGRpc3Bvc2FibGVbU3ltYm9sLmRpc3Bvc2VdKCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGRpc3Bvc2FibGU7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIGNoaWxkIGNvbXBvbmVudC5cbiAgICpcbiAgICogQHR5cGVQYXJhbSBUQ29tcG9uZW50IC0gVGhlIHR5cGUgb2YgY29tcG9uZW50IHRvIHJlbW92ZS5cbiAgICogQHBhcmFtIGNvbXBvbmVudCAtIFRoZSBjb21wb25lbnQgaW5zdGFuY2UgdG8gcmVtb3ZlLlxuICAgKiBAcmV0dXJucyBUaGUgcmVtb3ZlZCBjb21wb25lbnQuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgcmVtb3ZlQ2hpbGQ8VENvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudD4oY29tcG9uZW50OiBUQ29tcG9uZW50KTogVENvbXBvbmVudCB7XG4gICAgc3VwZXIucmVtb3ZlQ2hpbGQoY29tcG9uZW50KTtcbiAgICB0aGlzLmNoaWxkcmVuU2V0LmRlbGV0ZShjb21wb25lbnQpO1xuICAgIHJldHVybiBjb21wb25lbnQ7XG4gIH1cblxuICAvKipcbiAgICogRGlzcG9zZXMgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBbU3ltYm9sLmRpc3Bvc2VdKCk6IHZvaWQge1xuICAgIHRoaXMudW5sb2FkKCk7XG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlcyB0aGUgY29tcG9uZW50IGlzIGxvYWRlZCwgdGhyb3dpbmcgaWYgaXQgaXMgbm90LlxuICAgKlxuICAgKiBVc2UgdGhpcyB0byBndWFyZCBwdWJsaWMgbWV0aG9kcyB0aGF0IHJlZ2lzdGVyIHRlYXJkb3duLWJlYXJpbmcgcmVzb3VyY2VzICh2aWEge0BsaW5rIENvbXBvbmVudC5yZWdpc3Rlcn0sXG4gICAqIHtAbGluayBDb21wb25lbnQucmVnaXN0ZXJFdmVudH0sIHtAbGluayBDb21wb25lbnQucmVnaXN0ZXJEb21FdmVudH0sIGV0Yy4pLiBSZWdpc3RlcmluZyBiZWZvcmUgbG9hZCBpcyB1bnNhZmU6XG4gICAqIHtAbGluayBDb21wb25lbnQudW5sb2FkfSBpcyBhIG5vLW9wIHdoaWxlIHRoZSBjb21wb25lbnQgaXMgbm90IGxvYWRlZCwgc28gYW55IHRlYXJkb3duIHJlZ2lzdGVyZWQgYmVmb3JlaGFuZCB3b3VsZFxuICAgKiBuZXZlciBydW4gaWYgdGhlIGNvbXBvbmVudCBpcyB1bmxvYWRlZCB3aXRob3V0IGZpcnN0IGJlaW5nIGxvYWRlZC5cbiAgICpcbiAgICogQHRocm93cyBBbiB7QGxpbmsgRXJyb3J9IGlmIHRoZSBjb21wb25lbnQgaXMgbm90IGxvYWRlZC5cbiAgICovXG4gIHByb3RlY3RlZCBlbnN1cmVMb2FkZWQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9sb2FkZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29tcG9uZW50IGlzIG5vdCBsb2FkZWQnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VxdWVuY2VzIGFuIGFscmVhZHktc3RhcnRlZCBsb2FkIHN0ZXAgaW50byB0aGUgbG9hZCBwcm9taXNlLlxuICAgKlxuICAgKiBUaGUgc3RlcCBpcyBwcmVzdW1lZCB0byBoYXZlIHN0YXJ0ZWQgc3luY2hyb25vdXNseSAoc28gYW55IGBfbG9hZGVkYCBmbGFnIGl0IHNldHMgaXMgYWxyZWFkeSB2aXNpYmxlKTsgb25seSB0aGVcbiAgICogYXdhaXRpbmcgb2YgaXRzIGFzeW5jIHRhaWwgaXMgc2VxdWVuY2VkIGhlcmUuXG4gICAqXG4gICAqIEBwYXJhbSBsb2FkUHJvbWlzYWJsZSAtIFRoZSByZXN1bHQgb2YgYW4gYWxyZWFkeS1zdGFydGVkIGxvYWQgc3RlcC5cbiAgICovXG4gIHByaXZhdGUgYXBwZW5kRWFnZXJMb2FkU3RlcChsb2FkUHJvbWlzYWJsZTogbnVsbCB8IFByb21pc2FibGU8dm9pZD4pOiB2b2lkIHtcbiAgICBjb25zdCBjYXB0dXJlZCA9IHRoaXMuY2FwdHVyZVNldHRsZWQobG9hZFByb21pc2FibGUpO1xuICAgIGlmICghY2FwdHVyZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwcmV2aW91cyA9IHRoaXMubG9hZFByb21pc2U7XG4gICAgdGhpcy5zZXRMb2FkUHJvbWlzZShwcmV2aW91cyA/IHByZXZpb3VzLnRoZW4oKCkgPT4gY2FwdHVyZWQpIDogY2FwdHVyZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcXVlbmNlcyBhIGRlZmVycmVkIGxvYWQgc3RlcCBpbnRvIHRoZSBsb2FkIHByb21pc2UsIHJ1bm5pbmcgaXQgb25seSBhZnRlciBwcmV2aW91c2x5LWFwcGVuZGVkIHN0ZXBzIHNldHRsZS5cbiAgICpcbiAgICogQHBhcmFtIGxvYWRQcm9taXNhYmxlRm4gLSBBIGZ1bmN0aW9uIHRoYXQgc3RhcnRzIHRoZSBsb2FkIHN0ZXAgYW5kIHJldHVybnMgaXRzIHJlc3VsdC5cbiAgICovXG4gIHByaXZhdGUgYXBwZW5kU2VxdWVudGlhbExvYWRTdGVwKGxvYWRQcm9taXNhYmxlRm46ICgpID0+IG51bGwgfCBQcm9taXNhYmxlPHZvaWQ+KTogdm9pZCB7XG4gICAgY29uc3QgcHJldmlvdXMgPSB0aGlzLmxvYWRQcm9taXNlO1xuICAgIGlmIChwcmV2aW91cykge1xuICAgICAgdGhpcy5zZXRMb2FkUHJvbWlzZShwcmV2aW91cy50aGVuKCgpID0+IHRoaXMucnVuQW5kQ2FwdHVyZShsb2FkUHJvbWlzYWJsZUZuKSkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNhcHR1cmVkID0gdGhpcy5jYXB0dXJlU3luYyhsb2FkUHJvbWlzYWJsZUZuKTtcbiAgICBpZiAoY2FwdHVyZWQpIHtcbiAgICAgIHRoaXMuc2V0TG9hZFByb21pc2UoY2FwdHVyZWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvcmRzIGEgbG9hZCBmYWlsdXJlLlxuICAgKlxuICAgKiBBIGZhaWx1cmUgcmFpc2VkIGJ5IGEgY2hpbGQge0BsaW5rIENvbXBvbmVudEV4fSBpcyBpdHNlbGYgYW4ge0BsaW5rIEFnZ3JlZ2F0ZUVycm9yfTsgaXQgaXMgcmVjb3JkZWQgYXMtaXMgc28gdGhlXG4gICAqIGdyb3VwaW5nIGJ5IGNoaWxkIGNvbXBvbmVudCBpcyBwcmVzZXJ2ZWQgKG93biBmYWlsdXJlcyBzdGF5IGZsYXQsIGNoaWxkLXN1YnRyZWUgZmFpbHVyZXMgc3RheSBuZXN0ZWQpLlxuICAgKlxuICAgKiBAcGFyYW0gZXJyb3IgLSBUaGUgdGhyb3duIHZhbHVlIHRvIHJlY29yZC5cbiAgICovXG4gIHByaXZhdGUgY2FwdHVyZUVycm9yKGVycm9yOiB1bmtub3duKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkRXJyb3JzLnB1c2goRXJyb3JXcmFwcGVyLmNyZWF0ZShlcnJvcikpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdyYXBzIGFuIGFscmVhZHktc3RhcnRlZCBsb2FkIHJlc3VsdCBzbyBpdCBuZXZlciByZWplY3RzOiBhbnkgZmFpbHVyZSBpcyByZWNvcmRlZCBpbnRvIGBsb2FkRXJyb3JzYC5cbiAgICpcbiAgICogQHBhcmFtIGxvYWRQcm9taXNhYmxlIC0gVGhlIGxvYWQgcmVzdWx0IHRvIG9ic2VydmUuXG4gICAqIEByZXR1cm5zIEEgbmV2ZXItcmVqZWN0aW5nIHtAbGluayBQcm9taXNlfSwgb3IgYG51bGxgIGlmIHRoZSByZXN1bHQgaXMgZnVsbHkgc3luY2hyb25vdXMuXG4gICAqL1xuICBwcml2YXRlIGNhcHR1cmVTZXR0bGVkKGxvYWRQcm9taXNhYmxlOiBudWxsIHwgUHJvbWlzYWJsZTx2b2lkPik6IG51bGwgfCBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAobG9hZFByb21pc2FibGUgPT09IG51bGwgfHwgbG9hZFByb21pc2FibGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShsb2FkUHJvbWlzYWJsZSkudGhlbihub29wLCAoZXJyb3I6IHVua25vd24pID0+IHtcbiAgICAgIHRoaXMuY2FwdHVyZUVycm9yKGVycm9yKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGEgbG9hZCBzdGVwIHN5bmNocm9ub3VzbHksIHJlY29yZGluZyBhIHN5bmNocm9ub3VzIHRocm93LCBhbmQgd3JhcHMgYW55IGFzeW5jIHRhaWwgc28gaXQgbmV2ZXIgcmVqZWN0cy5cbiAgICpcbiAgICogQHBhcmFtIGxvYWRQcm9taXNhYmxlRm4gLSBBIGZ1bmN0aW9uIHRoYXQgc3RhcnRzIHRoZSBsb2FkIHN0ZXAgYW5kIHJldHVybnMgaXRzIHJlc3VsdC5cbiAgICogQHJldHVybnMgQSBuZXZlci1yZWplY3Rpbmcge0BsaW5rIFByb21pc2V9LCBvciBgbnVsbGAgaWYgdGhlIHN0ZXAgaXMgZnVsbHkgc3luY2hyb25vdXMuXG4gICAqL1xuICBwcml2YXRlIGNhcHR1cmVTeW5jKGxvYWRQcm9taXNhYmxlRm46ICgpID0+IG51bGwgfCBQcm9taXNhYmxlPHZvaWQ+KTogbnVsbCB8IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBsb2FkUHJvbWlzYWJsZTogbnVsbCB8IFByb21pc2FibGU8dm9pZD47XG4gICAgdHJ5IHtcbiAgICAgIGxvYWRQcm9taXNhYmxlID0gbG9hZFByb21pc2FibGVGbigpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmNhcHR1cmVFcnJvcihlcnJvcik7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jYXB0dXJlU2V0dGxlZChsb2FkUHJvbWlzYWJsZSk7XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3RMb2FkUHJvbWlzYWJsZShjb21wb25lbnQ6IENvbXBvbmVudCk6IG51bGwgfCBQcm9taXNhYmxlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuY2hpbGRyZW5TZXQuaGFzKGNvbXBvbmVudCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgQ29tcG9uZW50RXgpIHtcbiAgICAgIHJldHVybiBjb21wb25lbnQubG9hZFdpdGhQcm9taXNlcygpO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWNvbmZ1c2luZy12b2lkLWV4cHJlc3Npb24sIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS10eXBlLWFzc2VydGlvbiAtLSBJdCBjYW4gYmUgYFByb21pc2U8dm9pZD5gIGluIHJ1bnRpbWUuIFdhbnQgZXhwbGljaXRseSBjYXN0IHRvIHNob3cgd2Uga25vdyBpdCBtYXkgYmUgcHJvbWlzZSwgZGVzcGl0ZSB0aGUgZGVjbGFyZWQgdHlwZSBgdm9pZGAuXG4gICAgcmV0dXJuIGNvbXBvbmVudC5sb2FkKCkgYXMgUHJvbWlzYWJsZTx2b2lkPjtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRMb2FkU3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkRXJyb3JzID0gW107XG4gICAgdGhpcy5sb2FkUHJvbWlzZSA9IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUnVucyBhIGRlZmVycmVkIGxvYWQgc3RlcCwgcmVjb3JkaW5nIGEgc3luY2hyb25vdXMgdGhyb3cgb3IgYW4gYXN5bmMgcmVqZWN0aW9uIHdpdGhvdXQgZXZlciByZS10aHJvd2luZy5cbiAgICpcbiAgICogQHBhcmFtIGxvYWRQcm9taXNhYmxlRm4gLSBBIGZ1bmN0aW9uIHRoYXQgc3RhcnRzIHRoZSBsb2FkIHN0ZXAgYW5kIHJldHVybnMgaXRzIHJlc3VsdC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcnVuQW5kQ2FwdHVyZShsb2FkUHJvbWlzYWJsZUZuOiAoKSA9PiBudWxsIHwgUHJvbWlzYWJsZTx2b2lkPik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCAobG9hZFByb21pc2FibGVGbigpID8/IHVuZGVmaW5lZCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuY2FwdHVyZUVycm9yKGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldExvYWRQcm9taXNlKGxvYWRQcm9taXNlOiBQcm9taXNlPHZvaWQ+KTogdm9pZCB7XG4gICAgY29uc3QgbG9hZFByb21pc2VXaXRoUmVzZXQ6IFByb21pc2U8dm9pZD4gPSBsb2FkUHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmxvYWRQcm9taXNlID09PSBsb2FkUHJvbWlzZVdpdGhSZXNldCkge1xuICAgICAgICB0aGlzLmxvYWRQcm9taXNlID0gbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmxvYWRQcm9taXNlID0gbG9hZFByb21pc2VXaXRoUmVzZXQ7XG4gIH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUUEsU0FBUyxpQkFBaUI7QUFFMUIsU0FBUyxvQkFBb0I7QUFDN0I7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFNQSxNQUFNLG9CQUFvQixVQUFnQztBQUFBLEVBQzlDLGNBQWMsb0JBQUksSUFBZTtBQUFBLEVBQzFDLGFBQXNCLENBQUM7QUFBQSxFQUN2QixjQUFvQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQWE1QixTQUF1QyxXQUFtQztBQUN4RixTQUFLLFVBQVUsS0FBSyxTQUFTO0FB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
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* Registers menu event handlers with Obsidian's workspace, supporting editor, file, and multi-file context menus.
|
|
6
6
|
*/
|
|
7
7
|
import type { App } from 'obsidian';
|
|
8
|
+
import type { DisposableEx } from '../../disposable.mjs';
|
|
8
9
|
import type { EditorMenuEventHandler, FileMenuEventHandler, FilesMenuEventHandler, MenuEventRegistrar } from '../menu-event-registrar.mjs';
|
|
9
10
|
import { ComponentEx } from './component-ex.mjs';
|
|
10
11
|
/**
|
|
@@ -24,18 +25,21 @@ export declare class MenuEventRegistrarComponent extends ComponentEx implements
|
|
|
24
25
|
* Registers a handler for the editor context menu event.
|
|
25
26
|
*
|
|
26
27
|
* @param handler - The handler to register.
|
|
28
|
+
* @returns A {@link DisposableEx} that unregisters the handler when disposed (or on component unload).
|
|
27
29
|
*/
|
|
28
|
-
registerEditorMenuEventHandler(handler: EditorMenuEventHandler):
|
|
30
|
+
registerEditorMenuEventHandler(handler: EditorMenuEventHandler): DisposableEx;
|
|
29
31
|
/**
|
|
30
32
|
* Registers a handler for the single-file context menu event.
|
|
31
33
|
*
|
|
32
34
|
* @param handler - The handler to register.
|
|
35
|
+
* @returns A {@link DisposableEx} that unregisters the handler when disposed (or on component unload).
|
|
33
36
|
*/
|
|
34
|
-
registerFileMenuEventHandler(handler: FileMenuEventHandler):
|
|
37
|
+
registerFileMenuEventHandler(handler: FileMenuEventHandler): DisposableEx;
|
|
35
38
|
/**
|
|
36
39
|
* Registers a handler for the multi-file context menu event.
|
|
37
40
|
*
|
|
38
41
|
* @param handler - The handler to register.
|
|
42
|
+
* @returns A {@link DisposableEx} that unregisters the handler when disposed (or on component unload).
|
|
39
43
|
*/
|
|
40
|
-
registerFilesMenuEventHandler(handler: FilesMenuEventHandler):
|
|
44
|
+
registerFilesMenuEventHandler(handler: FilesMenuEventHandler): DisposableEx;
|
|
41
45
|
}
|
|
@@ -21,6 +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
|
+
import { EventRefDisposable } from "../events.mjs";
|
|
24
25
|
import { ComponentEx } from "./component-ex.mjs";
|
|
25
26
|
class MenuEventRegistrarComponent extends ComponentEx {
|
|
26
27
|
/**
|
|
@@ -37,31 +38,34 @@ class MenuEventRegistrarComponent extends ComponentEx {
|
|
|
37
38
|
* Registers a handler for the editor context menu event.
|
|
38
39
|
*
|
|
39
40
|
* @param handler - The handler to register.
|
|
41
|
+
* @returns A {@link DisposableEx} that unregisters the handler when disposed (or on component unload).
|
|
40
42
|
*/
|
|
41
43
|
registerEditorMenuEventHandler(handler) {
|
|
42
44
|
this.ensureLoaded();
|
|
43
|
-
this.
|
|
45
|
+
return this.registerDisposable(new EventRefDisposable(this.app.workspace.on("editor-menu", handler)));
|
|
44
46
|
}
|
|
45
47
|
/**
|
|
46
48
|
* Registers a handler for the single-file context menu event.
|
|
47
49
|
*
|
|
48
50
|
* @param handler - The handler to register.
|
|
51
|
+
* @returns A {@link DisposableEx} that unregisters the handler when disposed (or on component unload).
|
|
49
52
|
*/
|
|
50
53
|
registerFileMenuEventHandler(handler) {
|
|
51
54
|
this.ensureLoaded();
|
|
52
|
-
this.
|
|
55
|
+
return this.registerDisposable(new EventRefDisposable(this.app.workspace.on("file-menu", handler)));
|
|
53
56
|
}
|
|
54
57
|
/**
|
|
55
58
|
* Registers a handler for the multi-file context menu event.
|
|
56
59
|
*
|
|
57
60
|
* @param handler - The handler to register.
|
|
61
|
+
* @returns A {@link DisposableEx} that unregisters the handler when disposed (or on component unload).
|
|
58
62
|
*/
|
|
59
63
|
registerFilesMenuEventHandler(handler) {
|
|
60
64
|
this.ensureLoaded();
|
|
61
|
-
this.
|
|
65
|
+
return this.registerDisposable(new EventRefDisposable(this.app.workspace.on("files-menu", handler)));
|
|
62
66
|
}
|
|
63
67
|
}
|
|
64
68
|
export {
|
|
65
69
|
MenuEventRegistrarComponent
|
|
66
70
|
};
|
|
67
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL2NvbXBvbmVudHMvbWVudS1ldmVudC1yZWdpc3RyYXItY29tcG9uZW50LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUmVnaXN0ZXJzIG1lbnUgZXZlbnQgaGFuZGxlcnMgd2l0aCBPYnNpZGlhbidzIHdvcmtzcGFjZSwgc3VwcG9ydGluZyBlZGl0b3IsIGZpbGUsIGFuZCBtdWx0aS1maWxlIGNvbnRleHQgbWVudXMuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRGlzcG9zYWJsZUV4IH0gZnJvbSAnLi4vLi4vZGlzcG9zYWJsZS50cyc7XG5pbXBvcnQgdHlwZSB7XG4gIEVkaXRvck1lbnVFdmVudEhhbmRsZXIsXG4gIEZpbGVNZW51RXZlbnRIYW5kbGVyLFxuICBGaWxlc01lbnVFdmVudEhhbmRsZXIsXG4gIE1lbnVFdmVudFJlZ2lzdHJhclxufSBmcm9tICcuLi9tZW51LWV2ZW50LXJlZ2lzdHJhci50cyc7XG5cbmltcG9ydCB7IEV2ZW50UmVmRGlzcG9zYWJsZSB9IGZyb20gJy4uL2V2ZW50cy50cyc7XG5pbXBvcnQgeyBDb21wb25lbnRFeCB9IGZyb20gJy4vY29tcG9uZW50LWV4LnRzJztcblxuLyoqXG4gKiB7QGxpbmsgTWVudUV2ZW50UmVnaXN0cmFyfSBiYWNrZWQgYnkgT2JzaWRpYW4ncyB7QGxpbmsgQXBwfSB3b3Jrc3BhY2UgZXZlbnRzLlxuICpcbiAqIEV2ZW50IGhhbmRsZXJzIGFyZSByZWdpc3RlcmVkIHdpdGggdGhlIHByb3ZpZGVkIHtAbGluayBDb21wb25lbnR9IGZvciBsaWZlY3ljbGUgbWFuYWdlbWVudC5cbiAqL1xuZXhwb3J0IGNsYXNzIE1lbnVFdmVudFJlZ2lzdHJhckNvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEV4IGltcGxlbWVudHMgTWVudUV2ZW50UmVnaXN0cmFyIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgYXBwLWJhY2tlZCBtZW51IGV2ZW50IHJlZ2lzdHJhci5cbiAgICpcbiAgICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJvdGVjdGVkIHJlYWRvbmx5IGFwcDogQXBwKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBoYW5kbGVyIGZvciB0aGUgZWRpdG9yIGNvbnRleHQgbWVudSBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIGhhbmRsZXIgLSBUaGUgaGFuZGxlciB0byByZWdpc3Rlci5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgRGlzcG9zYWJsZUV4fSB0aGF0IHVucmVnaXN0ZXJzIHRoZSBoYW5kbGVyIHdoZW4gZGlzcG9zZWQgKG9yIG9uIGNvbXBvbmVudCB1bmxvYWQpLlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyRWRpdG9yTWVudUV2ZW50SGFuZGxlcihoYW5kbGVyOiBFZGl0b3JNZW51RXZlbnRIYW5kbGVyKTogRGlzcG9zYWJsZUV4IHtcbiAgICB0aGlzLmVuc3VyZUxvYWRlZCgpO1xuICAgIHJldHVybiB0aGlzLnJlZ2lzdGVyRGlzcG9zYWJsZShuZXcgRXZlbnRSZWZEaXNwb3NhYmxlKHRoaXMuYXBwLndvcmtzcGFjZS5vbignZWRpdG9yLW1lbnUnLCBoYW5kbGVyKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIGhhbmRsZXIgZm9yIHRoZSBzaW5nbGUtZmlsZSBjb250ZXh0IG1lbnUgZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSBoYW5kbGVyIC0gVGhlIGhhbmRsZXIgdG8gcmVnaXN0ZXIuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIERpc3Bvc2FibGVFeH0gdGhhdCB1bnJlZ2lzdGVycyB0aGUgaGFuZGxlciB3aGVuIGRpc3Bvc2VkIChvciBvbiBjb21wb25lbnQgdW5sb2FkKS5cbiAgICovXG4gIHB1YmxpYyByZWdpc3RlckZpbGVNZW51RXZlbnRIYW5kbGVyKGhhbmRsZXI6IEZpbGVNZW51RXZlbnRIYW5kbGVyKTogRGlzcG9zYWJsZUV4IHtcbiAgICB0aGlzLmVuc3VyZUxvYWRlZCgpO1xuICAgIHJldHVybiB0aGlzLnJlZ2lzdGVyRGlzcG9zYWJsZShuZXcgRXZlbnRSZWZEaXNwb3NhYmxlKHRoaXMuYXBwLndvcmtzcGFjZS5vbignZmlsZS1tZW51JywgaGFuZGxlcikpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBoYW5kbGVyIGZvciB0aGUgbXVsdGktZmlsZSBjb250ZXh0IG1lbnUgZXZlbnQuXG4gICAqXG4gICAqIEBwYXJhbSBoYW5kbGVyIC0gVGhlIGhhbmRsZXIgdG8gcmVnaXN0ZXIuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIERpc3Bvc2FibGVFeH0gdGhhdCB1bnJlZ2lzdGVycyB0aGUgaGFuZGxlciB3aGVuIGRpc3Bvc2VkIChvciBvbiBjb21wb25lbnQgdW5sb2FkKS5cbiAgICovXG4gIHB1YmxpYyByZWdpc3RlckZpbGVzTWVudUV2ZW50SGFuZGxlcihoYW5kbGVyOiBGaWxlc01lbnVFdmVudEhhbmRsZXIpOiBEaXNwb3NhYmxlRXgge1xuICAgIHRoaXMuZW5zdXJlTG9hZGVkKCk7XG4gICAgcmV0dXJuIHRoaXMucmVnaXN0ZXJEaXNwb3NhYmxlKG5ldyBFdmVudFJlZkRpc3Bvc2FibGUodGhpcy5hcHAud29ya3NwYWNlLm9uKCdmaWxlcy1tZW51JywgaGFuZGxlcikpKTtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnQkEsU0FBUywwQkFBMEI7QUFDbkMsU0FBUyxtQkFBbUI7QUFPckIsTUFBTSxvQ0FBb0MsWUFBMEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNbEYsWUFBK0IsS0FBVTtBQUM5QyxVQUFNO0FBRDhCO0FBQUEsRUFFdEM7QUFBQSxFQUZzQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBVS9CLCtCQUErQixTQUErQztBQUNuRixTQUFLLGFBQWE7QUFDbEIsV0FBTyxLQUFLLG1CQUFtQixJQUFJLG1CQUFtQixLQUFLLElBQUksVUFBVSxHQUFHLGVBQWUsT0FBTyxDQUFDLENBQUM7QUFBQSxFQUN0RztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUU8sNkJBQTZCLFNBQTZDO0FBQy9FLFNBQUssYUFBYTtBQUNsQixXQUFPLEtBQUssbUJBQW1CLElBQUksbUJBQW1CLEtBQUssSUFBSSxVQUFVLEdBQUcsYUFBYSxPQUFPLENBQUMsQ0FBQztBQUFBLEVBQ3BHO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFRTyw4QkFBOEIsU0FBOEM7QUFDakYsU0FBSyxhQUFhO0FBQ2xCLFdBQU8sS0FBSyxtQkFBbUIsSUFBSSxtQkFBbUIsS0FBSyxJQUFJLFVBQVUsR0FBRyxjQUFjLE9BQU8sQ0FBQyxDQUFDO0FBQUEsRUFDckc7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -9,6 +9,16 @@ import type { Promisable } from 'type-fest';
|
|
|
9
9
|
import { Notice } from 'obsidian';
|
|
10
10
|
import type { ValueProvider } from '../../value-provider.mjs';
|
|
11
11
|
import { ComponentEx } from './component-ex.mjs';
|
|
12
|
+
/**
|
|
13
|
+
* The event passed to {@link PluginNoticeComponentShowNoticeOptions.onCloseClick} when the notice's
|
|
14
|
+
* close (X) button is clicked.
|
|
15
|
+
*/
|
|
16
|
+
export interface PluginNoticeCloseClickEvent {
|
|
17
|
+
/**
|
|
18
|
+
* Cancels the close, leaving the notice open.
|
|
19
|
+
*/
|
|
20
|
+
cancel(): void;
|
|
21
|
+
}
|
|
12
22
|
/**
|
|
13
23
|
* A handle to a delayed notice created by {@link PluginNoticeComponent.showNoticeAfterDelay}. It is a
|
|
14
24
|
* {@link Disposable} (so it can be used with `using`) that also lets the content be updated while the
|
|
@@ -79,25 +89,62 @@ export interface PluginNoticeComponentShowNoticeOptions {
|
|
|
79
89
|
* @default `true`
|
|
80
90
|
*/
|
|
81
91
|
readonly isReusable?: boolean;
|
|
92
|
+
/**
|
|
93
|
+
* A callback invoked when the user clicks the close (X) button, before the notice is hidden. Call
|
|
94
|
+
* {@link PluginNoticeCloseClickEvent.cancel} on the event to cancel the close and keep the notice
|
|
95
|
+
* open — for example after your own confirmation declines. An async callback is awaited before the
|
|
96
|
+
* notice is hidden. Runs only when a close button is shown (both
|
|
97
|
+
* {@link PluginNoticeComponentShowNoticeOptions.shouldHideOnClick} `= false` and
|
|
98
|
+
* {@link PluginNoticeComponentShowNoticeOptions.shouldShowCloseButton} are set).
|
|
99
|
+
*/
|
|
100
|
+
onCloseClick?(this: void, event: PluginNoticeCloseClickEvent): Promisable<void>;
|
|
82
101
|
/**
|
|
83
102
|
* A callback invoked when the notice is hidden — whether by the user closing it, by a later reusable
|
|
84
103
|
* notice replacing it, by its duration elapsing, or on component unload. It runs at most once per
|
|
85
|
-
* notice.
|
|
86
|
-
*
|
|
104
|
+
* notice. The {@link PluginNoticeHideInfo} argument distinguishes a user close (the close button) from
|
|
105
|
+
* a programmatic hide. An async callback is run fire-and-forget (its rejection surfaces through the
|
|
106
|
+
* async-error pipeline).
|
|
87
107
|
*/
|
|
88
|
-
onHide?(this: void): Promisable<void>;
|
|
108
|
+
onHide?(this: void, info: PluginNoticeHideInfo): Promisable<void>;
|
|
89
109
|
/**
|
|
90
|
-
* Whether the notice
|
|
91
|
-
*
|
|
110
|
+
* Whether clicking the notice hides it. When `true` (the default), the notice dismisses on click like
|
|
111
|
+
* a normal Obsidian notice. When `false`, the notice is hard to close: it does not dismiss on any stray
|
|
112
|
+
* click, and instead shows a close (X) button that hides it directly (see
|
|
113
|
+
* {@link PluginNoticeComponentShowNoticeOptions.shouldShowCloseButton} and
|
|
114
|
+
* {@link PluginNoticeComponentShowNoticeOptions.onCloseClick}).
|
|
92
115
|
*
|
|
93
|
-
* A
|
|
116
|
+
* A `shouldHideOnClick: false` notice is shown with an infinite duration and is standalone (implies
|
|
94
117
|
* {@link PluginNoticeComponentShowNoticeOptions.isReusable} `= false`), so a later notice never
|
|
95
|
-
* silently replaces it; passing `isReusable: true` together with `
|
|
96
|
-
* throws.
|
|
118
|
+
* silently replaces it; passing `isReusable: true` together with `shouldHideOnClick: false` throws.
|
|
97
119
|
*
|
|
98
|
-
* @default `
|
|
120
|
+
* @default `true`
|
|
121
|
+
*/
|
|
122
|
+
readonly shouldHideOnClick?: boolean;
|
|
123
|
+
/**
|
|
124
|
+
* Whether the close (X) button is shown on a hard-to-close notice
|
|
125
|
+
* ({@link PluginNoticeComponentShowNoticeOptions.shouldHideOnClick} `= false`). When `false`, no close
|
|
126
|
+
* button is rendered and the notice can only be hidden programmatically. Ignored unless
|
|
127
|
+
* `shouldHideOnClick` is `false`.
|
|
128
|
+
*
|
|
129
|
+
* @default `true`
|
|
130
|
+
*/
|
|
131
|
+
readonly shouldShowCloseButton?: boolean;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Describes why a notice was hidden, passed to {@link PluginNoticeComponentShowNoticeOptions.onHide}.
|
|
135
|
+
*/
|
|
136
|
+
export interface PluginNoticeHideInfo {
|
|
137
|
+
/**
|
|
138
|
+
* Whether the notice was hidden by the user clicking its close (X) button specifically. Always implies
|
|
139
|
+
* {@link PluginNoticeHideInfo.isUserAction}.
|
|
99
140
|
*/
|
|
100
|
-
readonly
|
|
141
|
+
readonly isCloseButtonClicked: boolean;
|
|
142
|
+
/**
|
|
143
|
+
* Whether the notice was hidden by a user action — clicking the close (X) button, or clicking a
|
|
144
|
+
* dismissible notice to dismiss it — as opposed to programmatically (a later reusable notice replacing
|
|
145
|
+
* it, an explicit `hide()`, the duration elapsing, or component unload).
|
|
146
|
+
*/
|
|
147
|
+
readonly isUserAction: boolean;
|
|
101
148
|
}
|
|
102
149
|
interface PluginNoticeComponentConstructorParams {
|
|
103
150
|
readonly app: App;
|
|
@@ -115,9 +162,11 @@ export declare class PluginNoticeComponent extends ComponentEx {
|
|
|
115
162
|
* The plugin name (shown as prefix in notices).
|
|
116
163
|
*/
|
|
117
164
|
protected readonly pluginName: string;
|
|
165
|
+
private readonly closeButtonClickedNotices;
|
|
118
166
|
private notice;
|
|
119
167
|
private readonly pendingTimerCancellations;
|
|
120
168
|
private readonly standaloneNotices;
|
|
169
|
+
private readonly userClickedNotices;
|
|
121
170
|
/**
|
|
122
171
|
* Creates a new plugin notice component.
|
|
123
172
|
*
|
|
@@ -163,11 +212,13 @@ export declare class PluginNoticeComponent extends ComponentEx {
|
|
|
163
212
|
*/
|
|
164
213
|
showNoticeAfterDelay(params: PluginNoticeComponentShowNoticeAfterDelayParams): PluginNoticeComponentDelayedNotice;
|
|
165
214
|
/**
|
|
166
|
-
* Appends a close (X) button to the notice content. Clicking it
|
|
167
|
-
*
|
|
215
|
+
* Appends a close (X) button to the notice content. Clicking it fires
|
|
216
|
+
* {@link PluginNoticeComponentAppendCloseButtonParams.onCloseClick} (which may cancel the close); if
|
|
217
|
+
* not cancelled, it hides the notice and drops it from the standalone-notice tracking set. The hide is
|
|
218
|
+
* marked as a close-button click so {@link PluginNoticeComponentShowNoticeOptions.onHide} can
|
|
219
|
+
* distinguish it.
|
|
168
220
|
*
|
|
169
|
-
* @param
|
|
170
|
-
* @param getNotice - Resolves the notice to hide when the close is confirmed.
|
|
221
|
+
* @param params - The parameters.
|
|
171
222
|
*/
|
|
172
223
|
private appendCloseButton;
|
|
173
224
|
/**
|
|
@@ -200,14 +251,25 @@ export declare class PluginNoticeComponent extends ComponentEx {
|
|
|
200
251
|
private getPermanentNotices;
|
|
201
252
|
/**
|
|
202
253
|
* Makes a notice hard to close: marks its outer element (so the CSS neutralizes its padding) and
|
|
203
|
-
* installs a capture-phase click guard that stops every click except on
|
|
204
|
-
* reaching Obsidian's own dismiss handler
|
|
254
|
+
* installs a capture-phase click guard that stops every click except on an interactive element (a
|
|
255
|
+
* button, link, the close button, etc.) from reaching Obsidian's own dismiss handler — so an
|
|
256
|
+
* interactive child's own handler still runs while a stray click cannot dismiss the notice.
|
|
205
257
|
*
|
|
206
258
|
* @param notice - The notice to guard.
|
|
207
|
-
* @param
|
|
208
|
-
*
|
|
259
|
+
* @param requiresExplicitClose - Whether the notice requires explicit close; when `false`, nothing is
|
|
260
|
+
* installed.
|
|
261
|
+
*/
|
|
262
|
+
private installExplicitCloseGuards;
|
|
263
|
+
/**
|
|
264
|
+
* Tracks a click on the notice so {@link PluginNoticeComponentShowNoticeOptions.onHide} can report a
|
|
265
|
+
* user dismissal. Obsidian hides a dismissible notice synchronously during the click, so a
|
|
266
|
+
* capture-phase listener marks the notice before that hide runs; the mark is cleared after the event
|
|
267
|
+
* so a later programmatic hide is not misattributed. A close-button click is tracked separately (see
|
|
268
|
+
* {@link PluginNoticeComponent.appendCloseButton}).
|
|
269
|
+
*
|
|
270
|
+
* @param notice - The notice to track.
|
|
209
271
|
*/
|
|
210
|
-
private
|
|
272
|
+
private installUserClickTracking;
|
|
211
273
|
private setPermanentNotice;
|
|
212
274
|
/**
|
|
213
275
|
* Shows a notice with the given duration. A reusable notice replaces the current reusable notice (and
|