@mnaoumov/obsidian-lib 10.10.0 → 10.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/README.md +26 -0
  2. package/components/all-windows-status-bar-item-component/package.json +6 -0
  3. package/components/shared-component-pool-component/package.json +6 -0
  4. package/components/workspace-layout-state-component/package.json +6 -0
  5. package/dist/lib/cjs/__merged.cjs +90 -1
  6. package/dist/lib/cjs/__merged.d.cts +13 -4
  7. package/dist/lib/cjs/bug-report-diagnostics.cjs +222 -0
  8. package/dist/lib/cjs/bug-report-diagnostics.d.cts +186 -0
  9. package/dist/lib/cjs/bug-report.cjs +36 -10
  10. package/dist/lib/cjs/bug-report.d.cts +65 -0
  11. package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.cjs +93 -2
  12. package/dist/lib/cjs/command-handlers/open-bug-report-command-handler.d.cts +34 -2
  13. package/dist/lib/cjs/components/all-windows-status-bar-item-component.cjs +245 -0
  14. package/dist/lib/cjs/components/all-windows-status-bar-item-component.d.cts +146 -0
  15. package/dist/lib/cjs/components/embed-extensions-component.cjs +20 -3
  16. package/dist/lib/cjs/components/embed-extensions-component.d.cts +8 -0
  17. package/dist/lib/cjs/components/embeddable-markdown-editor-component.cjs +16 -2
  18. package/dist/lib/cjs/components/embeddable-markdown-editor-component.d.cts +9 -0
  19. package/dist/lib/cjs/components/index.cjs +12 -3
  20. package/dist/lib/cjs/components/index.d.cts +3 -0
  21. package/dist/lib/cjs/components/plugin-gate-component.cjs +2 -9
  22. package/dist/lib/cjs/components/plugin-settings-component.cjs +7 -2
  23. package/dist/lib/cjs/components/shared-component-pool-component.cjs +368 -0
  24. package/dist/lib/cjs/components/shared-component-pool-component.d.cts +129 -0
  25. package/dist/lib/cjs/components/workspace-layout-state-component.cjs +495 -0
  26. package/dist/lib/cjs/components/workspace-layout-state-component.d.cts +239 -0
  27. package/dist/lib/cjs/css-class.cjs +5 -1
  28. package/dist/lib/cjs/css-class.d.cts +16 -0
  29. package/dist/lib/cjs/data-handler.cjs +156 -5
  30. package/dist/lib/cjs/data-handler.d.cts +128 -2
  31. package/dist/lib/cjs/desktop-git-runner.cjs +4 -14
  32. package/dist/lib/cjs/desktop-git-runner.d.cts +8 -2
  33. package/dist/lib/cjs/generated-during-build.cjs +2 -2
  34. package/dist/lib/cjs/git-rename-history.cjs +1 -1
  35. package/dist/lib/cjs/git-rename-history.d.cts +2 -2
  36. package/dist/lib/cjs/i18n/locales/en.cjs +29 -1
  37. package/dist/lib/cjs/i18n/locales/en.d.cts +28 -0
  38. package/dist/lib/cjs/i18n/locales/translations-map.d.cts +28 -0
  39. package/dist/lib/cjs/index.cjs +10 -1
  40. package/dist/lib/cjs/index.d.cts +3 -0
  41. package/dist/lib/cjs/link.cjs +40 -1
  42. package/dist/lib/cjs/link.d.cts +37 -1
  43. package/dist/lib/cjs/markdown-view.cjs +191 -3
  44. package/dist/lib/cjs/markdown-view.d.cts +48 -1
  45. package/dist/lib/cjs/modals/copy-text-manually.cjs +181 -0
  46. package/dist/lib/cjs/modals/copy-text-manually.d.cts +38 -0
  47. package/dist/lib/cjs/modals/index.cjs +7 -1
  48. package/dist/lib/cjs/modals/index.d.cts +2 -0
  49. package/dist/lib/cjs/modals/review-bug-report-diagnostics.cjs +202 -0
  50. package/dist/lib/cjs/modals/review-bug-report-diagnostics.d.cts +30 -0
  51. package/dist/lib/cjs/plugin/index.cjs +4 -1
  52. package/dist/lib/cjs/plugin/index.d.cts +1 -0
  53. package/dist/lib/cjs/plugin/plugin-api.cjs +13 -4
  54. package/dist/lib/cjs/plugin/plugin-api.d.cts +5 -1
  55. package/dist/lib/cjs/plugin/plugin-install-state.cjs +46 -1
  56. package/dist/lib/cjs/plugin/plugin-install-state.d.cts +30 -0
  57. package/dist/lib/cjs/plugin/plugin-instance.cjs +448 -0
  58. package/dist/lib/cjs/plugin/plugin-instance.d.cts +251 -0
  59. package/dist/lib/cjs/plugin/plugin.cjs +16 -1
  60. package/dist/lib/cjs/plugin/plugin.d.cts +7 -0
  61. package/dist/lib/cjs/reference-definition.cjs +234 -0
  62. package/dist/lib/cjs/reference-definition.d.cts +47 -0
  63. package/dist/lib/cjs/release-asset.cjs +279 -0
  64. package/dist/lib/cjs/release-asset.d.cts +190 -0
  65. package/dist/lib/cjs/workspace.cjs +3 -2
  66. package/dist/lib/cjs/workspace.d.cts +6 -0
  67. package/dist/lib/esm/__merged.d.mts +13 -4
  68. package/dist/lib/esm/__merged.mjs +97 -3
  69. package/dist/lib/esm/bug-report-diagnostics.d.mts +186 -0
  70. package/dist/lib/esm/bug-report-diagnostics.mjs +127 -0
  71. package/dist/lib/esm/bug-report.d.mts +65 -0
  72. package/dist/lib/esm/bug-report.mjs +33 -10
  73. package/dist/lib/esm/command-handlers/open-bug-report-command-handler.d.mts +34 -2
  74. package/dist/lib/esm/command-handlers/open-bug-report-command-handler.mjs +99 -3
  75. package/dist/lib/esm/components/all-windows-status-bar-item-component.d.mts +146 -0
  76. package/dist/lib/esm/components/all-windows-status-bar-item-component.mjs +154 -0
  77. package/dist/lib/esm/components/embed-extensions-component.d.mts +8 -0
  78. package/dist/lib/esm/components/embed-extensions-component.mjs +20 -3
  79. package/dist/lib/esm/components/embeddable-markdown-editor-component.d.mts +9 -0
  80. package/dist/lib/esm/components/embeddable-markdown-editor-component.mjs +16 -2
  81. package/dist/lib/esm/components/index.d.mts +3 -0
  82. package/dist/lib/esm/components/index.mjs +8 -2
  83. package/dist/lib/esm/components/plugin-gate-component.mjs +5 -13
  84. package/dist/lib/esm/components/plugin-settings-component.mjs +7 -2
  85. package/dist/lib/esm/components/shared-component-pool-component.d.mts +129 -0
  86. package/dist/lib/esm/components/shared-component-pool-component.mjs +280 -0
  87. package/dist/lib/esm/components/workspace-layout-state-component.d.mts +239 -0
  88. package/dist/lib/esm/components/workspace-layout-state-component.mjs +404 -0
  89. package/dist/lib/esm/css-class.d.mts +16 -0
  90. package/dist/lib/esm/css-class.mjs +5 -1
  91. package/dist/lib/esm/data-handler.d.mts +128 -2
  92. package/dist/lib/esm/data-handler.mjs +152 -4
  93. package/dist/lib/esm/desktop-git-runner.d.mts +8 -2
  94. package/dist/lib/esm/desktop-git-runner.mjs +3 -3
  95. package/dist/lib/esm/generated-during-build.mjs +2 -2
  96. package/dist/lib/esm/git-rename-history.d.mts +2 -2
  97. package/dist/lib/esm/git-rename-history.mjs +1 -1
  98. package/dist/lib/esm/i18n/locales/en.d.mts +28 -0
  99. package/dist/lib/esm/i18n/locales/en.mjs +29 -1
  100. package/dist/lib/esm/i18n/locales/translations-map.d.mts +28 -0
  101. package/dist/lib/esm/index.d.mts +3 -0
  102. package/dist/lib/esm/index.mjs +7 -1
  103. package/dist/lib/esm/link.d.mts +37 -1
  104. package/dist/lib/esm/link.mjs +40 -1
  105. package/dist/lib/esm/markdown-view.d.mts +48 -1
  106. package/dist/lib/esm/markdown-view.mjs +192 -2
  107. package/dist/lib/esm/modals/copy-text-manually.d.mts +38 -0
  108. package/dist/lib/esm/modals/copy-text-manually.mjs +99 -0
  109. package/dist/lib/esm/modals/index.d.mts +2 -0
  110. package/dist/lib/esm/modals/index.mjs +5 -1
  111. package/dist/lib/esm/modals/review-bug-report-diagnostics.d.mts +30 -0
  112. package/dist/lib/esm/modals/review-bug-report-diagnostics.mjs +120 -0
  113. package/dist/lib/esm/plugin/index.d.mts +1 -0
  114. package/dist/lib/esm/plugin/index.mjs +3 -1
  115. package/dist/lib/esm/plugin/plugin-api.d.mts +5 -1
  116. package/dist/lib/esm/plugin/plugin-api.mjs +13 -4
  117. package/dist/lib/esm/plugin/plugin-install-state.d.mts +30 -0
  118. package/dist/lib/esm/plugin/plugin-install-state.mjs +44 -1
  119. package/dist/lib/esm/plugin/plugin-instance.d.mts +251 -0
  120. package/dist/lib/esm/plugin/plugin-instance.mjs +366 -0
  121. package/dist/lib/esm/plugin/plugin.d.mts +7 -0
  122. package/dist/lib/esm/plugin/plugin.mjs +16 -1
  123. package/dist/lib/esm/reference-definition.d.mts +47 -0
  124. package/dist/lib/esm/reference-definition.mjs +146 -0
  125. package/dist/lib/esm/release-asset.d.mts +190 -0
  126. package/dist/lib/esm/release-asset.mjs +187 -0
  127. package/dist/lib/esm/workspace.d.mts +6 -0
  128. package/dist/lib/esm/workspace.mjs +3 -2
  129. package/dist/styles.css +16 -1
  130. package/modals/copy-text-manually/package.json +6 -0
  131. package/modals/review-bug-report-diagnostics/package.json +6 -0
  132. package/package.json +2 -1
  133. package/plugin/plugin-instance/package.json +6 -0
@@ -7,7 +7,7 @@
7
7
  * functions to split paths, update links in files, and generate markdown links with various options.
8
8
  */
9
9
  import type { MaybeReturn } from '@mnaoumov/typescript-lib/type' with { 'resolution-mode': 'import' };
10
- import type { App, Reference, TFile } from 'obsidian' with { 'resolution-mode': 'import' };
10
+ import type { App, Reference, ReferenceLinkCache, TFile } from 'obsidian' with { 'resolution-mode': 'import' };
11
11
  import type { Promisable } from 'type-fest' with { 'resolution-mode': 'import' };
12
12
  import type { PathOrFile } from './file-system.cjs';
13
13
  import type { LinkUpdateProgressReporter } from './link-update-progress.cjs';
@@ -392,6 +392,24 @@ export interface EditReferencesInContentParams {
392
392
  * The function that converts each reference.
393
393
  */
394
394
  readonly referenceConverter: (reference: Reference) => Promisable<MaybeReturn<string>>;
395
+ /**
396
+ * The function that returns the new destination of each reference-style link definition
397
+ * (`[id]: destination "title"`). Obsidian reports those in `CachedMetadata.referenceLinks`, not among the
398
+ * references {@link EditReferencesInContentParams.referenceConverter} receives, so without this function they
399
+ * are never edited.
400
+ *
401
+ * It returns the destination unescaped, in the form of `ReferenceLinkCache.link`, or `undefined` to leave the
402
+ * definition unchanged. Only the destination is rewritten: the id, the title, the angle brackets and every use
403
+ * of the definition (`[text][id]`, `[id]`) stay as written. A definition whose content no longer matches its
404
+ * metadata is left unchanged. See {@link referenceDefinitionToFileChange}.
405
+ *
406
+ * The offset range applies to the definition's whole position. The heading skip and
407
+ * {@link EditReferencesInContentParams.shouldSkipReference} do not apply, since a definition is never in a
408
+ * heading and is not a `Reference`.
409
+ *
410
+ * @default `undefined`, which leaves every definition unchanged
411
+ */
412
+ readonly referenceDefinitionConverter?: (definition: ReferenceLinkCache) => Promisable<MaybeReturn<string>>;
395
413
  /**
396
414
  * Whether to also edit external links parsed from the note body. When `true`, the converter also
397
415
  * receives references for external links.
@@ -476,6 +494,24 @@ export interface EditReferencesParams extends EditReferencesOptions {
476
494
  * The function that converts each reference.
477
495
  */
478
496
  readonly referenceConverter: (reference: Reference) => Promisable<MaybeReturn<string>>;
497
+ /**
498
+ * The function that returns the new destination of each reference-style link definition
499
+ * (`[id]: destination "title"`). Obsidian reports those in `CachedMetadata.referenceLinks`, not among the
500
+ * references {@link EditReferencesParams.referenceConverter} receives, so without this function they are never
501
+ * edited.
502
+ *
503
+ * It returns the destination unescaped, in the form of `ReferenceLinkCache.link`, or `undefined` to leave the
504
+ * definition unchanged. Only the destination is rewritten: the id, the title, the angle brackets and every use
505
+ * of the definition (`[text][id]`, `[id]`) stay as written. A definition whose content no longer matches its
506
+ * metadata is left unchanged. See {@link referenceDefinitionToFileChange}. A canvas file has no definitions.
507
+ *
508
+ * The offset range applies to the definition's whole position. The heading skip and
509
+ * {@link EditReferencesParams.shouldSkipReference} do not apply, since a definition is never in a heading and is
510
+ * not a `Reference`.
511
+ *
512
+ * @default `undefined`, which leaves every definition unchanged
513
+ */
514
+ readonly referenceDefinitionConverter?: (definition: ReferenceLinkCache) => Promisable<MaybeReturn<string>>;
479
515
  /**
480
516
  * Whether to also edit external links parsed from the note body. When `true`, the converter also
481
517
  * receives references for external links.
@@ -2,6 +2,39 @@
2
2
  THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
3
  if you want to view the source, please visit the github repository of this plugin
4
4
  */
5
+ (function () {
6
+ function ensureDisposeSymbols(symbolConstructor = Symbol) {
7
+ symbolConstructor.asyncDispose ??= symbolConstructor.for("Symbol.asyncDispose");
8
+ symbolConstructor.dispose ??= symbolConstructor.for("Symbol.dispose");
9
+ }
10
+
11
+ function ensureBrowserProcess() {
12
+ const browserProcess = {
13
+ browser: true,
14
+ cwd() {
15
+ return "/";
16
+ },
17
+ env: {},
18
+ platform: "android"
19
+ };
20
+ const existingProcess = globalThis.process;
21
+ if (!existingProcess) {
22
+ globalThis.process = browserProcess;
23
+ return;
24
+ }
25
+ if (existingProcess.versions?.node) {
26
+ return;
27
+ }
28
+ const existingProcessRecord = existingProcess;
29
+ for (const [key, value] of Object.entries(browserProcess)) {
30
+ existingProcessRecord[key] ??= value;
31
+ }
32
+ existingProcessRecord["browser"] = true;
33
+ }
34
+
35
+ ensureDisposeSymbols();
36
+ ensureBrowserProcess();
37
+ })();
5
38
  (function patchObsidianRequire() {
6
39
  const originalRequire = require;
7
40
  if (!originalRequire || originalRequire.__isPatched) {
@@ -72,6 +105,10 @@ var __defProp = Object.defineProperty;
72
105
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
73
106
  var __getOwnPropNames = Object.getOwnPropertyNames;
74
107
  var __hasOwnProp = Object.prototype.hasOwnProperty;
108
+ var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : /* @__PURE__ */ Symbol.for("Symbol." + name);
109
+ var __typeError = (msg) => {
110
+ throw TypeError(msg);
111
+ };
75
112
  var __export = (target, all) => {
76
113
  for (var name in all)
77
114
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -85,11 +122,56 @@ var __copyProps = (to, from, except, desc) => {
85
122
  return to;
86
123
  };
87
124
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
125
+ var __using = (stack, value, async) => {
126
+ if (value != null) {
127
+ if (typeof value !== "object" && typeof value !== "function") __typeError("Object expected");
128
+ var dispose, inner;
129
+ if (async) dispose = value[__knownSymbol("asyncDispose")];
130
+ if (dispose === void 0) {
131
+ dispose = value[__knownSymbol("dispose")];
132
+ if (async) inner = dispose;
133
+ }
134
+ if (typeof dispose !== "function") __typeError("Object not disposable");
135
+ if (inner) dispose = function() {
136
+ try {
137
+ inner.call(this);
138
+ } catch (e) {
139
+ return Promise.reject(e);
140
+ }
141
+ };
142
+ stack.push([async, dispose, value]);
143
+ } else if (async) {
144
+ stack.push([async]);
145
+ }
146
+ return value;
147
+ };
148
+ var __callDispose = (stack, error, hasError) => {
149
+ var E = typeof SuppressedError === "function" ? SuppressedError : function(e, s, m, _) {
150
+ return _ = Error(m), _.name = "SuppressedError", _.error = e, _.suppressed = s, _;
151
+ };
152
+ var fail = (e) => error = hasError ? new E(e, error, "An error was suppressed during disposal") : (hasError = true, e);
153
+ var next = (it) => {
154
+ while (it = stack.pop()) {
155
+ try {
156
+ var result = it[1] && it[1].call(it[2]);
157
+ if (it[0]) return Promise.resolve(result).then(next, (e) => (fail(e), next()));
158
+ } catch (e) {
159
+ fail(e);
160
+ }
161
+ }
162
+ if (hasError) throw error;
163
+ };
164
+ return next();
165
+ };
88
166
  var markdown_view_exports = {};
89
167
  __export(markdown_view_exports, {
90
- getFullContentHtml: () => getFullContentHtml
168
+ getFullContentHtml: () => getFullContentHtml,
169
+ rerenderPreviews: () => rerenderPreviews
91
170
  });
92
171
  module.exports = __toCommonJS(markdown_view_exports);
172
+ var import_abort_controller = require('@mnaoumov/typescript-lib/abort-controller');
173
+ var import_function = require('@mnaoumov/typescript-lib/function');
174
+ var import_obsidian = require('obsidian');
93
175
  function getFullContentHtml(view) {
94
176
  const codeMirror = view.editor.cm;
95
177
  codeMirror.viewState.printing = true;
@@ -99,8 +181,114 @@ function getFullContentHtml(view) {
99
181
  codeMirror.measure();
100
182
  return html;
101
183
  }
184
+ async function rerenderPreviews(params) {
185
+ var _stack = [];
186
+ try {
187
+ const { abortSignal, app, language = null } = params;
188
+ abortSignal?.throwIfAborted();
189
+ const views = [];
190
+ app.workspace.iterateAllLeaves((leaf) => {
191
+ if (leaf.view instanceof import_obsidian.MarkdownView) {
192
+ views.push(leaf.view);
193
+ }
194
+ });
195
+ const waits = [];
196
+ for (const view of views) {
197
+ const isShown = isPreviewShown(view);
198
+ const scroll = isShown ? view.previewMode.getScroll() : null;
199
+ if (language === null) {
200
+ view.previewMode.rerender(true);
201
+ } else {
202
+ const sections = getSectionsWithLanguage(view.previewMode, language);
203
+ if (sections.length === 0) {
204
+ continue;
205
+ }
206
+ rerenderSections(view.previewMode, sections);
207
+ }
208
+ if (scroll !== null) {
209
+ waits.push(waitForPreviewRender(app, view, scroll));
210
+ }
211
+ }
212
+ if (waits.length === 0) {
213
+ return;
214
+ }
215
+ const allRendered = Promise.all(waits);
216
+ if (!abortSignal) {
217
+ await allRendered;
218
+ return;
219
+ }
220
+ let resolveAborted = import_function.noop;
221
+ const aborted = new Promise((resolve) => {
222
+ resolveAborted = resolve;
223
+ });
224
+ const _abortListener = __using(_stack, (0, import_abort_controller.onAbort)(abortSignal, () => {
225
+ resolveAborted();
226
+ }));
227
+ await Promise.race([allRendered, aborted]);
228
+ abortSignal.throwIfAborted();
229
+ } catch (_) {
230
+ var _error = _, _hasError = true;
231
+ } finally {
232
+ __callDispose(_stack, _error, _hasError);
233
+ }
234
+ }
235
+ function getSectionsWithLanguage(previewMode, language) {
236
+ const { renderer } = previewMode;
237
+ const selector = `code.language-${CSS.escape(language)}`;
238
+ const parser = new DOMParser();
239
+ return renderer.sections.filter(
240
+ (section) => section !== renderer.header && section !== renderer.footer && !!section.html && parser.parseFromString(section.html, "text/html").querySelector(selector) !== null
241
+ );
242
+ }
243
+ function isPreviewShown(view) {
244
+ if (view.getMode() !== "preview") {
245
+ return false;
246
+ }
247
+ const { previewEl } = view.previewMode.renderer;
248
+ return previewEl.isConnected && previewEl.offsetParent !== null && previewEl.offsetWidth > 0;
249
+ }
250
+ function rerenderSections(previewMode, sections) {
251
+ for (const section of sections) {
252
+ section.rendered = false;
253
+ section.el.empty();
254
+ }
255
+ previewMode.renderer.queueRender();
256
+ }
257
+ async function waitForPreviewRender(app, view, scroll) {
258
+ const { previewMode } = view;
259
+ const isRendered = await new Promise((resolve) => {
260
+ let isSettled = false;
261
+ const watcher = new import_obsidian.Component();
262
+ function settle(isRenderedNow) {
263
+ if (isSettled) {
264
+ return;
265
+ }
266
+ isSettled = true;
267
+ previewMode.removeChild(watcher);
268
+ resolve(isRenderedNow);
269
+ }
270
+ function settleIfHidden() {
271
+ if (!isPreviewShown(view)) {
272
+ settle(false);
273
+ }
274
+ }
275
+ watcher.register(() => {
276
+ settle(false);
277
+ });
278
+ watcher.registerEvent(app.workspace.on("layout-change", settleIfHidden));
279
+ watcher.registerEvent(app.workspace.on("active-leaf-change", settleIfHidden));
280
+ previewMode.addChild(watcher);
281
+ previewMode.renderer.onRendered(() => {
282
+ settle(true);
283
+ });
284
+ });
285
+ if (isRendered) {
286
+ previewMode.applyScroll(scroll);
287
+ }
288
+ }
102
289
  // Annotate the CommonJS export names for ESM import in node:
103
290
  0 && (module.exports = {
104
- getFullContentHtml
291
+ getFullContentHtml,
292
+ rerenderPreviews
105
293
  });
106
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tYXJrZG93bi12aWV3LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBVdGlsaXRpZXMgZm9yIHdvcmtpbmcgd2l0aCBNYXJrZG93blZpZXdcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IE1hcmtkb3duVmlldyB9IGZyb20gJ29ic2lkaWFuJztcblxuLyoqXG4gKiBHZXQgdGhlIGZ1bGwgSFRNTCBjb250ZW50IG9mIHRoZSBjdXJyZW50IE1hcmtkb3duVmlld1xuICpcbiAqIEBwYXJhbSB2aWV3IC0gVGhlIE1hcmtkb3duVmlldyB0byBnZXQgdGhlIEhUTUwgZnJvbVxuICogQHJldHVybnMgVGhlIGZ1bGwgSFRNTCBvZiB0aGUgTWFya2Rvd25WaWV3XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGdWxsQ29udGVudEh0bWwodmlldzogTWFya2Rvd25WaWV3KTogc3RyaW5nIHtcbiAgY29uc3QgY29kZU1pcnJvciA9IHZpZXcuZWRpdG9yLmNtO1xuICBjb2RlTWlycm9yLnZpZXdTdGF0ZS5wcmludGluZyA9IHRydWU7XG4gIGNvZGVNaXJyb3IubWVhc3VyZSgpO1xuICBjb25zdCBodG1sID0gdmlldy5jb250ZW50RWwuaW5uZXJIVE1MO1xuICBjb2RlTWlycm9yLnZpZXdTdGF0ZS5wcmludGluZyA9IGZhbHNlO1xuICBjb2RlTWlycm9yLm1lYXN1cmUoKTtcbiAgcmV0dXJuIGh0bWw7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFjTyxTQUFTLG1CQUFtQixNQUE0QjtBQUM3RCxRQUFNLGFBQWEsS0FBSyxPQUFPO0FBQy9CLGFBQVcsVUFBVSxXQUFXO0FBQ2hDLGFBQVcsUUFBUTtBQUNuQixRQUFNLE9BQU8sS0FBSyxVQUFVO0FBQzVCLGFBQVcsVUFBVSxXQUFXO0FBQ2hDLGFBQVcsUUFBUTtBQUNuQixTQUFPO0FBQ1Q7IiwibmFtZXMiOltdfQ==
294
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tYXJrZG93bi12aWV3LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBVdGlsaXRpZXMgZm9yIHdvcmtpbmcgd2l0aCBNYXJrZG93blZpZXdcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFJlbmRlcmVyU2VjdGlvbiB9IGZyb20gJ0BvYnNpZGlhbi10eXBpbmdzL29ic2lkaWFuLXB1YmxpYy1sYXRlc3QnO1xuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIE1hcmtkb3duUHJldmlld1ZpZXdcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBvbkFib3J0IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Fib3J0LWNvbnRyb2xsZXInO1xuaW1wb3J0IHsgbm9vcCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9mdW5jdGlvbic7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIE1hcmtkb3duVmlld1xufSBmcm9tICdvYnNpZGlhbic7XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHJlcmVuZGVyUHJldmlld3N9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcmVuZGVyUHJldmlld3NQYXJhbXMge1xuICAvKipcbiAgICogU3RvcHMgd2FpdGluZyBmb3IgdGhlIHJlbmRlcnMgd2hlbiBhYm9ydGVkLCByZWplY3Rpbmcgd2l0aCB0aGUgc2lnbmFsJ3MgcmVhc29uLiBUaGUgcmVuZGVycyBhbHJlYWR5IHJlcXVlc3RlZCBzdGlsbFxuICAgKiBoYXBwZW4uXG4gICAqL1xuICByZWFkb25seSBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsO1xuXG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBjb2RlIGJsb2NrIGxhbmd1YWdlIHdob3NlIGJsb2NrcyB0byByZW5kZXIgYWdhaW4sIG1hdGNoZWQgZXhhY3RseSBhbmQgY2FzZS1zZW5zaXRpdmVseSwgdGhlIHdheSBPYnNpZGlhbiBtYXRjaGVzIGFcbiAgICogY29kZSBibG9jayBwcm9jZXNzb3IncyBsYW5ndWFnZS4gT25seSB0aGUgc2VjdGlvbnMgaG9sZGluZyBzdWNoIGEgYmxvY2sgYXJlIHJlbmRlcmVkIGFnYWluLCBhbmQgYSB2aWV3IGhvbGRpbmcgbm9uZVxuICAgKiBpcyBsZWZ0IGFsb25lLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgbnVsbGAsIHdoaWNoIHJlbmRlcnMgZXZlcnkgc2VjdGlvbiBvZiBldmVyeSBSZWFkaW5nIHZpZXcgYWdhaW5cbiAgICovXG4gIHJlYWRvbmx5IGxhbmd1YWdlPzogbnVsbCB8IHN0cmluZztcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGZ1bGwgSFRNTCBjb250ZW50IG9mIHRoZSBjdXJyZW50IE1hcmtkb3duVmlld1xuICpcbiAqIEBwYXJhbSB2aWV3IC0gVGhlIE1hcmtkb3duVmlldyB0byBnZXQgdGhlIEhUTUwgZnJvbVxuICogQHJldHVybnMgVGhlIGZ1bGwgSFRNTCBvZiB0aGUgTWFya2Rvd25WaWV3XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGdWxsQ29udGVudEh0bWwodmlldzogTWFya2Rvd25WaWV3KTogc3RyaW5nIHtcbiAgY29uc3QgY29kZU1pcnJvciA9IHZpZXcuZWRpdG9yLmNtO1xuICBjb2RlTWlycm9yLnZpZXdTdGF0ZS5wcmludGluZyA9IHRydWU7XG4gIGNvZGVNaXJyb3IubWVhc3VyZSgpO1xuICBjb25zdCBodG1sID0gdmlldy5jb250ZW50RWwuaW5uZXJIVE1MO1xuICBjb2RlTWlycm9yLnZpZXdTdGF0ZS5wcmludGluZyA9IGZhbHNlO1xuICBjb2RlTWlycm9yLm1lYXN1cmUoKTtcbiAgcmV0dXJuIGh0bWw7XG59XG5cbi8qKlxuICogUmVuZGVycyB0aGUgb3BlbiBSZWFkaW5nIHZpZXdzIGFnYWluLCBzbyBhIG1hcmtkb3duIHBvc3QtcHJvY2Vzc29yIG9yIGNvZGUgYmxvY2sgcHJvY2Vzc29yIHJlZ2lzdGVyZWQgb3IgcmVjb25maWd1cmVkXG4gKiBzaW5jZSB0aGV5IHJlbmRlcmVkIGFwcGxpZXMgdG8gdGhlbS5cbiAqXG4gKiBJdCBjb3ZlcnMgZXZlcnkgTWFya2Rvd24gdmlldyBpbiBldmVyeSB3aW5kb3csIHBvcG91dHMgaW5jbHVkZWQuIEEgZnVsbCByZWZyZXNoIGlzIHdoYXQgT2JzaWRpYW4gaXRzZWxmIGRvZXMgd2hlbiBhXG4gKiBwb3N0LXByb2Nlc3NvciBpcyByZWdpc3RlcmVkOiBldmVyeSBzZWN0aW9uIGlzIHJlbmRlcmVkIGFnYWluLCBleGNlcHQgdGhlIGhlYWRlciBob2xkaW5nIHRoZSBpbmxpbmUgdGl0bGUgYW5kIHRoZVxuICogcHJvcGVydGllcywgYW5kIHRoZSBmb290ZXIgaG9sZGluZyB0aGUgYmFja2xpbmtzLCB3aGljaCBrZWVwIHRoZWlyIERPTS4gV2l0aCBhIGBsYW5ndWFnZWAsIG9ubHkgdGhlIHNlY3Rpb25zIGhvbGRpbmcgYVxuICogY29kZSBibG9jayBvZiB0aGF0IGxhbmd1YWdlIGFyZSByZW5kZXJlZCBhZ2Fpbi4gVGhlIG5vdGUgaXMgbmV2ZXIgd3JpdHRlbiwgdGhlIHZpZXcgbW9kZSBuZXZlciBjaGFuZ2VzLCBhbmQgdGhlXG4gKiBzY3JvbGwgcG9zaXRpb24gaXMga2VwdCBieSBPYnNpZGlhbidzIHJlbmRlcmVyLlxuICpcbiAqIFRoZSBwcm9taXNlIHNldHRsZXMgb25jZSBldmVyeSB2aWV3IFNIT1dOIGluIFJlYWRpbmcgdmlldyBoYXMgZmluaXNoZWQgcmVuZGVyaW5nLCB0aGUgcHJvbWlzZXMgb2YgYXN5bmNocm9ub3VzXG4gKiBwb3N0LXByb2Nlc3NvcnMgaW5jbHVkZWQuIEEgcHJldmlldyB0aGF0IGlzIG5vdCBzaG93biAoYSBiYWNrZ3JvdW5kIHRhYiwgYSB2aWV3IGluIGVkaXRpbmcgbW9kZSkgaXMgbWFya2VkIHRvIHJlbmRlclxuICogYWdhaW4gd2hlbiBpdCBpcyBuZXh0IHNob3duLCBhbmQgaXMgbm90IHdhaXRlZCBmb3IsIHNpbmNlIE9ic2lkaWFuIGRvZXMgbm90IHJlbmRlciBpdCB1bnRpbCB0aGVuLiBBIHZpZXcgdGhhdCBpcyBjbG9zZWQsXG4gKiBoaWRkZW4gb3Igc3dpdGNoZWQgb3V0IG9mIFJlYWRpbmcgdmlldyB3aGlsZSByZW5kZXJpbmcgc3RvcHMgYmVpbmcgd2FpdGVkIGZvci4gQSBwb3N0LXByb2Nlc3NvciB3aG9zZSBwcm9taXNlIG5ldmVyXG4gKiBzZXR0bGVzLCBvciByZWplY3RzLCBrZWVwcyBpdHMgdmlldydzIHJlbmRlciBvcGVuLCBleGFjdGx5IGFzIGl0IGtlZXBzIE9ic2lkaWFuJ3Mgb3duIHJlbmRlciBvcGVuOyBwYXNzIGFuXG4gKiBgYWJvcnRTaWduYWxgIHRvIGJvdW5kIHRoZSB3YWl0LlxuICpcbiAqIEhvdmVyIHBvcG92ZXJzLCBlbWJlZHMsIGNhbnZhcyBjYXJkcyBhbmQgTGl2ZSBQcmV2aWV3IHdpZGdldHMgYXJlIG5vdCByZWZyZXNoZWQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBvcHRpb25zLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgc2hvd24gUmVhZGluZyB2aWV3cyBoYXZlIHJlbmRlcmVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVyZW5kZXJQcmV2aWV3cyhwYXJhbXM6IFJlcmVuZGVyUHJldmlld3NQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBhYm9ydFNpZ25hbCwgYXBwLCBsYW5ndWFnZSA9IG51bGwgfSA9IHBhcmFtcztcbiAgYWJvcnRTaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG5cbiAgY29uc3Qgdmlld3M6IE1hcmtkb3duVmlld1tdID0gW107XG4gIGFwcC53b3Jrc3BhY2UuaXRlcmF0ZUFsbExlYXZlcygobGVhZikgPT4ge1xuICAgIGlmIChsZWFmLnZpZXcgaW5zdGFuY2VvZiBNYXJrZG93blZpZXcpIHtcbiAgICAgIHZpZXdzLnB1c2gobGVhZi52aWV3KTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHdhaXRzOiBQcm9taXNlPHZvaWQ+W10gPSBbXTtcbiAgZm9yIChjb25zdCB2aWV3IG9mIHZpZXdzKSB7XG4gICAgY29uc3QgaXNTaG93biA9IGlzUHJldmlld1Nob3duKHZpZXcpO1xuICAgIC8vIEVtcHR5aW5nIHRoZSBzZWN0aW9ucyBzaHJpbmtzIHRoZSBjb250ZW50IGJlZm9yZSB0aGUgbmV4dCBmcmFtZSByZW5kZXJzIGl0IGFnYWluLCB3aGljaCBjYW4gY2xhbXAgdGhlIHNjcm9sbC5cbiAgICBjb25zdCBzY3JvbGwgPSBpc1Nob3duID8gdmlldy5wcmV2aWV3TW9kZS5nZXRTY3JvbGwoKSA6IG51bGw7XG4gICAgaWYgKGxhbmd1YWdlID09PSBudWxsKSB7XG4gICAgICB2aWV3LnByZXZpZXdNb2RlLnJlcmVuZGVyKHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzZWN0aW9ucyA9IGdldFNlY3Rpb25zV2l0aExhbmd1YWdlKHZpZXcucHJldmlld01vZGUsIGxhbmd1YWdlKTtcbiAgICAgIGlmIChzZWN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByZXJlbmRlclNlY3Rpb25zKHZpZXcucHJldmlld01vZGUsIHNlY3Rpb25zKTtcbiAgICB9XG5cbiAgICBpZiAoc2Nyb2xsICE9PSBudWxsKSB7XG4gICAgICB3YWl0cy5wdXNoKHdhaXRGb3JQcmV2aWV3UmVuZGVyKGFwcCwgdmlldywgc2Nyb2xsKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHdhaXRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGFsbFJlbmRlcmVkID0gUHJvbWlzZS5hbGwod2FpdHMpO1xuICBpZiAoIWFib3J0U2lnbmFsKSB7XG4gICAgYXdhaXQgYWxsUmVuZGVyZWQ7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IHJlc29sdmVBYm9ydGVkID0gbm9vcDtcbiAgY29uc3QgYWJvcnRlZCA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgcmVzb2x2ZUFib3J0ZWQgPSByZXNvbHZlO1xuICB9KTtcbiAgdXNpbmcgX2Fib3J0TGlzdGVuZXIgPSBvbkFib3J0KGFib3J0U2lnbmFsLCAoKSA9PiB7XG4gICAgcmVzb2x2ZUFib3J0ZWQoKTtcbiAgfSk7XG4gIGF3YWl0IFByb21pc2UucmFjZShbYWxsUmVuZGVyZWQsIGFib3J0ZWRdKTtcbiAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbn1cblxuZnVuY3Rpb24gZ2V0U2VjdGlvbnNXaXRoTGFuZ3VhZ2UocHJldmlld01vZGU6IE1hcmtkb3duUHJldmlld1ZpZXcsIGxhbmd1YWdlOiBzdHJpbmcpOiBSZW5kZXJlclNlY3Rpb25bXSB7XG4gIGNvbnN0IHsgcmVuZGVyZXIgfSA9IHByZXZpZXdNb2RlO1xuICBjb25zdCBzZWxlY3RvciA9IGBjb2RlLmxhbmd1YWdlLSR7Q1NTLmVzY2FwZShsYW5ndWFnZSl9YDtcbiAgY29uc3QgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICAvLyBUaGUgaGVhZGVyIGFuZCBmb290ZXIgY2Fycnkgbm8gSFRNTCBvZiB0aGVpciBvd24uIEEgc2VjdGlvbidzIEhUTUwgaXMgcGFyc2VkIGludG8gYW4gaW5lcnQgZG9jdW1lbnQ6IG5vdGhpbmcgcnVuc1xuICAvLyBhbmQgbm90aGluZyBsb2Fkcy5cbiAgcmV0dXJuIHJlbmRlcmVyLnNlY3Rpb25zLmZpbHRlcigoc2VjdGlvbikgPT5cbiAgICBzZWN0aW9uICE9PSByZW5kZXJlci5oZWFkZXIgJiYgc2VjdGlvbiAhPT0gcmVuZGVyZXIuZm9vdGVyICYmICEhc2VjdGlvbi5odG1sXG4gICAgJiYgcGFyc2VyLnBhcnNlRnJvbVN0cmluZyhzZWN0aW9uLmh0bWwsICd0ZXh0L2h0bWwnKS5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKSAhPT0gbnVsbFxuICApO1xufVxuXG5mdW5jdGlvbiBpc1ByZXZpZXdTaG93bih2aWV3OiBNYXJrZG93blZpZXcpOiBib29sZWFuIHtcbiAgaWYgKHZpZXcuZ2V0TW9kZSgpICE9PSAncHJldmlldycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBUaGUgc2FtZSB2aXNpYmlsaXR5IHRlc3QgYFJlYWRWaWV3UmVuZGVyZXIub25SZW5kZXJgIG1ha2VzIGJlZm9yZSBpdCByZW5kZXJzIGFueXRoaW5nLlxuICBjb25zdCB7IHByZXZpZXdFbCB9ID0gdmlldy5wcmV2aWV3TW9kZS5yZW5kZXJlcjtcbiAgcmV0dXJuIHByZXZpZXdFbC5pc0Nvbm5lY3RlZCAmJiBwcmV2aWV3RWwub2Zmc2V0UGFyZW50ICE9PSBudWxsICYmIHByZXZpZXdFbC5vZmZzZXRXaWR0aCA+IDA7XG59XG5cbmZ1bmN0aW9uIHJlcmVuZGVyU2VjdGlvbnMocHJldmlld01vZGU6IE1hcmtkb3duUHJldmlld1ZpZXcsIHNlY3Rpb25zOiByZWFkb25seSBSZW5kZXJlclNlY3Rpb25bXSk6IHZvaWQge1xuICBmb3IgKGNvbnN0IHNlY3Rpb24gb2Ygc2VjdGlvbnMpIHtcbiAgICBzZWN0aW9uLnJlbmRlcmVkID0gZmFsc2U7XG4gICAgc2VjdGlvbi5lbC5lbXB0eSgpO1xuICB9XG4gIHByZXZpZXdNb2RlLnJlbmRlcmVyLnF1ZXVlUmVuZGVyKCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JQcmV2aWV3UmVuZGVyKGFwcDogQXBwLCB2aWV3OiBNYXJrZG93blZpZXcsIHNjcm9sbDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgcHJldmlld01vZGUgfSA9IHZpZXc7XG4gIGNvbnN0IGlzUmVuZGVyZWQgPSBhd2FpdCBuZXcgUHJvbWlzZTxib29sZWFuPigocmVzb2x2ZSkgPT4ge1xuICAgIGxldCBpc1NldHRsZWQgPSBmYWxzZTtcbiAgICBjb25zdCB3YXRjaGVyID0gbmV3IENvbXBvbmVudCgpO1xuXG4gICAgZnVuY3Rpb24gc2V0dGxlKGlzUmVuZGVyZWROb3c6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgIGlmIChpc1NldHRsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaXNTZXR0bGVkID0gdHJ1ZTtcbiAgICAgIC8vIEEgbm8tb3Agd2hlbiB0aGUgcHJldmlldyBpcyB1bmxvYWRpbmcsIHNpbmNlIGl0IGhhcyBhbHJlYWR5IHRha2VuIHRoZSB3YXRjaGVyIG9mZiBpdHMgY2hpbGRyZW4uXG4gICAgICBwcmV2aWV3TW9kZS5yZW1vdmVDaGlsZCh3YXRjaGVyKTtcbiAgICAgIHJlc29sdmUoaXNSZW5kZXJlZE5vdyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0dGxlSWZIaWRkZW4oKTogdm9pZCB7XG4gICAgICBpZiAoIWlzUHJldmlld1Nob3duKHZpZXcpKSB7XG4gICAgICAgIHNldHRsZShmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgd2F0Y2hlci5yZWdpc3RlcigoKSA9PiB7XG4gICAgICBzZXR0bGUoZmFsc2UpO1xuICAgIH0pO1xuICAgIHdhdGNoZXIucmVnaXN0ZXJFdmVudChhcHAud29ya3NwYWNlLm9uKCdsYXlvdXQtY2hhbmdlJywgc2V0dGxlSWZIaWRkZW4pKTtcbiAgICB3YXRjaGVyLnJlZ2lzdGVyRXZlbnQoYXBwLndvcmtzcGFjZS5vbignYWN0aXZlLWxlYWYtY2hhbmdlJywgc2V0dGxlSWZIaWRkZW4pKTtcbiAgICBwcmV2aWV3TW9kZS5hZGRDaGlsZCh3YXRjaGVyKTtcbiAgICBwcmV2aWV3TW9kZS5yZW5kZXJlci5vblJlbmRlcmVkKCgpID0+IHtcbiAgICAgIHNldHRsZSh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaWYgKGlzUmVuZGVyZWQpIHtcbiAgICBwcmV2aWV3TW9kZS5hcHBseVNjcm9sbChzY3JvbGwpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
@@ -1,10 +1,34 @@
1
1
  /// <reference path="./library-references.d.cts" />
2
+ /// <reference lib="dom" />
2
3
  /**
3
4
  * @file
4
5
  *
5
6
  * Utilities for working with MarkdownView
6
7
  */
7
- import type { MarkdownView } from 'obsidian' with { 'resolution-mode': 'import' };
8
+ import type { App } from 'obsidian' with { 'resolution-mode': 'import' };
9
+ import { MarkdownView } from 'obsidian';
10
+ /**
11
+ * Options for {@link rerenderPreviews}.
12
+ */
13
+ export interface RerenderPreviewsParams {
14
+ /**
15
+ * Stops waiting for the renders when aborted, rejecting with the signal's reason. The renders already requested still
16
+ * happen.
17
+ */
18
+ readonly abortSignal?: AbortSignal;
19
+ /**
20
+ * The Obsidian app.
21
+ */
22
+ readonly app: App;
23
+ /**
24
+ * The code block language whose blocks to render again, matched exactly and case-sensitively, the way Obsidian matches a
25
+ * code block processor's language. Only the sections holding such a block are rendered again, and a view holding none
26
+ * is left alone.
27
+ *
28
+ * @default `null`, which renders every section of every Reading view again
29
+ */
30
+ readonly language?: null | string;
31
+ }
8
32
  /**
9
33
  * Get the full HTML content of the current MarkdownView
10
34
  *
@@ -12,3 +36,26 @@ import type { MarkdownView } from 'obsidian' with { 'resolution-mode': 'import'
12
36
  * @returns The full HTML of the MarkdownView
13
37
  */
14
38
  export declare function getFullContentHtml(view: MarkdownView): string;
39
+ /**
40
+ * Renders the open Reading views again, so a markdown post-processor or code block processor registered or reconfigured
41
+ * since they rendered applies to them.
42
+ *
43
+ * It covers every Markdown view in every window, popouts included. A full refresh is what Obsidian itself does when a
44
+ * post-processor is registered: every section is rendered again, except the header holding the inline title and the
45
+ * properties, and the footer holding the backlinks, which keep their DOM. With a `language`, only the sections holding a
46
+ * code block of that language are rendered again. The note is never written, the view mode never changes, and the
47
+ * scroll position is kept by Obsidian's renderer.
48
+ *
49
+ * The promise settles once every view SHOWN in Reading view has finished rendering, the promises of asynchronous
50
+ * post-processors included. A preview that is not shown (a background tab, a view in editing mode) is marked to render
51
+ * again when it is next shown, and is not waited for, since Obsidian does not render it until then. A view that is closed,
52
+ * hidden or switched out of Reading view while rendering stops being waited for. A post-processor whose promise never
53
+ * settles, or rejects, keeps its view's render open, exactly as it keeps Obsidian's own render open; pass an
54
+ * `abortSignal` to bound the wait.
55
+ *
56
+ * Hover popovers, embeds, canvas cards and Live Preview widgets are not refreshed.
57
+ *
58
+ * @param params - The options.
59
+ * @returns A promise that resolves once the shown Reading views have rendered.
60
+ */
61
+ export declare function rerenderPreviews(params: RerenderPreviewsParams): Promise<void>;
@@ -0,0 +1,181 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+ (function () {
6
+ function ensureBrowserProcess() {
7
+ const browserProcess = {
8
+ browser: true,
9
+ cwd() {
10
+ return "/";
11
+ },
12
+ env: {},
13
+ platform: "android"
14
+ };
15
+ const existingProcess = globalThis.process;
16
+ if (!existingProcess) {
17
+ globalThis.process = browserProcess;
18
+ return;
19
+ }
20
+ if (existingProcess.versions?.node) {
21
+ return;
22
+ }
23
+ const existingProcessRecord = existingProcess;
24
+ for (const [key, value] of Object.entries(browserProcess)) {
25
+ existingProcessRecord[key] ??= value;
26
+ }
27
+ existingProcessRecord["browser"] = true;
28
+ }
29
+
30
+ ensureBrowserProcess();
31
+ })();
32
+ (function patchObsidianRequire() {
33
+ const originalRequire = require;
34
+ if (!originalRequire || originalRequire.__isPatched) {
35
+ return;
36
+ }
37
+ require = Object.assign(
38
+ (id) => requirePatched(id),
39
+ originalRequire,
40
+ {
41
+ __isPatched: true
42
+ }
43
+ );
44
+ function extractDefault($module) {
45
+ return $module && $module.__esModule && "default" in $module ? $module.default : $module;
46
+ }
47
+ const OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
48
+ "@codemirror/autocomplete",
49
+ "@codemirror/collab",
50
+ "@codemirror/commands",
51
+ "@codemirror/language",
52
+ "@codemirror/lint",
53
+ "@codemirror/search",
54
+ "@codemirror/state",
55
+ "@codemirror/text",
56
+ "@codemirror/view",
57
+ "@lezer/common",
58
+ "@lezer/highlight",
59
+ "@lezer/lr",
60
+ "obsidian"
61
+ ]);
62
+ const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = /* @__PURE__ */ new Set([
63
+ "@codemirror/closebrackets",
64
+ "@codemirror/comment",
65
+ "@codemirror/fold",
66
+ "@codemirror/gutter",
67
+ "@codemirror/highlight",
68
+ "@codemirror/history",
69
+ "@codemirror/matchbrackets",
70
+ "@codemirror/panel",
71
+ "@codemirror/rangeset",
72
+ "@codemirror/rectangular-selection",
73
+ "@codemirror/stream-parser",
74
+ "@codemirror/tooltip"
75
+ ]);
76
+ function requirePatched(id) {
77
+ if (OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.has(id)) {
78
+ return originalRequire?.(id);
79
+ }
80
+ const app = globalThis.app;
81
+ if (app?.isMobile) {
82
+ if (id === "process" || id === "node:process") {
83
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
84
+ return process;
85
+ }
86
+ } else {
87
+ const $module = originalRequire?.(id);
88
+ if ($module) {
89
+ return extractDefault($module);
90
+ }
91
+ }
92
+ console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
93
+ return {};
94
+ }
95
+ })();
96
+
97
+ "use strict";
98
+ var __defProp = Object.defineProperty;
99
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
100
+ var __getOwnPropNames = Object.getOwnPropertyNames;
101
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
102
+ var __export = (target, all) => {
103
+ for (var name in all)
104
+ __defProp(target, name, { get: all[name], enumerable: true });
105
+ };
106
+ var __copyProps = (to, from, except, desc) => {
107
+ if (from && typeof from === "object" || typeof from === "function") {
108
+ for (let key of __getOwnPropNames(from))
109
+ if (!__hasOwnProp.call(to, key) && key !== except)
110
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
111
+ }
112
+ return to;
113
+ };
114
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
115
+ var copy_text_manually_exports = {};
116
+ __export(copy_text_manually_exports, {
117
+ copyTextManually: () => copyTextManually
118
+ });
119
+ module.exports = __toCommonJS(copy_text_manually_exports);
120
+ var import_obsidian = require('obsidian');
121
+ var import_css_class = require('../css-class.cjs');
122
+ var import_i18n = require('../i18n/i18n.cjs');
123
+ var import_modal = require('./modal.cjs');
124
+ const TEXT_AREA_ROWS = 12;
125
+ class CopyTextManuallyModal extends import_modal.ModalBase {
126
+ isConfirmed = false;
127
+ message;
128
+ okButtonText;
129
+ text;
130
+ title;
131
+ constructor(params) {
132
+ super(params);
133
+ this.addCssClasses(import_css_class.CssClass.CopyTextManuallyModal);
134
+ this.message = params.message;
135
+ this.okButtonText = params.okButtonText ?? (0, import_i18n.t)(($) => $.obsidianLib.buttons.ok);
136
+ this.text = params.text;
137
+ this.title = params.title ?? "";
138
+ }
139
+ onClose() {
140
+ this.promiseResolve(this.isConfirmed);
141
+ }
142
+ onOpen() {
143
+ this.titleEl.setText(this.title);
144
+ this.contentEl.createEl("p", { text: this.message });
145
+ const textArea = new import_obsidian.TextAreaComponent(this.contentEl);
146
+ textArea.setValue(this.text);
147
+ textArea.inputEl.readOnly = true;
148
+ textArea.inputEl.rows = TEXT_AREA_ROWS;
149
+ textArea.inputEl.addClass(import_css_class.CssClass.CopyTextManuallyText);
150
+ textArea.inputEl.addEventListener("focus", () => {
151
+ textArea.inputEl.select();
152
+ });
153
+ const buttonContainerEl = this.contentEl.createDiv({ cls: "modal-button-container" });
154
+ const okButton = new import_obsidian.ButtonComponent(buttonContainerEl);
155
+ okButton.setButtonText(this.okButtonText);
156
+ okButton.setCta();
157
+ okButton.onClick(() => {
158
+ this.isConfirmed = true;
159
+ this.close();
160
+ });
161
+ okButton.setClass(import_css_class.CssClass.OkButton);
162
+ const cancelButton = new import_obsidian.ButtonComponent(buttonContainerEl);
163
+ cancelButton.setButtonText((0, import_i18n.t)(($) => $.obsidianLib.buttons.cancel));
164
+ cancelButton.onClick(this.close.bind(this));
165
+ cancelButton.setClass(import_css_class.CssClass.CancelButton);
166
+ textArea.inputEl.focus();
167
+ }
168
+ }
169
+ async function copyTextManually(params) {
170
+ return await (0, import_modal.showModal)(
171
+ (promiseResolve) => new CopyTextManuallyModal({
172
+ ...params,
173
+ promiseResolve
174
+ })
175
+ );
176
+ }
177
+ // Annotate the CommonJS export names for ESM import in node:
178
+ 0 && (module.exports = {
179
+ copyTextManually
180
+ });
181
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9tb2RhbHMvY29weS10ZXh0LW1hbnVhbGx5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBBIG1vZGFsIHRoYXQgc2hvd3MgYSB0ZXh0IGZvciB0aGUgdXNlciB0byBjb3B5IGJ5IGhhbmQsIGZvciB3aGVuIHdyaXRpbmcgaXQgdG8gdGhlIGNsaXBib2FyZCBmYWlsZWQuXG4gKi9cblxuaW1wb3J0IHtcbiAgQnV0dG9uQ29tcG9uZW50LFxuICBUZXh0QXJlYUNvbXBvbmVudFxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHtcbiAgTW9kYWxCYXNlQ29uc3RydWN0b3JQYXJhbXMsXG4gIE1vZGFsUGFyYW1zQmFzZVxufSBmcm9tICcuL21vZGFsLnRzJztcblxuaW1wb3J0IHsgQ3NzQ2xhc3MgfSBmcm9tICcuLi9jc3MtY2xhc3MudHMnO1xuaW1wb3J0IHsgdCB9IGZyb20gJy4uL2kxOG4vaTE4bi50cyc7XG5pbXBvcnQge1xuICBNb2RhbEJhc2UsXG4gIHNob3dNb2RhbFxufSBmcm9tICcuL21vZGFsLnRzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgY29weVRleHRNYW51YWxseX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29weVRleHRNYW51YWxseVBhcmFtcyBleHRlbmRzIE1vZGFsUGFyYW1zQmFzZSB7XG4gIC8qKlxuICAgKiBXaGF0IHRoZSB1c2VyIGlzIGFza2VkIHRvIGRvIHdpdGggdGhlIHRleHQuXG4gICAqL1xuICByZWFkb25seSBtZXNzYWdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgdGV4dCBmb3IgdGhlIGJ1dHRvbiB0aGF0IGNvbnRpbnVlcy5cbiAgICovXG4gIHJlYWRvbmx5IG9rQnV0dG9uVGV4dD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRleHQgdG8gY29weS5cbiAgICovXG4gIHJlYWRvbmx5IHRleHQ6IHN0cmluZztcblxuICAvKipcbiAgICogQSB0aXRsZSBvZiB0aGUgbW9kYWwuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAnJ2BcbiAgICovXG4gIHJlYWRvbmx5IHRpdGxlPzogc3RyaW5nO1xufVxuXG5jb25zdCBURVhUX0FSRUFfUk9XUyA9IDEyO1xuXG50eXBlIENvcHlUZXh0TWFudWFsbHlNb2RhbENvbnN0cnVjdG9yUGFyYW1zID0gQ29weVRleHRNYW51YWxseVBhcmFtcyAmIE1vZGFsQmFzZUNvbnN0cnVjdG9yUGFyYW1zPGJvb2xlYW4+O1xuXG5jbGFzcyBDb3B5VGV4dE1hbnVhbGx5TW9kYWwgZXh0ZW5kcyBNb2RhbEJhc2U8Ym9vbGVhbj4ge1xuICBwcml2YXRlIGlzQ29uZmlybWVkID0gZmFsc2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IG9rQnV0dG9uVGV4dDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHRleHQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSB0aXRsZTogc3RyaW5nO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IENvcHlUZXh0TWFudWFsbHlNb2RhbENvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgc3VwZXIocGFyYW1zKTtcbiAgICB0aGlzLmFkZENzc0NsYXNzZXMoQ3NzQ2xhc3MuQ29weVRleHRNYW51YWxseU1vZGFsKTtcbiAgICB0aGlzLm1lc3NhZ2UgPSBwYXJhbXMubWVzc2FnZTtcbiAgICB0aGlzLm9rQnV0dG9uVGV4dCA9IHBhcmFtcy5va0J1dHRvblRleHQgPz8gdCgoJCkgPT4gJC5vYnNpZGlhbkxpYi5idXR0b25zLm9rKTtcbiAgICB0aGlzLnRleHQgPSBwYXJhbXMudGV4dDtcbiAgICB0aGlzLnRpdGxlID0gcGFyYW1zLnRpdGxlID8/ICcnO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIG9uQ2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5wcm9taXNlUmVzb2x2ZSh0aGlzLmlzQ29uZmlybWVkKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBvbk9wZW4oKTogdm9pZCB7XG4gICAgdGhpcy50aXRsZUVsLnNldFRleHQodGhpcy50aXRsZSk7XG4gICAgdGhpcy5jb250ZW50RWwuY3JlYXRlRWwoJ3AnLCB7IHRleHQ6IHRoaXMubWVzc2FnZSB9KTtcblxuICAgIGNvbnN0IHRleHRBcmVhID0gbmV3IFRleHRBcmVhQ29tcG9uZW50KHRoaXMuY29udGVudEVsKTtcbiAgICB0ZXh0QXJlYS5zZXRWYWx1ZSh0aGlzLnRleHQpO1xuICAgIHRleHRBcmVhLmlucHV0RWwucmVhZE9ubHkgPSB0cnVlO1xuICAgIHRleHRBcmVhLmlucHV0RWwucm93cyA9IFRFWFRfQVJFQV9ST1dTO1xuICAgIHRleHRBcmVhLmlucHV0RWwuYWRkQ2xhc3MoQ3NzQ2xhc3MuQ29weVRleHRNYW51YWxseVRleHQpO1xuICAgIHRleHRBcmVhLmlucHV0RWwuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCAoKSA9PiB7XG4gICAgICB0ZXh0QXJlYS5pbnB1dEVsLnNlbGVjdCgpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgYnV0dG9uQ29udGFpbmVyRWwgPSB0aGlzLmNvbnRlbnRFbC5jcmVhdGVEaXYoeyBjbHM6ICdtb2RhbC1idXR0b24tY29udGFpbmVyJyB9KTtcbiAgICBjb25zdCBva0J1dHRvbiA9IG5ldyBCdXR0b25Db21wb25lbnQoYnV0dG9uQ29udGFpbmVyRWwpO1xuICAgIG9rQnV0dG9uLnNldEJ1dHRvblRleHQodGhpcy5va0J1dHRvblRleHQpO1xuICAgIG9rQnV0dG9uLnNldEN0YSgpO1xuICAgIG9rQnV0dG9uLm9uQ2xpY2soKCkgPT4ge1xuICAgICAgdGhpcy5pc0NvbmZpcm1lZCA9IHRydWU7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfSk7XG4gICAgb2tCdXR0b24uc2V0Q2xhc3MoQ3NzQ2xhc3MuT2tCdXR0b24pO1xuXG4gICAgY29uc3QgY2FuY2VsQnV0dG9uID0gbmV3IEJ1dHRvbkNvbXBvbmVudChidXR0b25Db250YWluZXJFbCk7XG4gICAgY2FuY2VsQnV0dG9uLnNldEJ1dHRvblRleHQodCgoJCkgPT4gJC5vYnNpZGlhbkxpYi5idXR0b25zLmNhbmNlbCkpO1xuICAgIGNhbmNlbEJ1dHRvbi5vbkNsaWNrKHRoaXMuY2xvc2UuYmluZCh0aGlzKSk7XG4gICAgY2FuY2VsQnV0dG9uLnNldENsYXNzKENzc0NsYXNzLkNhbmNlbEJ1dHRvbik7XG5cbiAgICB0ZXh0QXJlYS5pbnB1dEVsLmZvY3VzKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBTaG93cyBhIHJlYWQtb25seSB0ZXh0LCBzZWxlY3RlZCB3aGVuIGZvY3VzZWQsIGZvciB0aGUgdXNlciB0byBjb3B5IGJ5IGhhbmQsIHdpdGggYSBidXR0b24gdGhhdFxuICogY29udGludWVzIGFuZCBvbmUgdGhhdCBjYW5jZWxzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB3aGV0aGVyIHRoZSB1c2VyIGNvbnRpbnVlZC5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vY29uc2lzdGVudC1ib29sZWFuLW5hbWUgLS0gYGJvb2xlYW5gIGdpdmVzIGJldHRlciBEWCB0aGFuIGVudW0sIGFzIGluIGBjb25maXJtYC5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb3B5VGV4dE1hbnVhbGx5KHBhcmFtczogQ29weVRleHRNYW51YWxseVBhcmFtcyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICByZXR1cm4gYXdhaXQgc2hvd01vZGFsPGJvb2xlYW4+KChwcm9taXNlUmVzb2x2ZSkgPT5cbiAgICBuZXcgQ29weVRleHRNYW51YWxseU1vZGFsKHtcbiAgICAgIC4uLnBhcmFtcyxcbiAgICAgIHByb21pc2VSZXNvbHZlXG4gICAgfSlcbiAgKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU1BLHNCQUdPO0FBT1AsdUJBQXlCO0FBQ3pCLGtCQUFrQjtBQUNsQixtQkFHTztBQTZCUCxNQUFNLGlCQUFpQjtBQUl2QixNQUFNLDhCQUE4Qix1QkFBbUI7QUFBQSxFQUM3QyxjQUFjO0FBQUEsRUFDTDtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBRVYsWUFBWSxRQUFnRDtBQUNqRSxVQUFNLE1BQU07QUFDWixTQUFLLGNBQWMsMEJBQVMscUJBQXFCO0FBQ2pELFNBQUssVUFBVSxPQUFPO0FBQ3RCLFNBQUssZUFBZSxPQUFPLG9CQUFnQixlQUFFLENBQUMsTUFBTSxFQUFFLFlBQVksUUFBUSxFQUFFO0FBQzVFLFNBQUssT0FBTyxPQUFPO0FBQ25CLFNBQUssUUFBUSxPQUFPLFNBQVM7QUFBQSxFQUMvQjtBQUFBLEVBRWdCLFVBQWdCO0FBQzlCLFNBQUssZUFBZSxLQUFLLFdBQVc7QUFBQSxFQUN0QztBQUFBLEVBRWdCLFNBQWU7QUFDN0IsU0FBSyxRQUFRLFFBQVEsS0FBSyxLQUFLO0FBQy9CLFNBQUssVUFBVSxTQUFTLEtBQUssRUFBRSxNQUFNLEtBQUssUUFBUSxDQUFDO0FBRW5ELFVBQU0sV0FBVyxJQUFJLGtDQUFrQixLQUFLLFNBQVM7QUFDckQsYUFBUyxTQUFTLEtBQUssSUFBSTtBQUMzQixhQUFTLFFBQVEsV0FBVztBQUM1QixhQUFTLFFBQVEsT0FBTztBQUN4QixhQUFTLFFBQVEsU0FBUywwQkFBUyxvQkFBb0I7QUFDdkQsYUFBUyxRQUFRLGlCQUFpQixTQUFTLE1BQU07QUFDL0MsZUFBUyxRQUFRLE9BQU87QUFBQSxJQUMxQixDQUFDO0FBRUQsVUFBTSxvQkFBb0IsS0FBSyxVQUFVLFVBQVUsRUFBRSxLQUFLLHlCQUF5QixDQUFDO0FBQ3BGLFVBQU0sV0FBVyxJQUFJLGdDQUFnQixpQkFBaUI7QUFDdEQsYUFBUyxjQUFjLEtBQUssWUFBWTtBQUN4QyxhQUFTLE9BQU87QUFDaEIsYUFBUyxRQUFRLE1BQU07QUFDckIsV0FBSyxjQUFjO0FBQ25CLFdBQUssTUFBTTtBQUFBLElBQ2IsQ0FBQztBQUNELGFBQVMsU0FBUywwQkFBUyxRQUFRO0FBRW5DLFVBQU0sZUFBZSxJQUFJLGdDQUFnQixpQkFBaUI7QUFDMUQsaUJBQWEsa0JBQWMsZUFBRSxDQUFDLE1BQU0sRUFBRSxZQUFZLFFBQVEsTUFBTSxDQUFDO0FBQ2pFLGlCQUFhLFFBQVEsS0FBSyxNQUFNLEtBQUssSUFBSSxDQUFDO0FBQzFDLGlCQUFhLFNBQVMsMEJBQVMsWUFBWTtBQUUzQyxhQUFTLFFBQVEsTUFBTTtBQUFBLEVBQ3pCO0FBQ0Y7QUFVQSxlQUFzQixpQkFBaUIsUUFBa0Q7QUFDdkYsU0FBTyxVQUFNO0FBQUEsSUFBbUIsQ0FBQyxtQkFDL0IsSUFBSSxzQkFBc0I7QUFBQSxNQUN4QixHQUFHO0FBQUEsTUFDSDtBQUFBLElBQ0YsQ0FBQztBQUFBLEVBQ0g7QUFDRjsiLCJuYW1lcyI6W119
@@ -0,0 +1,38 @@
1
+ /// <reference path="../library-references.d.cts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * A modal that shows a text for the user to copy by hand, for when writing it to the clipboard failed.
6
+ */
7
+ import type { ModalParamsBase } from './modal.cjs';
8
+ /**
9
+ * Parameters for {@link copyTextManually}.
10
+ */
11
+ export interface CopyTextManuallyParams extends ModalParamsBase {
12
+ /**
13
+ * What the user is asked to do with the text.
14
+ */
15
+ readonly message: string;
16
+ /**
17
+ * A text for the button that continues.
18
+ */
19
+ readonly okButtonText?: string;
20
+ /**
21
+ * The text to copy.
22
+ */
23
+ readonly text: string;
24
+ /**
25
+ * A title of the modal.
26
+ *
27
+ * @default `''`
28
+ */
29
+ readonly title?: string;
30
+ }
31
+ /**
32
+ * Shows a read-only text, selected when focused, for the user to copy by hand, with a button that
33
+ * continues and one that cancels.
34
+ *
35
+ * @param params - The parameters.
36
+ * @returns A {@link Promise} that resolves with whether the user continued.
37
+ */
38
+ export declare function copyTextManually(params: CopyTextManuallyParams): Promise<boolean>;
@@ -100,10 +100,12 @@ __export(modals_exports, {
100
100
  alert: () => alert,
101
101
  "code-block-builder": () => code_block_builder,
102
102
  confirm: () => confirm,
103
+ "copy-text-manually": () => copy_text_manually,
103
104
  "minimizable-modal": () => minimizable_modal,
104
105
  modal: () => modal,
105
106
  "modal-command-builder": () => modal_command_builder,
106
107
  prompt: () => prompt,
108
+ "review-bug-report-diagnostics": () => review_bug_report_diagnostics,
107
109
  "select-item": () => select_item,
108
110
  "select-option": () => select_option,
109
111
  "suggest-modal-command-builder": () => suggest_modal_command_builder
@@ -112,10 +114,12 @@ module.exports = __toCommonJS(modals_exports);
112
114
  var alert = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./alert.cjs')), 1);
113
115
  var code_block_builder = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./code-block-builder.cjs')), 1);
114
116
  var confirm = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./confirm.cjs')), 1);
117
+ var copy_text_manually = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./copy-text-manually.cjs')), 1);
115
118
  var minimizable_modal = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./minimizable-modal.cjs')), 1);
116
119
  var modal_command_builder = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./modal-command-builder.cjs')), 1);
117
120
  var modal = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./modal.cjs')), 1);
118
121
  var prompt = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./prompt.cjs')), 1);
122
+ var review_bug_report_diagnostics = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./review-bug-report-diagnostics.cjs')), 1);
119
123
  var select_item = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./select-item.cjs')), 1);
120
124
  var select_option = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./select-option.cjs')), 1);
121
125
  var suggest_modal_command_builder = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('./suggest-modal-command-builder.cjs')), 1);
@@ -124,12 +128,14 @@ var suggest_modal_command_builder = __toESM(((module) => module && module.__esMo
124
128
  alert,
125
129
  "code-block-builder": null,
126
130
  confirm,
131
+ "copy-text-manually": null,
127
132
  "minimizable-modal": null,
128
133
  modal,
129
134
  "modal-command-builder": null,
130
135
  prompt,
136
+ "review-bug-report-diagnostics": null,
131
137
  "select-item": null,
132
138
  "select-option": null,
133
139
  "suggest-modal-command-builder": null
134
140
  });
135
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9tb2RhbHMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogVEhJUyBJUyBBIEdFTkVSQVRFRC9CVU5ETEVEIEZJTEUgQlkgQlVJTEQgU0NSSVBUICovXG5cbmV4cG9ydCAqIGFzICdhbGVydCcgZnJvbSAnLi9hbGVydC50cyc7XG5leHBvcnQgKiBhcyAnY29kZS1ibG9jay1idWlsZGVyJyBmcm9tICcuL2NvZGUtYmxvY2stYnVpbGRlci50cyc7XG5leHBvcnQgKiBhcyAnY29uZmlybScgZnJvbSAnLi9jb25maXJtLnRzJztcbmV4cG9ydCAqIGFzICdtaW5pbWl6YWJsZS1tb2RhbCcgZnJvbSAnLi9taW5pbWl6YWJsZS1tb2RhbC50cyc7XG5leHBvcnQgKiBhcyAnbW9kYWwtY29tbWFuZC1idWlsZGVyJyBmcm9tICcuL21vZGFsLWNvbW1hbmQtYnVpbGRlci50cyc7XG5leHBvcnQgKiBhcyAnbW9kYWwnIGZyb20gJy4vbW9kYWwudHMnO1xuZXhwb3J0ICogYXMgJ3Byb21wdCcgZnJvbSAnLi9wcm9tcHQudHMnO1xuZXhwb3J0ICogYXMgJ3NlbGVjdC1pdGVtJyBmcm9tICcuL3NlbGVjdC1pdGVtLnRzJztcbmV4cG9ydCAqIGFzICdzZWxlY3Qtb3B0aW9uJyBmcm9tICcuL3NlbGVjdC1vcHRpb24udHMnO1xuZXhwb3J0ICogYXMgJ3N1Z2dlc3QtbW9kYWwtY29tbWFuZC1idWlsZGVyJyBmcm9tICcuL3N1Z2dlc3QtbW9kYWwtY29tbWFuZC1idWlsZGVyLnRzJztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBLDhCQUFBQTtBQUFBLEVBQUE7QUFBQSw2QkFBQUM7QUFBQSxFQUFBO0FBQUEsaUNBQUFDO0FBQUEsRUFBQTtBQUFBLHVCQUFBQztBQUFBLEVBQUEsdUJBQUFDO0FBQUEsRUFBQSx1Q0FBQUM7QUFBQTtBQUFBO0FBRUEsWUFBeUI7QUFDekIsSUFBQUwscUJBQXNDO0FBQ3RDLGNBQTJCO0FBQzNCLElBQUFDLG9CQUFxQztBQUNyQyxJQUFBQyx3QkFBeUM7QUFDekMsWUFBeUI7QUFDekIsYUFBMEI7QUFDMUIsSUFBQUMsY0FBK0I7QUFDL0IsSUFBQUMsZ0JBQWlDO0FBQ2pDLElBQUFDLGdDQUFpRDsiLCJuYW1lcyI6WyJjb2RlLWJsb2NrLWJ1aWxkZXIiLCJtaW5pbWl6YWJsZS1tb2RhbCIsIm1vZGFsLWNvbW1hbmQtYnVpbGRlciIsInNlbGVjdC1pdGVtIiwic2VsZWN0LW9wdGlvbiIsInN1Z2dlc3QtbW9kYWwtY29tbWFuZC1idWlsZGVyIl19
141
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9tb2RhbHMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogVEhJUyBJUyBBIEdFTkVSQVRFRC9CVU5ETEVEIEZJTEUgQlkgQlVJTEQgU0NSSVBUICovXG5cbmV4cG9ydCAqIGFzICdhbGVydCcgZnJvbSAnLi9hbGVydC50cyc7XG5leHBvcnQgKiBhcyAnY29kZS1ibG9jay1idWlsZGVyJyBmcm9tICcuL2NvZGUtYmxvY2stYnVpbGRlci50cyc7XG5leHBvcnQgKiBhcyAnY29uZmlybScgZnJvbSAnLi9jb25maXJtLnRzJztcbmV4cG9ydCAqIGFzICdjb3B5LXRleHQtbWFudWFsbHknIGZyb20gJy4vY29weS10ZXh0LW1hbnVhbGx5LnRzJztcbmV4cG9ydCAqIGFzICdtaW5pbWl6YWJsZS1tb2RhbCcgZnJvbSAnLi9taW5pbWl6YWJsZS1tb2RhbC50cyc7XG5leHBvcnQgKiBhcyAnbW9kYWwtY29tbWFuZC1idWlsZGVyJyBmcm9tICcuL21vZGFsLWNvbW1hbmQtYnVpbGRlci50cyc7XG5leHBvcnQgKiBhcyAnbW9kYWwnIGZyb20gJy4vbW9kYWwudHMnO1xuZXhwb3J0ICogYXMgJ3Byb21wdCcgZnJvbSAnLi9wcm9tcHQudHMnO1xuZXhwb3J0ICogYXMgJ3Jldmlldy1idWctcmVwb3J0LWRpYWdub3N0aWNzJyBmcm9tICcuL3Jldmlldy1idWctcmVwb3J0LWRpYWdub3N0aWNzLnRzJztcbmV4cG9ydCAqIGFzICdzZWxlY3QtaXRlbScgZnJvbSAnLi9zZWxlY3QtaXRlbS50cyc7XG5leHBvcnQgKiBhcyAnc2VsZWN0LW9wdGlvbicgZnJvbSAnLi9zZWxlY3Qtb3B0aW9uLnRzJztcbmV4cG9ydCAqIGFzICdzdWdnZXN0LW1vZGFsLWNvbW1hbmQtYnVpbGRlcicgZnJvbSAnLi9zdWdnZXN0LW1vZGFsLWNvbW1hbmQtYnVpbGRlci50cyc7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQSw4QkFBQUE7QUFBQSxFQUFBO0FBQUEsOEJBQUFDO0FBQUEsRUFBQSwyQkFBQUM7QUFBQSxFQUFBO0FBQUEsaUNBQUFDO0FBQUEsRUFBQTtBQUFBLHlDQUFBQztBQUFBLEVBQUEscUJBQUFDO0FBQUEsRUFBQSx1QkFBQUM7QUFBQSxFQUFBLHVDQUFBQztBQUFBO0FBQUE7QUFFQSxZQUF5QjtBQUN6QixJQUFBUCxxQkFBc0M7QUFDdEMsY0FBMkI7QUFDM0IsSUFBQUMscUJBQXNDO0FBQ3RDLElBQUFDLG9CQUFxQztBQUNyQyxJQUFBQyx3QkFBeUM7QUFDekMsWUFBeUI7QUFDekIsYUFBMEI7QUFDMUIsSUFBQUMsZ0NBQWlEO0FBQ2pELElBQUFDLGNBQStCO0FBQy9CLElBQUFDLGdCQUFpQztBQUNqQyxJQUFBQyxnQ0FBaUQ7IiwibmFtZXMiOlsiY29kZS1ibG9jay1idWlsZGVyIiwiY29weS10ZXh0LW1hbnVhbGx5IiwibWluaW1pemFibGUtbW9kYWwiLCJtb2RhbC1jb21tYW5kLWJ1aWxkZXIiLCJyZXZpZXctYnVnLXJlcG9ydC1kaWFnbm9zdGljcyIsInNlbGVjdC1pdGVtIiwic2VsZWN0LW9wdGlvbiIsInN1Z2dlc3QtbW9kYWwtY29tbWFuZC1idWlsZGVyIl19
@@ -2,10 +2,12 @@
2
2
  export * as 'alert' from './alert.cjs';
3
3
  export * as 'code-block-builder' from './code-block-builder.cjs';
4
4
  export * as 'confirm' from './confirm.cjs';
5
+ export * as 'copy-text-manually' from './copy-text-manually.cjs';
5
6
  export * as 'minimizable-modal' from './minimizable-modal.cjs';
6
7
  export * as 'modal-command-builder' from './modal-command-builder.cjs';
7
8
  export * as 'modal' from './modal.cjs';
8
9
  export * as 'prompt' from './prompt.cjs';
10
+ export * as 'review-bug-report-diagnostics' from './review-bug-report-diagnostics.cjs';
9
11
  export * as 'select-item' from './select-item.cjs';
10
12
  export * as 'select-option' from './select-option.cjs';
11
13
  export * as 'suggest-modal-command-builder' from './suggest-modal-command-builder.cjs';